Swap (Magyar)

From ArchWiki

Ez az oldal a cserehely és a lapozás használatához nyújt bevezetőt GNU/Linux-on. Emellett tárgyalja a cserehelyek és a cserefájlok készítésének és aktiválásának módját.

A All about Linux swap space (Mindent a Linux cserehelyről):

A Linux a fizikai RAM (random access memory) darabokra osztja, melyeket lapnak nevezünk. A virtuális memória használata, azaz "swapping" az a folyamat, amikor egy memórialap a merevlemez előre meghatározott részére kerül, melynek neve cserehely, hogy ezáltal memória szabaduljon fel- A fizikai memória és a cserehely nagyságának összege nem más, mint a virtuális memória.

Cserehely

A cserehely leggyakrabban egy lemezpartíció, de akár egy fájl is lehet. A felhasználó az Arch Linux telepítése során, de akár később is létrehozhatja, ha szükségessé válna. A cserehely általában tanácsos az 1 GB-nál kevesebb RAM-mal rendelkező rendszereknél, de inkább személyes választás kérdése a RAM-mal bővel ellátott rendszerek esetében (bár a lemezre való felfüggesztéskor még mindig szükség van rá).

Hogy leellenőrizzük a cserehely állapotát, futtassuk ezt a parancsot:

$ swapon -s

vagy ezt:

$ free -m
Megjegyzés: Nincs teljesítménybeli különbség az egybefüggő cserefájl és a külön cserehely partíció közt, mindkettőt azonosként kezelhetjük.

Cserehely (külön partíció)

A cserehely, vagy "swap" partíció létrehozható a legtöbb GNU/Linux particionáló eszközzel (mint pl.: fdisk, cfdisk). A cserehelyek típusa a82.

Hogy efféle partíción cserehelyet hozzunk létre (mintha fájlrendszert formáznánk), a mkswap parancs használandó. Például:

# mkswap /dev/sda2
Figyelem: A partíció minden adata el fog veszni!

A mkswap eszköz alapértelmezetten UUID-t is létrehoz, de ha saját UUID-t akarunk adni neki, használjuk a -U zászlót.:

# mkswap -U saját_UUID /dev/sda2

Aktiváljuk a lapozást a partíción:

# swapon /dev/sda2

Hogy rendszerindításkor hasznájuk ezt a partíciót, jegyezzük be az fstab fájlunkba:

/dev/sda2 none swap defaults 0 0
Megjegyzés: Ha TRIM támogatású SSD-t használunk, a cserehelyet jelölő sorban inkább használjuk a defaults,discard csatolási opciókat az fstab-ban. Ha manuálisan aktiváljuk a swapon paranccsal, a -d vagy --discard paraméterrel ugyanerre jutunk. Lásd a swapon(8)-t a részletekért.

Cserefájl

A teljes partíció létrehozása melletti alternatívaként a cserefájl lehetővé teszi méretének menet közbeni változtatását is, no meg persze jóval könnyebben eltávolítható. Ez rendkívül fontos lehet, ha a szabad hely az elsődleges szempont (pl. kisebb méretű SSD-knél).

Megjegyzés: A Btrfs fájlrendszer nem támogatja a cserefájlok használatát. Ha ezt nem vesszük figyelembe, az a fájlrendszer összeomlásához vezethet. Jegyezzük meg, hogy Btrfs-en levő cserefájl használható, ha hurok eszközön (loop device) keresztül csatoljuk. Ez persze súlyosan csökkent lapozó-teljesítményt okoz.

Cserefájl létrehozása

Megjegyzés: Az újabb rendszer esetén nem működik a fallocate segítségével létrehozott swap fájl ezért mellőzük.
fallocate -l 512M /swapfile

Következő hibaüzenetett kaphatjuk mikor aktiválni szeretnénk a cserehelyet: fallocate failed: Operation not supported

Root-ként használjuk a dd parancsot a cserefájl létrehozásához, mely tetszőleges méretű lehet (M = Megabájt, G = Gigabájt). Például egy 512 MiB cserefájlt létrehozása:

# dd if=/dev/zero of=/swapfile bs=1M count=512

Adjuk meg a megfelelő engedélyeket (a mindenki által olvasható cserefájl hatalmas biztonsági rés)

# chmod 600 /swapfile

Miután megfelelő mérettel létrehoztuk, hozzuk létre rajta a swap fájlrendszert:

# mkswap /swapfile

Aktiváljuk:

# swapon /swapfile

Szerkesszük az /etc/fstab-ot, s hozzunk létre bejegyzést a cserefájlról:

/swapfile none swap defaults 0 0

Cserefájl eltávolítása

Figyelem: a cserehelyet a systemd kezeli, és bizonyos idő után újra engedélyezi.

