Tipy, triky, návody - pouze návody, nevkládat dotazy! > Správa, údržba a nastavení systému

▶ Swapujme do RAM

(1/5) > >>

Roman Horník:
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):


--- Kód: ---#!/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
--- Konec kódu ---

2) V terminálu mu (jako root) nastavte spustitelnost:
chmod +x /etc/init.d/zram

3) Systému řekněte, aby se skript automaticky spouštěl při jeho startu (zase jako root):
insserv zram

4) A rovnou si to můžete spustit (opět spusťte jako root):
service zram start
nebo
/etc/init.d/zram start

Nakonec 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


--- Kód: ---      Č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
--- Konec kódu ---

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! ;)

Brano Dohoda:
Super parada Romane a taka otazka ten swap na disku co mam da sa nejako rozumne pripojit k /home napriklad ? vies aby som sa potom swapu co je na disku zbail inak toto kamos pouzil aj na windowsoch a vravel ze paradna vec..

Roman Horník:
Swapovat můžeš, stejně jako u wokňouzů, do souboru, jestli tohle myslíš. Buďto můžeš mít swapovací soubor s pevnou kapacitou, nebo s dynamickou.
Obojí má svoje výhody a nevýhody:

Pevná velikost: Zabere na disku furt stejně místa, bez ohledu na jeho zaplnění
Dynamická velikost: Velikost toho souboru je dynamická, podle potřeby. Ale způsobuje vyšší fragmentaci na onom oddílu a taky bude o něco pomalejší

Swapovací soubor s pevnou velikostí vyřešíš takhle a swapovací soubor s dynamickou velikostí zprostředkuje program swapspace, jenž je v repu.

Ota Trkola:
Tak jsem to nahodil, uvidíme, jak se to projeví...

Roman Horník:
Nebój, kdyby to nefachalo, tak to sem nedávám.

Navigace

[0] Seznam témat

[#] Další strana

Přejít na plnou verzi