Zrozumienie górnej i średniej obciążenia


12

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?


Zauważ, że (ponieważ zwykle oczekuje się, że zostaną zaplanowane wkrótce), zadania w stanie „nieprzerwanym” są również liczone jako uruchomione. Tylko szczegół, a nie coś, co zmienia twoje pytanie.
mattdm,

Odpowiedzi:


7

Ś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.


3

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.


1
- Nie widziałem jeszcze systemu, w którym wiele rdzeni w gnieździe jest narażonych na przestrzeń użytkownika w sposób, który sprawia, że ​​wyglądają jak nic więcej jak tylko procesory. Tak więc na górze w czterordzeniowym systemie czterordzeniowym widać 16 procesorów. (Tak więc łatwo zauważyć, że obciążenie 9 jest poniżej liczby procesorów.)
mattdm,

Rozumiem, że liczby są logarytmiczne, więc są one nieco poniżej lub powyżej 1. Mam jeden system, widziałem, że system to raportuje: średnia obciążenia: 10,41, 9,57, 9,26. Co?? Dlaczego jeden system linuksowy raportuje średnie obciążenie: 0,81, 1,57, 0,98, podczas gdy ten system podaje średnie obciążenie: 10,41, 9,57, 9,26? Czy wszystkie unixy nie są takie same?
djangofan,

3

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:

 * The global load average is an exponentially decaying average of
 * nr_running + nr_uninterruptible.
 *
 * Once every LOAD_FREQ:
 *     nr_active = 0;
 *     for_each_possible_cpu(cpu)
 *         nr_active += cpu_of(cpu)->nr_running +
 *                      cpu_of(cpu)->nr_uninterruptible;
 *     avenrun[n] = avenrun[0] *
 *                  exp_n + nr_active *
 *                  (1 - exp_n)

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.


0

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.


0

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.