tools/power turbostat: Cleanup: Use one cpu_setsize for all purposes

Use a single cpu_setsize to describe every cpu_set_t.
Size it based on the maximum possible cpu number.

No functional change.

Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
Len Brown 2026-04-28 22:19:41 -04:00
parent 7aa84b0a2c
commit d895f1596d

View File

@ -1426,7 +1426,7 @@ char *progname;
cpu_set_t *cpu_present_set, *cpu_possible_set, *cpu_effective_set, *cpu_allowed_set, *cpu_affinity_set, *cpu_subset;
cpu_set_t *perf_pcore_set, *perf_ecore_set, *perf_lcore_set;
size_t cpu_present_setsize, cpu_possible_setsize, cpu_effective_setsize, cpu_allowed_setsize, cpu_affinity_setsize, cpu_subset_size;
size_t cpu_setsize;
#define MAX_ADDED_THREAD_COUNTERS 24
#define MAX_ADDED_CORE_COUNTERS 8
#define MAX_ADDED_PACKAGE_COUNTERS 16
@ -2459,7 +2459,7 @@ int cpu_is_not_present(int cpu)
if (cpu < 0)
return 1;
return !CPU_ISSET_S(cpu, cpu_present_setsize, cpu_present_set);
return !CPU_ISSET_S(cpu, cpu_setsize, cpu_present_set);
}
int cpu_is_not_allowed(int cpu)
@ -2467,7 +2467,7 @@ int cpu_is_not_allowed(int cpu)
if (cpu < 0)
return 1;
return !CPU_ISSET_S(cpu, cpu_allowed_setsize, cpu_allowed_set);
return !CPU_ISSET_S(cpu, cpu_setsize, cpu_allowed_set);
}
#define GLOBAL_CORE_ID(core_id, pkg_id) (core_id + pkg_id * (topo.max_core_id + 1))
@ -2560,9 +2560,9 @@ int is_cpu_first_thread_in_package(struct thread_data *t, struct core_data *c, s
int cpu_migrate(int cpu)
{
CPU_ZERO_S(cpu_affinity_setsize, cpu_affinity_set);
CPU_SET_S(cpu, cpu_affinity_setsize, cpu_affinity_set);
if (sched_setaffinity(0, cpu_affinity_setsize, cpu_affinity_set) == -1)
CPU_ZERO_S(cpu_setsize, cpu_affinity_set);
CPU_SET_S(cpu, cpu_setsize, cpu_affinity_set);
if (sched_setaffinity(0, cpu_setsize, cpu_affinity_set) == -1)
return -1;
else
return 0;
@ -3382,7 +3382,7 @@ int format_counters(PER_THREAD_PARAMS)
return 0;
/*if not summary line and --cpu is used */
if ((t != average.threads) && (cpu_subset && !CPU_ISSET_S(t->cpu_id, cpu_subset_size, cpu_subset)))
if ((t != average.threads) && (cpu_subset && !CPU_ISSET_S(t->cpu_id, cpu_setsize, cpu_subset)))
return 0;
if (DO_BIC(BIC_USEC)) {
@ -5976,19 +5976,15 @@ void free_all_buffers(void)
CPU_FREE(cpu_present_set);
cpu_present_set = NULL;
cpu_present_setsize = 0;
CPU_FREE(cpu_effective_set);
cpu_effective_set = NULL;
cpu_effective_setsize = 0;
CPU_FREE(cpu_allowed_set);
cpu_allowed_set = NULL;
cpu_allowed_setsize = 0;
CPU_FREE(cpu_affinity_set);
cpu_affinity_set = NULL;
cpu_affinity_setsize = 0;
if (perf_pcore_set) {
CPU_FREE(perf_pcore_set);
@ -6345,7 +6341,7 @@ static void update_effective_set(bool startup)
{
update_effective_str(startup);
if (parse_cpu_str(cpu_effective_str, cpu_effective_set, cpu_effective_setsize))
if (parse_cpu_str(cpu_effective_str, cpu_effective_set, cpu_setsize))
err(1, "%s: cpu str malformat %s", PATH_EFFECTIVE_CPUS, cpu_effective_str);
}
@ -6387,7 +6383,7 @@ int count_cpus(int cpu)
int mark_cpu_present(int cpu)
{
CPU_SET_S(cpu, cpu_present_setsize, cpu_present_set);
CPU_SET_S(cpu, cpu_setsize, cpu_present_set);
return 0;
}
@ -8518,7 +8514,7 @@ int initialize_cpu_set_from_sysfs(cpu_set_t *cpu_set, const char *sysfs_path,
warn("read %s", sysfs_path);
goto out;
}
if (parse_cpu_str(cpuset_buf, cpu_set, cpu_possible_setsize)) {
if (parse_cpu_str(cpuset_buf, cpu_set, cpu_setsize)) {
warnx("%s: cpu str malformat %s\n", sysfs_path, cpuset_buf);
goto out;
}
@ -8555,7 +8551,7 @@ void linux_perf_init_hybrid_cpus(void)
perf_pcore_set = CPU_ALLOC((topo.max_cpu_num + 1));
if (perf_pcore_set == NULL)
err(3, "CPU_ALLOC");
CPU_ZERO_S(cpu_possible_setsize, perf_pcore_set);
CPU_ZERO_S(cpu_setsize, perf_pcore_set);
initialize_cpu_set_from_sysfs(perf_pcore_set, perf_cpu_pcore_path, "cpus");
if (debug)
print_cpu_set("perf pcores", perf_pcore_set);
@ -8567,7 +8563,7 @@ void linux_perf_init_hybrid_cpus(void)
perf_ecore_set = CPU_ALLOC((topo.max_cpu_num + 1));
if (perf_ecore_set == NULL)
err(3, "CPU_ALLOC");
CPU_ZERO_S(cpu_possible_setsize, perf_ecore_set);
CPU_ZERO_S(cpu_setsize, perf_ecore_set);
initialize_cpu_set_from_sysfs(perf_ecore_set, perf_cpu_ecore_path, "cpus");
if (debug)
print_cpu_set("perf ecores", perf_ecore_set);
@ -8579,7 +8575,7 @@ void linux_perf_init_hybrid_cpus(void)
perf_lcore_set = CPU_ALLOC((topo.max_cpu_num + 1));
if (perf_lcore_set == NULL)
err(3, "CPU_ALLOC");
CPU_ZERO_S(cpu_possible_setsize, perf_lcore_set);
CPU_ZERO_S(cpu_setsize, perf_lcore_set);
initialize_cpu_set_from_sysfs(perf_lcore_set, perf_cpu_lcore_path, "cpus");
if (debug)
print_cpu_set("perf lcores", perf_lcore_set);
@ -9502,7 +9498,7 @@ void perf_l2_init(void)
}
continue;
}
if (perf_pcore_set && CPU_ISSET_S(cpu, cpu_possible_setsize, perf_pcore_set)) {
if (perf_pcore_set && CPU_ISSET_S(cpu, cpu_setsize, perf_pcore_set)) {
fd_l2_percpu[cpu] = open_perf_counter(cpu, perf_pmu_types.pcore, perf_model_support->first.refs, -1, PERF_FORMAT_GROUP);
if (fd_l2_percpu[cpu] == -1) {
warnx("%s(cpu%d, 0x%x, 0x%llx) REFS", __func__, cpu, perf_pmu_types.pcore, perf_model_support->first.refs);
@ -9515,7 +9511,7 @@ void perf_l2_init(void)
free_fd_l2_percpu();
return;
}
} else if (perf_ecore_set && CPU_ISSET_S(cpu, cpu_possible_setsize, perf_ecore_set)) {
} else if (perf_ecore_set && CPU_ISSET_S(cpu, cpu_setsize, perf_ecore_set)) {
fd_l2_percpu[cpu] = open_perf_counter(cpu, perf_pmu_types.ecore, perf_model_support->second.refs, -1, PERF_FORMAT_GROUP);
if (fd_l2_percpu[cpu] == -1) {
warnx("%s(cpu%d, 0x%x, 0x%llx) REFS", __func__, cpu, perf_pmu_types.ecore, perf_model_support->second.refs);
@ -9528,7 +9524,7 @@ void perf_l2_init(void)
free_fd_l2_percpu();
return;
}
} else if (perf_lcore_set && CPU_ISSET_S(cpu, cpu_possible_setsize, perf_lcore_set)) {
} else if (perf_lcore_set && CPU_ISSET_S(cpu, cpu_setsize, perf_lcore_set)) {
fd_l2_percpu[cpu] = open_perf_counter(cpu, perf_pmu_types.lcore, perf_model_support->third.refs, -1, PERF_FORMAT_GROUP);
if (fd_l2_percpu[cpu] == -1) {
warnx("%s(cpu%d, 0x%x, 0x%llx) REFS", __func__, cpu, perf_pmu_types.lcore, perf_model_support->third.refs);
@ -9648,8 +9644,7 @@ void topology_probe(bool startup)
cpu_present_set = CPU_ALLOC((topo.max_cpu_num + 1));
if (cpu_present_set == NULL)
err(3, "CPU_ALLOC");
cpu_present_setsize = CPU_ALLOC_SIZE((topo.max_cpu_num + 1));
CPU_ZERO_S(cpu_present_setsize, cpu_present_set);
CPU_ZERO_S(cpu_setsize, cpu_present_set);
for_all_proc_cpus(mark_cpu_present);
if (debug)
print_cpu_set("present set", cpu_present_set);
@ -9660,8 +9655,7 @@ void topology_probe(bool startup)
cpu_possible_set = CPU_ALLOC((topo.max_cpu_num + 1));
if (cpu_possible_set == NULL)
err(3, "CPU_ALLOC");
cpu_possible_setsize = CPU_ALLOC_SIZE((topo.max_cpu_num + 1));
CPU_ZERO_S(cpu_possible_setsize, cpu_possible_set);
CPU_ZERO_S(cpu_setsize, cpu_possible_set);
initialize_cpu_set_from_sysfs(cpu_possible_set, "/sys/devices/system/cpu", "possible");
if (debug)
print_cpu_set("possible set", cpu_possible_set);
@ -9672,8 +9666,7 @@ void topology_probe(bool startup)
cpu_effective_set = CPU_ALLOC((topo.max_cpu_num + 1));
if (cpu_effective_set == NULL)
err(3, "CPU_ALLOC");
cpu_effective_setsize = CPU_ALLOC_SIZE((topo.max_cpu_num + 1));
CPU_ZERO_S(cpu_effective_setsize, cpu_effective_set);
CPU_ZERO_S(cpu_setsize, cpu_effective_set);
update_effective_set(startup);
if (debug)
print_cpu_set("effective set", cpu_effective_set);
@ -9684,8 +9677,7 @@ void topology_probe(bool startup)
cpu_allowed_set = CPU_ALLOC((topo.max_cpu_num + 1));
if (cpu_allowed_set == NULL)
err(3, "CPU_ALLOC");
cpu_allowed_setsize = CPU_ALLOC_SIZE((topo.max_cpu_num + 1));
CPU_ZERO_S(cpu_allowed_setsize, cpu_allowed_set);
CPU_ZERO_S(cpu_setsize, cpu_allowed_set);
/*
* Validate and update cpu_allowed_set.
@ -9697,10 +9689,10 @@ void topology_probe(bool startup)
* cpu_allowed_set is the intersection of cpu_present_set/cpu_effective_set/cpu_subset.
*/
for (i = 0; i <= topo.max_cpu_num; ++i) {
if (cpu_subset && !CPU_ISSET_S(i, cpu_subset_size, cpu_subset))
if (cpu_subset && !CPU_ISSET_S(i, cpu_setsize, cpu_subset))
continue;
if (!CPU_ISSET_S(i, cpu_present_setsize, cpu_present_set)) {
if (!CPU_ISSET_S(i, cpu_setsize, cpu_present_set)) {
if (cpu_subset) {
/* cpus in cpu_subset must be in cpu_present_set during startup */
if (startup)
@ -9711,21 +9703,21 @@ void topology_probe(bool startup)
continue;
}
if (CPU_COUNT_S(cpu_effective_setsize, cpu_effective_set)) {
if (!CPU_ISSET_S(i, cpu_effective_setsize, cpu_effective_set)) {
if (CPU_COUNT_S(cpu_setsize, cpu_effective_set)) {
if (!CPU_ISSET_S(i, cpu_setsize, cpu_effective_set)) {
fprintf(stderr, "cpu%d not effective\n", i);
continue;
}
}
CPU_SET_S(i, cpu_allowed_setsize, cpu_allowed_set);
CPU_SET_S(i, cpu_setsize, cpu_allowed_set);
}
if (debug)
print_cpu_set("allowed set", cpu_allowed_set);
if (!CPU_COUNT_S(cpu_allowed_setsize, cpu_allowed_set))
if (!CPU_COUNT_S(cpu_setsize, cpu_allowed_set))
errx(-ENODEV, "No valid cpus found");
sched_setaffinity(0, cpu_allowed_setsize, cpu_allowed_set);
sched_setaffinity(0, cpu_setsize, cpu_allowed_set);
/*
* Allocate and initialize cpu_affinity_set
@ -9733,8 +9725,7 @@ void topology_probe(bool startup)
cpu_affinity_set = CPU_ALLOC((topo.max_cpu_num + 1));
if (cpu_affinity_set == NULL)
err(3, "CPU_ALLOC");
cpu_affinity_setsize = CPU_ALLOC_SIZE((topo.max_cpu_num + 1));
CPU_ZERO_S(cpu_affinity_setsize, cpu_affinity_set);
CPU_ZERO_S(cpu_setsize, cpu_affinity_set);
for_all_proc_cpus(clear_ht_id);
@ -10629,11 +10620,11 @@ void turbostat_init()
void affinitize_child(void)
{
/* Prefer cpu_possible_set, if available */
if (sched_setaffinity(0, cpu_possible_setsize, cpu_possible_set)) {
if (sched_setaffinity(0, cpu_setsize, cpu_possible_set)) {
warn("sched_setaffinity cpu_possible_set");
/* Otherwise, allow child to run on same cpu set as turbostat */
if (sched_setaffinity(0, cpu_allowed_setsize, cpu_allowed_set))
if (sched_setaffinity(0, cpu_setsize, cpu_allowed_set))
warn("sched_setaffinity cpu_allowed_set");
}
}
@ -11564,11 +11555,10 @@ void parse_cpu_command(char *optarg)
cpu_subset = CPU_ALLOC(topo.max_cpu_num + 1);
if (cpu_subset == NULL)
err(3, "CPU_ALLOC");
cpu_subset_size = CPU_ALLOC_SIZE(topo.max_cpu_num + 1);
CPU_ZERO_S(cpu_subset_size, cpu_subset);
CPU_ZERO_S(cpu_setsize, cpu_subset);
if (parse_cpu_str(optarg, cpu_subset, cpu_subset_size))
if (parse_cpu_str(optarg, cpu_subset, cpu_setsize))
goto error;
if (debug)
print_cpu_set("cpu subsetset", cpu_subset);
@ -11784,8 +11774,9 @@ int main(int argc, char **argv)
skip_cgroup_setting:
/* probe max_cpu_num early for use by cmdline() */
/* probe max_cpu_num and set cpu_setsize early for use by cmdline() */
topo.max_cpu_num = get_max_cpu_num("/sys/devices/system/cpu/possible");
cpu_setsize = CPU_ALLOC_SIZE((topo.max_cpu_num + 1));
outf = stderr;
cmdline(argc, argv);