- Как в Linux узнать всю информацию о процессоре
- Информация о процессоре
- 1. Поставщик и модель процессора
- 2. Архитектура
- 3. Частота
- 4. Количество ядер
- Несколько процессоров
- 5. Технология Hyper threading
- Процессор с технологией hyper threading
- Утилита hwloc / lstopo
- Процессор с технологией hyper threading
- Проверка, включена ли HyperThreading или нет?
- Проверка, включена ли HyperThreading или нет?
Как в Linux узнать всю информацию о процессоре
Информация о процессоре
Подробная информация о процессоре, о которой мы будем говорить, содержит в себе сведения о количестве ядер, о наличии режима hyper threading, об архитектуре, о размере кэша и т. д. Найти в вашей системе эту информацию, относящуюся к процессору, может быть слегка затруднительным, поскольку ее нужно получать помощью разных команд.
К командам, которые мы будем использовать, относятся команды lscpu, /proc/cpuinfo и lstopo (hwloc). С их помощью можно узнать подробную информацию о ядрах и процессорах. В следующих примерах объясняется, как следует интерпретировать результаты, выдаваемые этими командами.
1. Поставщик и модель процессора
Чтобы определить поставщика и название модели процессора, выполните с помощью команды grep поиск в файле /proc/cpuinfo.
Это процессор фирмы Intel. Затем находим имя модели, которое можно использовать для поиска точных спецификаций на сайте Intel.
Это процессор «Core 2 Quad Q8400».
2. Архитектура
С помощью команды lscpu можно узнать архитектуру процессора.
Архитектура — x86_64, что означает 64 разрядную архитектуру.
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 отсутствует. В противном случае, т. е. если количество блоков обработки больше (в два раза больше) числа ядер, то режим 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 будут отличаться.
Обратите внимание на строку «Thread(s) per core: 2», указывающую, что в каждом ядре есть по 2 потока; ядер, в общей сложности, четыре. Таким образом, количество процессоров, которые видны в ОС, равно 8.
Теперь давайте взглянем на данные из /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 и объем кэш-памяти. Обо всем рассказывает одна схема.
Из приведенной выше диаграммы ясно видно, что размер кэша второго уровня L2 — 4096 KB или 4MB, количество ядер — 4, количество потоков в ядре — 1.
Процессор с технологией hyper threading
Для процессора с режимом hyper threading, выдаваемая диаграмма hwloc может выглядеть следующим образом
На диаграмме показано, что размер кэша третьего уровня L3 — 8MB, количество ядер — 4, количество потоков в ядре — 2 (т. е. режим hyper threading имеется).
Источник
Проверка, включена ли HyperThreading или нет?
Как я могу проверить, включена ли гиперпоточность на машине с Linux, используя для этого скрипт Perl?
Я пытаюсь следующим образом:
Дайте мне знать, если я на правильном пути.
Примечания добавлены 8 июля 2014 года: Как указано Риккардо Мурри , мой ответ ниже показывает только то, сообщает ли процессор о поддержке гипер потоки. Как правило, * nix O/S настроены на включение гиперпоточности, если поддерживается. Однако, чтобы фактически проверить это программно, посмотрите, например, ответ Нильса !
—- Оригинальный ответ от 25 марта 2012 г .:
Вы действительно на правильном пути 🙂 с
В Linux я обычно просто ищу «ht» в строке «flags» /proc/cpuinfo . Смотри например
или если вы хотите включить «ht» в шаблон
( \b соответствует границам Word и помогает избежать ложных срабатываний в случаях, когда «ht» является частью другого флага.)
Я всегда просто использовал следующее и смотрел на «Thread (s) per core:»).
Обратите внимание, однако, что этот метод не работает, если какой-либо логический процессор был отключен с помощью простого
Если количество логических процессоров в два раза больше ядер, у вас есть HT. Используйте следующий скрипт для декодирования / proc/cpuinfo:
Приведенные выше примеры показывают, способен ли ЦП поддерживать HT, но нет, если он используется. Последний метод работает, но не работает с серверами с двумя сокетами и виртуальными машинами, протестированными в Xenserver , где он не отображает физический процессор, поскольку их нет.
Я обнаружил, что это самый простой и менее кодовый способ, который также работал во всех моих тестовых средах. но требует bc .
Я считаю, что это будет работать на всех платформах, и скажет вам, если его процессор способен, и если он включен. Может быть, немного грязно, я начинающий в сценарии, хотя. Я тестировал с помощью Centos XENSERVER vm, Ubuntu и Openfiler (rpath)
Этот лайнер, кажется, помогает мне (требует привилегий root):
Количество потоков вдвое больше, чем у ядра, поэтому у меня включена поддержка гиперпоточности.
Или, если вы действительно хотите свой Perl-скрипт, как и просили .
С помощью этой команды вы можете проверить возможности HT процессора.
Вы можете перечислить физический и логический процессор, видимый ядром, с помощью следующей команды:
Это дает этот вывод на одноядерный процессор с поддержкой HT:
Вы можете прочитать результат так:
Этот результат указывает, что HT включен, поскольку siblings number (12) больше, чем cpu cores (6)
Если вы читаете /sys/devices/system/cpu/cpu0/topology/thread_siblings_list , он будет возвращать разделенный запятыми список родных элементов потока (т. е. Hyperthread «cores») CPU 0.
Например, на моем 2-сокетном 6-ядерном Xeon с включенной гиперпоточностью я получаю:
Но после отключения гиперпоточности в BIOS я получаю:
Предполагая, что CPU 0 будет всегда доступен, затем проверяем CPU 0 thread_sibling_list файл procfs для более чем одного узла или для поиска запятой или даже для чего-то большего, чем 0 , будет указывать, включена ли гиперпоточность.
Я бы ответил на Perl, но 1) я не знаю Perl, и 2) я полагаю, что решение довольно тривиально.
Самый простой способ проверить, активен ли SMT (общий для HT, который является только фирменным знаком Intel), просто сделайте:
дает 0 для неактивных или 1 для активных
Вы можете включить или выключить его во время выполнения с помощью:
Вот подход, основанный на python) — он также предлагает способы его отключения при необходимости.
На Linux это работает хорошо:
В приведенном выше примере у нас есть 2 разъема NUMA (SOCKET = 1 или 2). У нас есть 16 физических ядер (CORE = от 0 до 15). Каждый CORE имеет одноуровневую гиперпоточность (например, CORE = 0 содержит CPU 0,16.
Мы можем проверить Hyperthread следующим образом:
lscpu -p дает вывод в формате csv для простого анализа программы.
Stephaniea уже упоминал lscpu . Я хотел бы добавить немного больше к этому.
На моем процессоре AMD Epyc при наличии автономного логического ядра lscpu отображает новую дополнительную строку с именем Off-line CPU(s) list:
Здесь много предостережений и что-если в ответах . кажется, что ответ не так очевиден. lscpu имеет свои особенности, которые применяются к любому ответу «подсчитать количество ядер и логических процессоров, а затем сравнить». Потому что вы можете отключить логические процессоры с помощью простой команды echo (. это может иметь решающее значение в большой корпоративной среде, где вы, например, зависите от турбо-режима).
Вот моя попытка; спасибо @scottbb за вдохновение:
На моих компьютерах с процессором Dell Xeon список родственников включает запятую при включенном HT. На моем ноутбуке он содержит дефис (процессор i5-3210m). Так что я исправляю пунктуацию.
Автор запроса попросил Perl, так что вот и вы:
как насчет lscpu. Затем вы получите много информации о процессоре, включая количество потоков на ядро. Если это 1, то многопоточность отключена.
Источник
Проверка, включена ли HyperThreading или нет?
Как я могу проверить, включена ли гиперпоточность на машине с Linux, используя для этого скрипт perl?
Я пытаюсь следующим образом:
Дайте мне знать, если я на правильном пути.
Примечания добавлены 8 июля 2014 года. Как отметил Риккардо Мурри , мой ответ ниже показывает только то, сообщает ли процессор о поддержке гиперпоточности. Как правило, * nix O / S настроены для включения гиперпоточности, если это поддерживается. Однако, чтобы проверить это программно, посмотрите, например , ответ Нильса !
—- Оригинальный ответ от 25 марта 2012 г .:
Вы действительно на правильном пути 🙂 с
В Linux я обычно просто ищу «ht» в строке «flags» /proc/cpuinfo . Смотри например
или если вы хотите включить «ht» в шаблон
( \b Соответствует границам слова и помогает избежать ложных срабатываний в случаях, когда «ht» является частью другого флага.)
Я всегда просто использовал следующее и смотрел на «Thread (s) per core:»).
Обратите внимание, однако, что этот метод не будет работать, если какой-либо логический процессор был отключен с помощью простого
Если количество логических процессоров в два раза больше ядер, у вас есть HT. Используйте следующий скрипт для декодирования / proc / cpuinfo :
Приведенные выше примеры показывают, способен ли ЦП поддерживать HT, но нет, если он используется. Последний способ работает, но не тестируются серверы с двумя сокетами и виртуальные машины, на Xenserver которых он не отображает физический процессор, поскольку их нет.
Я обнаружил, что это самый простой и менее кодовый способ, который также работал во всех моих тестовых средах. но требует bc .
Я считаю, что это будет работать на всех платформах, и скажет вам, если его процессор способен, и если он включен. Может быть, немного грязно, я начинающий в сценарии, хотя. Я тестировал с помощью Centos XENSERVER vm, Ubuntu и Openfiler (rpath)
С помощью этой команды вы можете проверить возможности HT процессора.
Вы можете перечислить физический и логический процессор, видимый ядром, с помощью следующей команды:
Это дает этот вывод на одноядерный процессор с поддержкой HT:
Вы можете прочитать результат так:
Этот лайнер, кажется, помогает мне (требует привилегий root):
Счетчик потоков вдвое больше ядра, поэтому у меня включена поддержка гиперпоточности.
Или, если вы действительно хотите свой Perl-скрипт, как и просили .
Этот результат указывает, что 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 — он также предлагает способы его отключения, если это необходимо.
Здесь много предостережений и что-если в ответах . кажется, что ответ не так очевиден. lscpu имеет свои гоча, которые применяются к любому ответу «подсчитать количество ядер и логических процессоров, а затем сравнить». Потому что вы можете отключить логические процессоры с помощью простой команды echo (. это может иметь решающее значение в большой корпоративной среде, где вы, например, зависите от турбо-режима).
Вот моя попытка; спасибо @scottbb за вдохновение:
На моих компьютерах с процессором Dell Xeon список родственников включает запятую при включенном HT. На моем ноутбуке он содержит дефис (процессор i5-3210m). Так что я исправляю пунктуацию.
Запрашивающий запросил Perl, так что вы идете:
Самый простой способ проверить, активен ли SMT (общий для HT, который является только фирменным знаком Intel), просто сделайте:
дает 0 для неактивных или 1 для активных
Вы можете включить или выключить его во время выполнения с помощью:
Источник