Cześć!
Dzisiaj chciałbym poruszyć kwestię ważnego parametru na systemach POSIX (Linux, Unix etc.) jakim jest load average (średnie obciążenie). Jak wygląda typowy
load? Zobaczmy co mamy w pliku /proc/loadavg:
piotrek@piter-laptop:~$ cat /proc/loadavg
0.69 0.95 0.84 2/771 13831
Poszczególne liczby oznaczają kolejno: obciążenie w ciągu ostatniej minuty, pięciu minut i dziesięciu minut. Dalej mamy stosunek liczby aktualnie wykonywanych procesów do całkowej liczby procesów oraz ID ostatniego procesu. Większość osób skupia się jednak na pierwszych trzech liczbach. Na internecie można spotkać się z różnymi interpretacjami, generalnie sprowadzającymi się do jednej idei. Na przykład:
Jednostka LOAD
Jednostka pierwszych trzech wartości oznacza użycie procesora (ang. "CPU Load" ).
Na moc jednego wątku ( /rdzenia ) procesora przypada jedna jednostka LOAD.
W przypadku LOAD większego od (ilości) WĄTKÓW_CPU następuje spadek wydajności, ponieważ procesor jest w 100% obciążony, a programy generują większe obciążenie niż może on wykonać pracy. Powoduje to zmniejszenie wydajności pracy maszyny.
Żródło:
dobreprogramy(...) Natomiast cyfry oznaczają liczbę procesów wykonywanych w danej chwili i liczbę procesów czekających na dostęp do procesora.
Żródło:
osworldJest to definicja
częściowo poprawna, ale niepełna. Przyjrzyjmy się, w jakich stanach może znaleźć się proces:
PROCESS STATE CODES
R running or runnable (on run queue)
D uninterruptible sleep (usually IO)
S interruptible sleep (waiting for an event to complete)
Z defunct/zombie, terminated but not reaped by its parent
T stopped, either by a job control signal or because
it is being traced
Jednym z ważnych stanów jest właśnie stan
D, czyli de facto proces czeka na zasoby I/O i nie musi to być koniecznie procesor,
może czekać chociażby na dostęp do dysku.
Uściślając -
loadavg pokazuje nam w zasadzie liczbę procesów zajmujących czas procesora lub czekających na zasoby w stanie D. Posiłkowanie się jedynie tym, że load oznacza wykorzystanie 100% czasu jednego rdzenia przez procesy jest błędem. Można mieć load 100, a procesor obciążony na 10% i w żadnym wypadku nie będzie to błąd systemu. Dość dobra definicja dostępna jest w dokumentacji Red Hata/CentOS'a:
3.2.16. /proc/loadavg
This file provides a look at the load average in regard to both the CPU and IO over time, as well as additional data used by uptime and other commands. A sample /proc/loadavg file looks similar to the following:
0.20 0.18 0.12 1/80 11206
The first three columns measure CPU and IO utilization of the last one, five, and 10 minute periods. The fourth column shows the number of currently running processes and the total number of processes. The last column displays the last process ID used.
Żródło:
Red Hat Enterprise Linux Deployment GuideInna, też niezła definicja znajduje się na blogu
/dev/random, choć nieco inaczej ujęta.
Mam nadzieję, że rozjaśniłem nieco temat

Pozdrawiam