/* * Validate the cpus and select the frequency to set * Called from task cgroup cpuset code with string containing * the list of cpus to be used by this step */ void cpu_freq_cgroup_validate(stepd_step_rec_t *job, char *step_alloc_cores) { uint16_t start = USHRT_MAX; uint16_t end = USHRT_MAX; uint16_t cpuidx = 0; char *core_range; debug2("cpu_freq_cgroup_validate: request value = %12d %8x", job->cpu_freq, job->cpu_freq); debug2(" jobid=%u, stepid=%u, tasks=%u cpu/task=%u, cpus=%u", job->jobid,job->stepid,job->node_tasks, job->cpus_per_task,job->cpus); debug2(" cpu_bind_type=%4x, cpu_bind map=%s", job->cpu_bind_type, job->cpu_bind); debug2(" step logical cores = %s, step physical cores = %s", job->step_alloc_cores, step_alloc_cores); if (!cpu_freq_count) return; /* set entries in cpu frequency table for this step's cpus */ core_range = step_alloc_cores; while ( (cpuidx = _cpu_freq_next_cpu(&core_range, &cpuidx, &start, &end)) != USHRT_MAX) { if (cpuidx >= cpu_freq_count) { error("cpu_freq_validate: index %u exceeds cpu count %u", cpuidx, cpu_freq_count); return; } _cpu_freq_find_valid(job->cpu_freq, cpuidx); } cpu_freq_set(job); return; }
/* * Validate the cpus and select the frequency to set * Called from task cgroup cpuset code with string containing * the list of cpus to be used by this step */ extern void cpu_freq_cgroup_validate(stepd_step_rec_t *job, char *step_alloc_cores) { uint16_t start = USHRT_MAX; uint16_t end = USHRT_MAX; uint16_t cpuidx = 0; char *core_range; debug_flags = slurm_get_debug_flags(); /* init for slurmstepd */ if (debug_flags & DEBUG_FLAG_CPU_FREQ) { info("cpu_freq_cgroup_validate: request: min=(%12d %8x) " "max=(%12d %8x) governor=%8x", job->cpu_freq_min, job->cpu_freq_min, job->cpu_freq_max, job->cpu_freq_max, job->cpu_freq_gov); info(" jobid=%u, stepid=%u, tasks=%u cpu/task=%u, cpus=%u", job->jobid,job->stepid,job->node_tasks, job->cpus_per_task,job->cpus); info(" cpu_bind_type=%4x, cpu_bind map=%s", job->cpu_bind_type, job->cpu_bind); info(" step logical cores = %s, step physical cores = %s", job->step_alloc_cores, step_alloc_cores); } if (!cpu_freq_count) return; for (cpuidx = 0; cpuidx < cpu_freq_count; cpuidx++) { _cpu_freq_init_data(cpuidx); } /* set entries in cpu frequency table for this step's cpus */ core_range = step_alloc_cores; while ( (cpuidx = _cpu_freq_next_cpu(&core_range, &cpuidx, &start, &end)) != USHRT_MAX) { if (cpuidx >= cpu_freq_count) { error("cpu_freq_validate: index %u exceeds cpu count %u", cpuidx, cpu_freq_count); return; } _cpu_freq_setup_data(job, cpuidx); } cpu_freq_set(job); return; }