What is hyper threading in linux

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.

Источник

Еще раз о Hyper-Threading

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

Исследуемая платформа

Объект экспериментов – ноутбук ASUS N750JK c процессором Intel Core i7-4700HQ. Тактовая частота 2.4GHz, повышаемая в режиме Intel Turbo Boost до 3.4GHz. Установлено 16 гигабайт оперативной памяти DDR3-1600 (PC3-12800), работающей в двухканальном режиме. Операционная система – Microsoft Windows 8.1 64 бита.


Рис.1 Конфигурация исследуемой платформы.

Процессор исследуемой платформы содержит 4 ядра, что при включении технологии Hyper-Threading обеспечивает аппаратную поддержку 8 потоков или логических процессоров. Эту информацию Firmware платформы передает операционной системе посредством ACPI-таблицы MADT (Multiple APIC Description Table). Поскольку платформа содержит только один контроллер оперативной памяти, таблица SRAT (System Resource Affinity Table), декларирующая приближенность процессорных ядер к контроллерам памяти, отсутствует. Очевидно, исследуемый ноутбук не является NUMA-платформой, но операционная система, в целях унификации, рассматривает его как NUMA-систему с одним доменом, о чем говорит строка NUMA Nodes = 1. Факт, принципиальный для наших экспериментов – кэш память данных первого уровня имеет размер 32 килобайта на каждое из четырех ядер. Два логических процессора, разделяющие одно ядро, используют кэш-память первого и второго уровней совместно.

Читайте также:  Slidetoshutdown exe для windows 10

Исследуемая операция

Исследовать будем зависимость скорости чтения блока данных от его размера. Для этого выберем наиболее производительный метод, а именно чтение 256-битных операндов посредством AVX-инструкции VMOVAPD. На графиках по оси X отложен размер блока, по оси Y – скорость чтения. В окрестности точки X, соответствующей размеру кэш-памяти первого уровня, ожидаем увидеть точку перегиба, поскольку производительность должна упасть после того, как обрабатываемый блок выйдет за пределы кэш-памяти. В нашем тесте, в случае многопоточной обработки, каждый из 16 инициируемых потоков, работает с отдельным диапазоном адресов. Для управления технологией Hyper-Threading в рамках приложения, в каждом из потоков используется API-функция SetThreadAffinityMask, задающая маску, в которой каждому логическому процессору соответствует один бит. Единичное значение бита разрешает использовать заданный процессор заданным потоком, нулевое значение – запрещает. Для 8 логических процессоров исследуемой платформы, маска 11111111b разрешает использовать все процессоры (Hyper-Threading включен), маска 01010101b разрешает использовать по одному логическому процессору в каждом ядре (Hyper-Threading выключен).

На графиках используются следующие сокращения:

MBPS (Megabytes per Second)скорость чтения блока в мегабайтах в секунду;

CPI (Clocks per Instruction)количество тактов на инструкцию;

TSC (Time Stamp Counter)счетчик процессорных тактов.

Примечание.Тактовая частота регистра TSC может не соответствовать тактовой частоте процессора при работе в режиме Turbo Boost. Это необходимо учитывать при интерпретации результатов.

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

Опыт №1. Один поток


Рис.2 Чтение одним потоком

Максимальная скорость 213563 мегабайт в секунду. Точка перегиба имеет место при размере блока около 32 килобайт.

Опыт №2. 16 потоков на 4 процессора, Hyper-Threading выключен


Рис.3 Чтение шестнадцатью потоками. Количество используемых логических процессоров равно четырем

Hyper-Threading выключен. Максимальная скорость 797598 мегабайт в секунду. Точка перегиба имеет место при размере блока около 32 килобайт. Как и ожидалось, по сравнению с чтением одним потоком, скорость выросла приблизительно в 4 раза, по количеству работающих ядер.

Опыт №3. 16 потоков на 8 процессоров, Hyper-Threading включен


Рис.4 Чтение шестнадцатью потоками. Количество используемых логических процессоров равно восьми

Hyper-Threading включен. Максимальная скорость 800722 мегабайт в секунду, в результате включения Hyper-Threading почти не выросла. Большой минус – точка перегиба имеет место при размере блока около 16 килобайт. Включение Hyper-Threading немного увеличило максимальную скорость, но падение скорости теперь наступает при вдвое меньшем размере блока – около 16 килобайт, поэтому существенно упала средняя скорость. Это не удивительно, каждое ядро имеет собственную кэш-память первого уровня, в то время, как логические процессоры одного ядра, используют ее совместно.

