So richten Sie zram richtig ein und tauschen

9

Ich konfiguriere und kompiliere einen neuen 3.0-Kernel. Eine der Extras, die ich für einige Zeit (durch Patchen) verwenden wollte und die in 3.0 zusammengeführt wurden, ist zram.

Ist es möglich, sowohl HDD-Swap als auch Zram-Swap so einzustellen, dass das Zram zuerst verwendet wird und nur verschüttete Seiten in den tatsächlichen Swap übernommen werden?

Maciej Piechotka
quelle

Antworten:

8

Nebenbemerkung: Aufgrund der Sperrung pro CPU ist es wichtig, so viele Zram-Swaps wie CPUs (modprobe zram_num_devices = n zram) anstelle eines einzigen großen zu haben. RTFM!

eMPee584
quelle
1
[Zitat benötigt]? Ich kann die Empfehlung nicht in der Linux-Dokumentation oder in Google finden.
Maciej Piechotka
Standardmäßig max_comp_streamsscheint dies 1der Dokumentation zu entsprechen . Ich habe nicht überprüft, ob dieser Parameter im Jahr 2011 vorhanden war, aber es scheint eine bessere Option zu sein als mehrere Auslagerungsdateien.
Maciej Piechotka
1
Testen mit dem Paket zram-configunter Ubuntu (und wahrscheinlich Debian) Ich habe festgestellt, dass die Konfiguration standardmäßig 1 pro Kern oder Thread ist (2 auf einem alten E2140 Dual Core und 4 auf einem i3-3220)
Elder Geek
interessant, und dies scheint auch ziemlich klar zu verstehen, wenn man /etc/init/zram-config.conf
Aquarius Power
1
Diese Nebenbemerkung ist ab Kernel-Version 3.15 veraltet. Sie können jetzt mehrere Komprimierungsthreads für ein einzelnes großes Zram erstellen.
Perkins
6

swaponhaben -pSchalter, der die Priorität setzt. Ich kann 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

EDIT: 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"
Maciej Piechotka
quelle
1

Wählen Sie durch Übergeben aus, wie viele Zram-Geräte Sie möchten

zram.num_devices=4

zu Kernel-Parametern oder direkt zum Modul (ohne zram.). Der Standardwert ist 1. zram kann so viele CPUs verwenden, wie Sie Geräte erstellen.

Bereiten Sie das zram0-Gerät vor und stellen Sie die Größe auf 1 GB ein.

echo 1000000000 > /sys/block/zram0/disksize

Alternativ können Sie dies auch nach der udev-Regel tun. Erstellen Sie einen Swap auf zram0

mkswap /dev/zram0

und aktivieren Sie es mit höherer Priorität als andere Swap-Geräte

swapon -p 32767 /dev/zram0
Okias
quelle
Für welche Kernel- und Distribution-Versionen schreiben Sie hier?
Cbhihe
Für die Aufzeichnung schlägt es fehl, wie auf einem 14.04.5-Desktop-Ubuntu empfohlen. Insbesondere wenn ich versuche, die Prioritäten von zram0und zram1den Wert 10 auf einer Intel T9300-Box mit 2 Kernen festzulegen, wirft es mich mit : swapon: /dev/zram0 or 1: swapon failed: Device or resource busy.
Cbhihe
1

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-clusterSteuert 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-clusterdiese 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
}
Stuart Naylor
quelle
0

Wenn Sie zram aktivieren, hat es automatisch Priorität.

Für Ubuntu 16.04: /usr/bin/init-zram-swapping

Sie können diese Datei bearbeiten (1. Backup erstellen). Um den verwendeten echten RAM zu verringern, habe ich die Mem-Zeile folgendermaßen geändert:

mem=$(((totalmem / 4 / ${NRDEVICES}) * 1024))
VeganEye
quelle