/* * Get current state * * IN: cpuidx - cpu to query * Return: SLURM_SUCCESS or SLURM_FAILURE */ static int _cpu_freq_current_state(int cpuidx) { uint32_t freq; /* * Getting 'previous' values using the 'scaling' values rather * than the 'cpuinfo' values. * The 'cpuinfo' values are read only. min/max seem to be raw * hardware capability. * The 'scaling' values are set by the governor */ freq = _cpu_freq_get_scaling_freq(cpuidx, "scaling_cur_freq"); if (freq == 0) return SLURM_FAILURE; cpufreq[cpuidx].org_frequency = freq; freq = _cpu_freq_get_scaling_freq(cpuidx, "scaling_min_freq"); if (freq == 0) return SLURM_FAILURE; cpufreq[cpuidx].org_min_freq = freq; freq = _cpu_freq_get_scaling_freq(cpuidx, "scaling_max_freq"); if (freq == 0) return SLURM_FAILURE; cpufreq[cpuidx].org_max_freq = freq; return _cpu_freq_get_cur_gov(cpuidx); }
/* * Get current state * * IN: cpuidx - cpu to query * Return: SLURM_SUCCESS or SLURM_FAILURE */ static int _cpu_freq_current_state(int cpuidx) { uint32_t freq; if (cpufreq[cpuidx].org_set) { /* * The current state was already loaded for this cpu. * Likely caused by stacked task plugins. Prevent * overwriting the original values so they can be * restored correctly after job completion. */ return SLURM_SUCCESS; } /* * Getting 'previous' values using the 'scaling' values rather * than the 'cpuinfo' values. * The 'cpuinfo' values are read only. min/max seem to be raw * hardware capability. * The 'scaling' values are set by the governor. * For the current frequency, use the cpuinfo_cur_freq file * since the intel_pstate driver doesn't necessarily create * the scaling_cur_freq file. */ freq = _cpu_freq_get_scaling_freq(cpuidx, "cpuinfo_cur_freq"); if (freq == 0) return SLURM_FAILURE; cpufreq[cpuidx].org_frequency = freq; freq = _cpu_freq_get_scaling_freq(cpuidx, "scaling_min_freq"); if (freq == 0) return SLURM_FAILURE; cpufreq[cpuidx].org_min_freq = freq; freq = _cpu_freq_get_scaling_freq(cpuidx, "scaling_max_freq"); if (freq == 0) return SLURM_FAILURE; cpufreq[cpuidx].org_max_freq = freq; if (_cpu_freq_get_cur_gov(cpuidx) == SLURM_SUCCESS) { cpufreq[cpuidx].org_set = true; return SLURM_SUCCESS; } else { return SLURM_FAILURE; } }