Источник

Влияние многоядерности и Hyper-Threading на производительность в Linux (Sabayon / Gentoo)

Предметом настоящей заметки будет исследование влияния наличия многоядерности и включения технологии Hyper-Threading на производительность двух трудоемких задач: архивирование и инсталляции пакетов в Linux дистрибутиве Sabayon.

Sabayon является основанном на Gentoo дистрибутивом, особенностью которого является наличие как своего собственного бинарного менеджера пакетов, так и стандартного для Gentoo — Portage. Основной режим работы Portage — сборка пакетов из исходных кодов (как правило исходники на языках С и С++), при этом сборка может занимать весьма много времени. Главным преимуществом сборки из исходников, является возможность тонкой настройки нужной функциональности программ (используя USE флаги) и возможность воспользо.

Предметом настоящей заметки будет исследование влияния наличия многоядерности и включения технологии Hyper-Threading на производительность двух трудоемких задач: архивирование и инсталляции пакетов в Linux дистрибутиве Sabayon.

Sabayon является основанном на Gentoo дистрибутивом, особенностью которого является наличие как своего собственного бинарного менеджера пакетов, так и стандартного для Gentoo — Portage. Основной режим работы Portage — сборка пакетов из исходных кодов (как правило исходники на языках С и С++), при этом сборка может занимать весьма много времени. Главным преимуществом сборки из исходников, является возможность тонкой настройки нужной функциональности программ (используя USE флаги) и возможность воспользоваться всеми оптимизациями которые может дать компилятор для установленного у пользователя процессора (все расширения SSE и учет особенностей архитектуры ЦП).

Читайте также:  Зачем нужен виртуальный диск windows

Железо:
Core i7 920 @ 3000 (150 x 20, Turbo Boost On)
GigaByte GA-EX58-UD5
DDR3 1200 7-7-7-16 1, 12Гб

Софт:
ОС: Sabayon 4.2, 64 бит, ядро 2.6.29
gcc 4.3.3

Для тестирования производилось архивирование рабочих проектов в домашней директории в которой содержались текстовые и бинарные файлы суммарным объемом 200Мб. Данным тестом моделируется оперативный бэкап.
Использовалась две программы компрессора: bzip2 и pbzip2.
bzip2 — стандартная утилита для сжатия данных, очень популярная в мире Unix (наряду с gzip). Работает она в один поток.
pbzip2 параллельная реализация того же алгоритма, предназначенная для SMP машин, использует в работе библиотеку libbz2 (т.е. часть bzip2). Результирующий файл полностью совместим с форматом bzip2.

bzip2 и pbzip2 были обновлены до версии 1.0.5, скомпилированы одним и тем же компилятором.

Команды для запуска задач:

реклама

Производилось по 3 запуска каждой команды. С целью исключения влияния на замеры производительности жесткого диска первый запуск не учитывался. Затраченное время на втором и третьем усреднялось и использовалось как результат.
Отключение HT производилось в BIOS.

pbzip2
В первую очередь отмечу, громадное превосходство параллельной версии pbzip2. pbzip2 с HT-on быстрее стандартного однопоточного bzip2 почти в 6 раз. А включение HT дало компрессору pbzip2 увеличение производительности на 23%.

В качестве теста была использована инсталляция XULRunner (библиотека используемая в Mozilla Firefox) и Qt-Webkit (наиболее объемная часть библиотеки Qt) с помощью системы Portage. Так как используется Portage, то все выводы полученные в ходе исследования будут верны и для Gentoo. Обе библиотеки написаны на C и C++. Процесс инсталляции запускается утилитой emerge, при этом начинает отрабатывать Python скрипт, который: при необходимости скачивающий упакованный пакет, затем его распаковывает, настраивает с помощью autoconf, собирает, инсталлирует и в конце проверяет зависимости. Процесс сборки наиболее трудоемкий, но к счастью есть возможность его распараллелить.
Файл /etc/make.conf был изменен при тестировании с HT: MAKEOPTS=»-s -j8″, без HT: MAKEOPTS=»-s -j4″, и сборка в один поток MAKEOPTS=»-s -j1″. Параметр jчисло служит для утилиты make указанием на сколько потоков можно распараллелить процесс сборки (чисто после j задает количество потоков) .

Команды для запуска задач:

Пакеты были предварительно скачены (emerge -f). Затем было произведено по 3 запуска, первый запуск не учитывался (для минимизации влияния жесткого диска), а два следующих усреднялись.

