Как узнать включен ли hyper threading linux

Обновлено: 06.07.2024

Чтобы проверить активирована ли поддержка Hyper Threading в моей системе воспользуемся вывод информации о процессорах:

model name : AMD Phenom(tm) 9850 Quad-Core Processor

cpu MHz : 1250.000

cache size : 512 KB

initial apicid : 0

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs npt lbrv svm_lock

TLB size : 1024 4K pages

clflush size : 64

address sizes : 48 bits physical, 48 bits virtual

power management: ts ttp tm stc 100mhzsteps hwpstate

model name : AMD Phenom(tm) 9850 Quad-Core Processor

cpu MHz : 1250.000

cache size : 512 KB

initial apicid : 1

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs npt lbrv svm_lock

TLB size : 1024 4K pages

clflush size : 64

address sizes : 48 bits physical, 48 bits virtual

power management: ts ttp tm stc 100mhzsteps hwpstate

Как видим у меня в системе два процессора, а как дела обстоят с информацией из Bios. Для этого нам понадобится вывод:

$ sudo dmidecode > dmidecode.txt

Если в выводе присутствует следующая строка Status: Populated, Enabled и Status: *Unpopulated* , то у нас поддерживается технология Hyper Threading. Включим ее для этого надо будет перезагрузить компьютер и войти в меню конфигурирования BIOS.

Используйте прокси ((заблокировано роскомнадзором, используйте vpn или proxy)) при использовании Telegram клиента:

Поблагодари автора и новые статьи

будут появляться чаще :)

Карта МКБ: 4432-7300-2472-8059

Большое спасибо тем кто благодарит автора за практические заметки небольшими пожертвованиями. С уважением, Олло Александр aka ekzorchik.

Как я могу проверить, включена ли гиперпоточность на машине с Linux, используя для этого скрипт perl?

Я пытаюсь следующим образом:

Дайте мне знать, если я на правильном пути.

потому что dmidecode вы должны быть пользователем root.

Примечания добавлены 8 июля 2014 года. Как отметил Риккардо Мурри , мой ответ ниже показывает только то, сообщает ли процессор о поддержке гиперпоточности. Как правило, * nix O / S настроены для включения гиперпоточности, если это поддерживается. Однако, чтобы проверить это программно, посмотрите, например , ответ Нильса !

---- Оригинальный ответ от 25 марта 2012 г .:

Вы действительно на правильном пути :) с

В Linux я обычно просто ищу «ht» в строке «flags» /proc/cpuinfo . Смотри например

или если вы хотите включить "ht" в шаблон

( \b Соответствует границам слова и помогает избежать ложных срабатываний в случаях, когда «ht» является частью другого флага.)

Это только скажет вам, если процессор поддерживает HT, но не использует ли HT на самом деле. поле HTT не указывает на то, что процессор фактически имеет гиперпоточность в своих ядрах. проверьте значение 'siblings' и 'cores' в / proc / cpuinfo @ Silver-Moon Можете ли вы объяснить? dmidecode читает SMBIOS и должен сообщать о возможностях процессора. Он не сообщает, является ли гиперпоточность видимой или используемой O / S. Но это уже прокомментировано. Смотрите также ответ Нильса @xebeche в моей системе вывод dmidecode показывает "HTT (многопоточность)", но мой процессор "core 2 quad Q8400", который не имеет гиперпоточности. проверьте спецификации Intel. +1 к Риккардо; Я отключил HT на сервере с поддержкой HT, и я вижу, что он печатает «HTT». lscpu это способ проверить.

Обратите внимание, однако, что этот метод не будет работать, если какой-либо логический процессор был отключен с помощью простого

Это лучший ответ еще. Это не требует чтения чайных листьев, большого количества полезной информации и не требует опечаток. О боже, вы использовали команду оболочки, чтобы получить ответ ?! Это так старая школа - -1 за это. А как насчет хорошего сценария Python . Это займет всего полдня, чтобы написать. Поскольку это не Python, другой -1. Но +3 для краткости. @Mike S Вы все еще можете использовать lscpu , но я думаю, что это не та строка. Использование, скажем, «lscpu -e -a» правильно выводит список каждого потока и сообщает, активен он или нет. Просто «Thread (s) per core» не имеет особого смысла, когда вы можете по-разному включать / отключать потоки для каждого ядра.

Если количество логических процессоров в два раза больше ядер, у вас есть HT. Используйте следующий скрипт для декодирования / proc / cpuinfo :

