Отключите hyper, распараллеливающий в Ubuntu

Я выполняю сервер человечности 16.04. Я вижу, что поточная обработка шумихи включена, когда я использую команду lscpu.

Я хочу отключить его. Я прошел форумы человечности и здесь и здесь.

Это хорошие обсуждения, почему поточная обработка hyper может, может - не быть хорошим. Но никакое категорическое решение о том, как выключить его.

Кто-либо может дать шаги для отключения гиперпоточности? Спасибо.

12
задан 3 August 2017 в 10:11

8 ответов

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

Идея HT имеет несколько наборов регистров ЦП для каждого физического ядра (так называемые виртуальные ядра). Существует не "лучшее" виртуальное ядро, они идентичны. Вооруженный этим знанием можно отключить виртуальные ядра за исключением одного для каждого физического.

Сначала Вы хотите знать, в какой паре виртуальных ядер принадлежат который физическое ядро /sys/ файловая система. Можно использовать core_id файл для этого:

λ grep "" /sys/devices/system/cpu/cpu*/topology/core_id
/sys/devices/system/cpu/cpu0/topology/core_id:0
/sys/devices/system/cpu/cpu1/topology/core_id:2
/sys/devices/system/cpu/cpu2/topology/core_id:0
/sys/devices/system/cpu/cpu3/topology/core_id:2

От вывода можно вывести, что cpu0+cpu2 содержатся в одном физическом ядре и cpu1+cpu3 в другом. Теперь поднимите полномочия и использование echo команда для отключения один в каждой паре:

λ sudo -s
# echo 0 > /sys/devices/system/cpu/cpu1/online
# echo 0 > /sys/devices/system/cpu/cpu2/online

Обратите внимание, что cpu0 не имеют файла "онлайн" и не могут быть отключены, таким образом, я отключил cpu2 вместо этого.

0
ответ дан 23 November 2019 в 03:35

Введение

Это - интересный вопрос. Вероятно, один из самых интересных в течение многих месяцев для меня лично. Как OP нет никакой опции для отключения Hyper, Распараллеливающего в моем старом BIOS (изобретенный 2012, обновленный приблизительно 2016).

Ошибки гиперпоточности в Intel Skylake и озере Kaby:

Любой использующий процессоры Intel Skylake или Kaby Lake должен прочитать отчеты об ошибках о Поточной обработке Hyper, которая появилась пара несколько месяцев назад. Эта британская история Регистра обстоятельно объясняет, как Разработчики Debian определили, как Поточная обработка Hyper может разрушить и повредить машину.

Существуют многочисленные проблемы с Skylake, о котором сообщают в, Спрашивает Ubuntu за прошлый год, и каждый задается вопросом, как различить, какие проблемы, возможно, были вызваны Ошибками многопоточного выполнения Hyper.

Этот ответ разделен на три части:

  • Дисплей центральных процессоров, когда Гиперпоточность превращена прочь/на
  • Сценарий Bash для автоматизации превращения гиперпоточности прочь/на
  • Носатые Катастрофические отказы, если Поточная обработка Hyper выключена, прежде чем она запустится

Дисплей центральных процессоров, когда Гиперпоточность превращена прочь/на

Ниже Вас видят загрузку ЦП, когда гиперпоточность выключена, и стресс-тест ЦП выполняется. Приблизительно 10 секунд спустя тот же сценарий повторяется с включенной поточной обработкой hyper. Наконец 10 секунд после этого сценарий выполняются с гиперпоточностью, выключенной снова:

Set Hyper Threading noht

Дисплей разделен на два раздела:

  • На левой половине окна терминала, вызывающего сценарий set-hyper-threading с параметром 0 (прочь) и затем 1 (на).
  • На правильной половине conky отображает использование процента использования ЦП CPU 1 - 8.

Первый сценарий выполненный Hyper, Распараллеливающий прочь

В первый раз сценарием является выполненный ЦП Номера 2, 4, 6 и 8 (согласно Носатому), замораживаются в 3%, 2%, 2% и 2%. ЦП Номера 1, 3, 5 и 7 пронзает к 100%, в то время как стресс-тест выполняется.

Топология ЦП отображена с выключенной гиперпоточностью и только эти четыре ядра, о которых сообщают:

