Bagaimana saya tahu prosesor mana yang merupakan inti fisik?

15

Saya punya Intel i7 2700k di sini, dan saya ingin tahu bagaimana saya bisa tahu prosesor mana yang fisik dan mana yang virtual (yaitu: hyperthreading). Saat ini saya sedang menjalankan skrip Conky untuk menampilkan suhu, frekuensi, dan beban CPU saya, tetapi saya tidak yakin saya telah melakukannya dengan benar:

luar biasa

Saya telah menulis skrip saya sendiri untuk mendapatkan suhu dan frekuensi i7z, tetapi ini hanya sesuai dengan inti fisik. Saat ini saya menampilkan setiap inti seperti ini:

${cpu cpu1} ${lua display_temp 0} ${lua display_load 0}
${cpu cpu2}
${cpu cpu3} ${lua display_temp 1} ${lua display_load 1}
${cpu cpu4}
# ...

Saya tidak yakin ini benar, karena beban dan suhu yang kadang-kadang saya lihat. Di /proc/cpuinfo, bagaimana core diurutkan? Pertama, semua fisik, lalu semua virtual? Setiap inti fisik lalu inti virtualnya? Bagaimana mereka diurutkan?

Naftuli Kay
sumber

Jawaban:

16

Anda dapat mengetahui tentang setiap inti prosesor dengan memeriksa setiap entri cpuinfo:

processor       : 0
[...]
physical id     : 0
siblings        : 8
core id         : 0
cpu cores       : 4
apicid          : 0

processor       : 1
[...]
physical id     : 0
siblings        : 8
core id         : 1
cpu cores       : 4
apicid          : 2 

processor       : 2
[...]
physical id     : 0
siblings        : 8
core id         : 2
cpu cores       : 4
apicid          : 4 

processor       : 3
[...]
physical id     : 0
siblings        : 8
core id         : 3
cpu cores       : 4
apicid          : 6

processor       : 4
[...]
physical id     : 0
siblings        : 8
core id         : 0
cpu cores       : 4
apicid          : 1

[and so on]

physical idmenunjukkan pengidentifikasi prosesor. Kecuali jika Anda memiliki pengaturan multiprosesor (memiliki dua prosesor fisik terpisah dalam sebuah mesin), itu akan selalu menjadi 0.

siblings menunjukkan jumlah prosesor yang terpasang pada prosesor fisik yang sama.

core idperlihatkan pengidentifikasi inti saat ini, hingga total cpu cores. Anda dapat menggunakan informasi ini untuk menghubungkan prosesor virtual mana yang menjadi satu inti.

apicid(dan original apicid) menunjukkan jumlah prosesor (virtual), seperti yang diberikan oleh bios.

Perhatikan bahwa ada 8 saudara kandung dan 4 core, jadi ada 2 prosesor virtual per inti. Tidak ada perbedaan antara "virtual" atau "nyata" dalam hyperthreading. Tetapi menggunakan informasi ini Anda dapat mengasosiasikan prosesor mana yang berasal dari inti yang sama.

BatchyX
sumber
5

Sistem /sysfile memiliki ikhtisar bagus tentang informasi ini. Berikut adalah contoh dari kotak quadcore SMP dengan Hyperthreading:

# grep . /sys/devices/system/cpu/cpu{,1}?/topology/thread_siblings | tr : \\t | sed 's,^,    ,'
/sys/devices/system/cpu/cpu0/topology/thread_siblings   00000000,00000101
/sys/devices/system/cpu/cpu1/topology/thread_siblings   00000000,00000202
/sys/devices/system/cpu/cpu2/topology/thread_siblings   00000000,00000404
/sys/devices/system/cpu/cpu3/topology/thread_siblings   00000000,00000808
/sys/devices/system/cpu/cpu4/topology/thread_siblings   00000000,00001010
/sys/devices/system/cpu/cpu5/topology/thread_siblings   00000000,00002020
/sys/devices/system/cpu/cpu6/topology/thread_siblings   00000000,00004040
/sys/devices/system/cpu/cpu7/topology/thread_siblings   00000000,00008080
/sys/devices/system/cpu/cpu8/topology/thread_siblings   00000000,00000101
/sys/devices/system/cpu/cpu9/topology/thread_siblings   00000000,00000202
/sys/devices/system/cpu/cpu10/topology/thread_siblings  00000000,00000404
/sys/devices/system/cpu/cpu11/topology/thread_siblings  00000000,00000808
/sys/devices/system/cpu/cpu12/topology/thread_siblings  00000000,00001010
/sys/devices/system/cpu/cpu13/topology/thread_siblings  00000000,00002020
/sys/devices/system/cpu/cpu14/topology/thread_siblings  00000000,00004040
/sys/devices/system/cpu/cpu15/topology/thread_siblings  00000000,00008080

