Értsük meg a Load average értékét!

load
Valószínű, hogy találkoztál már valamelyik *nix-os parancsban (vagy csak a /proc/loadavg-ben) azzal a bűvös számhármassal, ami körülbelül úgy néz ki, mint jobbra a képen, és terhelés függvényében növekszik vagy csökken.

Valószínű azt is tudod róla, hogy jobb ha 1.00 alatt van mindhárom érték, de azt nem biztos, hogy hogyan is kell értelmezni ezeket. A Scout App Blog ennek a három értéknek az értelmezéséről írt egy nem túl hosszú cikket, amit magyarra fordítva közlök veletek.

Egy kis „ferdítői” információ: Bár a load average-dzset lefordítva „átlagos terhelést” kapunk, ami utal ugyan a céljára, de nem szeretnék a „nyíltGL”, „socket – foglalat/csatoló” és ezekhez hasonló gyöngyszemet alkotni. Az informatika nyelve angol és kész. Itt-ott azért zárójelben odaírtam, hogy kb. hogyan kell(ene) szerintem értelmezni a dolgokat, de szigorúan csak az érthetőség miatt.

Az emberek többsége sejti, hogy mit jelent a load average értéke: a három számjegy percek átlagát mutatja, egyre hosszabb időintervallumban (1, 5 és 15 perc átlagai) és, hogy minél kisebbek ezek a számok, annál jobb. A magasabb számok mutatják a problémát vagy a túlterhelt rendszert. De hol van a határérték? Mely load avarge értékek „jók” vagy „rosszak”? Mely értékek aggasztóak és melyeknél kell azonnal cselekedni?

Mindezek előtt, lássuk a load average értékek hátterét és, hogy hogyan is kell ezeket értelmezni. Kezdjük a legegyszerűbb példánál: egy gép egymagos processzorral.

A forgalom analógia

Az egymagos processzor olyan, mint az egysávos híd. Képzeld magad egy híd kezelő helyébe… néha nagyon nagy a forgalom, az egyetlen sávod teljesen tele van. Szeretnéd, hogy a többiek is tudják, hogy áramlik a forgalom a hidadon. Kiírnál a híd elejére egy százalékos értéket ami jelzi, hány darab autó várakozik az adott időben. Ha nincs várakozó autó, az érkező sofőrök tudják, hogy át tudnak menni. Ha van, akkor tudják, hogy késleltetve vannak.

Tehát, kedves Híd Kezelő, milyen számozási rendszert használnál? Mi lenne ha…:

0.00 jelentené, hogy egyáltalán nincs átmenő forgalom a hídon. Valójában a 0.00 és 1.00 közötti érték azt jelenti, hogy nincs késés, mindegyik autó késleltetés nélkül haladhat.

1.00 jelentené, hogy a híd teljes terhelésen üzemel. Ez még mindig jó, de ha csak egy kicsit is nő a forgalom, a dolgok kezdenek lelassulni.

1.00 feletti érték jelzi, hogy a híd túl van terhelve, késés van. Mennyi? Nos, 2.00 jelenti, hogy az optimális kihasználtsághoz két sáv kellene, azaz egy sáv van a hídon, míg egy másik sáv várakozik a hídra. 3.00 jelenti, hogy egy sáv van a hídon és kettő várakozik, és így tovább..

1.0-s terhelés = 1.00-es terhelés

0.5-ös terhelés = 0.50-es terhelés

1.7-es terhelés = 1.70-es terhelés

A CPU terhelés tehát alapvetően ennyi. Az „autók” a folyamatok, amik egy megadott részt használnak a processzor időből (amíg átkelnek a hídon) vagy sorban állnak a CPU használatért. Unix-ban erre „run-queue lengh”-ként (futási sor hossz) hivatkoznak, ami tehát éppen futó és várakozó (sorban álló) folyamatok összege.

Mint a híd kezelő, te sem szeretnéd, hogy a kocsik/folyamatok várakozzanak. Tehát ideális esetben a CPU terhelés mindig 1.00 alatt van. Ahogy a híd kezelő is, te se problémázol azon, ha néha egy kis időre 1.00 felé emelkedik a terhelés, de ha folyamatosan 1.00 feletti, akkor van miért aggódnod.

Tehát azt mondod, hogy az ideális terhelés az 1.00?