emerge qt-webkit
Тут также бросается в глаза огромный выигрыш во времени от использования многопоточной сборки. Инсталляция qt-webkit с параметром -j1 (т.е. сборка в один поток) заняла 22 мин 26 сек. Инсталляция с HT-on и -j8 заняла 5 мин 40 сек, разница по времени почти в 4 раза. HT сам по себе дает 19% выигрыша. Загрузка процессора в момент этапа сборки была практически все время на 100%. В данном пакете доминируют сложные для компилятора С++ файлы.

emerge xulrunner

Для экономии времени, я тут уже не стал осуществлять сборку в один поток.
HT дал уже поменьше — 13% выигрыша. Надо отметить, что в процессе сборки процессор не был полностью загружен, по всей видимости исходные файлы недостаточно сложные для компилятора. Возможно увеличив число потов в параметре -j можно добиться большего выигрыша от HT, но, рядовой пользователь навряд ли будет подбирать этот параметр под каждый пакет. Так же многое еще зависит от содержимого make файла.

Как видим наличие в процессоре нескольких ядер и технология Hyper-Threading дает достаточно существенное увеличение производительности в типичных тяжелых задачах в gentoo-основанных дистрибутивах Linux. Также многоядерность и HT способны существенно повысить комфортность в работе программистов, процесс сборки как видим отлично масштабируется. Стоит обратить внимание, что при emerge достаточно долго отрабатывает autoconf, который работает в один поток, и к тому же не очень то быстро, поэтому хорошее масштабирование процесса сборки несколько скрадывается.

Читайте также:  Список обновлений windows cmd

Источник

Disable hyperthreading from within Linux (no access to BIOS)

I have a system running a financial trading application at a remote facility. I do not have access to the ILO/DRAC, but need to disable hyperthreading. The system runs Intel Westmere 3.33GHz X5680 hex-core CPUs. I can reboot, but want to make sure that the system does not enable hyperthreading due to performance problems. Is there a clean way to do this from within Linux?

Edit: The noht directive added to the kernel boot command line did not work. Same for RHEL.

12 Answers 12

You can do this at runtime if you want to. I found a nice solution described here: http://www.absolutelytech.com/2011/08/01/how-to-disable-cpu-cores-in-linux/

Step 1: Identify the linux CPUs you want to switch off:

Look for the CPUs that have the same «core id», you want to switch off one of each pair.

Step 2: Switch off the hyperthreading CPUs (in my case the last four of the total 8 «CPUs» seen by Linux)

You could setup yourself a script that you run just after system start.

Newer Kernels provide a Simultaneous Multithreading (SMT) control.

You can check the state of SMT with;

Change the state with

We have tested this with Linux Kernel 4.4.0

A script to disable hyperthreading in the machine startup.

To disable hyperthreading I include a script on machine /etc/rc.local. It is not exaclty clean, but is easy to install, independent of cpu architecture and should work on any modern linux distribution.

How this works?

Linux kernel information and controls can be accessed as files in /sys directory on modern linux distributions. For example:

/sys/devices/system/cpu/cpu3 contains the kernel information and controls for logical cpu 3.

cat /sys/devices/system/cpu/cpu3/topology/core_id will show the core number this logical cpu belongs to.

echo «0» > /sys/devices/system/cpu/cpu3/online allows to disable logical cpu 3.

Why it works?

I do not know exactly why. but the system become more responsive with hyperthreading off (on my i5 notebook and massive Xeon servers with 60+ cores). I guess that has to do with per-cpu caches, per-cpu memory allocation, cpu scheduler allocation and process priorities complex iterations. I think the benefits of hyperthreading is outweight by the complexity of making cpu schedulers that know how to use it.

For me, the problem with hyperthreading is: If I start as many cpu-intensive threads as I have logical cores, I will have fast context switches for the cpu intensive tasks, but expensive ones for the background tasks since the hyperthreading totally consumed by the cpu intensive tasks. On the other hand, if I start as many cpu-intensive threads as I have physical cores I will have no context switches to those tasks and fast context switches for the background tasks. Seems good, but the background tasks will found free logical processors and will run almost imediatedly. It is like they are realtime performace (nice -20).

In the first scenario the hyperthreading is uselles, the background tasks will use expensive context switches because I maxed out hyperthreading with the normal processing. The second is unaceptable because up to 50% of my cpu power gets prioritized to the background tasks.

The «cpu-intensive» tasks I am talking about are artificial intelligence data mining and authorization servers (my work). Blender rendering in cheap computers and clusters (to sketch my future house).

Also, this is guesswork.

I have the impression that is better, but it may not.

Источник

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