Konten identik menunjukkan utas dari inti yang sama. Yaitu

  • cpu0 / cpu8
  • cpu1 / cpu9
  • dll.

Ada informasi serupa di file core_siblingspseudo, bersama dengan informasi topologi yang lebih banyak lagi.

Felix Frank
sumber
3

Jika Anda melihat htbendera ' ' di /proc/cpuinfodalamnya maka Anda telah mengaktifkan hyper-threading dan setiap inti nyata dibagi menjadi beberapa utas, tidak ada konsep utas nyata dan utas virtual: keduanya efektif virtual.

Yang ingin Anda selidiki adalah membandingkan inti dan soket, gunakan physical idpengidentifikasi topologi ' ' untuk mengelompokkan inti bersama.

Steve-o
sumber
The htbendera hanya menunjukkan bahwa multi-threading (HTT) didukung oleh CPU - tidak jika itu diaktifkan atau tidak. Meskipun demikian, itu tidak selalu dapat diandalkan, misalnya, itu salah mengindikasikan bahwa i5 i5-6500 mendukung HTT: ark.intel.com/content/www/us/en/ark/products/88184/…
Anthony G - Keadilan untuk Monica
1

Jawaban sebelumnya sangat menarik.

Setelah beberapa googling, saya menemukan beberapa mata pelajaran terkait:

Pada tautan terakhir, skrip python tidak berfungsi ketika host Anda memiliki banyak ID fisik. Saya mencoba memodifikasinya dengan kondisi yang berbeda di akhir:

Mengubah:

if p > 0:

untuk

if p % 2 == 1:

Tapi itu tidak berfungsi seperti yang diharapkan, berdasarkan pesan sebelumnya. Omong-omong, Anda dapat melakukan sesuatu yang lebih komprehensif daripada:

grep . /sys/devices/system/cpu/cpu{,1}?/topology/thread_siblings | tr : \\\t | sed -r 's,^,\s\s\s\s,'

dengan:

for file in /sys/devices/system/cpu/cpu[0-9]*/topology/thread_siblings_list; do echo -n "$file "; cat $file; done |sort -k2 -n

[...]

Apa yang menarik pada host banyak core dengan mengaktifkan hyperthreading adalah distribusi core logis pada perangkat keras.

Misalnya, di salah satu komputer saya (48 inti logis, 2 prosesor fisik, 24 (12 * 2) 'core nyata' (jadi, juga 24 core virtual)):

