Як я можу знати, які процесори є фізичними ядрами?


15

Тут у мене є Intel i7 2700k, і я хотів би знати, як я можу сказати, які процесори є фізичними, а які - віртуальними (тобто: гіперточення). В даний час я запускаю скрипт Conky, щоб відобразити мої темпи, частоти та навантаження процесора, але я не впевнений, що все зробив правильно:

приголомшливий

Я написав власний сценарій, щоб отримати температуру та частоту i7z, але вони відповідають лише фізичним ядрам. Зараз я показую кожне ядро ​​так:

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

Я не впевнений, що це правильно, через навантаження і температури, які я бачу іноді. В /proc/cpuinfo, як сортують сердечники? Спочатку все фізичне, а потім все віртуальне? Кожне фізичне ядро, то його віртуальні ядра? Як їх сортують?

Відповіді:


16

Ви можете дізнатися про кожне ядро ​​процесора, вивчивши кожен запис 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 idпоказує ідентифікатор процесора. Якщо у вас не встановлено багатопроцесорну установку (маючи в машині два окремих фізичних процесора), це завжди буде 0.

siblings показати кількість процесорів, приєднаних до одного фізичного процесора.

core idпоказати ідентифікатор поточного ядра до загальної суми cpu cores. Ви можете використовувати цю інформацію, щоб співвіднести, який віртуальний процесор переходить в одне ядро.

apicidoriginal apicid) показати номер (віртуального) процесора, вказаний біосом.

Зауважте, що там 8 сестер і 4 ядра, тому є 2 віртуальних процесора на ядро. Не існує різниці між "віртуальним" або "реальним" в гіпертоковці. Але за допомогою цієї інформації ви можете пов’язати, які процесори є з одного ядра.


5

/sysФайлова система має хороший огляд цієї інформації. Ось приклад із квадратичного поля SMP з 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

Ідентичний зміст позначає нитки одного ядра. Тобто

  • cpu0 / cpu8
  • cpu1 / cpu9
  • тощо.

У core_siblingsпсевдофайлі є аналогічна інформація разом із ще більшою топологією.


3

Якщо ви бачите htпрапор ' ', у /proc/cpuinfoвас увімкнена гіперрезьба, і кожне справжнє ядро ​​розбито на декілька потоків, немає поняття реальної нитки та віртуальної нитки: обидва фактично віртуальні.

Можливо, ви хочете дослідити порівняння ядер і розеток, використовуйте physical idідентифікатор топології для групування ядер разом.


htПрапор тільки вказує , що многопоточность (HTT) підтримується процесором - немає , якщо він включений чи ні. Навіть тоді на нього не завжди можна покластися, наприклад, це помилково вказує, що i5 i5-6500 підтримує HTT: ark.intel.com/content/www/us/en/ark/products/88184/…
Anthony G - справедливість для Моніки

1

Попередня відповідь дуже цікава.

Після деякого гуглінгу я знайшов деякі споріднені теми:

На останньому посиланні сценарій python не працює, коли у вашого хоста багато фізичних ідентифікаторів. Я намагався змінити його з іншою умовою наприкінці:

Зміна:

if p > 0:

до

if p % 2 == 1:

Але це не працює, як очікувалося, виходячи з попереднього повідомлення. До речі, ви можете зробити щось більш комплексне, ніж:

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

з:

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

[...]

Що цікаво на багатьох ядрах, у яких функція hiperthreading - це розподіл логічних ядер на апаратному забезпеченні.

Наприклад, на одному з моїх комп'ютерів (48 логічних ядер, 2 фізичних процесора, 24 (12 * 2) 'справжні ядра' (так, також 24 віртуальних ядра)):

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

Це означає, що cpu0 та cpu24 мають однакову фізичну апаратну "адресу". Те саме для cpu1 та cpu25 ...

Отже, в основному, якщо я хотів би відключити Hyperthreading з моєї ОС Linux, я повинен поставити "0" на процесор {24..47} / онлайн з

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

Ви помітите, як цікава моя система нумерує сердечники.


Будь ласка, використовуйте кодові блоки замість лапок для речей на терміналі; набагато простіше читати.
HalosGhost

1

ви також можете використовувати 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

тут логічні ядра 0 і 4 переходять до ядра 0

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.