Если $NUMCORE > $NUMLOG мы можем сказать, что гиперпоточность включена, верно? На самом деле это так 2 * $NUMCORE = $NUMLOG , всегда ли это так, или у некоторых процессоров может быть в 4 раза больше ядер? @ Томбарт В настоящее время HT является фактором 2. Я могу представить, что в будущем это может быть больше. Ядро отмечено как физическое. Количество ядер на сокет может быть получено из братьев и сестер. Если у вас есть lscpu доступ, вы lscpu получите ту же информацию, а также множество дополнительных метаданных, и результаты из них lscpu будут более легко разбираться. но это решение работает и только использует /proc/cpuinfo .

Приведенные выше примеры показывают, способен ли ЦП поддерживать HT, но нет, если он используется. Последний способ работает, но не тестируются серверы с двумя сокетами и виртуальные машины, на Xenserver которых он не отображает физический процессор, поскольку их нет.

Я обнаружил, что это самый простой и менее кодовый способ, который также работал во всех моих тестовых средах. но требует bc .

Я считаю, что это будет работать на всех платформах, и скажет вам, если его процессор способен, и если он включен. Может быть, немного грязно, я начинающий в сценарии, хотя. Я тестировал с помощью Centos XENSERVER vm, Ubuntu и Openfiler (rpath)

Ваш сценарий может быть значительно упрощен, просто читая /sys/devices/system/cpu/smt/control . Смотрите также ответ Оскара

С помощью этой команды вы можете проверить возможности HT процессора.

Вы можете перечислить физический и логический процессор, видимый ядром, с помощью следующей команды:

Это дает этот вывод на одноядерный процессор с поддержкой HT:

Вы можете прочитать результат так:

Это только скажет вам, если процессор поддерживает HT, но не использует ли HT на самом деле. Узлы, процессор которых поддерживает HT, но где HT не включен, будут по-прежнему размещаться ht в флагах процессора. @RiccardoMurri Насколько я знаю, когда HT отключен, флаг ht не появляется в / proc / cpuinfo Я уверен, что это не так. У меня есть и HT-включенные и HT-отключенные серверы, и все они показывают флаг ht. Если у вас процессор Xeon с 4 ядрами, он будет отображаться как один физический идентификатор и четыре процессора. Таким образом, вы можете иметь несколько процессоров для каждого физического идентификатора без гипертрединга. У меня есть машина с 2 сокетами, и physical id кажется, что представляет сокет / чип. core id , Кажется, указывают на то же физическое ядро

Этот лайнер, кажется, помогает мне (требует привилегий root):

Счетчик потоков вдвое больше ядра, поэтому у меня включена поддержка гиперпоточности.

Или, если вы действительно хотите свой Perl-скрипт, как и просили .

Я выключил HT в системе с поддержкой Intel на базе HT, но число потоков, возвращаемое с помощью dmidecode, вдвое превышает число ядер. Похоже, он показывает, поддерживает ли процессор HT, а не включен или нет HT. @ Дмитрий Странный. Я только что запустил это на сервере с поддержкой HT (имеет два Intel Xeon E5-2670 v3) с отключенной гиперпоточностью, и количество ядер и потоков было одинаковым. Я не уверен, что вызвало бы разницу в поведении. Я должен смотреть дальше в это. Я только что запустил это на Dell R610 с двумя процессорами X5680, отключив Hyperthreading, и число потоков в два раза превышает число ядер. Ответ Стефании (lscpu), кажется, работает. Я дважды проверил iDRAC (выключение Dell, внеполосный процессор [для тех, кто не в курсе]), и он говорит, что Hyperthreading выключен. Поэтому я не думаю, что dmidecode это надежно. Я проверил Dell 1950 (процессоры x5460, гиперпоточность невозможна), и lscpu оказался верным. Также Dell R620 (E5-2690 [v1, я считаю]), и это было правильно.

Этот результат указывает, что 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), просто сделайте:

Подробная информация о процессоре, о которой мы будем говорить, содержит в себе сведения о количестве ядер, о наличии режима hyper threading, об архитектуре, о размере кэша и т. д. Найти в вашей системе эту информацию, относящуюся к процессору, может быть слегка затруднительным, поскольку ее нужно получать помощью разных команд.

К командам, которые мы будем использовать, относятся команды lscpu, /proc/cpuinfo и lstopo (hwloc). С их помощью можно узнать подробную информацию о ядрах и процессорах. В следующих примерах объясняется, как следует интерпретировать результаты, выдаваемые этими командами.

