Memória swap-ként való felhasználása

Címkék

Egy érdekes cikk jelent meg a napokban a KernelTrap-on. A cikk szerzője azzal az ötlettel állt elő, hogy a rendszer fizikai memóriájának egy részét swap területként használja fel. A cikk írója abból a feltételezésből indult ki, hogy a memória hozzáférés sokkal gyorsabb, mint a lemezműveletek (nagyobb sebesség, nincs seek-elés miatti overhead, stb.), és olcsóbb is, mint a gyors storage megoldások. Az elképzelés a következő:

Tételezzük fel, hogy van egy Linux rendszerünk, amely érezhetően lelassul, mikor az adatokat visszatölti a lemezen levő swap területről a memóriába (swap in). Mint tudjuk a lemezműveletek sok százszor lassabbak, mint a memória műveletek. A cikk írója úgy okoskodik, hogy ha a merevlemezen levő swap területet lecseréljük valamilyen memória alapú egységre (mondjuk IDE-re dugható DoM-ra (disk on module)) akkor felgyorsíthatjuk a lapozási folyamatot.

A cikk írója ezután a következőt javasolja: ne memória diszket alkalmazzunk, menjünk tovább. Tegyünk a gépbe még memóriát, azon hozzünk létre ramdisk-eket, készítsünk rájuk swap területet, és használjuk azokat swap-ként (a Linux képes file-ra is swap-elni, nem csak partícióra). Magyarul valami ilyesmire gondolt:

ramdisk_size = 131072

(Grub-ba vagy LILO-ba)

mkdir /swapram

mkdir /swapram/rd10

mkdir /swapram/rd11

mkdir /swapram/rd12

mkdir /swapram/rd13

mke2fs /dev/ram10

mke2fs /dev/ram11

mke2fs /dev/ram12

mke2fs /dev/ram13

mount -t ext2 /dev/ram10 /swapram/rd10

mount -t ext2 /dev/ram11 /swapram/rd11

mount -t ext2 /dev/ram12 /swapram/rd12

mount -t ext2 /dev/ram13 /swapram/rd13

dd if=/dev/zero of=/swapram/rd10 bs=1024 count=129030

dd if=/dev/zero of=/swapram/rd11 bs=1024 count=129030

dd if=/dev/zero of=/swapram/rd12 bs=1024 count=129030

dd if=/dev/zero of=/swapram/rd13 bs=1024 count=129030

mkswap /swapram/rd10/sw 129030

mkswap /swapram/rd11/sw 129030

mkswap /swapram/rd12/sw 129030

mkswap /swapram/rd13/sw 129030

chmod 0600 /swapram/rd10/sw

chmod 0600 /swapram/rd11/sw

chmod 0600 /swapram/rd12/sw

chmod 0600 /swapram/rd13/sw

swapon /swapram/rd10/sw

swapon /swapram/rd11/sw

swapon /swapram/rd12/sw

swapon /swapram/rd13/sw

A cikkből nagy flame lett. A flamelők két táborra szakadtak. Az egyik azt állítja, hogy minek a RAM-ban swap, ha kevés a memória, akkor tenni kell a gépbe, és nem swap-ol a rendszer. A másik tábor azt állítja, hogy a swap szükséges dolog, és ha már swap-elni kell, azt jobb a gyorsabb RAM-ban megtenni, mint merevlemezen.

A cikk itt. Érdemes elolvasni a hozzászólásokat is. Vélemény?

Hozzászólások

Ez nem kb. arra jó, hogy Lvedd a memorybóla swap filerendszer méretét ?:) Mi értelme van memórián belül dobálni a cuccokat ? akkor már inkább egyben írja ki.

A másik : itt áll 750 Mb swapem (2.4-nek még kellett), viszont 2.6 már baszik basználni...

Szerintem ennek akkor van értelme, ha a swapként használt memória nem a rendszermemória, hanem valami lassabb egységen van. Pl. a videókártya RAM-ja, esetleg a hangkártyáé (mint a Graviseken), stb.

Amúgy meg minek elvenni a MM alrendszertől, ha aztán lassabb swapként kapja vissza? :o

Most lehet valamit nem ertek, de nem egyszerubb lenne akkor a swap-et egy az egyben kikapcsolni? Ugyanugy a memoriaban tartana mindent, sot, nem menne keresztul a swap alrendszeren sem.

A kernel a teljes "szabad" memorat filerendszer read cache-nek hasznalja. Irdatlanul gyorsan kepes a becachelt page-eken filemuveleteket vegezni. probalj ki mennyi egy cat nagyfile >/dev/null eloszor, majd masodszor, ha befer memoria cache-be.

