A kernelfák erdeje - Linux VM régen és most

Címkék

Többször volt szó ezen az oldan a Linux kernel virtuális memória management-jéről. Egyrészt mert érdekes téma, másrészt mert ennek a kernel funkciónak a működése látványos, ugyanakkor kritikus, és fontos. Ezen állhat, vagy bukhat egy szerver működése. A linux a virtuális memóriakezelést valósítja meg.

Lapozásos virtuális memóriakezelést használ, ahol a fizikai memóriát kiegészíthetjük a winchesterről vett virtuális memóriával (page vagy swap terület). A teljes memóriát lapokra osztja, ezen virtuális lapokat rendeli hozzá az egyes folyamatokhoz, és gondoskodik róla, hogy az éppen szükséges lapok a fizikai memóriában legyenek. Itt kell megemlíteni, hogy a Linux használja a virtuális tárkezelés mindkét (gyakran összekevert) fajtáját, a lapozást (paging) és a tárcserét (swapping) is.

Lapozásnál folyamatoktól függetlenül, a rendszer arra ügyel, hogy a szükséges lapok a fizikai memóriában legyenek, ha azok esetleg diszken vannak, akkor gondoskodik memóriába olvasásukról, illetve a ha a fizikai memória teli van, akkor a ritkábban használt lapokat a diszkre írja. Tárcserénél pedig a rendszer figyelemmel kíséri az egyes folyamatok aktivitását is, es ha szabad memóriára van szükség, egy inaktív folyamat egészét háttértárra írja, felszabadítva ezzel a folyamat által használt összes fizikai memóriát.

A Linux a két módszer keverékét használja: amíg bővében van a memóriának, csak egyes lapokat lapoz ki/be, de például ha úgy látja, hogy egy folyamat hosszú ideje inaktív, és nem csak egy-két lapnyi memóriára van szükség, akkor az adott folyamathoz tartozó összes fizikai lapot diszkre menti.Ami nem mindegy, hogy ezt hogyan teszi. Manapság két Linux VM van a köztudatban. Az egyik a mostani stabil kernelek VM-je (a 2.4.10-es kernelektől kezdve - ez Andrea Arcangeli (AA) munkája), a másik Rik van Riel VM-je, az ún. -rmap azaz reverse mapping megoldás. Arcangeli VM-je nagy felhördülést okozott a hackerek egy része között. Többen állítják, hogy az AA féle VM sokkal gyorsabb, és jobban ellenáll a swap strom-oknak, mint a Reil féle -rmap.

A másik oldalról viszont azt kiabálják, hogy a Riel féle VM implementáció stabilabb, és az, hogy az AA féle VM 4-5%-al gyorsabb esetleg, az senkit nem érdekel.

Nekem nem tisztem eldönteni a vitát, de lássunk véleményeket pro- és kontra. Döntse el mindenki maga a dolgot.

Egyik vélemény:

Moshe Bar készített egy tesztet, amelyben szembe állította az AA VM-et az -rmap -al.

A tesztkörnyezet (vas):


A tesztre egy no-name dual Pentium IV 1.5-GHz-es rendszert állított össze 100-MHz bus-szal és 2 GB RAM-mal. A rendszer egy dual SCSI Adaptec 7896 controlleren futott, a kontrollerekre SCSI 10,000 RPM IBM 18-GB disk-ek voltak aggatva. A swap terület mindegyiken 1.7 GB volt egyforma prioritással.

Az összes teszt X nélküli környezetben futott, nem használt framebuffer eszközt, és óvakodott attól , hogy az AGP használja a memóriát. Az összes filerendszer Ext3 volt.

A kernelek:

A gépre az alábbi kernelek kerültek telepítésre:

- Standard 2.4.18pre3 kernel


- Alan Cox 2.4.18pre3 kernele Rik van Riel rmap-11c patch-jével (a reverse-mapping patchelt kernelt a Red Hat adta a benchmark-hoz).


- Red Hat 2.4.9 kernel a 7.2-es disztribúcióból


- Andrea Arcangeli 2.4.18pre2aa kernelfája

A teszteléshez speciális programot használt Bar. Célja az volt, hogy mérhesse a VM-ek stabilitását, teljesítményét és olyan helyzetet idézzen elő amiben akár a VM bele is halhat:

Allocator.c

void main(void) {


/* allocate lotsa pages and let then things calm down a bit */

void *p = (void *)calloc(350000000, sizeof(int)) ;


/* calloc() allocates memory for an array of n elements of size


specified and returns a pointer to the allocated memory. The memory is


set to zero, therefore actually having VM demand pages */

sleep(200);

/* let this quiet down again and free it all up */


free(p);

}

