Zauważyłem że bardzo dużo ludzi ma mylną opinię nt. tego co pokazuje linuksowy “load average” ( cat /proc/loadavg ). Niektórzy zakładają że loadavg = 1 to 100% obciążenie procka, inni że 100% obciążenie procesora to loadavg równy 1 * liczba rdzeni. Nic bardziej błędnego ;].
Load average mówi o jednej rzeczy, ile procesów jest w stanie “running” (czyli robi coś lub “chce” coś robić), nieważne czy korzystają właśnie z procka czy czekają na dane z dysku. Na przykład, po odpaleniu
dd if=/dev/sda of=/dev/null bs=1M
loadavg skoczy o około 1 (więcej jezeli inne procesy chcą dane z dysku) podczas gdy dd będzie obciązał jakieś 10% procka (test na zwykłych dyskach, na SSD z racji szybkości raczej więcej). Czyli w skrócie loadavg generuje aplikacja która obciąża procek lub przetwarza/czeka na I/O, więc może dojść do sytuacji że loadavg skacze do 20 mimo że procek obciążony jest ledwo w połowie (np. serwer www czytający dane z dysku w paru wątkach).
Jaki z tego wniosek ? Loadavg jest bezużyteczne jeżeli nie jest powiązane z innymi wskaźnikami obciążenia jak obciążenie CPU, czy ilość ops/sek dysku, ale w porównaniu z nimi można szybko wywnioskować gdzie jest bottleneck, np. “duże loadavg – małe obciążenie CPU = I/O zapchane”, “loadavg = liczbie rdzeni, procesor zapchany na maksa = i/o daje rade, aplikacja jest CPU-bound” (lub obciążenie jest równe między IO i CPU).


5 ResponsesLeave a comment ?
Co to jest bootleneck? Jeżeli bottleneck, to coś na zasadzie wąskie gardło?
To znaczy dokładnie to, już poprawiłem
Tutaj jest opis troche bardziej – od srodka
http://www.teamquest.com/resources/gunther/display/5/
Trochę Pan tu bzdur napisał. Co to jest dokładnie stan ‘running’?
Powinien Pan też napisać, że opisuje Pan temat odnoszący się do Linuxa. We FreeBSD dla przykładu, jest trochę inaczej.
Co do 2giego: “In /dev/random ,Linux | Tags: Linux”, napisałem ;p
Co do 1szego, proces running to proces który coś robi, w przeciwieństwie do sleeping, który znaczy że proces nic nie robi. Myślałem że to oczywiste ale rzeczywiście ktoś początkujący może nie wiedzieć, poprawiłem :)