Linux swap terület mini-HOWTO

Címkék

Linux terület mini-HOWTO

Randy Dunlap [rddunlap@osdl.org]

2002. október. 25, november. 01, november. 04

Micskó Gábor [trey@hup.hu]

2002. november. 03, november. 05



==========================================


Copyright (c) 2002 by Randy Dunlap

Copyright (c) 2002 by Micskó Gábor

Ez a dokumentum az LDPL (Linux Documentation Project License "http://www.tldp.org/COPYRIGHT.html") feltételeivel terjeszthető.


1. Bevezetés

2. Mennyi swap területet kell használni?

3. A swap terület korlátai

4. OOM (Out-of-Memory) killer

5. Swap terület beállítása

6. Swap terület kikapcsolása

7. A swap terület egyéb felhasználásai

8. CREDITS

9. Fordítások

10. Referenciák
1. Bevezetés

A Linux swap területet használ arra, hogy ki/vissza lapozza a "user space" adatokat akkor, ha virtuális memória terület kényszer alatt áll. A kernel kód és adat nem lapozható. A felhasználói kódot nem szükséges kilapozni a swap területre, mert azt mindig az eredeti helyéről kell olvasni. (nem lesz "szennyezett" - eredeti dokumentumban "dirty")

2. Mennyi swap területet kell használni?

Ezt nehéz megmondani. Ha a rendszered (és a programjaid) több memóriát használnak, mint amennyi a fizikai memóriád (RAM), akkor swap területre van szükséged. Általában elmondható, hogy annyi virtuális memóriát kell használnod, amennyi a fizikai memóriád (RAM) mérete. A Linux korábbi verzióiban (2.4-es verziókig - egészen a 2.4.9-ig) a fizikai RAM kétszerese volt az általános nézet (2* rendszer RAM mérete).

Természetesen dönthetsz úgy is, hogy nem használsz virtuális memóriát a rendszereden, mert teljesítmény csökkentő hatású, mert nincs elegendően [gyors] adattároló eszközöd amelyre lapozhatnál, vagy csak elegendően nagy fizikai memóriád van, amely soha nem lesz kihasználva teljesen, így a rendszered soha nem fog swappelni.

A swap terület kihasználtságát a 'free' parancs kiadásával, vagy a /proc/swaps vagy /proc/meminfo olvasásával tudod ellenőrizni.



A legtöbb Linux disztribúció telepítőprogramja - érthető módon - allokál swap területet a kis és közepes rendszereken.

3. A swap terület korlátai

A Linux 2.4.10 (és a későbbiek) és 2.5 kernel 32 swapfilet és/vagy swap eszközt támogat. A Linux 2.4.10-ig a swap eszközök/fileok száma 8 volt. Az x86 architektúrájú rendszereknél ezek a swap fileok vagy partíciók maximum 2GB méretűek lehetnek.

A blokkok méretét a swap területen a CPU architektúra oldal mérete (page size) határozza meg.

4. OOM (Out-of-Memory) killer

Ha a Linux VM nem talál szükség esetén allokálható memóriát, akkor elkezdi "kitenni" a használatban levő felhasználói adat oldalakat a swap-out queue-be, amelyet majd onnan ki fog lapozni.

Ha a VM nem tud memóriát allokálni, és nem tudja kilapozni a használatban levő memóriát, akkor a Out-of-memory killer elkezdi "megölni" a user-space processzeket. Az OOM működése pontosan le van írva a [2]-ben.

5. Swap terület beállítása

Swap területet allokálhatunk saját különálló partíción (biztonságosabb), vagy fileon egy meglevő filerendszeren.

Kettő (2) swap terület formátumot támogat a Linux kernel a Linux 2.1 fejlesztői kerneltől kezdve (egészen a 2.5-ig). Linux 2.0 a "verzió 0" swap területet igényli. A Linux 2.1.117 és későbbiek már támogatják a "verzió 0" és a "verzió 1" swap területet. Az 'mkswap' képes mindegyik formátum létrehozására. Nézd meg a 'man mkswap'-ot a bővebb információért.



