Objevil jsem jednoduchý trik, jak udělat to, co potřebuji.
cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
Pokud se první číslo rovná číslu CPU (v tomto příkladu 0), pak se jedná o skutečné jádro, pokud ne, jedná se o jádro s hyperthreadingem.
Skutečný základní příklad:
# cat /sys/devices/system/cpu/cpu1/topology/thread_siblings_list
1,13
Příklad jádra Hyperthreading
# cat /sys/devices/system/cpu/cpu13/topology/thread_siblings_list
1,13
Výstup druhého příkladu je úplně stejný jako ten první. Nicméně kontrolujeme cpu13
a první číslo je 1
, takže CPU 13 je jádro s hyperthreadingem.
Překvapuje mě, že nikdo nezmínil lscpu
dosud. Zde je příklad systému s jednou paticí se čtyřmi fyzickými jádry a povoleným hyper-threadingem:
$ 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
Výstup vysvětluje, jak interpretovat tabulku ID; logická ID CPU se stejným Core ID jsou sourozenci.
Jak vybrat statické číslo portu pro vlastní aplikaci?
Jak najít textové soubory, které neobsahují text v Linuxu?