A tuning mester Molnár Ingo küldött egy levelet az LKML-re, amelyben egy új patch-ről számol be.
Mint írja, többen is szóvá tették a listán, hogy a 2.6-os Linux kernel nem használható komolyabb audio munkákra, mert borzasztóan nagy az ütemezési latency-je (például a JackIt fejlesztők is reklamáltak emiatt).
Ingo megnézte a 2.6.7-es kernel latency-jét, és azt tapasztalta, hogy valóban rossz. A latency akár 50 msec (!) is lehet, amely simán reprodukálható normális terhelés mellett egy olyan gyors 2GHz+ x86 rendszeren is, amely teljesen preemptive kernelt futtat.
Ezért Ingo és Arjan van de Ven végigmentek a kernel különböző funkcióin és megvizsgálták azok latency-jét. A munka eredményeképpen megszületett egy patch, amely teljesen 0-ról íródott, teljesítményben egyenlő a korábbi 2.4-es kernelhez készült lowlatency patchek teljesítményével, de más dizájnnal rendelkezik, mások a hatásai és más megközelítésből ered.A lowlatency patch-csel ellentétben ez a patch nem ad új ütemezési pontokat a kernel forráshoz, hanem a már meglevő gazdag választékból használja fel azokat, amelyek nem voltak eddig használatban. A patch célja, hogy eltávolítson minden olyan latency forrást, amely nagyobb, mint ~1 msec latency-t generálna a rendszerben. A tesztek során a patch felhasználása mellett a fejlesztők próbáltak olyan terhelést generálni a teszt rendszeren, amely audio ``ugráshoz'' vezetett volna, de nem tudtak olyan workload-ot generálni, hogy a latency ~1 msec fölé elmelkedett volna.
A patch magasabb szinten konfigurálható, mint a 2.4-es lowlatency patch. Van egy .config opció (CONFIG_VOLUNTARY_PREEMPT), amellyel engedélyezni lehet a voluntary preemption-t, emelett van /proc/sys kapcsoló és boot-idejű paraméterezési lehetőség is.
# A voluntary preemption be/ki kapcsolása (ha a CONFIG_VOLUNTARY_PREEMPT kernelben van)
echo 1 > /proc/sys/kernel/voluntary_preemption
echo 0 > /proc/sys/kernel/voluntary_preemption
# preemptible kernel funkció be/ki kapcsolása (ha a CONFIG_PREEMPT a kernelben van)
echo 1 > /proc/sys/kernel/kernel_preemption
echo 0 > /proc/sys/kernel/kernel_preemption
Boot-idejű opciók:
'voluntary-preemption=0/1' és 'kernel-preemption=0/1'
A patch a 2.6.7-bk20 kernelhez készült, és több olyan hibát is fixál, amelyet a készítők a fejlesztés közben találtak. A patch működik a fejlesztőknek (tm), de óvatosan használja mindenki! A szerzők minden visszajelzést szívesen fogadnak.
Bővebben Ingo levelében és a thread-ben itt.
A patch letölthető:
http://redhat.com/~mingo/voluntary-preempt/voluntary-preempt-2.6.7-bk20-H3
Aki a vanilla 2.6.7 kernelen szeretné kipróbálni a patchet, az töltse le ezt:
http://redhat.com/~mingo/voluntary-preempt/voluntary-preempt-2.6.7-vanilla-H3