Jak mogę sprawdzić, czy hyperthreading jest włączony na komputerze z systemem Linux, za pomocą skryptu perl, aby go sprawdzić?
Próbuję w następujący sposób:
dmidecode -t processor | grep HTT
Daj mi znać, jeśli jestem na dobrej drodze.
linux
cpu
hyperthreading
dubler
źródło
źródło
dmidecode
musisz być rootem.Odpowiedzi:
Notatki dodane 8 lipca 2014 r .: Jak zauważył Riccardo Murri , moja odpowiedź poniżej pokazuje tylko, czy procesor zgłasza wsparcie hiperwątkowania. Ogólnie rzecz biorąc, * nix O / S są skonfigurowane tak, aby umożliwić hiperwątkowanie, jeśli jest obsługiwane. Jednak, aby faktycznie to sprawdzić programowo, zobacz na przykład odpowiedź Nilsa !
---- Oryginalna odpowiedź z 25 marca 2012 r .:
Rzeczywiście jesteś na dobrej drodze :) z
W systemie Linux zazwyczaj szukam po prostu „ht” w wierszu „flags”
/proc/cpuinfo
. Zobacz na przykładlub jeśli chcesz dołączyć „ht” do wzorca
(
\b
dopasowuje granice słów i pomaga unikać fałszywych alarmów w przypadkach, gdy „ht” jest częścią innej flagi).źródło
lscpu
jest sposobem na sprawdzenie.Zawsze po prostu użyłem następujących i spojrzałem na „Wątki na rdzeń:”.
Należy jednak pamiętać, że ta technika zawiedzie, jeśli dowolny procesor logiczny zostanie wyłączony za pomocą prostego
źródło
echo 0 > /sys/devices/system/cpu/cpu31/online
, teraz raporty lscpuThread(s) per core: 1
. Źlelscpu
! Chyba już tego nie użyję.Jeśli liczba procesorów logicznych jest dwa razy większa niż liczba rdzeni, które masz HT. Użyj następującego skryptu, aby zdekodować / proc / cpuinfo :
źródło
$NUMCORE > $NUMLOG
możemy powiedzieć, że hyperthreading jest włączony, prawda? To2 * $NUMCORE = $NUMLOG
prawda, czy to zawsze prawda, czy niektóre procesory mogą mieć 4x więcej rdzeni?lscpu
dostępne,lscpu
dostarczy te same informacje wraz z dużą ilością dodatkowych metadanych, a dane wyjściowelscpu
można łatwiej przeanalizować. ale to rozwiązanie działa i wykorzystuje tylko/proc/cpuinfo
.Powyższe przykłady pokazują, czy procesor jest zdolny do HT, ale nie, jeśli jest używany. Ostatnia metoda działa, ale nie testuje serwerów z dwoma gniazdami i maszyn wirtualnych testowanych
Xenserver
tam, gdzie nie wyświetla Fizyczny procesor, ponieważ nie ma żadnej.Przekonałem się, że jest to najłatwiejszy i mniej kodowy sposób, który działał również we wszystkich moich środowiskach testowych. ale wymaga
bc
.Wierzę, że to zadziała na wszystkich platformach i powie ci, czy jego procesor jest zdolny i czy jest włączony. Może być trochę niechlujny, ale jestem początkującym w skryptowaniu. Testowałem z centos XENSERVER vm, Ubuntu i Openfiler (rpath)
źródło
/sys/devices/system/cpu/smt/control
. Zobacz także odpowiedź OscaraZa pomocą tego polecenia możesz sprawdzić zdolność HT procesora
Możesz wyświetlić fizyczny i logujący procesor widziany przez jądro za pomocą następującego polecenia:
Daje to dane wyjściowe na jednordzeniowym procesorze z obsługą HT:
Możesz przeczytać wynik w ten sposób:
źródło
ht
w flagach CPU.physical id
wygląda na to, że reprezentuje gniazdo / układ.core id
Wydaje się wskazywać na tym samym fizycznym rdzeniaTa jedna linijka wydaje się robić dla mnie lewę (wymaga uprawnień roota):
Dane wyjściowe to:
Liczba wątków jest dwa razy większa niż liczba rdzeni, dlatego mam włączony hyperthreading.
Lub jeśli naprawdę chcesz skrypt Perla, zgodnie z żądaniem ...
źródło
dmidecode
był wiarygodny.lscpu
nie zawsze będzie on wiarygodny. Podoba mi się odpowiedź Scottbba.Ten wynik wskazuje, że HT jest włączony, ponieważ
siblings
liczba (12) jest większa niżcpu cores
(6)źródło
Jeśli czytasz
/sys/devices/system/cpu/cpu0/topology/thread_siblings_list
, zwróci rozdzieloną przecinkami listę rodzeństwa wątków (tj. „Rdzeni” Hyperthreada) CPU 0.Na przykład na moim 2-gniazdowym 6-rdzeniowym Xeonie, z włączonym hyperthreadingiem otrzymuję:
Ale po wyłączeniu hiperwątkowania w systemie BIOS otrzymuję:
Zakładając, że CPU 0 będzie zawsze dostępny, sprawdzenie
thread_sibling_list
pliku procfs CPU 0 dla więcej niż jednego węzła lub poszukiwanie przecinka, a nawet czegoś więcej0
, wskaże, czy hiperwątkowanie jest włączone.Odpowiedziałbym w Perlu, ale 1) nie znam Perla i 2) zakładam, że rozwiązanie jest dość trywialne.
źródło
W systemie Linux działa to dobrze:
W powyższym przykładzie mamy 2 gniazda NUMA (SOCKET = 1 lub 2). Mamy 16 rdzeni fizycznych (CORE = 0 do 15). Każdy CORE ma hyperthread rodzeństwa (Na przykład CORE = 0 zawiera CPU 0,16.
Możemy zweryfikować hiperwątek w następujący sposób:
Hierarchia pamięci podręcznej jest następująca:
lscpu -p daje wyjście w formacie csv do łatwego parsowania programu.
źródło
Oto podejście oparte na pythonie - sugeruje również sposoby wyłączenia go w razie potrzeby.
źródło
echo off > /sys/devices/system/cpu/smt/control
(oprócz wyłączenia go w bios). Zobacz także odpowiedź Oscara na bezpośrednie sprawdzenie.Wiele zastrzeżeń i co jeśli jest w odpowiedziach tutaj ... wydaje się, że odpowiedź nie jest taka oczywista.
lscpu
ma swoje gotcha, które odnoszą się do wszystkich „rdzeni zliczających i procesorów logicznych, a następnie porównują” odpowiedź. Ponieważ możesz wyłączyć procesory logiczne za pomocą prostej komendy echa (... może to mieć krytyczne znaczenie w środowisku dużego przedsiębiorstwa, na przykład w zależności od trybu turbo).Oto moja próba; dzięki @scottbb za inspirację:
Na moich komputerach z procesorem Dell Xeon lista rodzeństwa zawiera przecinek, gdy HT jest włączony. Na moim laptopie zawiera łącznik (procesor i5-3210m). Więc szukam interpunkcji.
Myśli? Krytyka?
Pytający poprosił o perla, więc proszę:
źródło
grep -q [-.]
ponieważ jest to mniej do pisania. FWIW, sprawdziłem kilka Xeonów / i5 / i7 (w tym wariantów mobilnych) i żaden z nich nie ma myślnika wthread_siblings_list
. Nie wystarczy po prostu sprawdzić CPU0 - zatem coś takiego byłoby bardziej wytrzymałe:grep -q , /sys/devices/system/cpu/cpu*/topology/thread_siblings_list
. Jednak tylko agrep 1 /sys/devices/system/cpu/smt/active -q
jest jeszcze bardziej do rzeczy - por. Odpowiedź OscaraNajłatwiejszym sposobem sprawdzenia, czy SMT (ogólny dla HT, który jest po prostu brandingiem Intela) jest aktywny:
daje 0 dla nieaktywnych lub 1 dla aktywnych
Możesz go włączyć lub wyłączyć w czasie wykonywania za pomocą:
źródło
/sys/devices/system/cpu/smt/control
jest również możliwe i daje plonon|off|forceoff|notsupported|notimplemented
.Lepiej sprawdź lscpu, w którym widać „Wątki na rdzeń: 1”, oznacza tylko jeden wątek na 1 rdzeń.
źródło
Stephaniea już wspomniała
lscpu
. Chciałem dodać do tego trochę więcej.Na moim procesorze AMD Epyc, ilekroć istnieje logiczny rdzeń offline,
lscpu
wyświetla nową linię o nazwieOff-line CPU(s) list:
źródło