zram vs zswap vs zcache Ultimativer Leitfaden: Wann soll man welchen verwenden?

55
  1. Was zur Hölle sind sie? wie unterscheiden sie sich (ich habe mein Verständnis in einer Antwort unten geschrieben)
  2. Wenn im Zswap-System eine Seite aus dem Zswap in den tatsächlichen Swap verschoben wird, wird sie in einem komprimierten Archiv von gespeichert. (oder ist es vor dem Speichern dekomprimiert?, AFAICT es ist immer noch komprimiert, aber ich kann nicht sicher sein)
  3. Wie ist der aktuelle Stand von zcache? es wurde anscheinend entfernt oder so etwas in 3.11. Was bedeutet das? ( http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=96256460487387d28b8398033928e06eb9e428f7 )
statisch
quelle
2
Antwort 2. In der Festschreibungsmeldung wird eindeutig angegeben, dass die Patches (für zcache) aus 3.11 entfernt wurden, aber in den main -mm-Baum aufgenommen werden.
Askb
1
@staticd Warum hast du deine eigene Antwort nicht akzeptiert? Es ist sehr gut!
Léo Léopold Hertz 준영
Wenn eine Seite aus dem zswap (Compressed Swap Cache) entfernt wird, wird sie _ dekomprimiert_ und gemäß einer der folgenden Verweise [ lwn.net/Articles/537422/] in das Backing-Swap-Gerät gestellt ...
Cbhihe
( lwn.net/Articles/537422 - "Während des erneuten Zurückschreibens dekomprimiert zswap die Seite ..."). @mmin unten deutet darauf hin, dass dies ineffizient sein oder sogar eine ausnutzbare Gefahr für einen Server darstellen kann!
Mwfearnley

Antworten:

2

In Bezug auf 2. scheint zswap die Seiten beim Zurückschreiben zu dekomprimieren, was den Kommentar von @ Cbhihe bestätigt.

mm / zswap.c , Zeile 828:

/*
 * Attempts to free an entry by adding a page to the swap cache,
 * decompressing the entry data into the page, and issuing a
 * bio write to write the page back to the swap device.
 * ...
 */
