Debian fórum

Tipy, triky, návody - pouze návody, nevkládat dotazy! => Správa, údržba a nastavení systému => Téma založeno: Roman Horník 20. 12. 2015, 00:02:43

Název: ▶ Swapujme do RAM
Přispěvatel: Roman Horník 20. 12. 2015, 00:02:43
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 (https://wiki.debian.org/ZRam) 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: [Vybrat]
#!/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/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: [Vybrat]
      Č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! ;)
Název: Re:▶ Swapujme do RAM!
Přispěvatel: Branislav Dohoda 20. 12. 2015, 16:36:38
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..
Název: Re:▶ Swapujme do RAM!
Přispěvatel: Roman Horník 20. 12. 2015, 19:49:20
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 (http://www.cyberciti.biz/faq/linux-add-a-swap-file-howto/) a swapovací soubor s dynamickou velikostí zprostředkuje program swapspace, jenž je v repu.
Název: Re:▶ Swapujme do RAM!
Přispěvatel: Ota Trkola 21. 12. 2015, 08:44:14
Tak jsem to nahodil, uvidíme, jak se to projeví...
Název: Re:▶ Swapujme do RAM!
Přispěvatel: Roman Horník 22. 12. 2015, 17:42:19
Nebój, kdyby to nefachalo, tak to sem nedávám.
Název: Re:▶ Swapujme do RAM
Přispěvatel: Roman Horník 24. 04. 2020, 07:34:43
Po 5 letech nepatrná aktualizace kódu - nevyžaduje už Perl a líp si rozumí se Systemd.
Název: Re:▶ Swapujme do RAM
Přispěvatel: radek_dr 25. 04. 2020, 12:54:02
Zní to jako šílenej paradox, ......
.... zvlášť dnes. Když se podívám na výpis RAM, mám obvykle obsazeno kolem 35-40% ze 4GB a swap sice mám, ale jeho využití je 0 - 0,5%, navíc na SSD. Takže si neumím představit, že bych nějak poznal zrychlení. Jistě, pokud někdo používá aplikace extrémně náročné na paměť, může to využít, ale předpokládám, že takový uživatel si raději pořídí větší RAM, než si z ní ještě ukrajovat na swap; dnes to není až tak finančně náročné...  ???
Název: Re:▶ Swapujme do RAM
Přispěvatel: Roman Horník 25. 04. 2020, 13:45:36
No tak najdou se hyperkonzervy, co si udržujou NTB z 90. let v provozu (zeptej se Oty), ale to je extrém, spousta domácností furt jede na strojích z počátku milénia, třeba rok 2004-2006, protože ten počítač s Celeronem a maximálně giga DDR RAM byl moc drahej, a dokud ňáko funguje…
Pak jsou tady krom mobilů a tabletů, kde na Androidu zRAM figuruje pěknejch pár let, miniaturní počítače dle střihu Raspberry Pi, taky založený na SoC, s relativně malou RAM a nemožností swapovat na úložiště (obvykle SD karta), protože by paměťovka velice rychle odešla.
Já to mám, protože dělám grafiku, právě kvůli žravejm programům (teda ne programům, ale kvůli fotkám, co se musej natahat do RAM)- Když jsem měl 4GiB RAM (a pozdějc 6GiB), tak to stačilo leda na osmibitovou grafiku, kde každá úprava degraduje kvalitu obrazu, a relativně nízký rozlišení u panoramat (třeba jen do 50MPx), protože úprava takovýho 100MPx panoramatu právě kvůli swapování na mechanickej disk netrvala pár desítek minut, ale klidně čtvrt dne.
Nemusíš ale nutně dělat grafiku, i webový stránky, jejich skripty, jsou kolikrát dost nenažraný, stačí pár hodin brouzdat, listovat na Xichtbooku, pročíst pár PDF, a RAM je za chvíli natolik plná, že spuštění nějakýho jinýho programu část paměťovejch stránek prohlížeče pošle do swapu, tím spíš, čím větší je hodnota parametru vm.swappiness (tendence ke swapování, jeho měkkost; výchozí je 60).
Název: Re:▶ Swapujme do RAM
Přispěvatel: radek_dr 26. 04. 2020, 07:42:57
Ale jo, sám mám taky pár historických kousků, i když už je pomalu likviduji. Můj "nejvýkonnější" stroj je 11 let starý, má sice i7, ale...
Ovšem to Raspberry - to je dobrý nápad, tam RAM nepřidám. Musím to zkusit. Mám na něm Apache s PHP a MySQL, testuji na tom občas skripty a přistupuji výhradně přes SSH, a ještě funguje jako print server, tak si to dovedeš představit. Někdy nevím, jestli vypadla na chvíli síť nebo vynechává myš :D
Název: Re:▶ Swapujme do RAM
Přispěvatel: piquick 27. 04. 2020, 16:26:27
Jaký k tomu, prosím, máte nastavený swappiness? Dí za odpověď.
Název: Re:▶ Swapujme do RAM
Přispěvatel: Roman Horník 27. 04. 2020, 19:27:58
Já mám hodnotu 1, ale mělo by platit, čím větší je nouze o RAM, tím větší hodnota, ale víc jak 60 (výchozí) bych to nedával.
Název: Re:▶ Swapujme do RAM
Přispěvatel: Ota Trkola 27. 04. 2020, 19:38:49
Zkoušel jsem od 0 do 60 a moc velký rozdíl v tom není, když je RAM dostatek. A když není, tak to stejně swapuje i když dáš 0. Podle mě tenhle parametr nemá velký vliv.
Název: Re:▶ Swapujme do RAM
Přispěvatel: Roman Horník 27. 04. 2020, 19:47:18
Ty musíš mít furt něco extra :D. Ve swapu nemám ani jeden bajt obsazenej. Se spíš podívej, jestli máš v /etc/sysctl.conf vm.swappiness = <číslo> správně a bez překlepu. Máme stejnej systém, musí bejt stejnej výsledek.
Název: Re:▶ Swapujme do RAM
Přispěvatel: Ota Trkola 28. 04. 2020, 15:48:37
Tak právě proto, že nemáš ve swapu ani jeden bajt obsazenej, tak nechápu k čemu tohle je? Nějak mi furt uniká smysl týhle věci :D Jinak nejsem blb a swap mám nastavenej, tak jak chci...

Kód: [Vybrat]
$ cat /proc/sys/vm/swappiness
10
Název: Re:▶ Swapujme do RAM
Přispěvatel: Roman Horník 30. 04. 2020, 03:56:15
Dědku, nezřídkakdy do něj zabrousím například při tvorbě panoramat, takže…

Mimo to, zrovna Tobě, konzervě odmítající novější technologie, to nenutím. Když stroj používáš jak standardní BFU, nepoužíváš náročný aplikace a zároveň máš dostatek systémovejch prostředků, u nichž svým chováním nedokážeš dosáhnout jejich limitů, nebo je dokonce překročit, tak to nepotřebuješ, vlastně můžeš mít swap na disketě.
Název: Re:▶ Swapujme do RAM
Přispěvatel: Roman Horník 01. 05. 2020, 03:17:19
Tady to máš "černý na bílým" - nejmenovaná česká 2D webová hra. Samotná je vcelku primitivní, ale dost zabugovaná. A především nenažraná.
Na to, aby mi paměť nestačila, stačí hrát asi 2 hodiny, furt totiž v paměti bobtná.
Do zaplnění RAM běžela vcelku normálně (přirovnám ke G3 na Sidovi ve virtuálním stroji). Po zaplnění RAM, jak to začalo swapovat do zRAM, byl běh nepatrně míň plynulej (asi jako G3 na "stabilním" vydání), ale ničemu to nevadilo, až teda na 80-100%ní zátěž všech jader CPU a funící větrák. Jenže jak se zaplnila i zRAM a šlo to do swapu na SSD, ač ten je rychlejší jak HDD, už to bylo naprosto nepoužitelný, trhal se obraz i zvuk, hned nato, protože mám swap stejný velikosti jako Ty, 1.9GiB, i ten se zaplnil a zasáhnul OOM.
Asi 2s před OOM jsem stačil udělat screen, kde je vidět v půlce přeplnění zRAM a náběh do swapu na SSD - za snížení zátěže CPU může IOWait:
(https://i.ibb.co/rxw3b4r/ssw.png) (https://ibb.co/rxw3b4r)
Název: Re:▶ Swapujme do RAM
Přispěvatel: Ota Trkola 01. 05. 2020, 08:23:45
Stále nerozumím tomu, proč bych měl mít v RAM vymezený nějaký prostor pro zRAM, když systém může swapovat přímo do RAM...  ::)
Název: Re:▶ Swapujme do RAM
Přispěvatel: Roman Horník 01. 05. 2020, 15:32:01
Protože v RAM nejsou data komprimovaný (až na slučování duplicitních stránek, dělá KSM, nikoliv Komunistickej svaz mládeže, ale Kernel Samepage Merging), zRAM je postupně komprimuje. Proto se do ní vejde kolem dvojnásobku informací, než by jinak mohla pobrat ;). Opakuju, až po překročení limitu danýho vm.swappiness.
Název: Re:▶ Swapujme do RAM
Přispěvatel: Roman Horník 01. 05. 2020, 16:56:53
Oprava kódu, na na některých strojích mohl awk vracet velikost RAM v bajtech v nevyhovujícím zápisu.
Název: Re:▶ Swapujme do RAM
Přispěvatel: Ota Trkola 01. 05. 2020, 18:10:09
Na některých strojích to nefunguje vůbec a je potřeba použít zram-tools.
Název: Re:▶ Swapujme do RAM
Přispěvatel: Roman Horník 01. 05. 2020, 22:15:28
Že Ti to samo nestartuje (ale ruční spuštění jde) = nefunguje vůbec?! ???
Ani ses nepodíval do logů, proč se to po startu nespouští.
Název: Re:▶ Swapujme do RAM
Přispěvatel: Ota Trkola 02. 05. 2020, 08:44:52
Použil jsem prostě jenom jiný postup.

Kód: [Vybrat]
# apt install zram-tools
Kód: [Vybrat]
# nano /etc/default/zramswap
Kód: [Vybrat]
# Pocet jader procesoru
CORES=4

# Velikost pouzitelne ram pro zram
PERCENTAGE=75

# Priorita zram swap
PRIORITY=100

Kód: [Vybrat]
# nano /etc/sysctl.conf
Kód: [Vybrat]
vm.swappiness = 5
Kód: [Vybrat]
$ cat /proc/swaps
Filename Type Size Used Priority
/dev/sda6                               partition 1951740 0 -2
/dev/zram0                              partition 1469660 0 100
/dev/zram1                              partition 1469660 0 100
/dev/zram2                              partition 1469660 0 100
/dev/zram3                              partition 1469660 0 100