Ha valaki ebbol lecsip, es swap-ot csinal belole, akkor kevesebb cuccot er el memoria cachche-ben. Persze ilyenkor a regen hasznalt dolgokat kiteszi swap-re, es onnan tolti vissza ha szukseges. Ez persze wincsi sebesseg.

namost: ha memoriabol csinalsz swap-ot akkor a kovetkezo cseret hejtod vegre:

kevesebb gyakran hasznalt dologgal tudsz memoria cache sebesseggel dolgozni, es tobb ritkan hasznalt dolog swap-elesi sebesege no.

magyarul: baromsag.;-))

A ritkán használt, de fontos, menteni kívánt fájljaidat írd ki cdre/dvd-re, töröld le a hddről, hogy legyen helyed, a lementett cd-t/dvd-t rakjad fel iso-ban a hdd-re, (auto)mountold. Nagyon ritkán fogod használni, de akkor gyorsabb lesz mintha a cd-t/dvd-t olvasnád fizikailag, és fog egy loop-ot is, de sebaj.

Annakidején azt tanították, hogy swap-ra mindenképp szüksége van a rendszernek, mert a memóriakezelés úgy lett kialakítva, hogy feltételezi a swap jelenlétét. Nem tudom manapság mi a helyzet Linux alatt ilyen téren, de az biztos, hogy inkább a memóriakezelést kellene úgy alakítani, hogy ne legyen swap függő, mint hogy olyan gányolással próbálkozzanak az emberek, hogy a fizikai memóriából faragnak le egy darabot a swapnak...

Linux swap nelkul: tokeletesen mukodik, beagyazott rendszeren igy hasznaltuk (2.4.x), de ki lehet probalni: man swapoff

Mulatsagos viszont, hogy anno regen w3.11 alatt tenyleg gyorsitotta ez a trukk a gepet, mert igy mikor egy progi megkerdezte, hogy mennyi operativ ram van szabadon, akkor kapott egy kis szamot, aztan nem terpeszkedett el annyira, ha meg megis kellett neki, akkor 'swap-bol ugyan :)', de volt.

JEZUS MARIA SZENT JOZSEF!!! (c) Oscar

A hulye marhaja. En mar evek ota swap nelkul tolom a Linuxot, es csak ET-hez rakok swapet. De miota 512Mb ramom van, ahhoz se. Mindjart megnezem ki ez az idiota, hogy a jovoben nevrol tudjam kit kell flamelni.

Szerintem elvadult az ötlet.

Persze ha van ideje rá, akkor

csináljon teszteket, aztán meglátjuk...

(vagy mondhattam volna STATISZTIKÁT is... :-)) )

A rendszer swapot ramdiskre rakni sztem is hülyeség, viszont hasonló ötlet már nekem is eszembe jutott, amikor pl audacityvel szerkesztek egy filet, az elég sokáig elszüttyög a saját lemezre kiírt swap-szerű cuccaival, de hasonlóan lomha a glame is. Ezeket ramdiskre irányítani sztem nem hülyeség. De gondolom ez meg nem nekem jutott először eszembe ;-)

úgy érted, hogy a temp könyvtárat ramba rakni? Nem, nem neked jutott eszedbe először. :-)

Akkor eleg szegenyes a fantaziad :)

Az ok egyszeru:

1. szokas szerverekre csak a cd imidzset feltenni es nem jukeboxot hasznalni. Vinyorol gyorsabb mint cd - rol.

2. amint lementetted cd - re, a dolog backuplva van, adatveszts minimalizalva, de siman elofordulhat hogy szukseged van a benne tarolt informaciora. Es ha nem kell irni bele ott is gyorsabb nagysagrendel a hozzaferes, mint cd/dvd - rol ...

Pontscho / fresh!mindworkz

Ui: attol a cimben felvetett dolog oltari fosnagy baromsag. Ha megis igaz hogy kell a kernelnek swap mindenkepp, akkor talan most nem is minositenem a VM - et ....

a VM alrendszer az egyik legbonyolultabb dolog egy OS-ben, komplex algoritmusokkal. barmily hihetetlen, lehet h jobb teljesitmenyt ersz el ha az x MB memoriad mellett hasznalsz meg y MB swapet is, mint ha kikapcsolnad a swapet. Matt Dillon irt errol anno egy nagyon jo cikket: klikk [www.daemonnews.org]

Bah.

Ha rovid a kardod toldd meg egy lepessel. ~ Ha keves a memoriad, toldd meg egy kis swappel.

