GNU/Linux >> Linux Esercitazione >  >> Linux

Come impostare correttamente zram e swap

swapon hanno -p interruttore che imposta la priorità. Posso configurare:

swapon -p 32767 /dev/zram0
swapon -p 0 /dev/my-lvm-volume/swap

O in /etc/fstab:

/dev/zram0              none swap sw,pri=32767 0 0
/dev/my-lvm-volume/swap none swap sw,pri=0     0 0

MODIFICA: Solo per una soluzione completa - tale linea può essere utile come regola udev:

KERNEL=="zram0", ACTION=="add", ATTR{disksize}="1073741824", RUN="/sbin/mkswap /$root/$name"

Nota a margine:a causa del blocco per CPU, è importante avere tanti zram-swap quante sono le CPU (modprobe zram_num_devices=n zram) invece di un singolo grande. RTFM!


Per qualche motivo sembra che ci siano molte interpretazioni errate di https://www.kernel.org/doc/Documentation/blockdev/zram.txt

Indica chiaramente:

2) Impostare il numero massimo di flussi di compressione
Indipendentemente dal valore passato a questo attributo, ZRAM allocherà sempre più flussi di compressione, uno per CPU online, consentendo così diverse operazioni di compressione simultanee. Il numero di flussi di compressione allocati diminuisce quando alcune CPU diventano offline. Non esiste più la modalità a flusso di compressione singolo, a meno che tu non stia eseguendo un sistema UP o abbia solo 1 CPU online.

Per scoprire quanti stream sono attualmente disponibili:

cat /sys/block/zram0/max_comp_streams

Ma c'è un mito urbano comune e persistente secondo cui il numero massimo di flussi è 1.

Chiaramente non è vero.

I due sistemi operativi in ​​cui zram si è dimostrato efficace Chrome OS e Android ti consentono di un unico dispositivo. Inoltre modificano page-cluster :

page-cluster controlla il numero di pagine fino a cui pagine consecutive vengono lette dallo scambio in un singolo tentativo. Questa è la controparte di swap del readahead della cache della pagina.
La consecutività menzionata non è in termini di indirizzi virtuali/fisici, ma consecutivi sullo spazio di scambio, il che significa che sono stati scambiati insieme.

È un valore logaritmico:impostarlo su zero significa "1 pagina", impostarlo su 1 significa "2 pagine", impostarlo su 2 significa "4 pagine", ecc. Zero disabilita completamente lo swap readahead.

Il valore predefinito è tre (otto pagine alla volta). Potrebbero esserci alcuni piccoli vantaggi nell'impostare questo valore su un valore diverso se il tuo carico di lavoro è ad alta intensità di scambio.

Valori più bassi significano latenze inferiori per gli errori iniziali, ma allo stesso tempo errori e ritardi I/O extra per errori successivi se fossero stati parte di quelle pagine consecutive che readahead avrebbe portato.

— dalla documentazione del kernel per /proc/sys/vm/*

Quindi usa echo "0" > /proc/sys/vm/page-cluster per forzare una singola pagina.

Molto sembra provenire da zram_config, il pacchetto debian/ubuntu che per qualche ragione sembra avere ben poca correlazione con i documenti del kernel per zram e ha generato una serie di sussurri cinesi che in sostanza potrebbero essere completamente sbagliati.

Con lo scambio di file crei un'unità di scambio per ogni core? Forse questo potrebbe rispondere alle tue domande. Inoltre, a sostegno di ciò, Google Chrome OS e Android che utilizzano con successo con il cluster di pagine sopra in quanto non corrisponde a un disco, quindi la latenza può essere migliorata, singoli dispositivi.

Inoltre, per un amministratore di sistema, cos'è importante l'utilizzo effettivo di mem o l'utilizzo di vm mem? La maggior parte degli esempi mostra la creazione tramite disk_size e ignora totalmente mem_limit.disk_size=uncompressed vm size.mem_limit=actual mem footprint limit.

In un certo senso rende la scelta disk_size confusa poiché è una dimensione massima virtuale dipendente dal rapporto comp_alg e dall'overhead dello 0,1% della dimensione del disco quando non è in uso ed è davvero una stima stimata di mem_limit * (circa 2 - 4) di frugal vs ottimismo.

zram_config non controlla nemmeno l'utilizzo del servizio precedente e sovrascrive mentre un semplice controllo della classe zram sys come il seguente lo farà.

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. Che cos'è un nome host carino e come configurarlo

  2. Come impostare l'indirizzo IP statico e configurare la rete in Linux

  3. Come installare e configurare mysql 8 su Ubuntu 20.04

  4. Come impostare o modificare il fuso orario su Ubuntu 20.04 e 21.04

  5. Come si imposta un file di scambio crittografato in Linux?

Come creare e utilizzare file di scambio su Linux

Come installare e configurare Jenkins in Fedora 35

Come installare e configurare Jenkins in Debian 11

Come impostare data e ora su Linux

Come impostare e annullare l'impostazione delle variabili di ambiente su Linux

Come installare e configurare WordPress con Ansible