GNU/Linux >> Znalost Linux >  >> Linux

Jak správně nastavit zram a swap

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án

Je 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
}

Linux
  1. Jak nastavit statickou IP adresu a nakonfigurovat síť v Linuxu

  2. Jak nastavit nebo změnit časové pásmo na Ubuntu 20.04 a 21.04

  3. Jak nastavím šifrovaný odkládací soubor v Linuxu?

  1. Co je to hezké jméno hostitele a jak jej nastavit

  2. Jak nastavit a spustit Kafka na Kubernetes

  3. Jak nainstalovat a nastavit mysql 8 na Ubuntu 20.04

  1. Jak nastavit datum a čas na AlmaLinuxu

  2. Jak nainstalovat a nastavit Docker na Ubuntu 18.04

  3. Jak nastavit a vypsat proměnné prostředí v Linuxu