Zní to jako šílenej paradox, vždyť swap je přece nástavbou RAM, když její kapacita už došla, když už se do ní nic nevejde. Ale jde to, jde to vskutku velice dobře.
Píšu tady o
zRAM, principem činnosti je komprese stránek uložených v RAM kompresním algoritmem, jinými slovy, do RAM se vejde víc dat, než za normálních okolností dokáže pojmout. Na Debíkovi je tato vlastnost k dispozici od jádra verze 3.2, využívá se u operačních systémů Android.
Výhody:* Mnohem vyšší rychlost a plynulost chodu swapujícího systému v porovnání se swapováním na disk, mnohem nižší, prakticky zanedbatelné latence (nikde neběhá rameno s hlavičkami a nehledá stopu na disku)
* Nechrochtá jako swapující disk, ba naopak, takovýto způsob swapování je absolutně neslyšný
* Je schopen využít všechna jádra CPU, čím víc jader, tím vyšší výkon
* Šetří disky. DRAM se neopotřebí (přestože stále pracuje na plné obrátky), zatímco mechanismus HDD dostává dost na prdel a flash paměť SSD má omezený počet zápisů a přepisů na buňku (tam je čtení, zápis a navíc i přepis; čtení nic nepoškozuje)
* Do RAM lze vměstnat i víc jak dvojnásobek její kapacity
Nevýhody:* Kdo chce uspávat na disk, stejně logicky swapovací oddíl na disku potřebuje; jak se RAM vypne šťáva, není schopna uchovat data (kromě logických nul)
* K zpomalení běhu systému a aplikací stejně dochází, komprese i dekomprese zabírají všechen dostupný procesorový čas. Jen to trvá mnohem kratší dobu a systém je během swapování mnohem použitelnější
Následující postup byl převzat a počeštěn z
wiki Debianu a je mnou velmi dobře odzkoušený:
1) Vytvořte soubor
/etc/init.d/zram a nasypejte do něj (přepsáno, už nepotřebujete Perl, stačí jen BASH a jeho vestavěné funkce):
#!/bin/bash
### BEGIN INIT INFO
# Provides: zram
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Default-Start: S 1 2
# Default-Stop: 0 6
# Short-Description: Use compressed RAM as in-memory swap
# Description: Use compressed RAM as in-memory swap
### END INIT INFO
FRAC=111
MMRY=`grep MemTotal: /proc/meminfo | awk '{print $2}'`
CPUS=`grep -c processor /proc/cpuinfo`
SIZE=$((MMRY*1024*FRAC/100/CPUS))
START() {
param=`modinfo zram | grep num_devices | cut -f2 -d: | tr -d ' '`
for n in `seq $CPUS`; do
I=$((n-1))
modprobe zram $param=$CPUS
echo $SIZE > /sys/block/zram$I/disksize
mkswap /dev/zram$I
swapon /dev/zram$I -p 10
done &
wait
}
STOP() {
for n in `seq $CPUS`; do
I=$((n-1))
swapoff /dev/zram$I; echo "Odstraněn disk $n/$CPUS"
done &
wait
modprobe -r zram
}
RELOAD() {
systemctl daemon-reload
}
case "$1" in
"start") START;;
"stop") STOP;;
"restart") STOP; START;;
"reload") STOP; RELOAD; START;;
*) echo "Použití: `basename $0` (start | stop | restart | reload)" & exit 1;;
esac
2) V terminálu mu (jako root) nastavte spustitelnost:
chmod +x /etc/init.d/zram3) Systému řekněte, aby se skript automaticky spouštěl při jeho startu (zase jako root):
insserv zram4) A rovnou si to můžete spustit (opět spusťte jako root):
service zram startnebo
/etc/init.d/zram startNakonec pár poznámek:1) Na řádku 12 v tom skriptu je proměnná
FRAC - je to hodnota v procentech, a tou se nastavuje, jak velkou část z RAM použít pro zRAM swap použijte číslo v intervalu {1..100, jde to kolikrát i víc, mám 111%, musíte odzkoušet}
2) Pro swapování má zRAM vyšší prioritu jak normální swap na disku, čili nejdřív se bude při zaplnění RAM plnit zRAM swap, až potom ten na disku
3) Nebojte se, že přijdete o možnost uspávání na disk, ta priorita pro uspávání neplatí, odkládací oddíl na disku je přednější
Nakonec pár měření na mém téměř muzejním stroji:Konfigurace:CPU: Intel Pentium Dual-Core E2180 (2 jádra, 2.0GHz, 800MHz FSB), přetaktováno na 2.64GHz, 1.05GHz FSB
Mámoprkno: Aušus P5QPL-AM (G41 + ICH7)
RAM: 2x 1GiB DDR2, 800MHz, přetaktováno na 874MHz
SSD: ADATA SP600, 64GB/59.6GiB (novej)
HDD1: Western Digital WD3200AAKS, 320GB/298GiB (starej)
HDD2: Seagate Barracuda ST380817AS, 80GB/74.5GiB (starší)
Benchmark spáchán programem
gnome-disks při odpojených oddílech a za výchozího nastavení benchmarku
Čtení [MB/s] Zápis [MB/s] Přístupová doba [ms] %zRAM (R+W) R+W [MB/s]
zRAM 2110.0 2540.0 0.00 100.00 4650.0
SSD 270.0 78.4 0.13 7.49 348.4
HDD1 94.5 84.7 15.36 3.85 179.2
HDD2 48.3 46.6 12.75 2.04 94.9
Tady je vidět, že co do všech parametrů nemá konkurenci ani u SSD.
EDIT: Na svým nynějším stroji (viz podpis) jsem udělal benchmark čtení z zRAM bloku - 11.9GB/s (80x rychlejší jak SSD)
Tak ať vám slouží, fakt to stojí za to!
