swapon
mít -p
přepínač, který nastavuje prioritu. Mohu nastavit:
swapon -p 32767 /dev/zram0
swapon -p 0 /dev/my-lvm-volume/swap
Nebo v /etc/fstab:
/dev/zram0 none swap sw,pri=32767 0 0
/dev/my-lvm-volume/swap none swap sw,pri=0 0 0
UPRAVIT: Jen pro úplné řešení - takový řádek může být užitečný jako pravidlo udev:
KERNEL=="zram0", ACTION=="add", ATTR{disksize}="1073741824", RUN="/sbin/mkswap /$root/$name"
Vedlejší poznámka:kvůli zamykání podle jednotlivých procesorů je důležité mít tolik swapů zram, kolik je procesorů (modprobe zram_num_devices=n zram) místo jednoho velkého. RTFM!
Z nějakého důvodu se zdá, že https://www.kernel.org/doc/Documentation/blockdev/zram.txt
je velmi špatně interpretovánJe tam jasně uvedeno:
2) Nastavte maximální počet kompresních streamů
Bez ohledu na hodnotu předávanou tomuto atributu bude ZRAM vždy alokovat více kompresních toků – jeden na online CPU – což umožní několik souběžných kompresních operací. Počet alokovaných kompresních toků se sníží, když se některé CPU stanou offline. Již neexistuje žádný režim streamování jedné komprese, pokud nepoužíváte systém UP nebo nemáte online pouze 1 CPU.Chcete-li zjistit, kolik streamů je aktuálně dostupných:
cat /sys/block/zram0/max_comp_streams
Existuje však běžný, přetrvávající městský mýtus, že maximální počet proudů je 1.
Zjevně to není pravda.
Dva operační systémy, kde se zram osvědčil jako Chrome OS a Android v jediném zařízení. Také vylepšují page-cluster
:
page-cluster
řídí počet stránek, do kterých jsou po sobě jdoucí stránky načteny ze swapu na jeden pokus. Toto je swapovací protějšek předčítání mezipaměti stránky.
Zmíněná posloupnost se netýká virtuálních/fyzických adres, ale po sobě jdoucích na swapovém prostoru – to znamená, že byly vyměněny společně.Jedná se o logaritmickou hodnotu – nastavení na nulu znamená „1 stránka“, nastavení na 1 znamená „2 stránky“, nastavení na 2 znamená „4 stránky“ atd. Nula zcela zakáže swap napřed.
Výchozí hodnota jsou tři (osm stránek najednou). Pokud je vaše pracovní zátěž náročná na výměnu, může to mít určité výhody, pokud ji vyladíte na jinou hodnotu.
Nižší hodnoty znamenají nižší latence pro počáteční chyby, ale zároveň další chyby a I/O zpoždění pro následující chyby, pokud by byly součástí toho, co by přineslo následné čtení stránek.
— z dokumentace jádra pro /proc/sys/vm/*
Použijte tedy echo "0" > /proc/sys/vm/page-cluster
vynutit jednu stránku.
Zdá se, že mnohé pochází z balíčku debian/ubuntu zram_config, který má z nějakého důvodu velmi malou korelaci s dokumenty jádra pro zram a vytvořil řadu čínských šeptů, které by v podstatě mohly být úplně špatné.
Pomocí odkládání souborů vytvoříte odkládací jednotku pro každé jádro? Možná by to mohlo odpovědět na vaše otázky. Také k zálohování tohoto systému Google Chrome OS a Android, který úspěšně využívá výše uvedený shluk stránek, protože neodpovídá disku, takže lze zlepšit latenci jednotlivých zařízení.
Také pro správce systému, co je důležité skutečné využití paměti nebo využití paměti vm? Většina příkladů ukazuje vytvoření pomocí disk_size a zcela ignoruje mem_limit.disk_size=uncompressed vm size.mem_limit=skutečný limit paměti.
Volba disk_size je poněkud matoucí, protože jeho virtuální maximální velikost závisí na poměru comp_alg a režii 0,1 % velikosti disku, když se nepoužívá, a ve skutečnosti je to odhad mem_limit * (přibližně 2 - 4) šetrný vs. optimismus.
zram_config ani nekontroluje předchozí použití služby a přepisuje, zatímco jednoduchá kontrola třídy zram sys, jako je níže, to udělá.
createZramSwaps () {
totalmem=$(free|awk '/^Mem:/{print $2}')
mem=$((( totalmem * MEM_FACTOR / 100 / BIG_CORES ) * 1024))
# Check Zram Class created
ZRAM_SYS_DIR='/sys/class/zram-control'
if [ ! -d "${ZRAM_SYS_DIR}" ]; then
modprobe zram
RAM_DEV='0'
echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
mkswap /dev/zram${RAM_DEV}
swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
else
RAM_DEV=$(cat /sys/class/zram-control/hot_add)
echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
mkswap /dev/zram${RAM_DEV}
swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
fi
if [ "$BIG_CORES" -gt 1 ];then
for i in $(seq $((BIG_CORES - 1))); do
RAM_DEV=$(cat /sys/class/zram-control/hot_add)
echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
mkswap /dev/zram${RAM_DEV}
swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
done
fi
}