Ahhoz, hogy swap területet fileon használjunk, meg kell határoznunk a méretét (max. 2 GB x86 rendszeren), és az alábbiakat kell végrehajtanunk (mint ahogy le van írva a 'man mkswap' -ban):

dd bs=1024 count=1M if=/dev/zero of=/path/to/swapfile.n

Ez a parancs egy 1GB-os filet (1 MB * 1024 bytes) hoz létre a "/path/to/swapfile.n"-on. Ezt meg tudod csinálni többször is, ha több swap filet akarsz használni (maxium 32 darab). A swap fileok nem lehetnek elszórtan; az egészet allokálni kell a használat előtt.

Természetesen tudsz allokálni swap területet meglevő partíció(i)don is. Ez egy kis előzetes tervezést igényel még a merevlemez felosztása (partícionálás) során. A swap terület, amely partición foglal helyet, be van jegyezve a /etc/fstab fileba ('man 5 fstab').

Például:


/dev/hda2 none swap defaults 0 0

/dev/hdb1 none swap defaults 0 0




Sőt több vincseszter esetén akár raidet is érdemes beállítani rá, és nagyon egyszerű! Nincs szükség az mkraid parancs, raidtab ... használtára. Swap partició esetén a sebesség számít, az adatbiztonság egyáltalán nem, így csak a csíkozás jöhet szóba.



Az előző /etc/fstab részlet így módosul:



/dev/hda2 none swap defaults,pri=1 0 0

/dev/hdb1 none swap defaults,pri=1 0 0



Már kész is a csíkozás. Így elvileg kétszeres sebességet érünk el (persze ez nagyban függ a vincseszterek kihasználtságától és sebességétől).



Miután a swap terület allokálva van, meg kell formázni (inicializálni), swap header információval kell ellátni. Ezt csak egyszer kell elvégezni:

mkswap /dev/hda2

mkswap /dev/hdb1

mkswap /work/swapfile.1

mkswap /work/swapfile.2

A partícion levő swap terület a boot folyamat init részében aktiválódik a "swapon" ('man swapon') parancs hatására. A swap területet, amely filerendszeren helyezkedik el, szükséges engedélyezni. Erre célszerű egy init szkriptet írni:

#! /bin/bash

swapon /work/swapfile.1

swapon /work/swapfile.2

A Linux 2.4-ben és a korábbi verziókban a swap fileok használata kevésbé volt robosztus, mint a swap eszközök (partíciók) használata, mert ebben az esetben fel kellett olvasni a metadata információkat a filerendszerről, és ez gyakran az OOM killer elhasalásához vezetett (deadlock) amikor az oldalakat (pages) és buffer_head-eket allokált a swap közben. Ez megváltozott a Linux 2.5-ben. A 2.5-ben a swap fileok használata semmilyen hátrányt nem okoz, összehasonlítva a swap eszközökkel (partíciókkal). A kernelnek nem kell memóriát allokálnia ahhoz, hogy a swapcache oldalt megkapja a diszktől.



Ez érdekes lehet, hiszen a swap fileokat könnyebben lehet kezelni mint a partíciókat, (könnyebb létrehozni, törölni, átméretezni), és könnyebb csíkozni (stripe). Lehetséges, hogy ez (swap file) fel fogja váltani a swap partíciót a Linux 2.6-ban. A lényeg: a swap fileok használata semmilyen negatív hatással nincs a teljesítményre, összehasonlítva a swap eszközökkel (partíciókkal).



Ha van két lemezed, akkor célszerű a swap fileokat mindegyiken elhelyezni, és egyenlő-prioritású csíkozást beállítani közöttük. Ez adja a legjobb raw swap I/O átviteli sebességet, viszont ez több seek-elést (keresés a hdd mechanika által) okoz a swap és a rendes fileok között.