1. Поставщик и модель процессора

Чтобы определить поставщика и название модели процессора, выполните с помощью команды grep поиск в файле /proc/cpuinfo.

Это процессор фирмы Intel. Затем находим имя модели, которое можно использовать для поиска точных спецификаций на сайте Intel.

Это процессор "Core 2 Quad Q8400".

2. Архитектура

С помощью команды lscpu можно узнать архитектуру процессора.

3. Частота

Частоту/скорость работы процессора можно узнать с помощью команды lscpu и в файле /proc/cpuinfo.

Поскольку большинство современных процессоров работают на более низких частотах для экономии энергии, частота, о которой сообщается, может быть ниже, чем действительная частота работы указанного процессора. Когда нагрузка увеличивается, они переключаются на более высокую частоту.

Изменение частоты можно обнаружить в файле of /proc/cpuinfo, если использовать для этого команду watch.

Запустите в терминале указанную выше команду и, пока она работает, запустите какую-нибудь задачу, которая интенсивно использует процессор, и частота должна увеличиться.

4. Количество ядер

Каждое ядро процессора является, на самом деле, независимым процессором. Несколько ядер позволяют процессору одновременно выполнять несколько команд в программе, в результате чего скорость обработки данных увеличивается.

Команда lscpu указывает "количество ядер в одном сокете".

Таким образом, в этом случае количество ядер в процессоре равно 4.

В файле /proc/cpuinfo также есть информация о количестве ядер, но ее получить немного сложнее и запутаннее.

Простой подсчет количества процессоров может дать неправильное количество.

В случае, когда используется режим hyper threading, количество процессоров, которые видит операционная система, в два раза превышает количество ядер. Но в файле /proc/cpuinfo есть поле с именем "core id", которое уникально для каждого ядра одного процессора. Подсчет этих имен позволяет получить четкое представление о количестве реальных ядер в процессоре

Несколько процессоров

Редко, но в тех случаях, если вы используете систему, в которой имеется несколько физических процессоров (да, это означает 2 или больше процессоров, установленных на материнской плате), то результаты в файле /proc/cpuinfo будут другими. В случае нескольких процессоров, "physical id" будет означать несколько значений.

Если есть более одного идентификатора физического процессора, то это означает, что в системе есть несколько физических процессоров. И в каждом процессоре вы должны посчитать ядра отдельно.

5. Технология Hyper threading

Hyper threading это технология фирмы Intel, которая позволяет одному ядру выполнять обработку так, как если бы это было два ядра. Это в определенных случаях также некоторым образом увеличивает вычислительную мощность каждого ядра.

Если количество ядер равно количеству процессоров, которые видно в ОС, то режим hyper threading отсутствует. В противном случае, т. е. если количество блоков обработки больше (в два раза больше) числа ядер, то режим hyper threading присутствует.

В качестве примера возьмем процессор Core 2 Quad Q8400

Количество процессоров, как показано в /proc/cpuinfo, равно 4

Количество "cpu cores" = 4, также, как и "siblings" = 4, а "core id" = 4

Поэтому общее число процессоров равно количеству фактических ядер. Следовательно на этом процессоре режим hyper threading отсутствует, что и подтверждается спецификациями процессора, приводимыми на сайте Intel.

Процессор с технологией hyper threading

Сведения, касающиеся hyper threading, которые присутствуют в /proc/cpuinfo или в выходных данных lscpu будут отличаться.

Теперь давайте взглянем на данные из /proc/cpuinfo.

Здесь "cpu cores" = 4 и "siblings" = 8 означают, что имеется 4 ядра и по 2 гиперпотока на ядро. Количество процессоров, как это показано в /proc/cpuinfo, также будет равно 8.

Флаг HTT в выходных данных dmidecode и флаг ht во флагах /proc/cpuinf могут давать неверную информацию, касающуюся режима hyper threading.

Для процессора Core2Quad Q8400 dmidecode и /proc/cpuinfo показывают, что флаг гиперпотоков установлен, несмотря на то, что в данном процессоре режим hyper threading недоступен.

Утилита hwloc / lstopo

Утилита hwloc является небольшой утилитой, которая сообщает о структуре процессора в виде приятной диаграммы. В диаграмме показано количество ядер, наличие режима hyper threading и объем кэш-памяти. Обо всем рассказывает одна схема.


Процессор с технологией hyper threading

