GNU/Linux >> Tutoriels Linux >  >> Linux

Comment configurer correctement zram et swap

swapon avoir -p commutateur qui définit la priorité. Je peux configurer :

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

Ou dans /etc/fstab :

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

MODIF : Juste pour une solution complète - une telle ligne peut être utile comme règle udev :

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

Sidenote :en raison du verrouillage par processeur, il est important d'avoir autant de zram-swaps que de processeurs (modprobe zram_num_devices=n zram) au lieu d'un seul gros. RTFM !


Pour une raison quelconque, il semble y avoir beaucoup d'interprétations erronées de https://www.kernel.org/doc/Documentation/blockdev/zram.txt

Il indique clairement :

2) Définir le nombre maximum de flux de compression
Quelle que soit la valeur transmise à cet attribut, la ZRAM allouera toujours plusieurs flux de compression - un par CPU en ligne - permettant ainsi plusieurs opérations de compression simultanées. Le nombre de flux de compression alloués diminue lorsque certains processeurs se mettent hors ligne. Il n'y a plus de mode de flux de compression unique, sauf si vous utilisez un système UP ou si vous n'avez qu'un seul processeur en ligne.

Pour savoir combien de flux sont actuellement disponibles :

cat /sys/block/zram0/max_comp_streams

Mais il existe un mythe urbain commun et persistant selon lequel le nombre maximal de flux est de 1.

Ce n'est manifestement pas vrai.

Les deux systèmes d'exploitation où zram s'est avéré efficace, Chrome OS et Android, sont un seul appareil. Ils modifient également page-cluster :

page-cluster contrôle le nombre de pages jusqu'auquel des pages consécutives sont lues à partir du swap en une seule tentative. Il s'agit de l'équivalent de swap de la lecture anticipée du cache de pages.
La consécutivité mentionnée n'est pas en termes d'adresses virtuelles/physiques, mais consécutives sur l'espace d'échange - cela signifie qu'elles ont été échangées ensemble.

C'est une valeur logarithmique - le mettre à zéro signifie "1 page", le mettre à 1 signifie "2 pages", le mettre à 2 signifie "4 pages", etc. Zéro désactive complètement la lecture anticipée de l'échange.

La valeur par défaut est trois (huit pages à la fois). Il peut y avoir quelques petits avantages à régler ceci sur une valeur différente si votre charge de travail est intensive en échange.

Des valeurs plus faibles signifient des latences plus faibles pour les défauts initiaux, mais en même temps des défauts supplémentaires et des retards d'E/S pour les défauts suivants s'ils auraient fait partie de ce que la lecture anticipée des pages consécutives aurait apporté.

— à partir de la documentation du noyau pour /proc/sys/vm/*

Alors utilisez echo "0" > /proc/sys/vm/page-cluster pour forcer une seule page.

Une grande partie semble provenir de zram_config, le paquet debian/ubuntu qui, pour une raison quelconque, semble avoir très peu de corrélation avec les documents du noyau pour zram et a engendré une série de chuchotements chinois qui, en substance, pourraient être complètement faux.

Avec l'échange de fichiers, créez-vous un lecteur d'échange pour chaque cœur ? Peut-être que cela pourrait répondre à vos questions. Également pour sauvegarder cela, Google Chrome OS et Android qui utilisent avec succès le cluster de pages ci-dessus car il ne correspond pas à un disque afin que la latence puisse être améliorée, des appareils uniques.

Également pour un administrateur système, qu'est-ce qui est important pour l'utilisation réelle de la mémoire ou l'utilisation de la mémoire virtuelle ? La plupart des exemples montrent la création via disk_size et ignorent totalement mem_limit.disk_size=taille vm non compressée.mem_limit=limite réelle de l'empreinte mémoire.

Cela rend en quelque sorte le choix de disk_size déroutant car sa taille maximale virtuelle dépend du rapport comp_alg et de la surcharge de 0,1% de la taille du disque lorsqu'il n'est pas utilisé et est vraiment une estimation de mem_limit * (environ 2 - 4) de frugal vs optimisme.

zram_config ne vérifie même pas l'utilisation précédente du service et écrase alors qu'une simple vérification de la classe zram sys comme ci-dessous le fera.

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. Qu'est-ce qu'un joli nom d'hôte et comment le configurer

  2. Comment définir une adresse IP statique et configurer le réseau sous Linux

  3. Comment installer et configurer mysql 8 sur Ubuntu 20.04

  4. Comment définir ou modifier le fuseau horaire sur Ubuntu 20.04 et 21.04

  5. Comment configurer un fichier d'échange chiffré sous Linux ?

Comment créer et utiliser un fichier d'échange sous Linux

Comment installer et configurer Jenkins dans Fedora 35

Comment installer et configurer Jenkins dans Debian 11

Comment définir la date et l'heure sous Linux

Comment définir et supprimer des variables d'environnement sous Linux

Comment installer et configurer WordPress avec Ansible