/sys/devices/system/cpu/cpu0/topology/core_id:0
/sys/devices/system/cpu/cpu2/topology/core_id:1
/sys/devices/system/cpu/cpu4/topology/core_id:2
/sys/devices/system/cpu/cpu6/topology/core_id:3

Второй сценарий, на котором работают Поточная обработка Hyper

Во второй раз сценарием является выполненная Гиперпоточность, включен и весь скачок ЦП Номер 1-8 к 100%, в то время как стресс-тест выполняется.

Топология ЦП отображена с включенной гиперпоточностью и только эти четыре ядра плюс и четыре виртуальных ядра, о которых сообщают:

/sys/devices/system/cpu/cpu0/topology/core_id:0
/sys/devices/system/cpu/cpu1/topology/core_id:0
/sys/devices/system/cpu/cpu2/topology/core_id:1
/sys/devices/system/cpu/cpu3/topology/core_id:1
/sys/devices/system/cpu/cpu4/topology/core_id:2
/sys/devices/system/cpu/cpu5/topology/core_id:2
/sys/devices/system/cpu/cpu6/topology/core_id:3
/sys/devices/system/cpu/cpu7/topology/core_id:3

Третий сценарий выполненный Hyper, Распараллеливающий прочь

Отметьте, как после того, как вторые центральные процессоры концов сценария 2, 4, 6 и 8 бездействуют в 4%, 2%, 3%, 4%. Это важно потому что в третьей тестовой Гиперпоточности превращения от шоу те проценты использования ЦП, замороженные в 4%, 2%, 3%, 4%, а не 3%, 2%, 2% и 2% от первого теста.

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

Также отметьте, неважно, если Вы включаете Гиперпоточность, или от сценария все еще отображает "Поддерживаемую Поточную обработку Hyper".


Сценарий Bash для автоматизации превращения гиперпоточности прочь/на

Когда просмотр сценария ниже имеет в виду, что Носатые числа центральные процессоры от 1 до 8, но Linux нумерует центральные процессоры от 0 до 7.

#!/bin/bash

# NAME: set-hyper-threading
# PATH: /usr/local/bin
# DESC: Turn Hyper threading off or on.

# DATE: Aug. 5, 2017.

# NOTE: Written Part of testing for Ubuntu answer:
#       https://askubuntu.com/questions/942728/disable-hyper-threading-in-ubuntu/942843#942843

# PARM: 1="0" turn off hyper threading, "1" turn it on.