for file in /sys/devices/system/cpu/cpu[0-9]*/topology/thread_siblings_list; do echo -n "$file "; cat $file; done |sort -k2 -n

 /sys/devices/system/cpu/cpu0/topology/thread_siblings_list 0,24
 /sys/devices/system/cpu/cpu24/topology/thread_siblings_list 0,24
 /sys/devices/system/cpu/cpu1/topology/thread_siblings_list 1,25
 /sys/devices/system/cpu/cpu25/topology/thread_siblings_list 1,25
 /sys/devices/system/cpu/cpu26/topology/thread_siblings_list 2,26
 /sys/devices/system/cpu/cpu2/topology/thread_siblings_list 2,26
 /sys/devices/system/cpu/cpu27/topology/thread_siblings_list 3,27
 /sys/devices/system/cpu/cpu3/topology/thread_siblings_list 3,27
 /sys/devices/system/cpu/cpu28/topology/thread_siblings_list 4,28
 /sys/devices/system/cpu/cpu4/topology/thread_siblings_list 4,28
 /sys/devices/system/cpu/cpu29/topology/thread_siblings_list 5,29
 /sys/devices/system/cpu/cpu5/topology/thread_siblings_list 5,29
 /sys/devices/system/cpu/cpu30/topology/thread_siblings_list 6,30
 /sys/devices/system/cpu/cpu6/topology/thread_siblings_list 6,30
 /sys/devices/system/cpu/cpu31/topology/thread_siblings_list 7,31
 /sys/devices/system/cpu/cpu7/topology/thread_siblings_list 7,31
 /sys/devices/system/cpu/cpu32/topology/thread_siblings_list 8,32
 /sys/devices/system/cpu/cpu8/topology/thread_siblings_list 8,32
 /sys/devices/system/cpu/cpu33/topology/thread_siblings_list 9,33
 /sys/devices/system/cpu/cpu9/topology/thread_siblings_list 9,33
 /sys/devices/system/cpu/cpu10/topology/thread_siblings_list 10,34
 /sys/devices/system/cpu/cpu34/topology/thread_siblings_list 10,34
 /sys/devices/system/cpu/cpu11/topology/thread_siblings_list 11,35
 /sys/devices/system/cpu/cpu35/topology/thread_siblings_list 11,35
 /sys/devices/system/cpu/cpu12/topology/thread_siblings_list 12,36
 /sys/devices/system/cpu/cpu36/topology/thread_siblings_list 12,36
 /sys/devices/system/cpu/cpu13/topology/thread_siblings_list 13,37
 /sys/devices/system/cpu/cpu37/topology/thread_siblings_list 13,37
 /sys/devices/system/cpu/cpu14/topology/thread_siblings_list 14,38
 /sys/devices/system/cpu/cpu38/topology/thread_siblings_list 14,38
 /sys/devices/system/cpu/cpu15/topology/thread_siblings_list 15,39
 /sys/devices/system/cpu/cpu39/topology/thread_siblings_list 15,39
 /sys/devices/system/cpu/cpu16/topology/thread_siblings_list 16,40
 /sys/devices/system/cpu/cpu40/topology/thread_siblings_list 16,40
 /sys/devices/system/cpu/cpu17/topology/thread_siblings_list 17,41
 /sys/devices/system/cpu/cpu41/topology/thread_siblings_list 17,41
 /sys/devices/system/cpu/cpu18/topology/thread_siblings_list 18,42
 /sys/devices/system/cpu/cpu42/topology/thread_siblings_list 18,42
 /sys/devices/system/cpu/cpu19/topology/thread_siblings_list 19,43
 /sys/devices/system/cpu/cpu43/topology/thread_siblings_list 19,43
 /sys/devices/system/cpu/cpu20/topology/thread_siblings_list 20,44
 /sys/devices/system/cpu/cpu44/topology/thread_siblings_list 20,44
 /sys/devices/system/cpu/cpu21/topology/thread_siblings_list 21,45
 /sys/devices/system/cpu/cpu45/topology/thread_siblings_list 21,45
 /sys/devices/system/cpu/cpu22/topology/thread_siblings_list 22,46
 /sys/devices/system/cpu/cpu46/topology/thread_siblings_list 22,46
 /sys/devices/system/cpu/cpu23/topology/thread_siblings_list 23,47
 /sys/devices/system/cpu/cpu47/topology/thread_siblings_list 23,47

Ini berarti cpu0 dan cpu24 berbagi "alamat" perangkat keras fisik yang sama. Hal yang sama untuk cpu1 dan cpu25 ...

Jadi, pada dasarnya, jika saya ingin menonaktifkan hyperthreading dari OS linux saya, saya harus memasukkan '0' di cpu {24..47} / online dengan

for fake_cpu in {24..47}; do echo 0 > /sys/devices/system/cpu/cpu$fake_cpu/online;done

Anda akan melihat betapa menariknya sistem saya menghitung inti.

remyd1
sumber
Silakan gunakan blok kode alih-alih kutipan untuk hal-hal di terminal; jauh lebih mudah dibaca.
HalosGhost
1

Anda juga dapat menggunakan lscpu:

# lscpu --all --extended
CPU NODE SOCKET CORE L1d:L1i:L2:L3:L4 ONLINE MAXMHZ    MINMHZ
0   0    0      0    0:0:0:0:0        yes    3200.0000 800.0000
1   0    0      1    1:1:1:0:0        yes    3200.0000 800.0000
2   0    0      2    2:2:2:0:0        yes    3200.0000 800.0000
3   0    0      3    3:3:3:0:0        yes    3200.0000 800.0000
4   0    0      0    0:0:0:0:0        yes    3200.0000 800.0000
5   0    0      1    1:1:1:0:0        yes    3200.0000 800.0000
6   0    0      2    2:2:2:0:0        yes    3200.0000 800.0000
7   0    0      3    3:3:3:0:0        yes    3200.0000 800.0000

di sini core logis 0 dan 4 menuju ke core 0

NickSoft
sumber