Cökkenthetjük a seek-elési problémát, ha egy egész diszk területet kinevezünk swap eszköznek.



Igazából, ha a használt alkalmazásod már kárát látja a swap teljesíményének (túl sokat swappel) akkor több RAM-ra van szükséged.



6. Swap terület kikapcsolása

A swap területet ki lehet kapcsolni, ha nincs rá szükség. A swap terület kikapcsol, ha a rendszer leáll/újraindul a 'swapoff' parancs ('man swapoff') hatására.

swapoff /work/swapfile.1

swapoff /work/swapfile.2

swapoff /dev/hdb1

swapoff /dev/hda2

A 'swapoff' helyett használhatjuk a 'swapoff -a' parancsot, amely kikapcsolja az összes swap partíciót, amely be van jegyezve a /etc/fstab fileba (ez nem vonatkozik a swap fileokra, csak a swap partíciókra).

7. A swap terület egyéb felhasználásai
A swap eszközök (partíciók) használhatóak még az ún. "software suspend"-re (swsusp) (szoftveres hibernáció) a Linux 2.5-ben, és használható a Linux kernel összeomlása esetén, mint dump terület, hova a kernel dumpokat el lehet menteni. A swap területet fel lehet használni arra is, hogy megosztott swap területe legyen más OS-eknek is [3] [4].



8. CREDITS
Köszönet mindenkinek, aki hozzászólt ehhez a mini-HOWTO-hoz a kezdeti szakaszán, többek között: Andries Brouwer, Bernd Eckenfels, Troels Walsted Hansen, Dave Jones, Pavel Machek, és Andrew Morton. Az Ő hozzászólásuk közül néhány idézve van a dokumentumban.


9. Fordítások:

Az eredeti angol verzió elérhető:

"http://www.xenotime.net/linux/swap-mini-howto.txt".



A Magyar fordítást megtalálod:

"http://www.hup.hu/modules.php?name=News&file=article&sid=1976".



Az lengyel fordítás itt (volt) elérhető:

"http://jacek.rallypl.eu.org/translations/swap-mini-howto.txt".



10. Referenciák:

1. Joe Knapka, "Outline of the Linux Memory Management System".

URL:

http://home.earthlink.net/~jknapka/linux-mm/vmoutline.html

2. Rik van Riel: "Linux-MM docs: the OOM killer"

URL:

http://linux-mm.org/docs/oom-killer.shtml

3. Swap-Space, Linux Swap Space Mini-HOWTO. Frissítve: 2002. július

How to share your Linux swap partition with Windows.

URL:

http://www.tldp.org/HOWTO/mini/Swap-Space.html


4. URL:

http://marc.theaimsgroup.com/?l=linux-kernel&m=10362363632408

Hozzászólások

Aranyos kis leírás, de az azért jó lenne bele, hogy a swap terület mérete attól is függ, hogy mire szeretnéd használni a gépet... szerver, esetleg egy sima asztali gép, stb...

Szervernél érdemes még a jelenlegi memória dupláját venni.

Na meg asszem (de ez nem biztos), hogy a swap partíció egy bizonyos méret felett veszít a hatékonyságából... szal, bizonyos esetekben érdemes lehet egy nagyon-nagy swap-partíció helyett több kisebbet készíteni...

Illetve talán még az is belefért volta, hogy a biztonságon túl a partíció azért is elõnyösebb a file-val szemben, mert gyorsabb a kezelése...

Persze, az is lehet, hogy megint csak rosszakat álmodtam...

De azért jó kis leírás... :)

The NeverGone :)

> Illetve talán még az is belefért volta, hogy a biztonságon túl a partíció azért is elõnyösebb a file-val szemben, mert gyorsabb a kezelése...

Ez mar nem igaz. Igaz volt a 2.4-re, de a következo kernelekre mar nem. Ez egy elore mutato howto ;-)

