Swap (Magyar)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Az 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, etc.

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.