Korzystam z serwera Ubuntu 16.04. Widzę, że wątki hype są włączone, gdy korzystam z polecenia lscpu.
Chcę to wyłączyć. Przeszedłem fora Ubuntu i tu i tutaj .
To są dobre dyskusje, dlaczego hiperwątkowanie może nie być dobre. Ale nie ma ostatecznego rozwiązania, jak to wyłączyć.
Czy ktoś może podać kroki umożliwiające wyłączenie hiperwątkowania? Dzięki .
Odpowiedzi:
Wprowadzenie
To interesujące pytanie. Prawdopodobnie jeden z najciekawszych od miesięcy dla mnie osobiście. Podobnie jak OP, nie ma opcji wyłączenia Hyper Threading w moim starym BIOS-ie (wynaleziony w 2012 r., Zaktualizowany w 2016 r. Lub mniej więcej).
Błędy hiperwątkowości w Intel Skylake i Kaby Lake:
Istnieje wiele problemów ze Skylake zgłoszonych w Ask Ubuntu w ciągu ostatniego roku i zastanawia się, jak rozpoznać, które problemy mogły być spowodowane błędami Hyper Threading.
Ta odpowiedź jest podzielona na trzy części:
Wyświetlanie procesorów, gdy Hyper-Threading jest wyłączony / włączony
Poniżej widać wykorzystanie procesora, gdy hiperwątkowanie jest wyłączone i wykonywany jest test obciążenia procesora. Około 10 sekund później ten sam skrypt jest powtarzany przy włączonym hiperwątkowości. Wreszcie 10 sekund po uruchomieniu skryptu przy wyłączonym hiperwątkowości:
Wyświetlacz jest podzielony na dwie sekcje:
set-hyper-threading
z parametrem 0 (wyłączony), a następnie 1 (włączony).conky
wyświetla procent wykorzystania procesora przez CPUS od 1 do 8.Pierwszy skrypt wyłącza Hyper Threading
Przy pierwszym uruchomieniu skryptu Procesory 2, 4, 6 i 8 (według Conky) są zamrożone na 3%, 2%, 2% i 2%. Liczby procesora 1, 3, 5 i 7 zwiększają się do 100% podczas testu warunków skrajnych.
Topologia procesora jest wyświetlana z wyłączonym hiperwątkowością i zgłaszane są tylko cztery rdzenie:
Drugi skrypt włącza Hyper Threading
Przy drugim uruchomieniu skryptu funkcja Hyper-Threading jest włączona, a wszystkie liczby procesorów 1-8 zwiększają się do 100% podczas testu warunków skrajnych.
Topologia procesora jest wyświetlana z włączonym hiperwątkowością i zgłaszane są tylko cztery rdzenie plus i cztery rdzenie wirtualne:
Trzeci skrypt uruchamia Hyper Threading
Zwróć uwagę, jak po zakończeniu drugiego skryptu procesory 2, 4, 6 i 8 pracują na biegu jałowym przy 4%, 2%, 3%, 4%. Jest to ważne, ponieważ w trzecim teście wyłączenie funkcji Hyper-Threading pokazuje te procenty zamrożone przy 4%, 2%, 3%, 4% zamiast 3%, 2%, 2% i 2% od pierwszego testu.
Dlatego wyłączenie hiperwątkowości wydaje się po prostu zamrażać procesory wirtualne w bieżącym stanie.
Pamiętaj również, bez względu na to, czy włączysz lub wyłączysz Hyper-Threading, skrypt nadal wyświetla „Obsługiwane Hyper-Threading”.
Skrypt Bash do automatyzacji wyłączania / włączania hiperwątkowości
Przeglądając poniższy skrypt pamiętaj, że Conky numeruje procesory od 1 do 8, ale Linux numeruje procesory od 0 do 7.
UWAGA: Program
stress
jest wbudowany we wszystkie systemy Debian, których Ubuntu jest pochodną. Dlatego nie musisz pobierać ani instalować żadnych pakietów, aby uruchomić ten skrypt w Ubuntu.Jeśli masz dwurdzeniowy procesor, musisz usunąć (lub skomentować
#
) linie kontrolujące procesor o numerach 5 i 7.Podziękowania dla Hi-Angel za linię bashową
grep "" /sys/devices/system/cpu/cpu*/topology/core_id
wyświetlającą topologię procesora.Conky ulega awarii, jeśli Hyper Threading jest wyłączony przed rozpoczęciem
Aby maksymalnie wykorzystać procesory 2, 4, 6, 8, próbowałem wyłączyć Hyper-Threading podczas uruchamiania. Użyłem tego skryptu, aby to zrobić:
Jednak
conky
ulega awarii z błędem segmentacji, jeśli hiperwątkowanie jest wyłączone podczas uruchamiania. Jako taki musiałem skomentować cztery@reboot
linie w skrypcie.Conky Code do wyświetlania procentu wykorzystania procesora i współczynnika obciążenia
Jeśli chcesz skonfigurować podobny ekran w Conky, oto odpowiedni fragment kodu:
UWAGA: Powyższy kod Nvidia nigdy nie był testowany, ponieważ nie mam jeszcze procesora graficznego Nvidia działającego pod Ubuntu. Już niedługo rok :)
źródło
noht
nie istnieje. Nawet poznałem tę opcję za pośrednictwem źródeł linux-4.13-rc1, które czasami mam. Jednak na pewno rozumiem, co mogło cię pomylić: raport o błędach danych skarży się, że opcja nie działa, a następnie jest zamykananextrelease
, jakby coś naprawili. Jeśli jednak przeczytasz komentarze, zobaczysz, że jedynym zastosowaniemnoht
jest ręcznie spreparowany skrypt, który sprawdza linię poleceń jądra pod kątem opcji, a następnie wyłącza rdzenie przez/sys/
system plików. IOWnoht
jest bezużyteczne.noht
.Najnowsze jądra obsługują parametr jądra maxcpus .
Pozwala to ustawić liczbę procesorów na liczbę fizycznych rdzeni. Może to być pomocne w ograniczaniu zagrożeń powodowanych przez luki MDS w procesorach Intel z rodziny 6.
W jaki sposób:
z uprawnieniami sudo (root) otwórz / etc / default / grub w swoim ulubionym edytorze tekstu.
Znajdź linię zaczynającą się od GRUB_CMDLINE_LINUX_DEFAULT =
i dodaj maxcpus = n do dowolnych istniejących parametrów jądra, takich jak wspólne parametry cichego powielania (gdzie n = liczba rdzeni fizycznych twojego procesora.
Na przykład na moim zaufanym dwurdzeniowym procesorze Intel (R) Core (TM) i3-3220 @ 3,30 GHz z dodanym hyperthreadingiem dodałem maxcpus = 2, aby wyłączyć hyperthreading podczas uruchamiania.
Zapisz plik, a następnie wydaj polecenie
sudo update-grub
i uruchom ponownie.Możesz potwierdzić sukces, wydając polecenie,
lscpu | grep "per core"
które powinno dostarczyć dane wyjściowe w następujący sposób:Thread(s) per core: 1
Testowane na jądrze 4.4.0
Źródła:
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
źródło
Możesz wyłączyć hyperthreading w Linuksie jako root lub z uprawnieniami administratora w:
Możesz wyświetlić bieżący stan hiperwątkowania za pomocą:
To polecenie wypisuje jeden z:
Alternatywnie, większość oprogramowania układowego BIOS-u zawiera również opcję wyłączania hipertekstu. Jeśli jest wyłączony w systemie BIOS, powyższy kot prawdopodobnie powraca
forceoff
.źródło
maxcpus=
parametru jądra do wyłączania hyperthreading. Głównie dlatego, że nie mogę znaleźć żadnej oficjalnej dokumentacji dotyczącej jej interakcji z rdzeniami hiperwątkowości. Czy na pewno zawsze wyłączasz hiperwątkowanie, jeśli określiszmaxcpus=#real_cores
? A może skończysz z połową prawdziwych rdzeni z HT włączoną w niektórych systemach? Również jednomaxcpus=
ustawienie nie jest przenośne między maszynami o różnej liczbie rdzeni. Utrzymywanie zmian tego parametru dla różnych maszyn byłoby uciążliwe i podatne na błędy.lscpu | grep "per core"
wynikowi. Podkreślasz przenośność, jednak z drugiej strony ustawienie parametru jądra raz nie wydaje się zbyt uciążliwym zadaniem. Dla mnie.Oto skrypt do identyfikacji rdzeni ht i przełączania ich w trybie online / offline.
@ WinEunuuchs2Unix , może możesz dodać to do swojej doskonałej odpowiedzi.
źródło
for i in $(find /sys/devices/system/cpu/cpu[0-9]* -maxdepth 0 -type d |sort -V); do
maxcpus=n
ParametrGRUB_CMDLINE_LINUX_DEFAULT=
nie działa prawidłowo. Zostało mi 2 rdzenie i 4 wątki zamiast 4 rdzeni 4 wątków.Znalazłem rozwiązanie.
Dodaj
mitigations=auto,nosmt
doGRUB_CMDLINE_LINUX_DEFAULT=
zamiastTestowany na Ubuntu 16.04 LTS z systemem Linux 4.4.0.
Źródło: https://wiki.ubuntu.com/SecurityTeam/KnowledgeBase/MDS
źródło
Nieco bardziej niezawodny sposób szukania w jądrze par hiperwątków jest potrzebny w systemach, w których na płycie głównej znajduje się wiele gniazd procesora, ponieważ core_id jest zduplikowany. Oto moja wersja na systemie z dwoma 8-rdzeniowymi układami Xeon (przykład z Ubuntu 16.04):
Do różnych celów możesz także zajrzeć do plików
źródło
Jeśli czytasz dyskusje, to prawdopodobnie wiesz, że zwykle nie ma sensu wyłączać, więc założę się, że chcesz tego do celów edukacyjnych.
Ideą HT jest posiadanie wielu zestawów rejestrów CPU dla każdego rdzenia fizycznego (tak zwane rdzenie wirtualne) . Nie ma „lepszego” wirtualnego rdzenia, są identyczne. Uzbrojeni w tę wiedzę możesz wyłączyć rdzenie wirtualne, z wyjątkiem jednego dla każdego fizycznego.
Najpierw chcesz wiedzieć, która para wirtualnych rdzeni należy do którego fizycznego rdzenia w
/sys/
systemie plików. Możesz użyćcore_id
do tego pliku:Z danych wyjściowych można wywnioskować, że cpu0 + cpu2 są zawarte w jednym fizycznym rdzeniu, a cpu1 + cpu3 w drugim. Teraz podnieś uprawnienia i użyj
echo
polecenia, aby wyłączyć jedno z każdej pary:Zauważ, że procesor nie ma pliku „online” i nie można go wyłączyć, dlatego zamiast tego wyłączyłem procesor.
źródło
Odpowiedź @ visit1985 nie działa, jeśli separator w liście wątków_siblings_list nie jest przecinkiem (na przykład w moim systemie AMD Ryzen).
Oto skrypt wyłączający hiperwątkowanie, który działa z dowolnym separatorem:
A oto jeden, aby włączyć hiperwątkowość:
źródło