Ez feltölti a lehető legtöbb szabad memóriát (a kernel mindig tart fenn magának valamennyit, tehát az összeset nem töltheti fel), és utána erősen el kezdi használni a kb. 730MB swap területet mindkét eszközön. Ezután írt egy C shell scriptet, amely segítségével meghívta a swapper programot és lefoglalta a memóriát, majd felszabadította , és kezdte újra.



A teszt eredményeket pontosan megnézheted itt.

A tesztek során a 2.4.18pre3 kétszer lehalt, ki kellett kapcsolni a gépet, és újraindítani. A 2.4.9 és a 2.4.17 kernel nem crash-elt le a tesztek alatt.

A tesztek azt mutatták, hogy a régi Riel féle (2.4.9 RH disztro) VM néhol gyorsabb volt, az AA féle VM-nél. Másrészről a 2.4.18pre a Riel féle -rmap patch-el kétszer is crash-elt.

A Bar féle következtetés:

Jó VM-et írni, egy nagyon jó vizsga az OS hackereknek. A tesztek elvégzése után Bar mindenképpen az AA VM-es kernelek mellé teszi le voksát. Szerinte a nagy terhelésű szervereken érdemes használni a 2.4.17 vagy a 2.4.18pre2aa kerneleket (jelen pillanatban persze). Szerinte az -rmap (Rik van Riel féle reverse mapping) egy nagy ígéret, de javítani kell a stabilitáson. És végül a Red Hat féle 2.4.9 kernel jó választás, gyors és stabil.

Tehát Bar egyértelműen az Arcangeli VM mellet dönt.

Nézzünk egy másik véleményt:

Részelt a legutolsó Alan Cox interjúból (amelyet egészben is olvashatsz majd itt, ezen az oldalon):

[...]

JA: Linus egyetértett abban hogy nagyobb változások legyenek a stabil kernel VM-jében. Meg van elégedve az új (AA féle) VM-el?

Alan Cox: Nem igazán. Azt látom, hogy kb. 20% lassabb a teljesítménye. Nem hinném hogy Andrea VM-je valami technikai csoda lenne. Viszont Linus már egyszer így döntött (hogy ez legyen a 2.4-ben a 2.4.10-től kezdve), és most nem akar visszafelé fordulni. Viszont abban sokan egyetértenek, hogy a 2.5-ös kernel fejlesztésénél a Riel féle -rmap-al kéne folytatni a fejlesztést.

[...]

Tehát megint nem lettünk okosabbak, a tesztek azt mutatják, hogy az AA féle VM stabilabb, néhol gyorsabb is az -rmap-nál. A neves fejlesztők mégis azt mondják, hogy nem ez a jövő.

Azért az jelzés értékű, hogy Cox a patch-jeibe (-ac) az -rmap-ot teszi. Sőt tegnap meglepődve láttam, hogy Molnár Ingó (mingo) új O(1) scheduler patch-jében is feltűnt az -rmap.

Ilyenkor az ember bizonytalan. Ki mond igazat? Melyiket használjam? Linus tévedett amikor az AA féle VM mellett döntött?

Döntse el mindenki maga, én mindenesetre este forgatok egy sched-O1-2.4.17-rmap-12c-K2 kernelt, és nekiállok tesztelni. Az eredményekről beszámolok.

Hozzászólások

Ize, ez a flame cirka tobb honappal ezelott volt =). Azota nem nagyon tettek szova a hibakat. Azert elmondom: sokkal konnyebb mas irasaban hibat talalni.

Pelda: mondtam egyszer valakinek hogy irjon egy cikket, hogy ezt kiprobalhassa. meg is irta a cikket, es soronkent 4-5 _sulyos_ helyesirasi hiba volt benne. Az illeto rafogta a billentyuzetere.

Es nem mentegetozeskent mondom: aki neha megnezi a cikkek megjelenesenek idopontjat, az lathatja, hogy sokszor ejfel, hajnali 2, reggel 6 a megjelenes idopontja. kerek mindenkit, hogy ha nem jelentkezik onjelolt korrektornak, aki LEVELBEN jelzi, hogy mik a hibak, akkor ne hibaztasson engem ezert. Nem olyan konnyu ezt csinalni higyjetek el.

Udv: trey

Hello.

Ezek utan kivancsi vagyok, hogy te milyen eredmenyre jutsz.

Udv.

En is ra szavazok, bar tudom, hogy ezzel a Linus partiak gyuloletet szabaditom magamra =). Az oreg Cox nekem meg soha nem okozott csalodast, bizom benne.