Для процессора с режимом hyper threading, выдаваемая диаграмма hwloc может выглядеть следующим образом



Информация о CPU (Central Processing Unit. Центральный процессор) включает в себя подробные сведения о процессоре, такие как архитектура, название производителя, модель, количество ядер, скорость каждого ядра и т.д.

В linux существует довольно много команд для получения подробной информации о CPU.

В этой статье мы рассмотрим некоторые из часто встречающихся команд, которые можно использовать для получения подробной информации о CPU.

1. /proc/cpuinfo

Файл /proc/cpuinfo содержит подробную информацию об отдельных ядрах CPU.

Выведите его содержимое с помощью less или cat .

Каждый процессор или ядро перечислены отдельно, а различные подробности о скорости, размере кэша и названии модели включены в описание.

Чтобы подсчитать количество процессоров, используйте grep с wc

Количество процессоров, показанное в /proc/cpuinfo, может не соответствовать реальному количеству ядер процессора. Например, процессор с 2 ядрами и гиперпоточностью будет показан как процессор с 4 ядрами.

Чтобы получить фактическое количество ядер, проверьте идентификатор ядра на наличие уникальных значений

Соответственно, есть 4 разных идентификатора ядра. Это указывает на то, что существует 4 реальных ядра.

2. lscpu - отображение информации об архитектуре CPU

lscpu - это небольшая и быстрая команда, не требующая никаких опций. Она просто выводит информацию об аппаратном обеспечении CPU в удобном для пользователя формате.

3. hardinfo

Hardinfo - это gui инструмент на базе gtk, который генерирует отчеты о различных аппаратных компонентах. Но он также может запускаться из командной строки, в случае если отсутствует возможность отображения gui (Graphical User Interface — графический интерфейс пользователя).

Он создаст большой отчет о многих аппаратных частях, читая файлы из каталога /proc. Информация о CPU находится в начале отчета. Отчет также может быть записан в текстовый файл.

Hardinfo выполняет несколько эталонных тестов, занимающих несколько минут, прежде чем вывести отчет на экран.

4. lshw

Команда lshw может отобразить ограниченную информацию о CPU. lshw по умолчанию показывает информацию о различных аппаратных частях, а опция ' -class ' может быть использована для сбора информации о конкретной аппаратной части.

Производитель, модель и скорость процессора отображаются правильно. Однако из приведенного выше результата невозможно определить количество ядер в процессоре.

Чтобы узнать больше о команде lshw, ознакомьтесь с этой статьей:

5. nproc

Команда nproc просто выводит количество доступных вычислительных блоков. Обратите внимание, что количество вычислительных блоков не всегда совпадает с количеством ядер.

6. dmidecode

Команда dmidecode отображает некоторую информацию о CPU, которая включает в себя тип сокета, наименование производителя и различные флаги.

7. cpuid

Команда cpuid собирает информацию CPUID о процессорах Intel и AMD x86.

Программа может быть установлена с помощью apt на ubuntu

А вот пример вывода

8. inxi

Inxi - это скрипт, который использует другие программы для создания хорошо структурированного легко читаемого отчета о различных аппаратных компонентах системы. Ознакомьтесь с полным руководством по inxi.

Вывод соответствующей информации о CPU/процессоре

Чтобы узнать больше о команде inxi и ее использовании, ознакомьтесь с этой статьей:

9. Hwinfo

Команда hwinfo - это программа для получения информации об оборудовании, которая может быть использована для сбора подробных сведений о различных аппаратных компонентах в системе Linux.

Она также отображает информацию о процессоре. Вот быстрый пример:

Если не использовать опцию "--short", команда отобразит гораздо больше информации о каждом ядре CPU, например, архитектуру и характеристики процессора.

Чтобы более подробно изучить команду hwinfo, ознакомьтесь с этой статьей:

Заключение

Это были некоторые команды для проверки информации о CPU в системах на базе Linux, таких как Ubuntu, Fedora, Debian, CentOS и др.

Примеры других команд для проверки информации о CPU смотрите в этой статье:

Большинство команд обрабатываются с помощью интерфейса командной строки и выводятся в текстовом формате. Для GUI интерфейса используйте программу Hardinfo.

Она показывает подробности об аппаратном обеспечении различных компонентов в простом для использования GUI интерфейсе.

Если вы знаете какую-либо другую полезную команду, которая может отображать информацию о CPU, сообщите нам об этом в комментариях ниже

Читайте также: