swapon
haben -p
Schalter, der die Priorität festlegt. Ich kann Folgendes einrichten:
swapon -p 32767 /dev/zram0
swapon -p 0 /dev/my-lvm-volume/swap
Oder in /etc/fstab:
/dev/zram0 none swap sw,pri=32767 0 0
/dev/my-lvm-volume/swap none swap sw,pri=0 0 0
BEARBEITEN: Nur für eine vollständige Lösung - eine solche Zeile kann als udev-Regel hilfreich sein:
KERNEL=="zram0", ACTION=="add", ATTR{disksize}="1073741824", RUN="/sbin/mkswap /$root/$name"
Nebenbemerkung:Wegen der Sperrung pro CPU ist es wichtig, so viele Zram-Swaps wie CPUs zu haben (modprobe zram_num_devices=n zram) statt einer einzigen großen. RTFM!
Aus irgendeinem Grund scheint es viele Fehlinterpretationen von https://www.kernel.org/doc/Documentation/blockdev/zram.txt
zu gebenEs heißt eindeutig:
2) Legen Sie die maximale Anzahl an Komprimierungsströmen fest
Unabhängig vom Wert, der an dieses Attribut übergeben wird, 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 sinkt, wenn einige der CPUs offline werden. Es gibt keinen Single-Compression-Stream-Modus mehr, es sei denn, Sie betreiben ein UP-System oder haben nur 1 CPU online.
So finden Sie heraus, wie viele Streams derzeit verfügbar sind:
cat /sys/block/zram0/max_comp_streams
Aber es gibt einen verbreiteten, hartnäckigen urbanen Mythos, dass die maximale Anzahl von Streams 1 ist.
Es ist einfach nicht wahr.
Die beiden Betriebssysteme, bei denen sich zram als effektiv erwiesen hat, sind Chrome OS und Android, die Sie auf einem einzigen Gerät verwenden. Außerdem optimieren sie 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 Seiten-Cache-Readahead.
Die erwähnte Konsekutivität bezieht sich nicht auf virtuelle/physische Adressen, sondern auf Swap Space aufeinanderfolgend – das heißt, sie wurden zusammen ausgelagert.
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 das Swap-Readahead vollständig.
Der Standardwert ist drei (acht Seiten gleichzeitig). Es kann einige kleine Vorteile haben, dies auf einen anderen Wert einzustellen, wenn Ihre Arbeitslast Swap-intensiv ist.
Niedrigere Werte bedeuten niedrigere Latenzen für anfängliche Fehler, aber gleichzeitig zusätzliche Fehler und I/O-Verzögerungen für nachfolgende Fehler, wenn sie Teil dessen gewesen wären, was das Vorauslesen aufeinanderfolgender Seiten mit sich gebracht hätte.
— aus der Kernel-Dokumentation für /proc/sys/vm/*
Verwenden Sie also echo "0" > /proc/sys/vm/page-cluster
um eine einzelne Seite zu erzwingen.
Vieles scheint von zram_config zu stammen, dem debian/ubuntu-Paket, das aus irgendeinem Grund sehr wenig mit den Kernel-Dokumenten für zram zu korrelieren scheint und eine Reihe von chinesischem Flüstern hervorgebracht hat, das im Wesentlichen völlig falsch sein könnte.
Erstellen Sie mit File Swap ein Swap-Laufwerk für jeden Kern? Vielleicht beantwortet das Ihre Fragen. Um dies auch zu unterstützen, Googles Chrome OS und Android, die erfolgreich mit dem obigen Seitencluster arbeiten, da es nicht mit einer Festplatte übereinstimmt, sodass die Latenz verbessert werden kann, einzelne Geräte.
Auch für einen Systemadministrator, was ist die tatsächliche Mem-Nutzung oder die vm-Mem-Nutzung wichtig? Die meisten Beispiele zeigen die Erstellung über disk_size und ignorieren vollständig mem_limit.disk_size=unkomprimierte vm-Größe.mem_limit=tatsächliches Mem-Footprint-Limit.
Es macht die Wahl von disk_size irgendwie verwirrend, da es eine virtuelle maximale Größe ist, 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 wirklich eine Schätzung von mem_limit * (ca. 2 - 4) von sparsam vs Optimismus.
zram_config prüft nicht einmal auf frühere Dienstnutzung und überschreibt, während eine einfache Prüfung der zram sys-Klasse wie die folgende ausreicht.
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
}