Я работаю на сервере Ubuntu 16.04. Я вижу, что Hype Threading включен, когда я использую команду lscpu.
Я хочу отключить это. Я прошел форумы Ubuntu и здесь и здесь .
Это хорошие дискуссии, почему гиперпоточность может не быть хорошей. Но нет окончательного решения о том, как его отключить.
Кто-нибудь может дать инструкции по отключению гиперпоточности? Благодарю .
Ответы:
Вступление
Это интересный вопрос. Наверное, один из самых интересных за месяцы лично для меня. Как и OP, в моем старом BIOS нет опции отключения Hyper Threading (изобретена в 2012 году, обновлена в 2016 году или около того).
Ошибки Hyper-Threading в Intel Skylake и Kaby Lake:
За последний год в Ask Ubuntu сообщалось о многочисленных проблемах со Skylake, и возникает вопрос, как определить, какие проблемы могли быть вызваны ошибками Hyper Threading.
Этот ответ делится на три части:
Отображение процессоров, когда Hyper-Threading выключен / включен
Ниже вы можете увидеть загрузку ЦП, когда гиперпоточность отключена и выполняется нагрузочный тест ЦП. Примерно через 10 секунд тот же сценарий повторяется с включенной гиперпоточностью. Наконец, через 10 секунд скрипт запускается с отключенной гиперпоточностью:
Дисплей разделен на две части:
set-hyper-threading
с параметром 0 (выкл) и затем 1 ( вкл ).conky
отображается загрузка ЦП в процентах от 1 до 8.Первый скрипт запускает Hyper Threading
При первом запуске скрипта номера ЦП 2, 4, 6 и 8 (по словам Конки) заморожены на 3%, 2%, 2% и 2%. Во время стресс-теста номера ЦП 1, 3, 5 и 7 достигают 100%.
Топология ЦП отображается с отключенной гиперпоточностью, и сообщается только о четырех ядрах:
Второй скрипт запускает Hyper Threading
Во второй раз, когда скрипт запускается, Hyper-Threading включается, и все процессорные числа 1-8 увеличиваются до 100% во время стресс-теста.
Топология ЦП отображается с включенной гиперпоточностью и сообщается только о четырех ядрах плюс и четырех виртуальных ядрах:
Третий скрипт запускает Hyper Threading
Обратите внимание, как после завершения второго сценария процессоры 2, 4, 6 и 8 работают на холостом ходу 4%, 2%, 3%, 4%. Это важно, потому что в третьем тесте отключение Hyper-Threading показывает процент загрузки процессора, зафиксированный на уровне 4%, 2%, 3%, 4%, а не 3%, 2%, 2% и 2% от первого теста.
Поэтому отключение гиперпоточности просто останавливает виртуальные процессоры в текущем состоянии.
Также обратите внимание, что независимо от того, включен ли Hyper-Threading или нет, сценарий по-прежнему отображает «Hyper-Threading Supported».
Скрипт Bash для автоматизации включения / выключения гиперпоточности
При просмотре приведенного ниже сценария имейте в виду, что Conky нумерует ЦП от 1 до 8, а Linux нумерует ЦП от 0 до 7.
ПРИМЕЧАНИЕ . Программа
stress
встроена во все системы Debian, производная от Ubuntu. Поэтому вам не нужно скачивать и устанавливать пакеты для запуска этого скрипта в Ubuntu.Если у вас двухъядерный процессор, вам нужно удалить (или закомментировать
#
) строки, управляющие процессорами с номерами 5 и 7.Благодарим Hi-Angel за
grep "" /sys/devices/system/cpu/cpu*/topology/core_id
отображение строки топологии процессора.Conky Сбои, если Hyper Threading отключена до его запуска
Чтобы получить максимально возможную загрузку процессоров 2, 4, 6, 8, я попытался отключить Hyper-Threading во время загрузки. Я использовал этот скрипт для этого:
Однако происходит
conky
сбой при сегментации, если при запуске гиперпоточность отключена. Таким образом, я должен был закомментировать четыре@reboot
строки в сценарии.Conky Code для отображения процента использования процессора и коэффициента загрузки
Если вы заинтересованы в настройке подобного дисплея в Conky, вот соответствующий фрагмент кода:
ПРИМЕЧАНИЕ. Приведенный выше код Nvidia никогда не тестировался, потому что у меня еще нет графического процессора Nvidia, работающего под Ubuntu. Любой год скоро сейчас :)
источник
noht
не существует. Я даже нашел этот вариант в источниках linux-4.13-rc1, которые иногда случаются. Однако я, конечно, понимаю, что могло вас смущать: отчет об ошибках dat жалуется, что опция не работает, а затем закрываетсяnextrelease
, как будто они что-то исправили. Однако если вы прочтете комментарии, вы увидите, что единственное использованиеnoht
- это сценарий, созданный вручную, который проверяет параметр командной строки ядра, а затем отключает ядра через/sys/
файловую систему. IOWnoht
бесполезен.noht
.Последние ядра поддерживают параметр ядра maxcpus .
Это позволяет вам установить количество процессоров на количество физических ядер. Это может быть полезно для смягчения угроз, вызванных уязвимостями MDS на процессорах Intel из семейства 6.
Как:
с привилегиями sudo (root) откройте / etc / default / grub в вашем любимом текстовом редакторе.
Найдите строку, которая начинается с GRUB_CMDLINE_LINUX_DEFAULT =
и добавьте maxcpus = n к любым существующим параметрам ядра, таким как общие параметры тихого всплеска (где n = количество физических ядер, которое имеет ваш процессор.
Например, на моем надежном двухъядерном процессоре Intel (R) Core (TM) i3-3220 с тактовой частотой 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
/unix/145645/disabling-cpu-cores-on-quad-core-processor-on-linux
источник
Вы можете отключить гиперпоточность в Linux как root или с привилегиями суперпользователя с помощью:
Вы можете отобразить текущий статус гиперпоточности с помощью:
Эта команда печатает один из:
Кроме того, большинство прошивок BIOS также включают опцию отключения гиперпоточности. Если он отключен в BIOS, вышеупомянутый кот, скорее всего, вернется
forceoff
.источник
maxcpus=
параметр ядра для отключения гиперпоточности. Главным образом потому, что я не могу найти никакой официальной документации по взаимодействию с ядрами с гиперпоточностью. Гарантируется ли всегда отключать гиперпоточность, если вы укажетеmaxcpus=#real_cores
? Или вы могли бы получить половину реальных ядер с поддержкой HT в некоторых системах? Также однаmaxcpus=
настройка не переносима между машинами с различным количеством ядер. Ведение вариаций этого параметра для разных машин было бы утомительным и подверженным ошибкам.lscpu | grep "per core"
Вы ставите точку зрения в отношении переносимости, однако, с другой стороны, установка параметра ядра однажды не кажется слишком обременительной задачей. мне.Вот скрипт для идентификации ht-ядер и переключения их онлайн / оффлайн.
@ WinEunuuchs2Unix , может быть, вы можете добавить это к вашему отличному ответу.
источник
for i in $(find /sys/devices/system/cpu/cpu[0-9]* -maxdepth 0 -type d |sort -V); do
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
источник
Для систем, где на материнской плате размещено несколько сокетов ЦП, требуется несколько более надежный способ поиска в ядре пар гиперзадач, поскольку дублируется core_id. Вот моя версия для системы с двумя 8-ядерными чипами Xeon (пример из Ubuntu 16.04):
Для различных целей вы также можете посмотреть в файлах
источник
Если вы читали обсуждения, то, вероятно, знаете, что отключать их обычно нецелесообразно, поэтому я предполагаю, что вы хотите, чтобы они были использованы в учебных целях.
Идея HT состоит в том, чтобы иметь несколько наборов регистров ЦП для каждого физического ядра (так называемые виртуальные ядра) . Нет «лучшего» виртуального ядра, они идентичны. Вооружившись этими знаниями, вы можете отключить виртуальные ядра, кроме одного для каждого физического.
Сначала вы хотите узнать, какая пара виртуальных ядер принадлежит какому физическому ядру в
/sys/
файловой системе. Вы можете использоватьcore_id
файл для этого:По выводу вы можете сделать вывод, что cpu0 + cpu2 содержатся в одном физическом ядре, а cpu1 + cpu3 - в другом. Теперь увеличьте привилегии и используйте
echo
команду для отключения одного в каждой паре:Обратите внимание, что у cpu0 нет «онлайн» файла и его нельзя отключить, поэтому я отключил cpu2.
источник
Ответ @ visit1985 не работает, если разделитель в thread_siblings_list не является запятой (как, например, в моей системе AMD Ryzen).
Вот скрипт для отключения гиперпоточности, который работает с любым разделителем:
И вот один, чтобы включить Hyper-Threading:
источник