Swap terület mini-HOWTO
A HupWiki-ből...
Tartalomjegyzé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 LINUX DOCUMENTATION PROJECT LICENSE) feltételeivel terjeszthető.
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")
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.
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.
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.
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 merevlemez 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 (ha a disztribúciód azon kis hányadhoz tartozik, ami nem kezeli automatikusan az ilyen állományokat):
$! /bin/bash swapon /work/swapfile.1 swapon /work/swapfile.2
Használható a 'swapon -a' is, ez az fstabból veszi az aktiválandó swap típusú állományokat (ha nincs "noauto" paraméter megadva).
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.
Csö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.
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).
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].
Biztonságos swap
A swap terület értékes adatokat is tartalmazhat (pld. dokumentumok), ezért egész paranoid hozzállással érdemes wipeolni (visszahozhatatlanul törölni) a tartalmát. Az eljárás lényege, hogy mikor már a rendszernek nincs szükség a swapre (mert leáll vagy újraindul), akkor lekapcsoljuk és felülírjuk a tartalmát véletlenszerű adatokkal.
#!/bin/sh swapoff /path/to/swapfile.n dd bs=1024 count=1M if=/dev/random of=/path/to/swapfile.n mkswap /path/to/swapfile.n
Természetesen a "count" mennyisége egyezzen a swap méretével.
Ezt a parancssort egy init scriptbe kell tenni, ami init 0-ás (leállítás) és 6-os (újraindítás) szinten fut le. A technológia egyetlen hátulütője, hogy a rendszertől függően hosszabb-rövidebb időbe telik.
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.
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".
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.php
[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