sala@home:~$

niceload

A már többször említett GNU parallel fejlesztése során egy-két olyan segédprogram is elkészült, melyek önállóan is használhatóak. Ezek közül a niceloadot mutatnám be.

A program célja, hogy az erőforrásokat figyelve futtasson egy parancsot, szükség szerint leállítva/újraindítva. Vegyük a következő ( niceload dokumentációjából származó ) példát:

A következő perl parancs 50 másodpercig fut, másodpercenként kirajzol egy pontot, és közben alaposan leterheli a processzort:

perl -e '$|=1;do{$l==$r or print "."; $l=$r}until(($r=time-$^T)>50)'

Ha niceloaddal indítjuk el a fenti parancsot egy olyan gépen ahol alacsony a terhelés ( load kisebb mint 1.0 ), akkor a perl program addig rendesen fut ameddig a load 1 alatt van, de ha az érték 1 fölé emelkedik, akkor niceload felfüggeszti a futást. Kis idő után újra futtatja, majd megint felfüggeszti…

$ niceload -v -q perl -e '$|=1;do{$l==$r or print "."; $l=$r}until(($r=time-$^T)>50)'
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Running 1s
.Sleeping 0.5s
Running 1s
.Sleeping 0.5s
.Running 1s
.Sleeping 0.5s
Running 1s
.Sleeping 0.5s
Running 1s
..Sleeping 0.5s
Running 1s

A -q ( quote ) kapcsoló azért kell mert a parancssorban mindenféle furcsa karaktereket írtunk, amiket a perlnek kell értelmeznie és nem a bash-nak. A -v kapcsoló hatására íródnak ki a Running…, Sleeping… sorok, ez megkönnyíti a megértést.

Ha egy másik terminálon elindított toppal ellenőrizzük a load értékeit, akkor feltűnik, hogy egy idő után 1 felett van folyamatosan. Ennek oka, hogy alapesetben a limit “puha” vagyis az előre meghatározott idejű felfüggesztés után mindenképpen fut kicsit a perl program. Ha szigorúbban szeretnénk lenni, akkor a -H ( hard ) kapcsolóval “kemény” limitet is meghatározhatunk, ekkor a felfüggesztés után újra ellenőrzi a terhelést a niceload, és csak akkor futtatja újra a programot, ha van szabad erőforrás.

Természetesen nemcsak az 1.0 load érték lehet a limit, megadhatunk eltérő load értéket is ( -L ), de akár a szabad memóriat, swappolást, IO terhelést is tudja figyelni a program.