zRAM is een Linux kernel module die het mogelijk maakt om Swap-ruimte in het RAM-geheugen te maken. Maar het voordeel is niet alleen het gebruik maken van snel RAM-geheugen; het comprimeert ook, zodat het systeem meer gegevens in het geheugen kan opslaan, waardoor het systeem veel sneller toegang heeft tot deze gegevens dan een traditionele Swap op SSD- of harde schijven.
Compressie maakt het mogelijk om meer gegevens in het geheugen op te slaan. Dus in plaats van bijvoorbeeld 4 GB RAM te hebben, kun je met zRAM ongeveer 8-12 GB effectief Swap-geheugen gebruiken.
Dit leidt op zijn beurt tot snellere systeemprestaties. De compressie- en decompressietijd is over het algemeen verwaarloosbaar voor elke relatief moderne CPU (jonger dan 7-8 jaar). Het voelt dus alsof je systeem plotseling meer geheugen kan gebruiken.
Dit is heel anders dan traditioneel Swap-geheugen op de schijf. Swap-ruimte op schijfapparaten zijn veel langzamer dan in RAM (ongeacht of het HDD of SSD of NVMe M2 is), dus zelfs als je 10 GB of 50 GB Swap-ruimte op jouw systeem gebruikt, zou het nog steeds even traag zijn. Omdat je het geheugenprobleem niet aanpakt, stuur je het gewoon ergens anders naartoe.
ZRAM is daarentegen vooral handig voor systemen met weinig geheugen, zoals 2 GB, 4 GB of 8 GB RAM. Dergelijke systemen zullen meer voordeel halen uit een gecomprimeerd zRAM Swap-geheugen.
Je moet weten dat er veel datacompressie-algoritmen beschikbaar zijn voor zRAM, zoals zst, zlib, brotli, lz4 en andere, en elk hebben ze specifieke voordelen (sommige zijn snel in het schrijven van gegevens, sommige zijn goed in het decomprimeren van gegevens... enz.). We zullen later zien hoe we deze algoritmen kunnen gebruiken.
Veel Linux-distributies hebben al zRAM ingeschakeld, dan hoef je niet de moeite doen om zRAM in te schakelen.
Als je wilt controleren of zRAM al dan niet is ingeschakeld op jouw systeem, voer je de volgende opdracht uit:
dany@pindabook:~$ cat /proc/swaps
Filename Type Size Used Priority
/dev/sda3 partition 8387580 0 -2
Als je uitvoer ziet die /dev/zram0
of iets dergelijks bevat, dan is zRAM ingeschakeld op jouw systeem.
Dit is in het voorbeeld niet het geval, m.a.w. lees verder om te ontdekken hoe je het kunt inschakelen.
Gebruikers wordt geadviseerd om een Swap-partitie of Swap-bestand te maken wanneer ze hun Linux-installatie configureren om deze te ondersteunen wanneer het geheugengebruik hoog wordt. Swap-ruimte op SSD- of harde schijven is echter vrij traag in vergelijking met RAM.
We willen niet dat ons systeem de traditionele Swap partitie of Swap-bestand gebruikt, in plaats daarvan willen we dat het zRAM Swap-apparaat gebruikt dat we later aanmaken, dus moeten we het eerste uitschakelen om conflicten te voorkomen.
Zoek eerst jouw Swap-ruimte in het /etc/fstab configuratiebestand:
dany@pindabook:~$ sudo nano -B /etc/fstab
[sudo] wachtwoord voor root:
En dan, becommentarieer je de regel met het Swap-apparaat door een #-symbool in te voegen aan het begin van de regel, zoals in de laatste regel van het volgende voorbeeld:
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# systemd generates mount units based on this file, see systemd.mount(5).
# Please run 'systemctl daemon-reload' after making changes here.
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda4 during installation
UUID=b9867d1b-40a1-4cc2-bfcc-d9695bb09352 / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/sda2 during installation
UUID=0C54-931D /boot/efi vfat umask=0077 0 1
# /usr/home/Documents was on /dev/sda7 during installation
UUID=820d7da4-657f-4918-b863-6d2b847e8ba3 /usr/home/Documents ext4 defaults 0 2
# swap was on /dev/sda3 during installation
#UUID=11554da0-6852-4dd2-b5ac-8d434406f024 none swap sw 0 0
Als je het bestand wilt opslaan en het bestand wilt afsluiten, druk je op Ctrl+x, daarna op de toets y en uiteindelijk op Enter.
Daar het fstab configuratiebestand tijdens het opstarten van het systeem verwerkt wordt, kan dit bij fouten het opstarten verhinderen. Met de volgende opdracht controleren we of het fstab configuratiebestand correct werkt:
dany@pindabook:~$ sudo mount -a
Geen nieuws is goed nieuws. M.a.w. alles OK.
Om de huidige Swap-ruimte te deactiveren, moeten we het type kennen, dat we opvragen met:
dany@pindabook:~$ systemctl --type swap
UNIT LOAD ACTIVE SUB DESCRIPTION
dev-sda3.swap loaded active active Swap Partition
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
1 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
Daaruit blijkt dat voor Swap-ruimte de schijfpartitie sda3 gebruikt wordt. We kunnen deze sda3 Swap-ruimte uitschakelen met:
dany@pindabook:~$ sudo swapoff /dev/sda3
Als we nu het Swap type opvragen, krijgen we het volgende:
dany@pindabook:~$ systemctl --type swap
UNIT LOAD ACTIVE SUB DESCRIPTION
0 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
dany@pindabook:~$ cat /proc/swaps
Filename Type Size Used Priority
In Debian Bookworm installeer je zRAM via het pakket zram-tools:
dany@pindabook:~$ sudo apt install zram-tools
Pakketlijsten worden ingelezen... Klaar
Boom van vereisten wordt opgebouwd... Klaar
De statusinformatie wordt gelezen... Klaar
De volgende NIEUWE pakketten zullen geïnstalleerd worden:
zram-tools
0 opgewaardeerd, 1 nieuw geïnstalleerd, 0 te verwijderen en 0 niet opgewaardeerd.
Er moeten 5.552 B aan archieven opgehaald worden.
Na deze bewerking zal er 28,7 kB extra schijfruimte gebruikt worden.
Ophalen:1 http://deb.debian.org/debian bookworm/main amd64 zram-tools all 0.3.3.1-1.1 [5.552 B]
5.552 B opgehaald in 0s (117 kB/s)
Voorheen niet geselecteerd pakket zram-tools wordt geselecteerd.
(Database wordt ingelezen ... 173870 bestanden en mappen momenteel geïnstalleerd.)
Uitpakken van .../zram-tools_0.3.3.1-1.1_all.deb wordt voorbereid...
Bezig met uitpakken van zram-tools (0.3.3.1-1.1) ...
Instellen van zram-tools (0.3.3.1-1.1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/zramswap.service → /lib/systemd/system/zramswap.service.
Bezig met afhandelen van triggers voor man-db (2.11.2-2) ...
Tijdens de installatie wordt zRAM automatisch geactiveerd via systemd. We controleren of alles correct is verlopen met:
dany@pindabook:~$ systemctl status zramswap
● zramswap.service - Linux zramswap setup
Loaded: loaded (/lib/systemd/system/zramswap.service; enabled; preset: enabled)
Active: active (exited) since Sun 2024-11-03 15:59:11 CET; 8min ago
Docs: man:zramswap(8)
Process: 3484 ExecStart=/usr/sbin/zramswap start (code=exited, status=0/SUCCESS)
Main PID: 3484 (code=exited, status=0/SUCCESS)
CPU: 23ms
Bij het opvragen van het type Swap-geheugen krijgen we:
dany@pindabook:~$ systemctl --type swap
UNIT LOAD ACTIVE SUB DESCRIPTION
dev-zram0.swap loaded active active /dev/zram0
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
1 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
dany@pindabook:~$ cat /proc/swaps
Filename Type Size Used Priority
/dev/zram0 partition 262140 0 100
Hieruit blijkt dat er 256 MB (262140 KB) Swap-ruimte beschikbaar is. Als je meer Swap-ruimte nodig hebt of andere eigenschappen zoals de compressie methode en eigenschappen wilt aanpassen, kan dit in het configuratiebestand /etc/default/zramswap:
dany@pindabook:~$ cat /etc/default/zramswap
# Compression algorithm selection
# speed: lz4 > zstd > lzo
# compression: zstd > lzo > lz4
# This is not inclusive of all that is available in latest kernels
# See /sys/block/zram0/comp_algorithm (when zram module is loaded) to see
# what is currently set and available for your kernel[1]
# [1] https://github.com/torvalds/linux/blob/master/Documentation/blockdev/zram.txt#L86
#ALGO=lz4
# Specifies the amount of RAM that should be used for zram
# based on a percentage the total amount of available memory
# This takes precedence and overrides SIZE below
#PERCENT=50
# Specifies a static amount of RAM that should be used for
# the ZRAM devices, this is in MiB
#SIZE=256
# Specifies the priority for the swap devices, see swapon(2)
# for more details. Higher number = higher priority
# This should probably be higher than hdd/ssd swaps.
#PRIORITY=100
De cat opdracht toont enkel de zRAM instellingen, aanpassingen kan je uitvoeren met een teksteditor met systeemrechten (bijvoorbeeld met de opdracht sudo nano
).
Herstart na de aanpassing de zRAM swapruimte met de opdracht:
dany@pindabook:~$ sudo service zramswap reload
En controleer of alles correct verliep:
dany@pindabook:~$ sudo zramctl
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4 256M 4K 63B 4K 4 [SWAP]
Na een systeem (computer) herstart, bleek echter de oude swap ruimte terug actief te zijn. Dit is te wijten aan het automatisch koppelen van GPT partities op UEFI systemen. Meer informatie daarover vind je op de The Discoverable Partitions Specification (DPS) en Prevent GPT partition automounting.
Uit deze artikels blijkt dat je met behulp van de sgdisk opdracht deze automatische koppeling kunt uitschakelen:
dany@pindabook:~$ sudo sgdisk -A 3:set:63 /dev/sda
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.
Na een herstart wordt nu gebruik gemaakt van zRAM Swap.
Daarvoor gaan we alle aanpassingen in omgekeerde volgorde teniet doen. We beginnen met het inschakelen van het automatisch koppelen van de GPT Swap partitie op UEFI systemen:
dany@pindabook:~$ sudo sgdisk -A 3:clear:63 /dev/sda
[sudo] wachtwoord voor root:
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.
Daarna kunnen we zram verwijderen met de opdracht:
dany@pindabook:~$ sudo apt purge zram-tools
[sudo] wachtwoord voor root:
Pakketlijsten worden ingelezen... Klaar
Boom van vereisten wordt opgebouwd... Klaar
De statusinformatie wordt gelezen... Klaar
De volgende pakketten zullen VERWIJDERD worden:
zram-tools*
0 opgewaardeerd, 0 nieuw geïnstalleerd, 1 te verwijderen en 60 niet opgewaardeerd.
Na deze bewerking zal er 28,7 kB schijfruimte vrijkomen.
Wilt u doorgaan? [J/n]
(Database wordt ingelezen ... 173877 bestanden en mappen momenteel geïnstalleerd.)
zram-tools (0.3.3.1-1.1) wordt verwijderd ...
Bezig met afhandelen van triggers voor man-db (2.11.2-2) ...
(Database wordt ingelezen ... 173871 bestanden en mappen momenteel geïnstalleerd.)
Configuratiebestanden voor zram-tools (0.3.3.1-1.1) worden gewist ...