Nos, nem egészen. Az 1.00-s terheléssel az a probléma, hogy nincs több erőforrásod. A gyakorlatban a legtöbb adminisztrátor 0.70-nél húzza meg a vonalat:

  • A „Rá kellene nézni” értéke: 0.70. Ha a load average értéke 0.70 fölött van, ideje, hogy kivizsgáld miért, még mielőtt a dolgok rosszabbra fordulnak
  • A „Javítsd meg azonnal!” értéke: 1.00. Ha a load average értéke 1.00 felett van, keresd meg a problémát és javítsd ki most. Egyéb esetben fel fognak ébreszteni az éjszaka közepén és az nem lesz túl vicces...
  • Az „Hajnal 3 óra, mi a pi**a van?” értéke: 5.0. Ha a load average értéke 5.00 felett van, valószínűleg nagy bajban lehetsz, a géped lefagyott vagy nagyon lelassult, és ez (váratlanul) történt a lehető legrosszabb időben, például az éjszaka közepén, vagy amikor előadsz egy konferencián. Ne hagyd, hogy megtörténjen!

Mi van a több-processzoros rendszerekkel? Az én értékem 3.00, de minden rendben fut!

Négy processzoros rendszered van? Akkor a 3.00 még megfelelő érték.

A több-processzoros rendszereken, a load average értékét az elérhető processzormagokhoz képest kell figyelni. A „100%-os kihasználtság” 1 magos rendszernél 1.00, 2 magos rendszernél 2.00, 4 magos rendszernél pedig már 4.00 (és így tovább).

Ha visszagondolunk a híd analógiára, az „1.00” jelenti, hogy „egy sáv pontosan elég a forgalomnak”. Egy egy sávos hídon azt jelenti, hogy teljesen tele van. Egy két sávos hídon az 1.00 jelenti, hogy a kapacitásának 50%-a van használva – csak egy sáv foglalt, tehát egy másikat még fel lehet tölteni.

2.0-s terhelés = 2.00-es terhelés két sávos hídon.

Tehát az egymagos processzoroknál 1.00 jelenti a 100%-os kihasználtságot, a kétmagos processzornál 2.00 jelenti ugyanezt.

Több mag vs. Több processzor

Ha már a témánál vagyunk, beszélgessünk egy kicsit a több magos és a több processzoros rendszerekről. Teljesítmény tekintetében egy gép 2 processzorral egyenlő egy másik 1 processzorral, de 2 maggal rendelkezővel? Igen. Durván. Sok apróság van, ami aggaszthat, pl. a cache mérete, processzorok folyamat átadásának frekvenciája (esetleg kamu Hyper vagy Cluster threading magok-e ezek – Lacyc3) stb. Ezen apróságok ellenére, a CPU load értékénél az összes elérhető processzormag számít, tekintet nélkül a rendszerben lévő fizikai processzorokra és arra, hogy ezek egyenként hány magot tartalmaznak.

Ezért, két új szabállyal kell bővítenünk a load average érték szabályrendszerünket:

  • Maximális terhelés = elérhető magok száma: Többmagos rendszernél nem ajánlott elérni az elérhető magok értékét.
  • A magok csak magok: Az, hogy hogyan oszlanak el a magok a CPU-kban, nem igazán lényeges. 2x4 mag == 4x2 mag == 8x1 mag. Mindegyik gép 8 magnak számít ezzel a megközelítéssel.

A gyakorlatban…

Nézzük meg load average értékét az uptime parancs kimenetében:

uptime kimenet

Ez egy kétmagos CPU, tehát van még bőven tartalékunk. Nem gondolnám, hogy valaha a terhelés 1.70 vagy magasabban tartózkodna.

Tehát mit is jelentenek ezek a számok? 0.61, az elmúlt perc átlaga, 0.81 az elmúlt 5 perc átlaga és 0.87 az elmúlt 15 perc átlaga, ami felvet egy kérdést:

Melyik átlagot kell figyelnem? Egy, öt vagy 15 perceset?

A számok, amikről beszéltünk (1.00 = javítsd meg most stb.), az az 5 vagy 15 percek átlaga. Őszintén szólva, ha a rendszered egy perces átlagban 1.00 felett van, az még mindig jó. Ha a 15 perces átlag 1.00 közelében tartózkodik, akkor kell beavatkoznod. (nyilvánvalóan, ahogy megtanultuk, egyeztetni kell ezeket a számokat a rendszerben lévő processzormagokhoz.)

Tehát a processzormagok fontosak a load avarge értékének a megértéséhez… honnan tudom hány maggal rendelkezik a rendszerem?

Az összes, rendszeredben lévő processzor processzor információja:

cat /proc/cpuinfo

Megjegyzés: OSX-ben nincs ilyen, keress rá a Google-ben az alternatívákért.

Hogy csak a számokat kapd meg, futtasd végig a grep és a wc parancsokon valahogy így:

grep 'model name' /proc/cpuinfo | wc -l

Remélem hasznos volt. Ha van ötleted, hogy miről írjak (akár fordítsak), akkor ne tartsd magadban, verekedd át magad a Captcha-n és szólj hozzá, vagy küldj levelet a lacyc3 {kukac} gmail {pont} com e-mail címre.