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

Проверка включенности HyperThreading или нет?

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

Я пытаюсь сделать следующий путь:

Сообщите мне, если я на правильном пути.

12 ответов

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

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

Вы действительно на правильном пути 🙂 с помощью

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

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

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

Я всегда использовал следующее и смотрел «Thread (s) на ядро:».

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

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

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

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

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

У меня есть похожий классный сценарий здесь , хотелось бы что вы думаете?

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

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

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

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

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

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

Или, если вам действительно нужен ваш скрипт perl, как было запрошено .

Этот результат указывает, что HT включен, поскольку номер siblings (12) больше, чем cpu cores (6)

Если вы читаете /sys/devices/system/cpu/cpu0/topology/thread_siblings_list , он вернет список разделенных запятыми списков нитей (например, гипертекстовых «ядер») CPU 0 .

Например, на моем 2-сокетном 6-ядерном Xeon с включенным hyperthreading я получаю:

Но после отключения гиперпотока в BIOS я получаю:

Предполагая, что CPU 0 всегда будет доступен, а затем проверяет файл procfs thread_sibling_list CPU 0 для нескольких узлов или ищет запятую или даже просто что-то большее, чем 0 , укажет, включена ли гиперпоточность.

Я бы ответил в Perl, но 1) я не знаю Perl, и 2) я полагаю, что это решение довольно тривиальное однострочное.

Вот подход на основе python — он также предлагает способы его отключения, если это необходимо.

В Linux это хорошо работает:

В приведенном выше примере у нас есть 2 гнезда NUMA (SOCKET = 1 или 2). У нас есть 16 физических ядер (CORE = 0-15). У каждого CORE есть гиперссылка для родного брата (например, CORE = 0 содержит CPU 0,16.

Читайте также:  Настраиваем ipsec vpn windows

Мы можем проверить гиперпоток следующим образом:

lscpu -p дает выход формата csv для простого разбора программ.

Лучше вы проверяете lscpu, где вы видите «Thread (s) на ядро: 1», означает только один поток на 1 ядро.

Лот оговорки и что-то в ответах здесь . кажется, ответ не так очевиден. lscpu имеет свой getcha, который применяется к любым «подсчетам ядра и логическим процессорам, а затем сравнивает» ответ. Поскольку вы можете отключить логические процессоры с помощью простой команды echo (. это может иметь решающее значение в большой корпоративной среде, в которой вы, в частности, работаете в режиме turbo).

Вот моя попытка; благодаря @scottbb для вдохновения:

На моих компьютерах на базе Dell Xeon список сестер включает запятую, когда HT включен. На моем ноутбуке он включает дефис (процессор i5-3210m). Поэтому я предпочитаю знаки препинания.

Источник

Отключить гиперпоточность из Linux (нет доступа к BIOS)

У меня есть система, запускающая приложение для финансовой торговли на удаленном объекте. У меня нет доступа к МОТ / DRAC, но мне нужно отключить гиперпоточность. Система работает на шестиъядерных процессорах Intel Westmere 3,33 ГГц X5680. Я могу перезагрузиться, но хочу убедиться, что система не поддерживает гиперпоточность из-за проблем с производительностью. Есть ли чистый способ сделать это изнутри Linux?

Редактировать: noht директива, добавленная в командную строку загрузки ядра, не работает. То же самое для RHEL.

Вы можете сделать это во время выполнения, если хотите. Я нашел хорошее решение, описанное здесь: http://www.absolutelytech.com/2011/08/01/how-to-disable-cpu-cores-in-linux/

Шаг 1: Определите процессоры Linux, которые вы хотите отключить:

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

Шаг 2: Отключить процессоры с гиперпоточностью (в моем случае последние четыре из 8 «процессоров», которые видел Linux)

Вы можете настроить скрипт, который вы запускаете сразу после запуска системы.

Скрипт для отключения гиперпоточности при запуске машины .

Чтобы отключить гиперпоточность, я включаю скрипт на машине /etc/rc.local. Он не совсем чистый, но простой в установке, независимый от архитектуры процессора и должен работать на любом современном дистрибутиве Linux.

Как это работает?

Информация о ядре Linux и элементы управления доступны в виде файлов в каталоге / sys в современных дистрибутивах Linux. Например:

/ sys / devices / system / cpu / cpu3 содержит информацию о ядре и элементы управления для логического процессора 3.

cat / sys / devices / system / cpu / cpu3 / topology / core_id покажет номер ядра, которому принадлежит этот логический процессор.

echo «0»> / sys / devices / system / cpu / cpu3 / online позволяет отключить логический процессор 3.

Почему это работает?

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

Для меня проблема с гиперпоточностью такова: если я запущу столько потоков с интенсивным использованием процессора, сколько у меня логических ядер, у меня будут быстрые переключатели контекста для задач с интенсивным использованием процессора, но дорогие для фоновых задач, поскольку гиперпоточность полностью используется интенсивные задачи процессора. С другой стороны, если я запускаю столько потоков с интенсивным использованием процессора, сколько у меня физических ядер, у меня не будет переключений контекста на эти задачи и быстрых переключений контекста для фоновых задач. Вроде бы хорошо, но фоновые задачи найдут свободные логические процессоры и будут работать почти сразу. Как будто они в реальном времени (неплохо -20).

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

Читайте также:  Киностудия windows live не сохраняет

«Интенсивная загрузка процессора», о которой я говорю, — это интеллектуальный анализ данных и серверы авторизации (моя работа). Блендер рендеринг в дешевых компьютерах и кластерах (для эскиза моего будущего дома).

Кроме того, это догадки.

У меня такое впечатление, что лучше, но может и нет.

Источник

Проверка, включена ли 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) — он также предлагает способы его отключения при необходимости.

