Jens Axboe - a SuSE kernelhackere - nice szinteket épített a CFQ (completely fair queueing) IO ütemezőbe (a CFQ IO schedulerre az jellemző, hogy működése során megpróbálja egyenlő részre felosztani a rendelkezésre álló IO sávszélességet a processzek között). Hogy működnek ezek az nice szintek?
A processzhez hozzá van rendelve egy nice szint, amely a 0-tól 20-ig levő tartományban bármennyi lehet. A 0-ás és a 20-as szintek különleges szintek. A 0-ás szint jelentése: csak akkor engedélyezzük a processz számára az IO műveletet, ha a diszk ``idle'' állapotban van, a 20 jelentése: a processz IO-ját valósidejűnek (realtime) tekintjük. A valósidejű IO-val rendelkező processz fér hozzá a diszkhez elsőként. Az 1-19 szint valahol a kettő között van, azaz az IO 5%-95%-át ``engedélyezi'' a processz számára.
Mire is jó ez?Gondoljuk bele abba a helyzetbe, hogy CD-t írunk, és közben a háttérben olyan feladat fut, mint a sok diszk művelettel járó ``updatedb''. Ebben az esetben megadhatjuk, hogy a ``cdrecord'' 20-as szinten fusson valósidőben, míg az ``updatedb'' a 0-son. Ezzel biztosítjuk, hogy az írás szempontjából kritikus művelet magasabb prioritást kapjon, mint a kevésbé fontos frissítési művelet.
Mivel tudjuk a nice szinteket állítani? Jens készített egy user-space eszközt a feladat ellátására. A neve ``ionice''. Használata:
# ionice -n20 bash
Ez azt jelenti, hogy a bash valósidőben fut. A használat során figyelembe kell venni, hogy a nice szint öröklődik a fork során, így az összes ebből a shellből indított program valósidőben fog futni.
# ionice -n0 dbench 32
Ezzel a paranccsal 0-ás szinten futtatjuk a ``dbench'' nevű programot, amely kizárólag akkor fog csak futni, ha a diszk éppen idle állapotban van.
Az új processzek számára alapértelmezett IO nice szint 10.
Jens Axboe levele, patch, magyarázat itt.