Was ist der geeignete Wert von vm.swappiness bei der Verwendung von zram?

Was ist der geeignete Wert von vm.swappiness bei der Verwendung von zram?

Ich verwende zram auf meinem Computer als komprimierten RAM-gestützten Swap. Wenn das System etwas auslagern muss, ist das Auslagern in eine zram-gestützte Swap-Datei mehr oder weniger gleichbedeutend mit dem Komprimieren dieser Daten im Speicher, um Speicherplatz freizugeben. Dadurch ist das Auslagern im Vergleich zum festplattengestützten Swap die meiste Zeit sehr schnell. Aus diesem Grund frage ich mich, ob sich die Leistung steigern lässt, wenn das System dazu angeregt wird, nicht genutzte Daten aggressiver auszulagern, da dies möglich ist, ohne tatsächlich auf die Festplatte zuzugreifen?

Hat also jemand beispielsweise mit der Einstellung auf 100 herumgespielt, vm.swappinesswährend er ZRAM verwendet? Wäre das wünschenswert?

sysctl -w vm.swappiness=100

Antwort1

Kurze Antwort: vm.swappiness=100istangemessener Wertfür zram (zumindest unter Debian Stretch mit Linux 4.9, ich glaube, das ist das beste Preis-Leistungs-Verhältnis)

Ich teste schon vm.swappiness=100für mich.

Ich denke, das kannst dueinige einfache Testsum sicher zu sein, welcher Wert für Sie am besten ist.

Außerdem habe ichein weiteres einfaches Programmum diese Frage zu testen. x Auf meinem Computer verursacht ein sehr niedriger vm.swappinessWert (wie vm.swappiness=1) offensichtliche Reaktionsprobleme.

Über SwapCachedin /proc/meminfo:

Versuchen Sie zunächst vm.page-cluster=0FolgendesSwapCachedmöglicherweise kann man dadurch einige nutzlose Dinge aus dem Eintauschen reduzieren .

SwapCached kann ZRAM genauso beschleunigen wie Nicht-ZRAM-Swap-Geräte.

SwapCachedkann bei Bedarf (kostenlos) wiederverwendet werden:

./linux-4.9/mm$ grep -rn delete_from_swap_cache
memory-failure.c:715:   delete_from_swap_cache(p);
shmem.c:1115:       delete_from_swap_cache(*pagep);
shmem.c:1645:            * unaccounting, now delete_from_swap_cache() will do
shmem.c:1652:               delete_from_swap_cache(page);
shmem.c:1668:       delete_from_swap_cache(page);
vmscan.c:673:       __delete_from_swap_cache(page);
swap_state.c:137:void __delete_from_swap_cache(struct page *page)
swap_state.c:218:void delete_from_swap_cache(struct page *page)
swap_state.c:227:   __delete_from_swap_cache(page);
swapfile.c:947:         delete_from_swap_cache(page);
swapfile.c:987: delete_from_swap_cache(page);
swapfile.c:1023:            delete_from_swap_cache(page);
swapfile.c:1571:            delete_from_swap_cache(page);
./linux-4.9/mm$ 

Antwort2

Ich würde wirklich nicht empfehlen, den Swap-Wert zu erhöhen. Ein gängiger Mechanismus im Kernel besteht darin, Seiten (Speicherblöcke) in den Swap-Wert zu setzen, um Speicher für andere laufende Aufgaben freizugeben.

Erstes „Problem“: Wenn der Kernel möchte, dass n Seiten freigegeben werden, werden m (wobei m < n ist, wobei m die Anzahl der komprimierten Seiten ist, die zum Speichern von n erforderlich sind) neu im RAM erstellt. Ich bin nicht sicher, ob das den Kernel stören kann oder nicht.

Wenn Sie Seiten im Swap haben, ist es möglich, dass Sie die Anwendung später mit einigen Seiten im Swap verwenden. Der Kernel bringt diese Seiten in den physischen Speicher zurück, entfernt sie aber nicht aus dem Swap (was beim Standard-Swap alsZwischenspeicherung, damit der Kernel diese Seiten nicht in den langsamen Swap zurückschreiben muss, wenn die Anwendung wieder in den Hintergrund geht). Bei ZRAM ist das jedoch vielleicht kein kluger Trick, da Sie dann die m Seiten im ZRAM + die n Seiten, die wieder im Speicher sind, im Speicher haben!

Der Kernel hat normalerweise einen „Gesamtspeicher“, den er für seine Aufgaben verwenden kann. Wenn Sie zram hinzufügen, zählt es nur den „Swap“-Speicher, wie es bei jedem festplattenbasierten Swap der Fall wäre, aber es reduziert den tatsächlichen „Gesamtspeicher“, und das wird vom Kernel nicht erwartet/vorausgesehen. Manchmal kann es deshalb zu seltsamen und unerwünschten Verhaltensweisen kommen!

Bei zram wäre es gut, wenn der Kernel bei Speichermangel nicht zu viel in diesen Bereich auslagert. Und Sie sollten immer eine echte Festplatten-Swap-Partition haben, die mindestens größer ist als Ihre maximale zram-Größe, damit das System nicht OOM bekommt und Sie gleichzeitig viel freien Speicherplatz sehen, wie von free! gemeldet.

Antwort3

https://wiki.archlinux.org/title/Zram#Optimizing_swap_on_zram

Diese Werte sindwas Pop!_OS verwendet. Dieser Pop!_OS GitHub Pull Request verlinkt auch aufeinige Tests von Benutzern auf r/Fedora durchgeführt, die feststellte, dass vm.page-cluster = 0 ideal ist. Sie fanden auch einen hohen Swappiness-Wert als ideal, was dem entspricht, was vorgeschlagen wird vondie Kernel-Dokumente:

Der Standardwert ist 60. Für In-Memory-Swaps wie zram oder zswap sowie Hybrid-Setups, bei denen der Swap auf schnelleren Geräten als das Dateisystem läuft, können Werte über 100 in Betracht gezogen werden. Wenn beispielsweise die zufällige IO auf dem Swap-Gerät im Durchschnitt doppelt so schnell ist wie die IO vom Dateisystem, sollte die Swappiness 133 betragen (x + 2x = 200, 2x = 133,33).

Antwort4

Seiten müssen ausgelagert werden (auf die Festplatte), wenn der Speicher voll ist. Wenn Sie Speicher verwenden, um den Platz zum Auslagern von Seiten zu schaffen, wenn der Speicher voll ist, könnte man meinen, dass dies den Zweck verfehlt, es sei denn, die Komprimierung macht einen Unterschied (und dann wäre es naheliegend, den Speicher direkt zu komprimieren, anstatt den Swap-Vorgang durchzuführen). Ich schätze, man müsste dies vergleichen, da Computer im Vergleich zur Speichergeschwindigkeit immer schneller beim Komprimieren und Dekomprimieren werden.

verwandte Informationen