Obserwuję wysoką średnią obciążenie na pewnej maszynie (około 9) we wszystkich trzech polach obciążenia. Rozumiem obciążenie jako liczbę procesów w stanie „uruchom” / aktualnie żądających czasu procesora. Czy mam rację rozumując, że jeśli na moim komputerze działa N procesów, nie może to spowodować obciążenia większego niż N?
Ponadto, czy obciążenie ma znaczenie w odniesieniu do procesów lub wątków? Innymi słowy, czy proces wielowątkowy może generować obciążenie większe niż 1?
Odpowiedzi:
Średnia obciążenia jest zwykle opisywana jako „średnia długość kolejki uruchomień”. Tak niewiele procesów lub wątków zajmujących procesor może podnieść LA powyżej 1. Nie ma problemu, jeśli LA jest mniejsze niż całkowita liczba rdzeni procesora. Ale jeśli wzrośnie powyżej liczby procesorów, oznacza to, że niektóre wątki / procesy pozostaną w kolejce, gotowe do uruchomienia, ale czekają na wolny procesor.
źródło
Liczby używane do obliczania średniej obciążenia to zadania w stanie uruchomionym lub nieprzerwanym oraz ilość pracy wykonanej w przedziale czasu średniej ruchomej. Te zadania mogą być częścią procesu wielowątkowego. Pola są rozmyte wraz z upływem czasu ze względu na wygładzanie wyników z zastosowanego algorytmu.
Obciążenie 1 jest równe 100% wartości pracy jednego procesora. Jeśli masz aplikację wielowątkową, której udało się mieć liczbę aktywnych wątków przekraczającą liczbę dostępnych procesorów, wówczas jeden proces może zwiększyć obciążenie powyżej 1. Prawdopodobnie byłby to skok krótkotrwały i nie znalazł odzwierciedlenia w dłuższe widoki przekroju średniej obciążenia.
Ponieważ średnia obciążenia została opracowana przed pojawieniem się układów wielordzeniowych, ważne jest podzielenie liczb obciążeń przez całkowitą dostępną liczbę rdzeni. Jeśli jest to trwałe obciążenie 9 na czterordzeniowym systemie z czterema gniazdami, to jest to obciążenie 9 na 16 i nie jest to tak naprawdę problemem.
źródło
Zobacz jądro / harmonogram / loadavg.c, który ma długi i doskonały komentarz na początku wyjaśniający wyprowadzanie średniej obciążenia z wykładniczo malejącej średniej liczby uruchomionych wątków („kolejki uruchamiania”) plus liczby nieprzerwanych wątków (oczekujących na wejściu / wyjściu lub oczekiwaniu na blokadę).
Oto istota komentarza, ale warto przeczytać w całości:
Prawdziwe życie sprawia, że kod jest nieco skomplikowany: liczniki na procesor, jądra tykające, procesory hotswap, brak kodu zmiennoprzecinkowego wymagającego implementacji exp (n) w stałym punkcie. Łatwo jednak zauważyć, że wszystkie one działają w kierunku wiernego wdrożenia metody opisanej w komentarzu.
Zauważysz, że Linux liczy wątki , a nie tylko procesy, które odpowiadają na twoje pytanie.
źródło
3 średnie obciążenia są czymś w rodzaju funkcji logarytmicznej obracającej się wokół liczby 1. Coś podobnego do f (x) = eX (e do wykładnika X). Technicznie stała reprezentacja wykładniczej funkcji rozpadu symulująca średnią. Są one addytywne na procesor, więc pełne obciążenie może wyglądać jak 4,00 w systemie czterordzeniowym. Pierwsza liczba to średnia z ostatniej minuty, druga to średnia z ostatnich pięciu minut, a trzecia to średnia z ostatnich 15 minut. Pomyślałem, że należy tu podać odpowiedź, która o tym wspomina.
źródło
Natychmiastowe ładowanie: liczba zadań uruchomionych lub oczekujących na uruchomienie, lub w inny sposób, liczba zadań gotowych do uruchomienia
Średnia obciążenia: powyższa miara, ale wykładniczo uśredniona z wcześniejszymi próbkami tej samej miary
Obie te liczby są nieograniczone i często znacznie większe niż N.
Żeby było jasne: liczba obciążeń w Linuksie obejmuje wątki, nie ma co do tego wątpliwości. Możesz wygenerować dowolnie duże obciążenie za pomocą jednego procesu, który tworzy wiele wątków.
Więcej na ten temat tutaj
http://blog.angulosolido.pt/2015/04/linux-load-average-definitive-summary.html
źródło