Aus irgendeinem Grund scheint es eine Menge Fehlinterpretationen von https://www.kernel.org/doc/Documentation/blockdev/zram.txt zu geben
Es heißt klar:
2) Festlegen der maximalen Anzahl von Komprimierungsströmen
Unabhängig vom an dieses Attribut übergebenen Wert weist ZRAM immer mehrere Komprimierungsströme zu - einen pro Online-CPU - und ermöglicht so mehrere gleichzeitige Komprimierungsvorgänge. Die Anzahl der zugewiesenen Komprimierungsströme nimmt ab, wenn einige der CPUs offline sind. Es gibt keinen Single-Compression-Stream-Modus mehr, es sei denn, Sie betreiben ein UP-System oder haben nur noch 1 CPU online.
So finden Sie heraus, wie viele Streams derzeit verfügbar sind:
cat /sys/block/zram0/max_comp_streams
Es gibt jedoch einen verbreiteten, anhaltenden urbanen Mythos, dass die maximale Anzahl von Streams 1 beträgt.
Es ist eindeutig nicht wahr.
Die beiden Betriebssysteme, in denen sich zram als effektiv erwiesen hat, Chrome OS & Android bieten Ihnen ein einziges Gerät. Auch sie optimieren page-cluster
:
page-cluster
Steuert die Anzahl der Seiten, bis zu denen aufeinanderfolgende Seiten in einem einzigen Versuch aus dem Swap eingelesen werden. Dies ist das Swap-Gegenstück zum Readahead des Seitencaches.
Die erwähnte Konsekutivität bezieht sich nicht auf virtuelle / physische Adressen, sondern auf den Swap-Speicher - das heißt, sie wurden zusammen ausgetauscht.
Es ist ein logarithmischer Wert - das Setzen auf Null bedeutet "1 Seite", das Setzen auf 1 bedeutet "2 Seiten", das Setzen auf 2 bedeutet "4 Seiten" usw. Null deaktiviert den Swap-Readahead vollständig.
Der Standardwert ist drei (jeweils acht Seiten). Es kann einige kleine Vorteile haben, dies auf einen anderen Wert einzustellen, wenn Ihre Arbeitslast Swap-intensiv ist.
Niedrigere Werte bedeuten geringere Latenzen für anfängliche Fehler, aber gleichzeitig zusätzliche Fehler und E / A-Verzögerungen für nachfolgende Fehler, wenn sie Teil dieser aufeinanderfolgenden Seiten gewesen wären, die Readahead eingebracht hätte.
- aus der Kerneldokumentation für/proc/sys/vm/*
Verwenden Sie echo "0" > /proc/sys/vm/page-cluster
diese Option, um eine einzelne Seite zu erzwingen.
Vieles scheint von zram_config zu stammen, dem Debian / Ubuntu-Paket, das aus irgendeinem Grund nur eine sehr geringe Korrelation mit den Kerneldokumenten für zram zu haben scheint und eine Reihe chinesischer Flüstern hervorgebracht hat, die im Wesentlichen völlig falsch sein könnten.
Erstellen Sie mit File Swap ein Swap-Laufwerk für jeden Kern? Vielleicht könnte das Ihre Fragen beantworten. Um dies zu sichern, googeln Chrome OS & Android, die erfolgreich mit dem oben genannten Seitencluster arbeiten, da es nicht mit einer Festplatte übereinstimmt, sodass die Latenz verbessert werden kann, einzelne Geräte.
Was ist auch für einen Systemadministrator wichtig für die tatsächliche Verwendung von Mem oder VM Mem? Die meisten Beispiele zeigen die Erstellung über disk_size und ignorieren mem_limit vollständig. disk_size = unkomprimierte VM-Größe. mem_limit = tatsächliches Mem-Footprint-Limit.
Dies macht die Auswahl von disk_size verwirrend, da es sich um eine virtuelle maximale Größe handelt, die vom comp_alg-Verhältnis und dem Overhead von 0,1% der Größe der Festplatte abhängt, wenn sie nicht verwendet wird, und tatsächlich eine Schätzung von mem_limit * (ca. 2 - 4) von sparsam vs. Optimismus.
zram_config prüft nicht einmal, ob der Dienst zuvor verwendet wurde, und überschreibt ihn, während eine einfache Überprüfung der zram sys-Klasse wie unten beschrieben erfolgt.
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
}