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
}