Linuxin ytimen ominaisuuksista zram tai zswap ei suomeksi ole esimerkiksi Wikipedia-sivuja, joten aluksi Geminin alustukset. Kysymykset olivat “Kerro miten {zRAM, zswap} toimii ja miten se otetaan käyttöön Linuxissa?”. Käyttöönoton komentoesimerkkien muotoilu meni kopioinnissa rikki, mutta lienevät silti ymmärrettäviä.
.
Zram
zRAM on Linux-ytimen moduuli, joka luo RAM-muistiin pakatun lohkolaitteen. Se toimii eräänlaisena virtuaalisena swap-tilana, mutta sen sijaan että tiedot kirjoitettaisiin hitaalle tallennusvälineelle (kuten SSD- tai HDD-levylle), ne pakataan ja tallennetaan RAM-muistiin. Koska tiedonsiirto RAM-muistin sisällä on huomattavasti nopeampaa kuin tallennuslaitteelle, zRAMin käyttö voi merkittävästi parantaa järjestelmän suorituskykyä tilanteissa, joissa muistia on vähän ja järjestelmä joutuisi muuten käyttämään perinteistä swap-tilaa.
Miten zRAM toimii?
Kun järjestelmä joutuu swappaamaan muistia, zRAM astuu kuvaan. Sen sijaan, että järjestelmä alkaisi kirjoittaa sivuja levylle, ne siirretään zRAM-lohkolaitteeseen, jossa ne pakataan lennossa. Kun tietoja tarvitaan uudelleen, ne puretaan ja palautetaan RAM-muistiin. Tämä prosessi on paljon nopeampi kuin levy-swappaus, koska pakkaus- ja purkuoperaatiot ovat hyvin tehokkaita ja tapahtuvat RAM-muistin nopeudella. Pakkaussuhde on tyypillisesti 2:1 tai jopa parempi, mikä tarkoittaa, että muistia vapautuu tehokkaasti.
zRAMin käyttöönotto Linuxissa
ZRAMin käyttöönotto vaihtelee jakelusta riippuen, mutta perusperiaate on sama. Monet nykyaikaiset Linux-jakelut, kuten Ubuntu, Fedora ja Manjaro, sisältävät jo zRAMin oletuksena. Jos jakelussasi ei ole sitä valmiiksi käytössä, voit asentaa ja ottaa sen käyttöön itse.
- Tarkista, onko zRAM jo käytössä:Voit tarkistaa zRAMin tilan komentamalla terminaalissa:Bash
zramctl
Jos komento antaa tulosteena laitteita (esim./dev/zram0
), zRAM on jo aktiivinen. - Manuaalinen käyttöönotto (esimerkki):Jos zRAM ei ole käytössä, voit luoda zRAM-laitteen ja aktivoida sen. Tässä esimerkki, joka luo 512 Mt:n zRAM-lohkon ja asettaa sen swap-alueeksi:Bash
# Lataa ydinmoduuli, jos se ei ole jo ladattu sudo modprobe zram # Määritä zRAM-laitteen koko (tässä 512 megatavua) echo 512M | sudo tee /sys/block/zram0/disksize # Alusta zRAM-laite swap-tilaksi sudo mkswap --label zram0 /dev/zram0 # Aktivoi swap-tila sudo swapon /dev/zram0
Tämä asetus on kuitenkin väliaikainen ja häviää uudelleenkäynnistyksen jälkeen. - Pysyvä käyttöönotto systemd-palvelun avulla:Pysyvin tapa ottaa zRAM käyttöön on luoda systemd-palvelu tai käyttää valmista skriptiä, joka huolehtii asetuksista automaattisesti käynnistyksen yhteydessä. Usein jakeluissa on valmiita paketteja, kuten zram-tools (Debian/Ubuntu) tai systemd-zram-generator (Arch/Fedora), jotka tekevät tämän puolestasi.Esimerkki Debian/Ubuntu-jakelussa:Bash
sudo apt install zram-tools
Asennuksen jälkeen työkalu hoitaa zRAMin konfiguroinnin automaattisesti. Voit muokata asetuksia/etc/default/zramswap
-tiedostosta.
Vinkki: zRAM on hyödyllisin järjestelmissä, joissa on vähän RAM-muistia, kuten vanhemmissa tietokoneissa, kannettavissa tai yksilevyisissä laitteissa (esim. Raspberry Pi). Sitä ei suositella käytettäväksi samanaikaisesti perinteisen swap-tiedoston tai -osion kanssa, koska se voi aiheuttaa suorituskyvyn heikkenemistä.
.
Zswap
Zswap on Linux-ytimen ominaisuus, joka toimii välimuistina pakattua RAM-muistia varten ennen kuin sivuja siirretään perinteiselle swap-tilalle (levyllä). Se auttaa vähentämään I/O-operaatioita levyille, mikä parantaa järjestelmän suorituskykyä, erityisesti tilanteissa, joissa RAM-muisti alkaa täyttyä.
Zswapin toiminta
Kun järjestelmä joutuu swappaamaan muistisivuja, eli siirtämään niitä RAM-muistista swap-alueelle, zswap sieppaa nämä sivut. Sen sijaan, että ne kirjoitettaisiin suoraan levylle, zswap pakkaa sivut ja tallentaa ne RAM-muistiin luotuun dynaamiseen alueeseen. Jos jokin pakattu sivu tarvitaan myöhemmin, se voidaan purkaa nopeasti ja siirtää takaisin RAMiin ilman levylukua.
Zswapin tärkeimmät periaatteet ovat:
- Pakkaus: Se käyttää eri pakkausalgoritmeja (esim. LZ4, ZSTD) muistisivujen koon pienentämiseksi.
- Välimuisti: Zswap toimii puskurina muistin ja levyn välillä.
- Prioriteetti: Jos zswapin sisäinen muisti täyttyy, se siirtää vanhimmat tai vähiten käytetyt sivut perinteiselle levypohjaiselle swap-alueelle.
Zswapin käyttöönotto Linuxissa
Zswapin käyttöönotto on suhteellisen helppoa. Se vaatii muutoksia ytimen käynnistysparametreihin GRUB-käynnistyslataajassa.
- Muokkaa GRUB-määritystiedostoa:Avaa /etc/default/grub -tiedosto muokkaimella pääkäyttäjänä:
sudo nano /etc/default/grub
- Lisää ytimen parametrit:Etsi rivi, joka alkaa GRUB_CMDLINE_LINUX_DEFAULT. Lisää seuraavat parametrit sen loppuun lainausmerkkien sisälle:zswap.enabled=1Voit myös määrittää muita parametreja, kuten pakkausalgoritmin (esim. zswap.compressor=zstd) ja muistisivujen allokointipolitiikan (esim. zswap.zpool=z3fold).Esimerkki rivistä:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash zswap.enabled=1 zswap.compressor=zstd"
- Päivitä GRUB-määritykset:Tallenna tiedosto ja päivitä GRUB-määritykset komennolla:
sudo update-grub
(Debian, Ubuntu ja niiden johdannaiset) taisudo grub2-mkconfig -o /boot/grub2/grub.cfg
(Fedora, CentOS ja niiden johdannaiset). - Käynnistä järjestelmä uudelleen:
sudo reboot
Zswapin tila on helppo tarkistaa uudelleenkäynnistyksen jälkeen komennolla dmesg | grep zswap
.
.
Parhaat tietolähteet englanniksi
Wikipediassakin on molemmista sivut, mutta archlinuxin ArchWikissä on paremmat:
LinuxBlog.io:ssa on ihan hyvä artikkeli, jos haluaa lukea zramin käyttökokemuksesta, mutta se rajoittuu Debian/Ubuntu Linuxeihin: Running Out of RAM on Linux? Add Zram Before Upgrading!
FOSS Postin tutoriaali, Enable Zram on Linux For Better System Performance, taas kattaa kaikki yleisimmät levitysversiot ja lisäksi siinä on mainittu ytimen sivutusherkkyyttä kontrolloiva parametri ja miten sitä muutetaan pysyvästi. Sen arvon voi tarkistaa komennolla:
root@rk39:~# cat /proc/sys/vm/swappiness
60
Kai sinne echo:lla voisi kirjoittaakin..
LinuxBlog.io:n artikkelissa on eri pakkausalgoritmien vertailu ja sen perusteella päädyin zstd-algoritmiin lzo-rle:n sijasta, joka oli paketin zram-generator-defaults.noarch esimerkissä. Lopputulos Fedora-järjestelmässäni oli (grepit karsivat kommentti- ja tyhjät rivit):
root@rk39:~# grep -v '^#' /etc/systemd/zram-generator.conf | grep '[a-z]' -
[zram0]
host-memory-limit = none
zram-size = min(ram / 2, 65536)
compression-algorithm = zstd(level=3) (type=idle)
[zram1]
root@rk39:~# grep -v '^#' /etc/sysctl.conf | grep '[a-z]' -
vm.swappiness = 150
Tällä hetkellä minulla on käytössä vielä vanha konfiguraatio ja swappiosiokin on vielä, mutta kun muistia on ihan mukavasti, ei säädöillä ole kiirettä. Alla nykyinen tilanne:
root@rk39:~/Kuvat# zramctl ; free -g
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram1 lzo-rle 12,6G 4M 85,4K 224K 36 /run/compressed-mount-point
/dev/zram0 lzo-rle 62,8G 6,3G 2,2G 3,7G 36 [SWAP]
total used free shared buff/cache available
Mem: 125 34 70 0 22 90
Swap: 187 6 180
.
Android

Android 10:ssä muistia ei vielä voinut laajentaa ja versiossa 12 käytössä oli ilmeisesti zram, koska 8 gigan muisti laajeni enimmillään vain 5 gigaa. Versiossa 14 on oltava käytössä zswap, koska se vaatii tilaa myös levymuistista (Tallennustila, Storage) ja muisti laajenee kaksinkertaiseksi. Myös uleFonessa muistilaajennuksen säätö on mahdollista tuolta näytöltä.