A cserefájl eltávolításához kapcsoljuk ki rajta a lapozást:.

Root-ként:

# swapoff -a

Távolítsuk el:

# rm -f /swapfile

Cserehely USB eszközön

Hála a Linux által kínált modularitásnak, több cserehelyet is használhatunk, akár több eszközön is. A merevlemezünk nagyon megtelt, ideiglenesen USB eszközt is használhatunk erre a célra. Ennek a módszernek nagyon komoly hátrányai vannak:

  • Az USB eszközök lassabbak, mint egy merevlemez.
  • A flash-memóriák korlátozott számú írási ciklust bírnak ki. Cserehelyként használva igen hamar tönkremennek.
  • Ha más eszközt is csatlakoztatunk, a cserehely nem használható.

Hogy cserehelyként használható legyen, az USB flash eszközt először particionáljuk cserehelyként. Ehhez grafikus és konzol alapú eszközöket egyaránt használhatunk (GParted, fdisk). Bizonyosodjunk meg róla, hogy a partíciót cserehelyként jelöltök meg, mielőtt a partíciós táblát kiírnánk.

Figyelem: Legyünk mindig biztosak abban, hogy a partíciót megfelelő lemezre írjuk ki!

Ezek után nyissuk meg az /etc/fstab-ot.

Adjunk hozzá egy új bejegyzést, a már létező "swap" bejegyzés alatt, mely a mostani cserehelyet az USB meghajtóra helyezi át

UUID=... none swap defaults,pri=10 0 0

ahol az UUID az alábbi parancs kimenetéből állapítható meg

ls -l /dev/disk/by-uuid/ | grep /dev/sdc1

Az sdc1-et helyettesítsük a fentebb létrehozott swap partíció betűjelével. sdb1

Tip: Azért használunk UUID-t, mert a rendszerhez csatolt újabb USB eszközök módosíthatják a betűjel szerinti sorrendet.

Végezetül adjuk a

pri=0

paramétert az eredeti swap bejegyzés mögé, hogy az fstab megtanulja: csak akkor kell használni a merevlemez eredeti cserehelyét, ha az USB eszköz megtelt.

Ez az útmutató másfajta memóriakártyákkal is működik, mint például az SD kártyák, stb.

a teljesítmény hangolása

A cserehely értékeit hangolhatjuk, hogy nagyobb teljesítményre tegyünk szert.

Swappiness (lapozhatóság)

A swappiness sysctl paraméter jelképezi a rendszermag hajlandóságát, hogy használja, vagy épp kerülje a cserehelyet. Ennek értéke 0 és 200 közötti lehet. Az alapértelmezett értéke 60. Ha alacsonyra állítjuk, csökkenti a lapozás használatát, ezzel sokszor reaktívabbá a rendszert.

A csere teljesítményét befolyásoló másik sysctl paraméter az vm.vfs_cache_pressure, amely szabályozza a kern hajlandóságát a VFS gyorsítótárak gyorsítótárazásához használt memória visszaszerzésére, a pagecache és a swap függvényében.

Figyelem: Ha a swappiness értékét 0-ra állítjuk ebben az esetben agresszívan elkerüli a cserét ami növeli annak kockázatát, hogy túlzott memória és I/O nyomás alatt OOM megöli!

Aktuális értékek lekérdezése:

sysctl vm.swappiness
sysctl vm.vfs_cache_pressure

Az értékek végleges beállítása:

/etc/sysctl.d/99-sysctl.conf
vm.swappiness=10
vm.vfs_cache_pressure=50

Hogy teszteljük, és megtanuljuk, ez miért is így működik, ebben a cikkben nézzünk körül.

A pontos leírás a swappiness. A pontos leírás a vfs_cache_pressure.

Prioritás

Ha több mint egy cserefájllal vagy partícióval dolgozunk, jobb, ha mindegyikük számára megadunk egy bizonyos prioritási értéket (0-tól 32767-ig). A rendszer elsőként a magasabb prioritási értékú cserehelyet fogja használni, s csak utána az alacsonyabbakat. Így ha például van egy gyorsabb lemezünk (/dev/sda) és egy lassabb (/dev/sdb), a magasabb értéket adjuk meg a cserehelynek, mely a gyorsabb lemezen található. Ezt az fstab-ban a pri paraméterrel tehetjük meg:

/dev/sda1 none swap defaults,pri=100 0 0
/dev/sdb2 none swap defaults,pri=10  0 0

Vagy a -p (vagy --priority) paraméterrel, amikor a swapon parancsot használjuk:

# swapon -p 100 /dev/sda1

Ha két, vagy több helynek ugyanakkor a prioritása, s ezek legmagasabb prioritású elérhető eszközök, a lapozás allokációja round-robin alapon oszlik meg köztük.