Andrew Morton:

"Something I'd like to point out here: in 2.4 and earlier, swapfiles are less robust than swap devices - the need to go and read metadata from the filesystem made them prone to oom deadlocks allocating pages and buffer_heads with which to perform the swapout.

That has changed in 2.5. Swapping onto a regular file has no

disadvantage wrt swapping onto a block device. The kernel does not need to allocate any memory at all to get a swapcache page onto disk."

Rik van Riel a 2.5-ös Linux kernel VM-jének fejlesztője:

"For the swap layer, swap to a partition or to a file is the

same thing."

Nem tudom hogy pontosan mire gondoltál, de azt hiszem egy nagyon lényeges dolog kimaradt. Mégpedig az (több vinyó esetén) hogy ekkor lehet a legkönnyebben raid -ezni. Azaz ha 'pri=1' -et írunk mindkét helyre akkor az csíkozva lesz. (Nem tudom hogy B. erre gondolt-e)

Na akkor jatszunk olyat, hogy ilyen patch szeruen ki mit akat beletenni, es hova. Pontos sorok megadasaval. Pl.

- A swap területet ki lehet kapcsolni, ha nincs rá szükség. A swap terület kikapcsol, ha a rendszer leáll/újraindul a 'swapoff' parancs ('man swapoff') hatására.

+ Ide jon a javasolt csere, vagy kiegeszites

Jok ezek a hozzaszolasok, ezzel is csak fejlodik a dokumentum.

akkor itt egy patch:

/dev/hdb1 none swap defaults 0 0

+Sőt több vincseszter esetén akár raidet is érdemes beállítani rá, és nagyon egyszerű!

Nincs szükség az mkraid parancs, raidtab ... használtára.

Swap partició esetén a sebesség számít, az adatbiztonság egyáltalán nem, így csak a csíkozás jöhet szóba.

Az előző /etc/fstab részlet így módosul:

/dev/hda2 none swap defaults,pri=1 0 0

/dev/hdb1 none swap defaults,pri=1 0 0

Már kész is a csíkozás. Így elvileg kétszeres sebességet érünk el (persze ez nagyban függ a vincseszterek kihasználtságától és sebességétől).

Ez a howto tegnap jelent meg az LKML-en. Azert forditottam le mert a legutolso korulbelul 3 eves, es olyan dolgok vannak benne, amik mar eleg gazok. Mint latod, a HOWTO-t nem en irtam, hanem a fent nevezett ur Randy Dunlap [rddunlap@osdl.org], en csak leforditottam.

Egyebkent az ls-nek is van "howto"-ja:

"man ls"

talan meg hosszab is mint ez. ;-)

>Pl. én most tudam meg, hogy 32 swap eszközt/filet lehet használni. A man oldalam még most is 8-at ír.

Ez a 2.4.10-ben valtozott meg. regi a man oldalad...

Igaz nagyon nem mai a cikk, de a plusz információ mindig belefér:

"Sőt több vincseszter esetén akár raidet is érdemes beállítani rá, és nagyon egyszerű! Nincs szükség az mkraid parancs, raidtab ... használatára. Swap partíció esetén a sebesség számít, az adatbiztonság egyáltalán nem, így csak a csíkozás jöhet szóba."

Nos, aki üzemeltet nagy rendelkezésre állású szervert, az azt hiszem ezzel nem ért egyet, hisz az egyik vinyó kiesésekor a rendszer összeomlását veszélyeztetjük. Persze otthoni rendszereken, illetve ahol a sebesség inkább számít a megbízhatósággal szemben, ott elfogadható a fenti érv.

u.i.: kár,hogy nincs valami utalás a más rendszer való swap használatra. Évekkel ezelőtt windows xp-vel használtam megosztva linux swap partíciót, most épp vista-val küzdök ugyanezen ;)

-----------------------------------------------------
Software is like a sex, it's better with a penguin :)
-----------------------------------------------------