CPU affinitás

A HupWiki-ből...

Az Linux kernel egyik régóta hiányzó funkciója az a képesség, hogy meg tudjuk határozni az SMP (több processzoros) rendszereken, hogy az egyes processzek melyik processzoron fussanak. A 2.5-ös fejlesztői kernelben - Robert M. Love-nak, a preempt kernelpatch szerzőjének köszönhetően - megjelentek a processzek bizonyos CPU-hoz való rendelését segítő rendszerhívások.

A CPU-hoz rendelésnek (affinitásnak) két fajtája van. Az egyik az ún. "soft", a másik pedig a "hard" CPU affinitás. A "soft" affinitás az ütemező azon tulajdonsága, amely azt biztosítja, hogy az egyes processzek lehetőleg mindig ugyanazon CPU-n fussanak. A 2.4-es kernel ütemezője sajnos nem nagyon volt felkészítve erre, benne a CPU "soft" affinitás gyenge volt. Ha az ütemező természetes affinitása nem elég kifinomult, akkor a processzek ide-oda ugrálhatnak a rendszer processzorain, amely egy nemkívánatos működése az operációs rendszernek. Nem nehéz belátni, hogy az állandóan ide-oda "költöző" processzek rosszabb hatásfokkal futnak, mintha többnyire egy CPU-n futnának.

A természetes, vagy "soft" CPU-hoz rendelés ellentétje az ún. "hard" CPU affinitás, amikoris valamilyen rendszerhívás segítségével rögzítünk egy folyamatot egy megadott processzorhoz. A leendő (megjegyzés: azóta már megjelent) 2.6-os kernelben levő O(1) ütemező - köszönhetően Molnár Ingo-nak - nagyon jó természetes CPU affinitással rendelkezik. Ez azt jelenti, hogy az O(1) ütemező lehetőség szerint igyekszik arra, hogy egy folyamat lehetőleg ugyanazon processzoron fusson. De mi van olyankor, ha én azt szeretném, hogy egy több processzoros gép egyik processzora mondjuk dedikáltan egy feladattal törődjön?

Ekkor jön képbe a "hard" CPU affinitás, azaz, egy rendszerhívás segítségével képes vagyok meghatározni, hogy egy bizonyos PID-del (process ID) rendelkező folyamat melyik CPU-n fusson.

Külső hivatkozás