tools/power turbostat: Enhance HT enumeration

Record the cpu_id of each CPU HT sibling -- will need this later.

Rename "thread_id" to "ht_id" to disambiguate that the scope
of this id is within a Core -- it is not a global cpu_id.

No functional change.

Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
Len Brown 2026-02-12 23:31:02 -06:00
parent ddf60e38ca
commit 070e92361e

View File

@ -2400,7 +2400,8 @@ struct cpu_topology {
int logical_cpu_id; int logical_cpu_id;
int physical_node_id; int physical_node_id;
int logical_node_id; /* 0-based count within the package */ int logical_node_id; /* 0-based count within the package */
int thread_id; int ht_id; /* unique within a core */
int ht_sibling_cpu_id;
int type; int type;
cpu_set_t *put_ids; /* Processing Unit/Thread IDs */ cpu_set_t *put_ids; /* Processing Unit/Thread IDs */
} *cpus; } *cpus;
@ -6179,8 +6180,8 @@ int get_thread_siblings(struct cpu_topology *thiscpu)
int thread_id = 0; int thread_id = 0;
thiscpu->put_ids = CPU_ALLOC((topo.max_cpu_num + 1)); thiscpu->put_ids = CPU_ALLOC((topo.max_cpu_num + 1));
if (thiscpu->thread_id < 0) if (thiscpu->ht_id < 0)
thiscpu->thread_id = thread_id++; thiscpu->ht_id = thread_id++;
if (!thiscpu->put_ids) if (!thiscpu->put_ids)
return -1; return -1;
@ -6204,8 +6205,10 @@ int get_thread_siblings(struct cpu_topology *thiscpu)
sib_core = get_core_id(so); sib_core = get_core_id(so);
if (sib_core == thiscpu->core_id) { if (sib_core == thiscpu->core_id) {
CPU_SET_S(so, size, thiscpu->put_ids); CPU_SET_S(so, size, thiscpu->put_ids);
if ((so != cpu) && (cpus[so].thread_id < 0)) if ((so != cpu) && (cpus[so].ht_id < 0)) {
cpus[so].thread_id = thread_id++; cpus[so].ht_id = thread_id++;
cpus[cpu].ht_sibling_cpu_id = so;
}
} }
} }
} }
@ -6388,9 +6391,10 @@ int mark_cpu_present(int cpu)
return 0; return 0;
} }
int init_thread_id(int cpu) int init_ht_id(int cpu)
{ {
cpus[cpu].thread_id = -1; cpus[cpu].ht_id = -1;
cpus[cpu].ht_sibling_cpu_id = -1;
return 0; return 0;
} }
@ -9575,13 +9579,13 @@ void topology_probe(bool startup)
cpu_affinity_setsize = CPU_ALLOC_SIZE((topo.max_cpu_num + 1)); cpu_affinity_setsize = CPU_ALLOC_SIZE((topo.max_cpu_num + 1));
CPU_ZERO_S(cpu_affinity_setsize, cpu_affinity_set); CPU_ZERO_S(cpu_affinity_setsize, cpu_affinity_set);
for_all_proc_cpus(init_thread_id); for_all_proc_cpus(init_ht_id);
for_all_proc_cpus(set_cpu_hybrid_type); for_all_proc_cpus(set_cpu_hybrid_type);
/* /*
* For online cpus * For online cpus
* find max_core_id, max_package_id * find max_core_id, max_package_id, num_cores (per system)
*/ */
for (i = 0; i <= topo.max_cpu_num; ++i) { for (i = 0; i <= topo.max_cpu_num; ++i) {
int siblings; int siblings;
@ -9623,11 +9627,12 @@ void topology_probe(bool startup)
siblings = get_thread_siblings(&cpus[i]); siblings = get_thread_siblings(&cpus[i]);
if (siblings > max_siblings) if (siblings > max_siblings)
max_siblings = siblings; max_siblings = siblings;
if (cpus[i].thread_id == 0) if (cpus[i].ht_id == 0)
topo.num_cores++; topo.num_cores++;
} }
topo.max_core_id = max_core_id; topo.max_core_id = max_core_id; /* within a package */
topo.max_package_id = max_package_id; topo.max_package_id = max_package_id;
topo.num_cores = (max_core_id + 1) * topo.num_packages; /* per system */
topo.cores_per_node = max_core_id + 1; topo.cores_per_node = max_core_id + 1;
if (debug > 1) if (debug > 1)
@ -9669,7 +9674,7 @@ void topology_probe(bool startup)
fprintf(outf, fprintf(outf,
"cpu %d pkg %d die %d l3 %d node %d lnode %d core %d thread %d\n", "cpu %d pkg %d die %d l3 %d node %d lnode %d core %d thread %d\n",
i, cpus[i].package_id, cpus[i].die_id, cpus[i].l3_id, i, cpus[i].package_id, cpus[i].die_id, cpus[i].l3_id,
cpus[i].physical_node_id, cpus[i].logical_node_id, cpus[i].core_id, cpus[i].thread_id); cpus[i].physical_node_id, cpus[i].logical_node_id, cpus[i].core_id, cpus[i].ht_id);
} }
} }
@ -9727,14 +9732,13 @@ void allocate_counters(struct counters *counters)
/* /*
* init_counter() * init_counter()
* *
* set FIRST_THREAD_IN_CORE and FIRST_CORE_IN_PACKAGE * set t->cpu_id, FIRST_THREAD_IN_CORE and FIRST_CORE_IN_PACKAGE
*/ */
void init_counter(struct thread_data *thread_base, struct core_data *core_base, struct pkg_data *pkg_base, int cpu_id) void init_counter(struct thread_data *thread_base, struct core_data *core_base, struct pkg_data *pkg_base, int cpu_id)
{ {
int pkg_id = cpus[cpu_id].package_id; int pkg_id = cpus[cpu_id].package_id;
int node_id = cpus[cpu_id].logical_node_id; int node_id = cpus[cpu_id].logical_node_id;
int core_id = cpus[cpu_id].core_id; int core_id = cpus[cpu_id].core_id;
int thread_id = cpus[cpu_id].thread_id;
struct thread_data *t; struct thread_data *t;
struct core_data *c; struct core_data *c;
@ -9744,7 +9748,7 @@ void init_counter(struct thread_data *thread_base, struct core_data *core_base,
if (node_id < 0) if (node_id < 0)
node_id = 0; node_id = 0;
t = GET_THREAD(thread_base, thread_id, core_id, node_id, pkg_id); t = GET_THREAD(thread_base, cpus[cpu_id].ht_id, core_id, node_id, pkg_id);
c = GET_CORE(core_base, core_id, node_id, pkg_id); c = GET_CORE(core_base, core_id, node_id, pkg_id);
t->cpu_id = cpu_id; t->cpu_id = cpu_id;