Pour une raison quelconque, il semble y avoir beaucoup d'interprétation erronée de https://www.kernel.org/doc/Documentation/blockdev/zram.txt
Il indique clairement:
2) Définir le nombre maximal de flux de compression
Quelle que soit la valeur transmise à cet attribut, 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 deviennent hors ligne. Il n'y a plus de mode de flux de compression unique, sauf si vous exécutez 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 a prouvé son efficacité Chrome OS et Android vous un seul appareil. Ils ont également peaufiné page-cluster
:
page-cluster
contrôle le nombre de pages jusqu'à lesquelles des pages consécutives sont lues depuis le swap en une seule tentative. Il s'agit de la contrepartie de swap à la lecture anticipée du cache de page.
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.
Il s'agit d'une valeur logarithmique - la mettre à zéro signifie "1 page", la mettre à 1 signifie "2 pages", la mettre à 2 signifie "4 pages", etc. Zero désactive complètement la lecture anticipée du swap.
La valeur par défaut est trois (huit pages à la fois). Il peut y avoir quelques petits avantages à régler cette valeur sur une valeur différente si votre charge de travail est gourmande en échanges.
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 ces pages consécutives en lecture anticipée.
- à partir de la documentation du noyau pour/proc/sys/vm/*
Donc, utilisez echo "0" > /proc/sys/vm/page-cluster
pour forcer une seule page.
Beaucoup 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? Cela pourrait peut-être répondre à vos questions. De plus, pour sauvegarder cela, Googles Chrome OS et Android qui utilisent avec succès le groupe de pages ci-dessus car il ne correspond pas à un disque afin que la latence puisse être améliorée, sur des appareils uniques.
Aussi pour un administrateur système, quelle est l'utilisation réelle de mem ou l'utilisation de mem vm? 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 mem.
Cela rend 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 approximative de mem_limit * (environ 2 à 4) de frugal vs optimisme.
zram_config ne vérifie même pas l'utilisation du service précédent et écrase alors qu'une simple vérification de la classe sys zram 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
}