static int zswap_writeback_entry(struct zpool *pool, unsigned long handle)
{
    ...

    case ZSWAP_SWAPCACHE_NEW: /* page is locked */
        /* decompress */
        ...

        ret = crypto_comp_decompress(tfm, src, entry->length,
                         dst, &dlen);
        ...
        kunmap_atomic(dst);    


$ git show
commit 1573d2caf713874cfe0d1336c823d0fb548d8bed
Merge: 4cdf8db 0a86248
Author: Linus Torvalds <[email protected]>
Date:   Tue Oct 11 23:59:07 2016 -0700

Zswap ist daher in Situationen nützlich, in denen der komprimierte RAM-Cache wahrscheinlich kurz vor dem Zurückschreiben auf die Festplatte vergessen wird. Es ist nicht für Anwendungen mit großen, langlebigen Haufen gedacht, die eventuell vom eigentlichen Swap-Gerät unterstützt werden müssen.

mnish
quelle
7
Ich habe ein potenziell gefährliches Verhalten von zswap festgestellt. Wenn eine Anwendung viele Seiten zuordnet und Daten in diese schreibt, die sehr gut komprimiert sind (z. B. eine Folge von Nullen), speichert zswap diese problemlos im Kernel-Slab-Speicher. Wenn jedoch etwas den Austausch der Festplatte auslöst, platzen die gespeicherten Daten plötzlich - so viele Nullen auf den Seiten, die "nur" Gigabyte im Speicher beanspruchten, werden jetzt auf Hunderte von Gigabyte auf der Festplatte dekomprimiert.
mnish
2
Ein Angreifer versucht möglicherweise, Daten mit niedriger Entropie auf einem Server zu speichern. Wenn etwas Auswechseln auslöst, ist der Server tot.
20.
1
Haben Sie dies stromaufwärts gemeldet?
Ken Sharp
Noch ein Nachteil des Schreibens unkomprimierter Daten data
Mihail Malostanidis
Sicherlich wäre es räumlich und zeitlich besser, die Daten in einer dekomprimierten Form zu sichern! Es klingt nach etwas, von dem wir wirklich wollen, dass es es tut. Ich kann nur davon ausgehen, dass die Umstrukturierung des Swap-Bereichs, um dies zu ermöglichen, entweder das Umschreiben eines Großteils des vorhandenen Codes oder ein komplexeres Zuweisungssystem erfordert.
Mwfearnley
75

Es gibt eine Menge Dinge über diese drei Systeme, aber keines davon macht einen einfachen Vergleich zwischen ihnen, geschweige denn eine gute Erklärung. Ich versuchte es zu verstehen, aber mein Kopf explodierte. Dann dachte ich, ich hätte es verstanden, also versuchte ich es aufzuschreiben und mein Kopf explodierte erneut. (siehe Zusammenfassung der Implementierungen) Ich dachte, es wäre nützlich, dies hier zu posten, da es viele Stapelaustauschfragen gab, die sich mit paarweisen Vergleichen zwischen ihnen befassten.

Zusammenfassung dessen, was wann verwendet werden soll:

  1. ZRAM, wenn Sie kein Swap-Gerät auf der Festplatte / SSD haben.
  2. ZSWAP, wenn Sie ein Swap-Gerät auf Festplatte / SSD haben.
  3. ZCACHE : Es macht das, was ZSWAP macht und komprimiert und beschleunigt auch den Seiten-Cache des Dateisystems. (Es ist intern viel komplizierter und befindet sich nicht im Kernel, da es sich noch in der Entwicklung befindet.)

Zusammenfassung ihrer Implementierungen:

  1. ZRAM ist ein komprimiertes RAM-basiertes Swap-Gerät
  2. ZSWAP ist ein komprimierter Cache, wenn Sie bereits einen Swap haben.
  3. ZCache ist ein Backend für einen speziellen Typ von Virtual RAM-Dingen (Transcendent Memory), mit dem Dateisystemseiten zwischengespeichert oder Daten ausgetauscht werden können.

Einzelheiten:

  • ZRAM: Erstellt ein Swap-Gerät im RAM. Hier gesendete Seiten werden beim Speichern komprimiert. Es hat eine höhere Priorität als andere Auslagerungsgeräte: Ausgelagerte Seiten werden vorzugsweise an das zram-Gerät gesendet, bis es voll ist. Erst dann werden andere Auslagerungsgeräte verwendet.

    • Vorteile: Unabhängig von anderen (physischen) Swap-Geräten. Es kann verwendet werden, wenn keine Swap-Partition vorhanden ist, um den verfügbaren Speicher zu erweitern.
    • Nachteile: Wenn andere Swap-Geräte (HDD / SSD) vorhanden sind, werden diese nicht optimal genutzt. Da das zram-Gerät ein unabhängiges Auslagerungsgerät ist, werden alle neuen Seiten, die ausgelagert werden müssen, direkt an das nächste Auslagerungsgerät gesendet, sobald es voll ist.
      1. Es besteht die reale Chance einer LRU-Inversion (am wenigsten genutzte): Es handelt sich um die zuletzt ausgelagerten Daten, die auf die langsame Festplatte übertragen werden, während inaktive Seiten, die vor langer Zeit ausgelagert wurden, im schnellen ZRAM verbleiben
      2. Die Daten, die an die Festplatte gesendet und von dieser gelesen werden, beanspruchen viel Bandbreite, da sie nicht komprimiert sind.
    • Status: Eingefügt in den Mainline-Kernel 3.14. Nach der Aktivierung auf einem System sind einige Benutzerkonfigurationen erforderlich, um die Swap-Geräte einzurichten und zu verwenden.
  • ZSWAP: Das frontswapSystem fängt den Versuch ab, Seiten auszutauschen und verwendet zswap als Write-Back-Cache für ein HDD / SSD-Auslagerungsgerät: Es wird versucht, die Seite zu komprimieren, und wenn sie schlecht komprimierbare Daten enthält, werden diese direkt auf die Festplatte geschrieben. Wenn die Daten komprimiert sind, werden sie im zswap-Speicherpool gespeichert. Wenn Seiten aus dem Arbeitsspeicher ausgelagert werden, wenn die insgesamt komprimierten Seiten im RAM eine bestimmte Größe überschreiten, wird die zuletzt verwendete (LRU) komprimierte Seite auf die Festplatte geschrieben, da es unwahrscheinlich ist, dass sie bald benötigt wird.

    • Vorteile: Sehr effizienter Einsatz von RAM und festplattenbasiertem Swap. Minimiert die Festplatten-E / A, indem sowohl die Anzahl der erforderlichen Schreib- und Lesevorgänge (Daten werden komprimiert und im RAM gespeichert) als auch die Bandbreite dieser E / A-Vorgänge reduziert werden, da die Daten in komprimierter Form vorliegen.
    • Einschränkungen: Es handelt sich um eine Erweiterung von festplattenbasierten Auslagerungssystemen und ist daher von einer Auslagerungspartition auf der Festplatte abhängig.
    • Status: Eingefügt in den 3.11 Mainline Linux Kernel.
  • ZCache: Es ist ein Backend für das Transcendent-Speichersystem. Transzendenter Speicher bietet einen RAM-ähnlichen Speicher, auf den nur mit putund get-Aufrufen auf einer Seite gleichzeitig zugegriffen werden kann . Dies ist anders als bei normalem Speicher, auf den jeweils byteweise zugegriffen werden kann. Der Hook frontswapund cleancachesystems versucht, Dateisystem-Seiten-Caches auszutauschen und wiederherzustellen und sie an die Backends des transzendenten Speichers zu senden. Wenn zcache als Backend verwendet wird, werden die Daten komprimiert und im RAM gespeichert. Wenn es voll ist, werden komprimierte Seiten in den Swap verschoben. (Ein alternatives Backend ist RAMster, das einen gemeinsamen RAM-Pool für vernetzte Computer verwendet.) Das Verwenden nur des frontswapFrontends mit dem zcacheBackend funktioniert genauso zswap. (Tatsächlich ist zswap eine vereinfachte Teilmenge von zcache.)

    • Vorteile Bietet komprimiertes Caching sowohl für Swap- als auch für Dateisystem-Caches.
    • Status: Immer noch nicht bekannt, da es sehr kompliziert ist und gerade bearbeitet wird.

Die besten Ressourcen, die ich gefunden habe, waren:


statisch
quelle
6
Ist es möglich und / oder sinnvoll, sowohl zram als auch zswap zu verwenden?
Phlya
2
Keiner der drei muss / sollte gleichzeitig ausgeführt werden. zswap benötigt im Gegensatz zu ZRAM, das keine dedizierte Swap-Partition benötigt, einen festplattenbasierten Swap als Backend. Wenn Sie jedoch Swap haben, ist die ZRAM + Swap-Partition viel weniger effektiv als die Zswap + Swap-Partition.
Staticd
Können Sie bitte hier zusammenfassen, wie Sie aktivieren zswap. Hier Details askubuntu.com/a/361321/25388
Léo Léopold Hertz 준영
2
Erwägen
Tom Hale,
1
Jede Antwort, die besagt, dass a zramist, swapist völlig falsch. zramIST NICHT ein swap. Das swapeinzige KANN in gespeichert werden zram. Dies ist jedoch einer von vielen möglichen Anwendungsfällen !. Hier ist ein Beispiel: "Einige der Verwendungszwecke beinhalten / tmp-Speicher, die Verwendung als Swap-Disk, verschiedene Caches unter / var und vielleicht noch viel mehr :)" kernel.org/doc/Documentation/blockdev/zram.txt Zum Beispiel verwende ich es für Zwischenspeicher, den ich wie jedes andere normale Blockgerät formatiere und einbinde.
Victor Yarema