Swap (Magyar)
Fordítói megjegyzés: A cserehelyet szokták "swap terület", "swap space", "swap hely", "swap partíció", "swap fájl" elnevezéssel is említeni a magyar nyelvben az informatikában.
Ez az oldal bevezetést nyújt a GNU/Linux-alapú operációs rendszereken történő cserehely és lapozás témakörbe. Bemutatja a cserepartíciók és cserefájlok létrehozását és aktiválását.
Mindent a Linux cserehelyről című cikkből idézve:
- ..."A Linux a fizikai RAM memóriát (véletlen elérésű memóriát) lapoknak nevezett memóriadarabokra osztja fel. A csere (swapping) az a folyamat, amikor egy ilyen memóriadarab (memórialap) átmásolódik a merevlemezen előre beállított területre, amelyet cserehelynek (swap space) szoktak nevezni, hogy ezáltal a kernel felszabadítsa azt a memórialapot (memóriaterületet) a számítógép memóriájában. A számítógép fizikai memóriája és a cserehely együttes mérete adja a rendelkezésre álló virtuális memória mennyiségét."...
A cserehely támogatását a Linux kernel és a felhasználói térben futó segédprogramok biztosítják a util-linux szoftvercsomagból.
Swap terület
A swap terület létezhet az számítógép merevlemezén partíció formájában, illetve létezhet a partíción belül a fájlrendszeren egy különálló fájl formájában is. A felhasználók létrehozhatnak swap területet az operációs rendszer telepítése során vagy bármikor később, amikor a létrehozásra szükség van. A swap terület kettő célra használható: A virtuális memóriakapacitás kiterjesztése a telepített fizikai memóriakapacitás (RAM) fölé (magyarul, szegény ember számítógépében a fizikai memória méretének a megnövelése, úgy, hogy hozzáadunk még memóriát a géphez ami valójában a merevlemez). Valamint, használható a virtuális memóriakapacitás kiterjesztése a merevlemezre történő számítógép-felfüggesztés támogatása miatt.
Az, hogy hasznos-e a virtuális memória kiterjesztése swap területtel, a számítógépbe telepített fizikai memória mennyiségétől függ. Ha a fizikai memória mennyisége kisebb, mint az összes kívánt program futtatásához szükséges memória, akkor előnyös lehet a swap terület engedélyezése. Ez a megoldás elkerüli a memóriahiányos állapotokat, amikor a Linux kernel OOM killer mechanizmusa a folyamatok leállításával automatikusan megpróbálja felszabadítani a memóriát. A virtuális memória mennyiségének a kívánt szintre történő megnövelése érdekében adjuk hozzá a szükséges különbséget (vagy többet) swap területként.
A swap terület használatának legnagyobb hátránya memóriahiány esetén az alacsonyabb gépteljesítmény (Magyarul, a számítógép lassabb lesz működéskor, amikor a swap területet is használja majd, mert maga a merevlemez -amin rajta van a swap- lassabb írási/olvasási sebességre képes mint a fizikai RAM). Tekintse meg a #Teljesítmény című szakaszt a részletekért. Az elmondottak tudatában a swap terület engedélyezése személyes preferencia kérdése: Egyes felhasználók inkább a programok leállítását részesítik előnyben a swap terület engedélyezése helyett, míg más felhasználók inkább engedélyezik a swap területet és elfogadják a lassabb számítógépet, amikor a fizikai memória megtelik adatokkal és a számítógép elkezdi használni a swap területet.
A swap terület állapotának ellenőrzése érdekében futtassa a következő parancsot:
$ swapon --show
Illetve, a fizikai memória és a swap terület használatának megjelenítése érdekében futtassa a következő parancsot:
$ free -h
Swap partíció
A legtöbb GNU/Linux particionáló szoftverrel létrehozható a swap partíció. GPT partícióstáblázat esetén a swap partíciókat a 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F GUID partíciótípus jelöli (gdisk esetében 8200 típus, fdisk esetében swap típus)). Az MBR partícióstáblázat esetén a swap partíciókat a 82 típusazonosító jelöli.
Egy partíció Linux swap területként való beállításához parancssorban az mkswap(8) parancsot kell használni. Például:
# mkswap /dev/sdxy
A lapozóterületet nem csak egyszerűen létre kell hozni, hanem a létrehozás után azt engedélyezni is kell a lapozás műveletének elindítása miatt. Tehát, annak érdekében, hogy a készüléken engedélyezve is legyen a lapozás, futtassa a következő parancsot:
# swapon /dev/sdxy
Tekintsem meg a swapon(8) parancs opcióinak a szintaxisát.
Engedélyezés a számítógép bootolásakor
A bootolásakor történő swap partíció engedélyezéshez tegye a következőket:
- Használja a systemd#GPT partíció automatikus felcsatolása a futó fájlrendszerbe című leírást.
- Vagy adjon hozzá egy bejegyzést a
/etc/fstabfájlhoz. Például:UUID=eszküz_UUID_azonosítója none swap defaults 0 0
- Ahol az
eszküz_UUID_azonosítójaa swap terület UUID azonosítója.
Tekintse meg az fstab fájlnak a szintaxisát, valamint a systemd#Fájlrendszer felcsatolása a futó rendszerben systemd.mount használatával című leírást.
Swap terület kikapcsolása
Adott swap terület deaktiválása érdekében futtassa a következő parancsot:
# swapoff /dev/sdxy
Alternatív megoldásként Ön használhatja a -a kapcsolót az összes swap terület deaktiválása érdekében.
Mivel a swap területet a systemd init rendszer kezeli, ezért a következő rendszerindításkor a swap terület ismét aktiválódik majd. Annak végleges letiltása érdekében, hogy a detektált swap terület automatikusan ismét aktiválódjon, Ön futtassa a systemctl --type swap parancsot, hogy megtalálja a felelős .swap unit fájlt, majd maszkolja el a megtalált unit fájlt az operációs rendszer láthatósága elől.
Swap fájl
Egy teljes swap partíció létrehozásának alternatívájaként egy swap fájl létrehozása lehetővé teszi a fájlméret menet közbeni módosítást, és könnyebben el is távolítható a swap fájl a swap partícióval szemben. Ez különösen akkor lehet kívánatos, amikor kevés a szabad terület az adathordozón (például egy közepes méretű SSD esetén).
| Fájlrendszer | Támogatja-e a swap fájlokat? |
|---|---|
| Bcachefs | Nem |
| Btrfs | Igen |
| F2FS | Igen |
| ext4 | Igen |
| JFS | Igen |
| NILFS2 | Nem |
| NTFS3 | Igen |
| ReiserFS | Igen |
| XFS | Igen |
| ZFS | Nem |
Swap fájl létrehozása
Használja az mkswap(8) parancsot egy, az Ön által tetszőlegesen választott méretű swap fájl létrehozása érdekében. (Tanácsért tekintse meg a Partitioning#Swap című leírást). Például egy 4 GiB méretű swap fájl létrehozása érdekében a következőt kell futtatni:
# mkswap -U clear --size 4G --file /swapfile
Aktiválja a létrehozott swap fájlt:
# swapon /swapfile
Végül az fstab szöveges fájlban adjon hozzá egy bejegyzést a swap fájl számára:
/etc/fstab
/swapfile none swap defaults 0 0
Az fstab fájlnak az alternatívájaként létrehozható egy swap unit (Részletekért tekintse meg a systemd.swap(5) man súgót.) :
/etc/systemd/system/swapfile.swap
[Swap] What=/swapfile [Install] WantedBy=swap.target
Hajtsa végre a szolgáltatás újraindítása műveletet, majd engedélyezze a swapfile.swap unit fájlt.
További információkért tekintse meg az fstab#Használat című leírást.
Swap fájl eltávolítása
Egy swap fájl eltávolítása érdekében először magát a swap fájlt ki kell kapcsolni, majd utána eltávolítható:
# swapoff /swapfile # rm -f /swapfile
Végül távolítsd el a vonatkozó bejegyzést az /etc/fstab fájlból.
Swap titkosítása
Tekintse meg a dm-crypt/Swap encryption című leírást.
Teljesítmény
A swap műveletek általában lényegesen lassabbak, mint az adatok közvetlen elérése a RAM memóriában. Azonban a swap teljes kikapcsolása a teljesítmény javítása érdekében néha teljesítményromláshoz vezethet. Ha a számítógépben nincs elegendő fizikai memória minden adat tárolására, akkor a swap nélküli működés kevesebb memóriát hagy a fájlrendszer gyorsítótárak számára, ami gyakoribb és költségesebb lemezhasználatot okoz.
A swap értékek módosíthatók a teljesítmény javítása érdekében:
Swappiness
Amikor a memóriahasználat elér egy bizonyos küszöböt, akkor a kernel elkezdi vizsgálni az aktív memóriát, és megnézi, hogy mit tud felszabadítani. A fájladatokat ki lehet írni a fájlrendszerre (ha megváltoztak), majd ki lehet tölteni a memóriából és később újra be lehet majd tölteni a memóriába. Más adatokat ki kell írni a swap területre, mielőtt ki lehetne tölteni a memóriából.
A swappiness sysctl paraméter a kernelnek azt a preferenciáját jelenti, hogy inkább a swap területre írjon, mint fájlokba. Értéke 0 és 200 között lehet, és az alapértelmezett értéke 60. Alacsony érték esetén a kernel inkább a megnyitott fájlok felszabadítását részesíti előnyben, magas érték esetén a kernel inkább a swap terület használatára törekszik, míg 100-as érték esetén az IO költséget egyenlőnek tekinti.
A jelenlegi swappiness érték ellenőrzése érdekében parancssorból futtassa a következő parancsot:
$ sysctl vm.swappiness
Alternatív megoldásként a /proc/sys/vm/swappiness fájl olvasható, hogy Ön megkapja a nyers egész értéket.
A swappiness érték ideiglenes beállítása érdekében futtassa a következő parancsot:
# sysctl -w vm.swappiness=35
A swappiness érték végleges beállítása érdekében hozzon létre egy sysctl.d(5) beállításfájlt. Például:
/etc/sysctl.d/99-swappiness.conf
vm.swappiness = 35
Annak érdekében, hogy a rendszerbetöltő beállítsa a swappiness értéket a kernelképfájl memóriába való betöltésekor, Ön adjon hozzá egy kernel paramétert, például sysctl.vm.swappiness=35 .
A különböző swappiness-érték választásának okai lehetnek:
- A felhasználók a swappiness érték csökkentését javasolták az asztali gépek reakciókészségének javítására. Az érv az, hogy mivel az észlelt teljesítményt (reakciókészséget) nagyrészt az határozza meg, hogy milyen gyorsan reagál egy program a felhasználói bemenetre, az anonim oldalaknak (programmemória) a RAM memóriában kell maradniuk, és a megnyitott fájlok felszabadítását kell előnyben részesíteni, még akkor is, ha ez bizonyos mértékben az aktuális teljesítmény rovására megy.
- A minimálisan észszerű swappiness érték 1, mivel a 0 értékű swappiness szélsőséges elfogultságot okoz az anonim oldalak kiléptetésével szemben, megakadályozva, hogy azokat visszanyerés vagy swap céljából átvizsgálják, kivéve a memória versengés legszélsőségesebb eseteiben. Általában nem kívánatos, hogy a valóban nem használt anonim oldalak ne kerüljenek visszanyerésre.
- A 100 vagy annál magasabb swappiness érték kívánatos (definíció szerint), amikor a swapolás IO költsége egyenlő vagy alacsonyabb, mint a fájlból való olvasás költsége. Ez előfordulhat, amikor a swap nincs lemezzel alátámasztva, különösen zram esetében. Ez akkor is megtörténhet, amikor a swap IO-t egy alacsonyabb költségű mechanizmus, például a zswap elfogja/gyorsítótárazza.
VFS gyorsítótár terhelés
Egy másik sysctl paraméter, amely befolyásolja a swap teljesítményét, a vm.vfs_cache_pressure, amely szabályozza a kernel hajlamát arra, hogy visszanyerje a VFS-gyorsítótárakhoz használt memóriát a pagecache és a swap rovására. Ennek az értéknek a növelése növeli a VFS-gyorsítótárak visszanyerésének ütemét. További információ arról, hogy pontosan mit csinál, megtalálható a Linux kernel dokumentációban.
Az alapértelmezett érték 100, ami azt jelzi, hogy a fájlrendszer-gyorsítótár körülbelül ugyanolyan fontos, mint a többi gyorsítótár, ezért nagyjából azonos súllyal kell őket visszanyerni. Asztali számítógépeken felmerült az az érv, hogy a fájlrendszer-gyorsítótár fontosabb, mint a többi gyorsítótár, mivel a fájlrendszer böngészési ideje jobban befolyásolja a műveletek késleltetését (észlelt reakcióképességet), mint a többi gyorsítótár, így javasolt értékként a 50 szerepel. Másrészt magasabb értéket is javasoltak, amikor a VFS-gyorsítótár sok apró fájl metainformációját tartalmazza, amelyeket később már nem érintenek. További információ a paraméter hangolásáról az OpenSUSE hangolási útmutatóban található (amely kísérletezést és a gyorsítótárak típusainak ellenőrzését ajánlja a slaptop segítségével).
Prioritás
Ha egynél több swap fájl vagy swap partíció van, akkor érdemes mindegyik swap területhez prioritási értéket (0-tól 32767-ig) hozzárendelni. A rendszer először a magasabb prioritású swap területeket fogja használni, mielőtt az alacsonyabb prioritásúakat igénybe venné. Például, ha van egy gyorsabb és egy lassabb lemez, akkor a gyorsabb eszközön lévő swap területhez magasabb prioritást kell hozzárendelni. A prioritások az fstab fájlban adhatóak meg a pri paraméter segítségével:
UUID=f9fe0b69-a280-415d-a03a-a32752370dee none swap defaults,pri=100 0 0 UUID=d7eb6062-01c8-4367-ac1d-3bf1167de8bb none swap defaults,pri=10 0 0
Valamint, megadható a swapon --priority paraméterével is:
# swapon --priority 100 /dev/sda1
Ha kettő vagy több területnek azonos prioritása van, és ez a legmagasabb elérhető prioritás, akkor az oldalak közöttük körkörös (round-robin) módszerrel kerülnek kiosztásra.
Csíkozás
Nincs szükség RAID használatára a swap teljesítményének javítása érdekében. Maga a kernel képes több eszközön csíkozva kezelni a swap területet, ha egyszerűen ugyanazt a prioritást adja meg nekik a /etc/fstab fájlban. Részletekért tekintse meg a The Software-RAID HOWTO útmutatót.
Discard (a.k.a. trim)
Tekintse meg a Solid state drive#swap.
Tömörített blokkeszköz a RAM memóriában
Tekintse meg az Improving performance#Swap on zram or zswap című leírást.
Swap területet használata csak a hibernálás számára
Amennyiben Ön a swap területet kizárólag a hibernációs memóriaképfájl tárolására kívánja használni, akkor alkalmazhatja a zswap megoldást, és letilthatja annak writeback funkcióját, így nem történnek lemezírások a szokásos swap használat során. Tekintse meg a Power management/Suspend and hibernate#A zswap visszaírás letiltása a swap terület csak hibernáláshoz való használatához című leírást.