Linux

Linux 2.6.0: CPU affinitás

Címkék

Folytassuk a megjelenés előtt álló 2.6-os Linux kernellel való mélyebb ismerkedést. 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ő 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.

Robert M. Love alkotta meg ezeket a rendszerhívásokat, amelyek a 2.5.8-pre3-as fejlesztői kerneltől érhetőek el. A használatukhoz legalább 2.3.1-es glibc szükséges.

Hogy hogyan tudjuk használni? Először is szükségünk van egy több processzoros rendszerre (vagy legalább egy Intel HyperThreading technológiával rendelkező gépre). A szükséges stuffokat letölthetjük a következő helyről:

http://www.kernel.org/pub/linux/kernel/people/rml/cpu-affinity/

A szükséges kernelpatchek is megtalálhatóak a fenti címen, de ha 2.6.0-testX kernelt futtatunk, akkor ezek már szükségtelenek. Ha SMP kernelt futtatunk, akkor nincs más teendőnk, mint letölteni a affinity-run.c forrást, és lefordítani a "bind" névre hallgató programocskát:

wget http://www.kernel.org/pub/linux/kernel/people/rml/cpu-affinity/affinity-run.c

gcc affinity-run.c -o bind

Ez egy egyszerű parancssori programocska, amelynek a működése az alábbi:

./bind pid cpu_mask

Azaz meg kell adni, hogy mi a futó processz PID-je, és hogy melyik processzoron szeretnénk azt kizárólag futtatni.

Ha például az MySQL adatbázis szerverünk a 304-es PID-del fut, és azt szeretném, hogy a későbbiekben csak a 2-es CPU-n fusson, akkor a következőket kell tenni:

sunshine:/home/trey# ./bind 304 2

pid 304's old affinity: 00000003

pid 304's new affinity: 00000002

Arra figyeljünk, hogy az affinitás állításához "root"-nak kell lennünk!

Ha azt szeretnénk, hogy a többi processz ne használja a 2-es CPU erőforrásait, akkor azokat költöztessük át az 1-es CPU-ra. Erre a legegyszerűbb megoldás az, ha kihasználjuk, hogy a CPU affinitás a fork() hívása után öröklődik. Azaz, ha az init-et az 1-es CPU-hoz rendeljük, akkor az összes gyerek (child) processz az 1-es CPU-n fog futni.

Ezek az új rendszerhívások hasznosak leszek azoknak, akik ún. virtuális processzorokat is használnak gépükben. Mint arról korábban írtam a Hyperthreading-képes processzorokhoz (is) nagyon hasznos lesz ez az új feature.

Referencia:

Robert M. Love: Kernel Korner: CPU Affinity

A devfs-nek is lassan búcsút mondhatunk

Címkék

A 2.6-os Linux kernel számos új dolgot hoz a Linux felhasználók életébe. Ilyen új dolog a "nem is olyan rég" felbukkant devfs alrendszer eltűnésének kezdete. A devfs a 2.6.0-test6 kerneltől kezdve "obsolete" azaz elavult, idejétmúlt jelzővel illetett stuff lett.

Christoph Hellwig a következőket írta a patche mellé:

"Richard [Gooch] nem nyúlt hozzá lassan egy éve, és azóta csak bugfixek és az én változtatásaim kerültek bele a kernel csatolófelületbe. Senki nem állt elő azzal, hogy szeretné karbantartani és van helyette egy megfelelő helyettesítőnk a udev képében."Maga a devfs állandó harcokat szított a linux-kernel listán egészen a 2.3-es kernelbe való bekerüléséig. A devfs-t a legtöbb nagyobb Linux disztribútor nem engedélyezte a kerneleiben. Amikor egy alrendszer arra a sorsra jut, hogy nem használják széles körben, és a karbantartó sem foglalkozik vele, akkor az alrendszer sorsa megpecsételődik. Ez történt a devfs-sel is. Christoph írása szerint még kijavít néhány hibát, de ennél többet nem tesz. A 2.6-os lesz előreláthatólag az utolsó nagyobb kernelsorozat, amely tartalmazza a devfs-t.

R.I.P.

Christoph levele itt. Linus bejelentése (2.6.0-test6) amelyben a devfs "obsolete" jelzővel szerepel itt.



Linkek az új udev-hez:

Reprint-Kroah-Hartman-OLS2003.pdf

ols_2003_udev_talk

Managing dynamic device naming

What's needed to fix user-space device enumeration?

Trip report: the Ottawa Linux Symposium

Andrew Morton: 2.6.0-test6-mm3

Címkék

Andrew tegnap kiadta a 2.6.0-test6 kernelhez az -mm3 patchet. A patch két Intel patchet tartalmaz. Az egyik az MSI Interrupt patch (Message Signaled Interrupts) (korábbi cikk), a másik pedig az Intel EFI (Extensible Firmware Interface).

