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