Mivel az egesz oldalt egyedil szerkesztem, irom a cikkeket, es ontom vegleges formaba csak nekem rohatod fel a dolgot. De most mit mondjak erre? Minden cikk utan valaki kijavitja a helyesirasi hibaimat. Nagyon orulok neki, valoban az irc kisse megkoptatta a dolgot. Viszont mar unom, hogy minden cikkhez a hozzaszolasok 30% a helyesirasi hibakkal foglalkozik. HA valaki jelentkezik a korrektor szerepre azt szivesen veszem. Levelben lehet jelezni a hibakat, es amint tudom kijavitom. Viszont jobban orulnek, ha a hozzaszolasok inkabb a cikkek tartalmaval foglalkoznanak, es nem a helyesirasi hibak szamaval. BTW: javaslom megnezni a hozzaszolasok nyelvtani tartalmat, sokszor sirni van kedvem.

Ettol fuggetlenul igazad van, a hibakat kijavitom.

Azert megegyszer megkernek mindenki inkabb a cikkek tartalmat nezze.

Udv:

trey

>Egyébként ezek a helyesírási hibák tipikusak, olyan
>értelemben, hogy a hibák 90%-a ugyanolyan jellegű, tehát
>ha megszokod ezt a két-három dolgot, akkor az arány
>drasztikusan javul.

Erre ne vegyel merget, az elmult masfel eves IRC support meglatszik a helyesirasomon. Azt meg hiaba mondanam, hogy regen kituno voltam helyesirasbol, senki nem hinne el =).

Na kezdem mar unni a talalgatasokat =). Nem allitom hogy egy angol szinkrontolmacs vagyok DE:

"Then, I ran one instance of a simple C shell script
to repeatedly run a..."

ezt talan meg en is le tudom forditani. Lehet menni reklamalni Bar-hoz.

Udv: trey

Udv.

nem tudom, hogy a mai gepek lehetosegeihez kepest mennyire mervado, amit irok, de azert leirom.

van egy pentium 200as gep itten, 32 mega rammal, 128 mega swappal. ket kernelt szoktam rajta hasznalni: 2.4.5 [+xfs 1.0.1 +grsec valamennyi] es 2.4.14 [+xfs 1.0.2 +grsec szinten most nemtommennyi (;].
a gep bar szerverfunkciokat is ellat, nem ez adja a load java reszet, hanem a desktop dolgok, X, mp3, web, nemi forditas, ilyesmi...
meresekkel nem tudom igazolni, de erezheto a ketto kozott kulonbseg, megpedig a 2.4.14 tunik gyorsabbnak. de hogy ez mennyiben a VM miatt van, es mennyire az egyeb fejlesztesek miatt, azt nemtudom.

sz

Hozzáállás kérdése. Mármint az IRC-hez való hozzállásé. Én irc-en is:
a; igyexem helyesen írni
b; ha vmit nem jól írok, igyekszem tudni róla, hogy ott hibáztam, vagy szándékosan írtam "szlengül", de tudom közben, és végiggondolom, hogy hogy is van jól. (lásd a; pont x-et tartalmazó szó:) )
Szerintem hozzáállás kérdése, hogy az ember az interneten próbál-e helyesen írni.
Büszkélkedve hadd meséljem el: Egyszer (nemrégiben) mikor a volt középiskolai számítestechnika tanárommal beszélgettünk, megjegyezte, hogy feltün?en jó a helyesírásom az e-mailekben, amiket publikus levlistákra írok, és ? is olvas, és ezzel ellentétben viszont nagyon sok tanárnak klasszisokkal roszabb helyesírása van ue. fórumokon mint nekem. Pedig anno az irodalom órán írt dolgozataim helyesírása mindig 1-2-es körül volt. De csak azért, mert nem tudtam egyszerre a tartalmora, és a helyesírásra is figyelni... Érettségiig idomítottam magam ezügyben, és most "ez üt vissza" :)

Probaltal mar meg egy internetes Portalon napi 4-5 cikket irni (fel ev alatt a megjelent cikkek szama tobb mint 600) , amelyben esetenkent 12 ezer szo van?

Akkor rajonnel, hogy ez nem is olyan konnyu feladat.

Te itt osszesen 5-7 mondatot irtal le, amelyben az alabbi hibakat talaltam:

- számítestechnika - ilyen magyar szo nincs
- roszabb - ilyen magyar szo sincs (rosszabb)
- ezügyben - szerintem ez helyesen "ez ügyben" - de ebben nem vagyok biztos

BTW: a hozzaszolasid tobbnyire olvashatatlanok, mert a ű ő betuk helyett rendszerint ? jel van. Irj legyszives ekezet nelkul, vagy tanulj meg hosszu magyar ekezetes betuket weben irni (miattam lehet kalapos is csak ne ? legyen)

Ugye milyen konnyu mas munkajaban hibat talalni? Tobbnyire amikor egy cikket irok, arra koncentralok, hogy az szakmailag helyes legyen, ne irjak oriasi hulyesegeket. Termeszetesen a helyesiras is fontos. Altalaban visszaolvasom, es kijavitom a hibakat. Viszont munka mellett arra nincs idom, hogy meg valami helyesirasellenorzo programot is futtassak a cikkeken.

Udv : trey