Valószínű, hogy ezeket egyelőre senki nem tudja majd kihasználni a szükséges hardver hiányában. A patchek azért kerültek bele az -mm fába, hogy az Intel programozóinak és fejlesztőmérnökeinek egy olyan kódbázist nyújtsanak, amelyen dolgozni tudnak. Lehetőleg senki ne engedélyezze a CONFIG_ACPI_EFI opciót ia32 platformon, mert el fog tűnni a PCI busza.Másik szót érdemlő változás az -mm fában az, hogy Andrew beletette a kernel Documentation/ könyvtárába a must-fix és should-fix listákat. Ettől azt várja, hogy az emberek átnézik ezeket a listákat és patcheket küldenek a bennük szereplő hibák ellen.

Azoknak akik patch készítésre adják a fejüket, hasznos lehet az Andrew által feltöltött patch-scripts-0.13.

Andrew jelezte, hogy a következő héten nem lesz elérhető, így aki patchet küld neki, az legyen türelemmel.

Andrew levele itt.

Runtime változtatható I/O ütemező a 2.6-os kernelben

Címkék

A 2.5-ös (pontosabban a 2.6.0-testX) fejlesztői kernelben számos erőfeszítés történt az I/O alrendszer jobbátételére. Ennek a munkának az egyik iránya az I/O ütemező - más néven "elevator" - működésének csiszolása volt. Az I/O ütemező feladata az, hogy megkísérelje a blokk I/O műveleti kéréseket olyan sorrendbe állítani, hogy az a legjobb teljesítményt adja. Mivel az operációs rendszerek felhasználása széleskörű (kezdve a PDA-któl, a desktop gépeken keresztül egészen a több processzoros kiszolgálókig), nyilvánvaló, hogy egy univerzális ütemező nem adhat maximális teljesítményt a legkisebb géptől a legnagyobbig. Ezért aztán nem is meglepő, hogy több fejlesztő több irányban indult el, és ennek eredményeképpen több "elevator" kód is született.

Boot időben vátoztatható időszelet értékek

Címkék

Andrea Arcangeli bejelentette az első -aa patchét a 2.4.23-pre6 kernelhez. Szerinte a legfigyelemreméltóbb új funkció az, hogy a kernelnek boot időben megadhatunk egy 'desktop' paramétert, amellyel kérhetjük a kernelt, hogy inkább a desktop funkcióknak megfelelően működjön.



Ismert tény, hogy a szerver és desktop gépek optimális beállításai nem minden esetben fedik egymást, így a boot időben változtatható tulajdonság hasznos lehet. Az új funkció legnagyobb előnye, hogy használatához nincs szükség a kernel újrafordítására.

A tapasztaltabb felhasználók a időszelet (timeslice) értékének konkrét megadásával (pl. HZ=500/HZ=50/HZ=200) változtathatják meg a kernel tulajdonságát.A ellenőrzésre a boot után a /proc filerendszeren keresztüli lekérdezéssel nyílik lehetőség az alábbi módon:

cat /proc/sys/kernel/{*timeslice,HZ}

Ez a kernel úgy tűnik, hogy szépen bootol x86-64 architektúrán is. Andrea szerint a patch egyelőre nincs olyan állapotban, hogy "éles" környezetben lehetne használni. Ennek nem a boot időben beállítható időszelet érték funkció az oka, hanem a patch egyéb változtatásai.

Andrea levele itt.

Seth Nickell lecserélné a korosodó 'init' procedúrát

Címkék

A GNOME-os Seth Nickell szíve szerint teljesen lecserélné a szerinte korosodó Linux "init" procedúrát.

Az általa elképzelt új indító-rendszernek az alábbi előnyei lennének:

1.) Egy teljes "services" keretrendszert adna (tartalmazná a "boot up" kezelését is)

2.) Jól össze lenne integrálva a desktop kezelőfelülettel

3.) elindítaná az X-et, és biztosítná a "login" lehetőséget ASAP (as soon as possible - amint az lehetséges)

4.) Lehetővé tenné a daemon binárisoknak, hogy azok közvetlenül hozzáadhassák a rendszer szervizeket az indítási folyamathoz, ne kelljen a disztro készítőknek/gyártóknak shell scripteket írniukSeth a OSNews-nak adott interjúban mondta el részletesen víziójának részleteit.

Az írást megtalálod itt.

Marcelo Tosatti: Linux 2.4.23-pre6

Címkék

"Hi,

Itt a -pre6.

Néhány ACPI javítás (a -pre5-ben bemutatkozó az USB "nem működik többé" problémának meg kellett oldódnia), támogatás az SCTP protokolhoz, x86-64/PPC/SH [kód] beolvasztás, network driver frissítések (EMAC, e1000, sk98lin), megaraid frissítés többek között.

Élvezd :)" - írta Marcelo a kernel listára.Letölthető patch-2.4.23-pre6.bz2

Marcelo level benne a változások teljes listájával itt.