Читайте также:  Yandex disk linux manjaro

На 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, то многопоточность отключена.

Источник

How to disable or enable hyper threading on my Linux server

Hyper threading uses processor resources more efficiently, enabling multiple threads to run on each

core. As a performance feature, it also increases processor throughput, improving overall performance on threaded software. A single physical CPU core with hyper-threading appears as two logical CPUs to an operating system.

The recommended way to disable HT is by disabling in the BIOS, if possible but this can also be done via operating system using the below steps.

Disable HT on runtime for individual logical CPUs

Before starting let’s check the lscpu stat

Here it shows that there are 2 threads per core so we know most likely hyper threading is enabled

The following files will show all of the logical CPU’s and their HT pair relationships

To determine which CPUs should be disabled, the threads running on the same CPU core have to be identified. The files /sys/devices/system/cpu/cpuN/topology/thread_siblings_list where N is the CPU socket number. This file will contain the logical (HT) CPU numbers for each physical socket.

This means that CPU0 and CPU16 are threads on the same core. The same for 1 and 17 and so on. Individual, logical HT CPUs could be turned off as needed for a specific application that is bound to a physical core.

Or the following script would disable all of them, from logical CPU 16 through 31

To disable individual logical CPU use the below command and replace with the id from (16..31)

To re-enable the HT

Disable HT permanently

For Linux Variants with GRUB
for example in SuSE Enterprise Linux 11

###Don’t change this comment – YaST2 identifier: Original name: linux###
title SUSE Linux Enterprise Server 11 SP4 – 3.0.101-71.1.10543.0.PTF
root (hd0,4)
kernel /vmlinuz root=/dev/md1 console=ttyS0,115200 console=tty0 splash=silent crashkernel= showopts panic=1 numa=off noht
initrd /initrd

Lastly reboot the server to activate the changes.

For Linux Variants with GRUB2
To disable hyper threading permanently append ‘ noht ‘ under ‘ GRUB_CMDLINE_LINUX ‘ in ‘ /etc/sysconfig/grub ‘ file as shown below

Next regenerate the grub2 configuration file using

Lastly reboot the server to activate the changes.

Источник

Оцените статью