Következő Előző Tartalom

8. Kernel démonok

Ha kiadod a "ps aux" parancsot, valami ehhez hasonlót fogsz látni:

USER       PID %CPU %MEM  SIZE   RSS TTY STAT START   TIME COMMAND
root         1  0.1  8.0  1284   536   ? S    07:37   0:04 init [2]
root         2  0.0  0.0     0     0   ? SW   07:37   0:00 (kflushd)
root         3  0.0  0.0     0     0   ? SW   07:37   0:00 (kupdate)
root         4  0.0  0.0     0     0   ? SW   07:37   0:00 (kpiod)
root         5  0.0  0.0     0     0   ? SW   07:37   0:00 (kswapd)
root        52  0.0 10.7  1552   716   ? S    07:38   0:01 syslogd -m 0
root        54  0.0  7.1  1276   480   ? S    07:38   0:00 klogd
root        56  0.3 17.3  2232  1156   1 S    07:38   0:13 -bash
root        57  0.0  7.1  1272   480   2 S    07:38   0:01 /sbin/agetty 38400 tt
root        64  0.1  7.2  1272   484  S1 S    08:16   0:01 /sbin/agetty -L ttyS1
root        70  0.0 10.6  1472   708   1 R   Sep 11   0:01 ps aux

Ez a rendszerben futó folyamatok listája. Az információ a /proc fájlrendszerből (amit az előző részben már említettem) származik. Figyeld meg, hogy az "init" az egyes számú folyamat. A "kflushd", "kupdate", "kpiod" és a "kswapd" a 2, 3, 4 és 5-ös számú folyamatok. Van azonban valami furcsa: nézd meg mind a virtuális tárolási méret (SIZE), mind a valódi tárolási méret (RSS) nevű oszlopokat. Ezeknél a folyamatoknál nullák szerepelnek. Hogyhogy egy folyamat nem használ memóriát?

Ezek a folyamatok a kernel démonok. A kernel legnagyobb része egyáltalán nem mutatkozik a folyamatlistákon. Csak úgy találhatod ki mennyi memóriát használnak, ha kivonod a gépben lévő memóriából a rendelkezésre álló memória mennyiségét. A kernel démonok az "init" után indulnak el, így kapnak folyamatszámot ugyanúgy, mint a normál folyamatok. De a kódjuk és adataik a kernel részére lefoglalt memóriában van.

A COMMAND oszlop bejegyzéseinél zárójelek vannak, mivel a /proc fájlrendszer nem tartalmaz parancssori információkat ezekről a folyamatokról.

Tehát mire is valók ezek a kernel démonok? E dokumentum előző verzióiban volt egy segítségkérő rész, mivel nem tudtam sokat róluk. A következő történet az erre adott válaszokból (amiért nagyon hálás vagyok) lett összerakva. Szívesen fogadom a további okosításokat, referenciákat és kiigazításokat!

A bevitel és kivitel puffereken (buffers) keresztül történik a memóriában. Ettől gyorsabban mennek a dolgok. Amit a programok írnak, a memóriában lehet tartan - egy pufferben - ezután nagyobb (hatékonyabb) darabokban lehet a lemezre írni. A "kflushd" és "kupdate" démonok ezt a munkát végzik: a "kupdate" periodikusan lefut (5 másodpercenként?), hogy leellenőrizze van-e használt puffer (dirty buffers). Ha igen, utasítja a "kflushd" démont, hogy írja ki őket a lemezre.

A folyamatoknak gyakran semmi dolguk, és azoknak amik éppen futnak, gyakran nincs arra szükségük, hogy az össszes kódjukat és adataikat a memóriában tartsák. Ez azt jelenti, hogy jobb hasznát vesszük a memóriánknak, ha a futó programok éppen nem használt részeit kiírjuk a merevlemez csere (swap) partíciójára. Az adat szükséges ki- és bemozgatását a memóriába (-ból) a "kpiod" és a "kswapd" végzi. Minden másodpercben vagy valahogy így, a "kswapd" felébred, hogy leellenőrizze a memória helyzetét, és ha szükség van valamire a memóriában - ami a lemezen található - vagy nincs elég szabad memória, a "kpiod" hívódik meg.

Lehet, hogy a "kapmd" démon is fut a rendszereden, ha az automatikus áramgazdálkodás (automatic power management) be van fordítva a kerneledbe.

8.1 Beállítás

Az "update" programal lehet beállítani a "kflushd" és a "kswapd" démonokatt. Próbáld az "update -h" parancsot kiadni valami információért.

A csere partíciót be lehet kapcsolni a "swapon", és ki lehet kapcsolni a "swapoff" paranccsal. Az init szkript (/etc/rc.sysinit vagy /etc/rc.d/rc.sysinit) általában meghívja a "swapon"-t, amint a rendszer elindul. Azt mondták nekem, hogy a "swapoff" praktikus, ha áramot akarunk spórolni laptopon.

8.2 Gyakorlatok

Csinálj egy update -d-t, és figyeld a dumát az utolsó sorban a "threshold for buffer fratricide"-ről. Most már van egy érdekes fogalmad, járj utána!

Lépj be a /proc/sys/vm könyvtárba és adj ki egy "cat" parancsot az ott lévő fájlokra. Figyeld meg, mi mindenre tudsz rájönni ezáltal.

8.3 További információ

A Linux Dokumentációs Projekt "The Linux Kernel" dokumentuma (lásd A Linux kernel fejezetet URL-ért)

A Linux kernel forráskódja, ha elég bátor vagy! A "kswapd" kódja a linux/mm/vmscan.c-ben, a "kflushd" és "kupdate" kódja pedig a linux/fs/buffer.c fájlban van.


Következő Előző Tartalom