Swap vagy nem swap: az itt a kérdés

enlightened Ez az oldal a közösségért készül. heart Kövess minket máshol is:  Linux Mint Magyar Közösség a Mastodon-on  Telegram csatorna – csak hírek  Beszélgessünk a Telegram – Linux csevegő csoport  Hírek olvasása RSS segítségével  Linux Mint Hivatalos Magyar Közösség a Facebook-on      Linux Mint Baráti Kör a Facebook-on
wink Ha hasznosnak találod, és szeretnéd, hogy folytatódjon, támogasd a munkát Ko-fi vagy Paypal segítségével. laugh

Gyakran találkozom azzal a nézettel a Linux felhasználók részéről, hogy ha a gépben elegendő RAM van, a swap (lapozófájl/lapozóterület) használata teljesen fölösleges, sőt, lelassítja a rendszert.
A válaszom erre a feltételezésre az hogy nem, a swap-et szinte mindig érdemes bekapcsolva hagyni!
Még akkor is, ha sok szabad RAM áll rendelkezésre, a swap jelenléte kifejezetten javíthatja a Linux teljesítményét és stabilitását.

 - Tévhit: „Ha van elég RAM-om, a swap csak lassít”

Sokan úgy gondolnak a swap-re, mint egy lassú „pót-RAM-ra”, ami csak akkor kell, ha elfogy a fizikai memória. Mivel a lemezről (vagy SSD-ről) történő olvasás lassabb, mint a RAM, logikusnak tűnhet a következtetés: ha kiiktatjuk a swap-et, a rendszer garantáltan csak a gyors RAM-ot fogja használni. A valóságban azonban a Linux Kernel memóriakezelése ennél sokkal intelligensebb.

Hogyan segít a swap bőséges RAM esetén is?

Inaktív memórialapok kiszervezése: a futó alkalmazások sok olyan memórialapot (memory page) foglalnak le, amelyeket az elindításuk óta szinte egyszer sem használtak újra. A kernel ezeket a ritkán használt adatokat áthelyezi a swap-be.
Több hely a gyorsítótárnak (Cache): a felszabadult fizikai RAM-ot a kernel a lemezolvasási gyorsítótárra (page cache) tudja fordítani. Mivel az aktívan használt adatfájlok és programkódok gyorsítótárazása sokkal nagyobb teljesítménynövekedést hoz, mint az inaktív adatok RAM-ban tartása, a rendszer összességében gyorsabbá válik.

 - A biztonsági háló: kerüld el az OOM Killert!

Mi történik akkor, ha nincs swap, és a rendszer memóriája mégis elfogy (például egy memóriaszivárgás vagy hirtelen terheléstüske miatt)?

Swap nélkül: a kernel nem tud több memóriát kiosztani, ezért végső megoldásként életbe lép az OOM (Out Of Memory) Killer. Ez a folyamat kíméletlenül lelövi a legtöbb memóriát használó alkalmazást!
Swap jelenlétében: a swap puffert biztosít. Bár a rendszer a lemezes lapozás miatt érezhetően lelassulhat, ez időt ad a felhasználónak (vagy a monitoring rendszernek), hogy reagáljon a problémára, mielőtt a kritikus szolgáltatások összeomlanának.

 - Rendszerhangolás: swappiness és vfs_cache_pressure

A swap működését finomhangolhatjuk a Linux sysctl paramétereivel. A Linux memória-kezelésének finomhangolása során ez a két leggyakrabban módosított Kernel-paraméter. Megfelelő beállításukkal a rendszer érezhetően gyorsabbá, válaszképesebbé válhat, és csökkenthető a lemezre való felesleges írás/olvasás (I/O) mértéke.

vm.swappiness (alapértelmezett: 60)

Mit csinál? Azt szabályozza, hogy a Kernel milyen arányban szabadítson fel RAM-ot a nem használt programadatok (memórialapok) a swap-be mozgatásával, a fájl-cache kiürítésével szemben.

Skála: 0 és 200 között.
Alacsonyabb érték: a rendszer hosszabban a fizikai RAM-ban tartja az adatokat.
Magasabb érték: a rendszer korábban elkezdi kiírni az inaktív memórialapokat a swap-be.

vm.vfs_cache_pressure (alapértelmezett: 100)

Mit csinál? Azt határozza meg, hogy a Kernel mennyire agresszívan ürítse ki a RAM-ból a fájlrendszer metaadatait (VFS dentry és inode cache, pl. könyvtárszerkezetek, fájlok helye és tulajdonságai).

Skála: 0-tól felfelé (nincs szigorú felső határa).
100 alatti érték: a rendszer „ragaszkodik” a fájlmetaadatokhoz, és a RAM-ban tartja azokat (kevesebb lemez-I/O, több felhasznált RAM).
100 feletti érték: a rendszer gyorsan kidobja a fájlmetaadatokat a RAM-ból, hogy helyet csináljon a programoknak.

Ajánlások:

Felhasználási profil  | vm.swappiness | vm.vfs_cache_pressure   | Fő előnye
----------------------|---------------|-------------------------|----------
Általános (16GB+ RAM) | 10            | 50                      | Gördülékenység, gyors fájlelérés
Kevés RAM / Szerver   | 30 – 60       | 150                     | Több RAM biztosítása a folyamatoknak
SSD kímélő            | 1             | 50                      | Minimális lemezes írás/olvasás
Alapértelmezett       | 60            | 100                     | Általános, biztonságos egyensúly

Beállítás:

Hagyományos rendszereknél az /etc/sysctl.conf, újabb rendszereknél az általunk létrehozott /etc/sysctl.d/99-swappiness.conf fájlba írjuk a kért értékeket, pl.:

vm.swappiness = 10
vm.vfs_cache_pressure = 50

Érvényesíteni a (sudo) sysctl --system paranccsal tudjuk, ellenőrizni a cat /proc/sys/vm/swappiness, és a cat /proc/sys/vm/vfs_cache_pressure parancsokkal.

Ha bizonytalan vagy, érdemes a vm.swappiness = 10 és vm.vfs_cache_pressure = 50 párossal indítani asztali számítógépen. Teszteld a rendszert pár napig, ha nem tapasztalsz memóriahiányt, ez a kombináció adja a legjobb felhasználói élményt!

Berus