A swap, kis kerekitessel a fizikai memoria (tobbek kozt) biztonsagi tartaleka. (Arra az esetre pl ha valami miatt kifutnank a rendszerben rendelkezesre allo memoriabol)

Jo poen a memoriabol elvenni egy szeletet, hogy beleirjuk azt ami nem fer a memoriaba.

mozilla ad bar utan mar semmi sem lep meg.

>Akkor eleg szegenyes a fantaziad :)

néha tényleg az :)

>1. szokas szerverekre csak a cd imidzset feltenni es nem jukeboxot hasznalni. Vinyorol gyorsabb mint cd - rol.

tudom, és használom is.

>2. amint lementetted cd - re, a dolog backuplva van, adatveszts minimalizalva, de siman elofordulhat hogy szukseged van a benne tarolt informaciora. Es ha nem kell irni bele ott is gyorsabb nagysagrendel a hozzaferes, mint cd/dvd - rol ...

ez is teljesen oké. (bár épp azért írja ki az ember lemezre/szalagra hogy ne a hdd-n foglalja a helyet :P)

akkor félreértettél, vagy félreérthetően írtam.

arra akartam rávilágítani, hogy egyszerűbb otthagyni azt a pár fájlt a gépen, mint kiírni, és iso-ban visszamountolni.

lehet hogy nem volt jó hasonlat. bocs.

biciklitároló off

A swap teruletre nem csak akkor van szukseg, amikor elfogy a memoria.

Tobb mas eset kozul ki lehet emelni pl azt, amikor van par processzed, ami hatalmas memoriat foglal, de user inputra var mar tobb perce (vagy oraja, pl: getty), es emellett eleg sok memoriat eszik. Ezeket, mivel nem futnak, egy okos VM rendszer a swapbe teszi meg akkor is ha epp van eleg hely a memoriaban, gondolva arra, hogy a felszabaditott helyre egy jo nagy adag cache kerulhet, ami sokkalta hasznosabb, mintha egy amugy nem hasznalt program csucsulne a memoriaban.

Es az rossz? En is ugy szereztem a "hirnevemet", hogy indultam DPL valasztason, az is hasonlo nagy baromsag volt mint ez (ok, lehet hogy ez a srac komolyan gondolja, akkor sajnalom :), aztan LinuxTag-on nehany ingyen-jolt meg 1 ebed lett a jutalmam, meg az hogy csomoan meglattak a nametag-emet, es majd' meghaltak a rohogestol.

Szerintem megerte effele hirhedtsegre szert tenni :)

Háááááát szerintem meg nem is annyira elvadult ötlet.

Mire is alapozom ezt a kijelentést? Manapság 1 Giga memória elég megfizethető desktop gépekben, most vonatkoztassunk el a szerverektől, mert ott az isten ramja is kevés. Otthoni felhasználónak viszont az 1 giga még sok is. A saját rendszerem cirka 150-250 memóriát eszik általános dolgok (net, filmezés, fejlesztés, levelezés) közben. Viszont előfordul elég gyakran, hogy egy-egy processz -főleg java és mozilla- úgy elszáll, hogy öröm nézni amint a ram rohamosan csökken és a rendszer őrült swappelésbe kezd, majd egy idő után sikerül a processzt kilőni. Ezen idő alatt a vinyón lévő swap állandóan cserélődik ami a lemezt bizony igénybe veszi és az én halló idegeimet is. Ha egy-egy ilyen elszabadult folyamat viszont csak a ram-ot terheli akkor a processzeket futása is hamarabb befejeződik és maga a swap művelet is sokszorta gyorsabban hajtódik végre. 512mb ram és 512mb swapmemória ideális választás lehet egy otthoni desktop környezetben. Nem szabad elfelejteni, hogy 512 mb ram mellett már egy vmware is szépen kényelmesen elfutkározik.

Ez persze privát vélemény, de én látok benne fantáziát.

De ha swap nelkul hasznalod egyben az 1G memoriad, akkor is ugyanolyan gyorsan megtelik. Arrol meg nem is beszelve, hogy egy cache-elesi es egyeb algoritmusokat nem programhibara (memory leak-re) kell optimalizalni. Tehat gyenge labakon all, amit irtal.

Szerintem (ha tenyleg igaz az, hogy a VM swap jelenleten alapszik) inkabb ujabb VM algoritmust kellene fejleszteni, nem pedig a jelenlegi helyzetet tovabb kavarni...

ROTFL!

Kiveszem, majd ugyanoda berakom. Ennek ertelme kb. egyetlen helyen van: Ket formas comb kozott...

udv

Hat, errol egyvalami jut az eszembe:

"Memoriabal swappolsz, b.zi-e vagy?"