Как я могу проверить, включена ли гиперпоточность на машине с Linux, используя для этого скрипт perl?
Я пытаюсь следующим образом:
dmidecode -t processor | grep HTT
Дайте мне знать, если я на правильном пути.
linux
cpu
hyperthreading
двухэтажный
источник
источник
dmidecode
вы должны быть пользователем root.Ответы:
Примечания добавлены 8 июля 2014 года. Как отметил Риккардо Мурри , мой ответ ниже показывает только то, сообщает ли процессор о поддержке гиперпоточности. Как правило, * nix O / S настроены для включения гиперпоточности, если это поддерживается. Однако, чтобы проверить это программно, посмотрите, например , ответ Нильса !
---- Оригинальный ответ от 25 марта 2012 г .:
Вы действительно на правильном пути :) с
В Linux я обычно просто ищу «ht» в строке «flags»
/proc/cpuinfo
. Смотри напримерили если вы хотите включить "ht" в шаблон
(
\b
Соответствует границам слова и помогает избежать ложных срабатываний в случаях, когда «ht» является частью другого флага.)источник
lscpu
это способ проверить.Я всегда просто использовал следующее и смотрел на «Thread (s) per core:»).
Обратите внимание, однако, что этот метод не будет работать, если какой-либо логический процессор был отключен с помощью простого
источник
echo 0 > /sys/devices/system/cpu/cpu31/online
, теперь lscpu сообщаетThread(s) per core: 1
. Плохоlscpu
! Думаю, я больше не буду этим пользоваться.Если количество логических процессоров в два раза больше ядер, у вас есть HT. Используйте следующий скрипт для декодирования / proc / cpuinfo :
источник
$NUMCORE > $NUMLOG
мы можем сказать, что гиперпоточность включена, верно? На самом деле это так2 * $NUMCORE = $NUMLOG
, всегда ли это так, или у некоторых процессоров может быть в 4 раза больше ядер?lscpu
доступ, выlscpu
получите ту же информацию, а также множество дополнительных метаданных, и результаты из нихlscpu
будут более легко разбираться. но это решение работает и только использует/proc/cpuinfo
.Приведенные выше примеры показывают, способен ли ЦП поддерживать HT, но нет, если он используется. Последний способ работает, но не тестируются серверы с двумя сокетами и виртуальные машины, на
Xenserver
которых он не отображает физический процессор, поскольку их нет.Я обнаружил, что это самый простой и менее кодовый способ, который также работал во всех моих тестовых средах. но требует
bc
.Я считаю, что это будет работать на всех платформах, и скажет вам, если его процессор способен, и если он включен. Может быть, немного грязно, я начинающий в сценарии, хотя. Я тестировал с помощью Centos XENSERVER vm, Ubuntu и Openfiler (rpath)
источник
/sys/devices/system/cpu/smt/control
. Смотрите также ответ ОскараС помощью этой команды вы можете проверить возможности HT процессора.
Вы можете перечислить физический и логический процессор, видимый ядром, с помощью следующей команды:
Это дает этот вывод на одноядерный процессор с поддержкой HT:
Вы можете прочитать результат так:
источник
ht
в флагах процессора.physical id
кажется, что представляет сокет / чип.core id
, Кажется, указывают на то же физическое ядроЭтот лайнер, кажется, помогает мне (требует привилегий root):
Выход:
Счетчик потоков вдвое больше ядра, поэтому у меня включена поддержка гиперпоточности.
Или, если вы действительно хотите свой Perl-скрипт, как и просили ...
источник
dmidecode
это надежно.lscpu
это не всегда будет надежно. Мне нравится ответ Скоттбба.Этот результат указывает, что HT включен, поскольку
siblings
число (12) больше, чемcpu cores
(6)источник
Если вы прочитаете
/sys/devices/system/cpu/cpu0/topology/thread_siblings_list
, он вернет разделенный запятыми список родных элементов потока (т. Е. Hyperthread "cores") CPU 0.Например, на моем 2-сокетном 6-ядерном Xeon с включенной гиперпоточностью я получаю:
Но после отключения гиперпоточности в BIOS я получаю:
Предполагая, что CPU 0 будет всегда доступен, тогда проверка
thread_sibling_list
файла procfs CPU 0 для более чем одного узла, или поиск запятой, или даже просто чего-то большего0
, покажет, включена ли гиперпоточность.Я бы ответил на Perl, но 1) я не знаю Perl, и 2) я полагаю, что решение довольно тривиально.
источник
На Linux это работает хорошо:
В приведенном выше примере у нас есть 2 разъема NUMA (SOCKET = 1 или 2). У нас 16 физических ядер (CORE = от 0 до 15). Каждый CORE имеет одноуровневую гиперпоточность (например, CORE = 0 содержит CPU 0,16.
Мы можем проверить Hyperthread следующим образом:
Иерархия кеш-памяти:
lscpu -p дает вывод в формате csv для простого анализа программы.
источник
Вот подход на основе Python - он также предлагает способы его отключения, если это необходимо.
источник
echo off > /sys/devices/system/cpu/smt/control
(помимо отключения его в BIOS). Смотрите также ответ Оскара для прямой проверки.Здесь много предостережений и что-если в ответах ... кажется, что ответ не так очевиден.
lscpu
имеет свои гоча, которые применяются к любому ответу «подсчитать количество ядер и логических процессоров, а затем сравнить». Потому что вы можете отключить логические процессоры с помощью простой команды echo (... это может иметь решающее значение в большой корпоративной среде, где вы, например, зависите от турбо-режима).Вот моя попытка; спасибо @scottbb за вдохновение:
На моих компьютерах с процессором Dell Xeon список родственников включает запятую при включенном HT. На моем ноутбуке он содержит дефис (процессор i5-3210m). Так что я исправляю пунктуацию.
Мысли? Критицизмы?
Запрашивающий запросил Perl, так что вы идете:
источник
grep -q [-.]
как это меньше, чтобы напечатать. FWIW, я проверил несколько Xeons / i5 / i7 (включая мобильные варианты), и ни у одного из них нет дефиса вthread_siblings_list
. Это не достаточно , чтобы просто проверить CPU0 - таким образом, что - то вроде этого было бы более надежным:grep -q , /sys/devices/system/cpu/cpu*/topology/thread_siblings_list
. Впрочем, простоgrep 1 /sys/devices/system/cpu/smt/active -q
еще ближе к делу - ср. Ответ ОскараСамый простой способ проверить, активен ли SMT (общий для HT, который является только фирменным знаком Intel), просто сделайте:
дает 0 для неактивных или 1 для активных
Вы можете включить или выключить его во время выполнения с помощью:
источник
/sys/devices/system/cpu/smt/control
это также возможно и выходыon|off|forceoff|notsupported|notimplemented
.Лучше вы проверите lscpu, где вы можете увидеть «Thread (s) per core: 1», означает только один поток на 1 core.
источник
Стефания уже упоминала
lscpu
. Я хотел бы добавить немного больше к этому.На моем процессоре AMD Epyc при наличии автономного логического ядра
lscpu
отображается новая дополнительная строка под названиемOff-line CPU(s) list:
источник