if [[ $# -ne 1 ]]; then
    echo 'One argument required. 0 to turn off hyper-threading or'
    echo '1 to turn hyper-threading back on'
    exit 1
fi

echo $1 > /sys/devices/system/cpu/cpu1/online
echo $1 > /sys/devices/system/cpu/cpu3/online
echo $1 > /sys/devices/system/cpu/cpu5/online
echo $1 > /sys/devices/system/cpu/cpu7/online

grep "" /sys/devices/system/cpu/cpu*/topology/core_id

grep -q '^flags.*[[:space:]]ht[[:space:]]' /proc/cpuinfo && \
    echo "Hyper-threading is supported"

grep -E 'model|stepping' /proc/cpuinfo | sort -u

stress --cpu 8 --io 1 --vm 1 --vm-bytes 128M --timeout 10s

Примечание: Программа stress встроен во все системы Debian, из которых Ubuntu является производной. Поэтому Вы не должны загружать и устанавливать любые пакеты для запущения этого скрипта в Ubuntu.

Если у Вас есть двухъядерный ЦП, необходимо удалить (или прокомментировать с #) строки, управляющие ЦП номера 5 и 7.

Кредит Привет-ангелу для строки удара grep "" /sys/devices/system/cpu/cpu*/topology/core_id отображение топологии ЦП.


Носатые Катастрофические отказы, если Поточная обработка Hyper выключена, прежде чем она запустится

Для получения центральных процессоров 2, 4, 6, 8 к самому низкому использованию процента, возможному, я пытался выключить Гиперпоточность во время, загружаются. Я использовал этот сценарий, чтобы сделать это:

# NAME: /etc/cron.d/turn-off-hyper-threading
# DATE: Auguust 5, 1017
# DESC: This turns off CPU 1, 3, 5 & 7
# NOTE: Part of testing for Ubuntu answer:
#       https://askubuntu.com/questions/942728/disable-hyper-threading-in-ubuntu/942843#942843
# BUGS: Conky crashes with Segmentation Fault when CPU 2,4,6 & 8 (as conky calls them)
#       are off-line.
#
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#
# @reboot   root    echo 0 > /sys/devices/system/cpu/cpu1/online
# @reboot   root    echo 0 > /sys/devices/system/cpu/cpu3/online
# @reboot   root    echo 0 > /sys/devices/system/cpu/cpu5/online
# @reboot   root    echo 0 > /sys/devices/system/cpu/cpu7/online

Однако conky катастрофические отказы с сегментацией дают сбой, если гиперпоточность выключена, когда она запускает. Как таковой я должен был прокомментировать четыре @reboot строки в сценарии.

Носатый Код для отображения использования процента ЦП и коэффициента загрузки

Если Вы интересуетесь установкой подобного дисплея в Носатом, вот отрывок соответствующих норм:

${color orange}${voffset 2}${hr 1}
${color2}${voffset 5}Intel® i-7 3630QM 3.4 GHz: ${color1}@  ${color green}${freq} MHz   
${color}${goto 13}CPU 1 ${goto 81}${color green}${cpu cpu1}% ${goto 131}${color3}${cpubar cpu1 18}
${color}${goto 13}CPU 2 ${goto 81}${color green}${cpu cpu2}% ${goto 131}${color3}${cpubar cpu2 18}
${color}${goto 13}CPU 3 ${goto 81}${color green}${cpu cpu3}% ${goto 131}${color3}${cpubar cpu3 18}
${color}${goto 13}CPU 4 ${goto 81}${color green}${cpu cpu4}% ${goto 131}${color3}${cpubar cpu4 18}
${color}${goto 13}CPU 5 ${goto 81}${color green}${cpu cpu5}% ${goto 131}${color3}${cpubar cpu5 18}
${color}${goto 13}CPU 6 ${goto 81}${color green}${cpu cpu6}% ${goto 131}${color3}${cpubar cpu6 18}
${color}${goto 13}CPU 7 ${goto 81}${color green}${cpu cpu7}% ${goto 131}${color3}${cpubar cpu7 18}
${color}${goto 13}CPU 8 ${goto 81}${color green}${cpu cpu8}% ${goto 131}${color3}${cpubar cpu8 18}
${color1}All CPU ${color green}${cpu}% ${goto 131}${color1}Temp: ${color green}${hwmon 2 temp 1}°C ${goto 250}${color1}Up: ${color green}$uptime
${color green}$running_processes ${color1}running of ${color green}$processes ${color1}loaded processes.
Load Avg. 1-5-15 minutes: ${alignr}${color green}${execpi .001 (awk '{printf "%s/", $1}' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l | cut -c1-4} ${execpi .001 (awk '{printf "%s/", $2}' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l | cut -c1-4} ${execpi .001 (awk '{printf "%s/", $3}' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l | cut -c1-4}
${color1}NVIDIA  ${color}-GPU ${color green}${nvidia gpufreq} Mhz  ${color}-Memory ${color green}${nvidia memfreq} Mhz
${color1}GT650M ${color}-Temp ${color green}${nvidia temp}°C  ${color}-Threshold ${color green}${nvidia threshold}°C
${color orange}${voffset 2}${hr 1}

Примечание: Код Nvidia выше никогда не тестировался, потому что у меня нет GPU Nvidia еще, работающего в соответствии с Ubuntu. Любой год скоро теперь :)

8
ответ дан 23 November 2019 в 03:35

Немного больше устойчивого способа посмотреть в ядре для пар гиперпотока необходимо для систем, где материнская плата размещает несколько сокетов ЦП, потому что core_id дублирован. Вот моя версия в системе с двумя микросхемами Xeon с 8 ядрами (пример из Ubuntu 16.04):

$ cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list \
> | sort --unique --numeric-sort
0,16
1,17
2,18
3,19
4,20
5,21
6,22
7,23
8,24
9,25
10,26
11,27
12,28
13,29
14,30
15,31

В различных целях можно также хотеть посмотреть в файлах

/sys/devices/system/cpu/present
/sys/devices/system/cpu/online
/sys/devices/system/cpu/offline
1
ответ дан 23 November 2019 в 03:35

Вот сценарий, чтобы определить ht-ядра и переключить их онлайн/офлайн.

#!/bin/bash
typeset -i core_id
typeset -i sibling_id
typeset -i state

for i in /sys/devices/system/cpu/cpu[0-9]*; do
  core_id="${i##*cpu}"
  sibling_id="-1"

  if [ -f ${i}/topology/thread_siblings_list ]; then
    sibling_id="$(cut -d',' -f1 ${i}/topology/thread_siblings_list)"
  fi

  if [ $core_id -ne $sibling_id ]; then
    state="$(<${i}/online)"
    echo -n "$((1-state))" > "${i}/online"
    echo "switched ${i}/online to $((1-state))"
  fi
done

@WinEunuuchs2Unix, возможно, можно добавить это к превосходному ответу.

2
ответ дан 23 November 2019 в 03:35

Ответ @visit1985 не работает, если разделитель в thread_siblings_list не является запятой (который является, например, случаем в моей системе Ryzen AMD).

Вот сценарий для превращения гиперпоточности от этого работы с любым разделителем:

#!/bin/bash

for cpu in /sys/devices/system/cpu/cpu[1-9]*; do
    if [ -e "$cpu/topology/thread_siblings_list" ]; then
        sibling=$(awk -F '[^0-9]' '{ print $2 }' $cpu/topology/thread_siblings_list)
        if [ ! -z $sibling ]; then
            echo 0 > "/sys/devices/system/cpu/cpu$sibling/online"
        fi
    fi
done

И вот для включения гиперпоточности:

#!/bin/bash

for cpu in /sys/devices/system/cpu/cpu[1-9]*; do
    echo 1 > "$cpu/online"
done
0
ответ дан 23 November 2019 в 03:35

Недавние ядра поддерживают maxcpus параметр ядра.

Это позволяет Вам определять номер CPU к количеству физических ядер. Это может быть полезно, чтобы помочь смягчить угрозы, вызванные уязвимостями MDS на Intel CPUs от семейства 6.

Как:

с sudo (корень) дают полномочия, открывают/etc/default/grub с Вашим любимым текстовым редактором.

Найдите строку, которая начинается с GRUB_CMDLINE_LINUX_DEFAULT =

и добавьте maxcpus=n к любым существующим параметрам ядра, таким как общие тихие параметры всплеска (где n = количество физических ядер Ваш CPU имеет.

Например, на моем испытанном Intel(R) Core(TM) i3-3220 CPU 3.30 ГГц, двухъядерные с гиперпоточностью, я добавил maxcpus=2 для выключения гиперпоточности во время начальной загрузки.

Сохраните файл и затем дайте команду sudo update-grub и перезагрузка.

Можно подтвердить успех путем выдачи команды lscpu | grep "per core" который должен обеспечить вывод как это:

Thread(s) per core: 1

Протестированный на ядре 4.4.0

Источники:

https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/kernel-parameters.txt

https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/mds.html

https://unix.stackexchange.com/questions/145645/disabling-cpu-cores-on-quad-core-processor-on-linux

5
ответ дан 23 November 2019 в 03:35

maxcpus=n параметр в GRUB_CMDLINE_LINUX_DEFAULT= не работает правильно. Это оставило меня с 2 ядрами и 4 потоками вместо 4 ядер 4 потоками.

Я нашел решение.

Добавить mitigations=auto,nosmt кому: GRUB_CMDLINE_LINUX_DEFAULT= вместо этого

Протестированный на Ubuntu 16.04 LTS с Linux 4.4.0.

Источник: https://wiki.ubuntu.com/SecurityTeam/KnowledgeBase/MDS

1
ответ дан 23 November 2019 в 03:35

Можно отключить гиперпоточность в Linux как корень или с полномочиями суперпользователя с:

# echo off > /sys/devices/system/cpu/smt/control

Можно отобразить текущее состояние гиперпоточности с:

$ cat /sys/devices/system/cpu/smt/control

Эта команда печатает один из:

on|off|forceoff|notsupported|notimplemented

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

2
ответ дан 23 November 2019 в 03:35

Другие вопросы по тегам:

Похожие вопросы: