Jak mogę uzyskać prawdziwe wykorzystanie procesora wielordzeniowego z włączoną funkcją Hyperthreading?
Na przykład rozważmy 2-rdzeniowy procesor, wyrażający 4 wirtualne rdzenie.
Jedno wątkowe obciążenie będzie teraz wyświetlać się jako 100% top
, ponieważ jeden rdzeń wirtualnych rdzeni jest całkowicie wykorzystany. Procesor i top
działają zgodnie z oczekiwaniami, jakby były 4 prawdziwe rdzenie.
Jednak z dwoma wątkami sprawy stają się dziwne: jeśli wszystko działa dobrze, są one zrównoważone z dwoma prawdziwymi rdzeniami, więc mamy 200% użycia: Dwa razy 100% i dwa bezczynne rdzenie wirtualne i wykorzystujemy całą dostępną moc procesora . Wydaje mi się w porządku.
Jednakże, jeśli dwa wątki działałyby na jednym prawdziwym rdzeniu, okazałyby się, że używają dwa razy 100%, co daje 200% wykorzystania wirtualnego rdzenia. Ale w rzeczywistości byłby to jeden rdzeń dzielący swoją moc na dwa wątki, które następnie zużywają tylko połowę całkowitej mocy procesora.
Tak więc liczby użytkowania pokazane przez top
nie mogą być użyte do zmierzenia całkowitego obciążenia procesora.
Zastanawiam się także, jak hiperwątkowanie równoważy dwa wirtualne na prawdziwym rdzeniu. Jeśli dwa wątki zajmą inną liczbę cykli, czy rdzenie wirtualne „dostosują się”, aby oba pokazywały 100% obciążenia, nawet jeśli rzeczywiste obciążenie się różni?
źródło
Odpowiedzi:
Martin Tegtmeier z Oracle napisał ciekawy post na blogu o tym w zeszłym roku: https://blogs.oracle.com/solaris/cpu-utilization-of-multi-threaded-architectures-explained-v2
Krótka odpowiedź; Hyperthreading naprawdę zadziwia ze zdolnością topa do raportowania ogólnego procentu wykorzystania procesora / procentu bezczynności procesora.
W najgorszym przypadku 2-rdzeniowy 4-wirtualny procesor z 2 wątkami przy 100% wykorzystaniu na rdzeń może prawie nasycić procesor. (W zależności od użycia portu wykonania; tylko wątki, które używają zupełnie innych zasobów obliczeniowych na procesorze, mogą nadal działać bez wpływu na wydajność w bieżącym wątku.) Jednak w tym przypadku top nadal zgłasza 50% bezczynności.
źródło
Wykorzystanie rdzenia jest bardzo różne niż obciążenie systemu. Wykorzystanie rdzenia pokazuje tylko, ile rdzenia coś oblicza lub czeka na instrukcje. Może wynosić 100%, co odpowiada dowolnemu czasowi, w którym procesor coś oblicza.
Ale obciążenie jest inną rzeczą, obciążenie jest ogólnie mierzone w celu ustalenia, czy jakikolwiek proces musi czekać na dowolny zasób, czy nie. Jeśli procesy nie czekają na żadne zasoby, zobaczysz bardzo wydajny system. Ale czasami zobaczysz powolne systemy, ale niskie wykorzystanie procesora. Ogólnie oznacza to, że niektóre procesy czekają na zasób i nie zwalniają procesora. W tego rodzaju scenariuszu nie widać dużego wykorzystania procesora, ale system może być znacznie bardziej obciążony.
W systemie Linux Średnia obciążenie to wartość obliczona do pomiaru ogólnej wydajności systemu. Wartość średniej obciążenia należy porównać z równoległymi zasobami obliczeniowymi, a konkretnie rdzeniami. Jeśli więc system z 4 rdzeniami fizycznymi ma średnie obciążenie 4 lub więcej, możemy śmiało powiedzieć, że niektóre procesy będą czekać na zasób.
Nie ma znaczenia, czy wykorzystanie procesora wynosi 100 czy 10 procent. Średnia wartość obciążenia może wynosić nawet 200 lub 300, w takich przypadkach system ledwo reaguje.
W normalnych warunkach pracy średnie obciążenie serwera nie powinno przekraczać liczby rdzeni przez długi czas. Krótkie kolce nie są według mnie ważne. 3 liczby, które zobaczysz na
w
wyjściu, to load av. przez 1/5/15 minut.źródło
Moim zdaniem żadna z powyższych odpowiedzi nie jest zadowalająca.
Myślę, że artykuł, który odsyłam na następujący link, jest dobrze ukierunkowany na odpowiedź na to pytanie: http://perfdynamics.blogspot.ch/2014/01/monitoring-cpu-utilization-under-hyper.html
ZACYTOWAĆ:
W rzeczywistości jestem prawie pewien, że system operacyjny może osiągnąć 100% na każdym wirtualnym rdzeniu, co do tego nie ma wątpliwości. Właśnie zrobiłem:
I mogę was zapewnić, że moje 8 wirtualnych rdzeni, a 4 fizyczne rdzenie zostały wykorzystane w 100% do wykorzystania procesora. I zdecydowanie nie mam 8 rdzeni na moim komputerze.
Krótko mówiąc, możesz założyć, że jeśli całkowite obciążenie procesora przekroczy 100%, jesteś najwyżej i najprawdopodobniej dość dokładnie, wykorzystując dokładnie 100% rdzenia fizycznego. Ten menas, jeśli masz fizyczny CORE 1 podzielony na system operacyjny CPU 1 i CPU 2. A na CPU 1 masz całkowite wykorzystanie 50%, a na CPU 2 masz całkowite wykorzystanie 50%, najprawdopodobniej w prawdziwym życiu jesteś wywierając presję całkowitego wykorzystania 100% na ten procesor. Maksymalnie to wykorzystałeś.
Ale oczywiście system operacyjny w swoich narzędziach monitorowania systemu nie ma pojęcia, że sprzedaje ci złudzenie. Zależnie od systemu operacyjnego i sposobu zarządzania zasobami, po prostu uwierzy, że każdy z tych dwóch wirtualnych rdzeni jest nadal w 50 procentach bezczynny, więc jeśli będzie więcej zadań do uruchomienia, spróbuje je równomiernie rozdzielić na te dwa rdzenie . Tak więc, gdy przekroczysz 100% wykorzystania procesora, w okresie wykorzystania procesora, zawsze jest w kolejce do uruchomienia w tym okresie czasu, który nigdy nie miał zmiany, aby uzyskać przerwę czasową na procesorze. W końcu to dostanie, ale zawsze są pewne wątki, które w rzeczywistości nawet nie działają, nawet jeśli są zaplanowane.
Dzięki
źródło