У меня есть 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
, как это ядра сортируют? Сначала все физическое, потом все виртуальное? Каждое физическое ядро, то его виртуальное ядро (ядра)? Как они отсортированы?
ht
флаг указывает только на то, что многопоточность (HTT) поддерживается процессором, а не на том, включена она или нет. Даже тогда на это нельзя всегда полагаться, например, это неверно указывает, что i5 i5-6500 поддерживает HTT: ark.intel.com/content/www/us/en/ark/products/88184/…Предыдущий ответ очень интересный.
После некоторого поиска в Google, я нашел некоторые связанные темы:
/server/235825/disable-hyperthreading-from-within-linux-no-access-to-bios
/programming/7274585/linux-find-out-hyper-threaded-core-id
Проверка, включена ли HyperThreading или нет?
По последней ссылке скрипт Python не работает, когда у вашего хоста много физических идентификаторов. Я попытался изменить его с другим условием в конце:
Изменение:
в
Но это не работает, как ожидалось, основываясь на предыдущем сообщении. Кстати, вы можете сделать что-то более всеобъемлющее, чем:
с:
[...]
Что интересно на хосте с множеством ядер с поддержкой гиперпоточности, так это распределение логических ядер на оборудовании.
Например, на одном из моих компьютеров (48 логических ядер, 2 физических процессора, 24 (12 * 2) «реальных ядра» (а также 24 виртуальных ядра)):
Это означает, что cpu0 и cpu24 используют один и тот же физический аппаратный «адрес». То же самое для CPU1 и CPU25 ...
Так что, в принципе, если я хочу отключить гиперпоточность в моей ОС Linux, я должен поставить '0' в cpu {24..47} / онлайн с
Вы заметите, насколько интересна моя система нумерации ядер.
источник
Вы также можете использовать lscpu:
здесь логические ядра 0 и 4 идут к ядру 0
источник