Ich habe den einfachen Trick entdeckt, um das zu tun, was ich brauche.
cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
Wenn die erste Zahl gleich der CPU-Nummer ist (0 in diesem Beispiel), dann ist es ein echter Kern, wenn nicht, ist es ein Hyperthreading-Kern.
Beispiel für echten Kern:
# cat /sys/devices/system/cpu/cpu1/topology/thread_siblings_list
1,13
Hyperthreading-Kernbeispiel
# cat /sys/devices/system/cpu/cpu13/topology/thread_siblings_list
1,13
Die Ausgabe des zweiten Beispiels ist genau die gleiche wie die des ersten. Wir prüfen jedoch cpu13
, und die erste Zahl ist 1
, CPU 13 ist also ein Hyperthreading-Kern.
Ich bin überrascht, dass niemand lscpu
erwähnt hat noch. Hier ist ein Beispiel für ein Single-Socket-System mit vier physischen Kernen und aktiviertem Hyper-Threading:
$ lscpu -p
# The following is the parsable format, which can be fed to other
# programs. Each different item in every column has an unique ID
# starting from zero.
# CPU,Core,Socket,Node,,L1d,L1i,L2,L3
0,0,0,0,,0,0,0,0
1,1,0,0,,1,1,1,0
2,2,0,0,,2,2,2,0
3,3,0,0,,3,3,3,0
4,0,0,0,,0,0,0,0
5,1,0,0,,1,1,1,0
6,2,0,0,,2,2,2,0
7,3,0,0,,3,3,3,0
Die Ausgabe erläutert, wie die ID-Tabelle interpretiert wird; logische CPU-IDs mit derselben Core-ID sind Geschwister.