So erhöhen Sie die Wahrscheinlichkeit, dass Dateien in TMPFS ausgetauscht werden


7

Ich verwende tmpfs für mein /tmpVerzeichnis. Wie kann ich den Computer dazu bringen, die Dateien in der Datei /tmpauszutauschen, bevor er etwas austauscht, das von Anwendungen verwendet wird?

Grundsätzlich sollten die darin enthaltenen Dateien /tmpeine höhere Austauschbarkeit aufweisen als der von Prozessen verwendete Speicher.

Es scheint, dass diese Antwort https://unix.stackexchange.com/a/90337/56970 sehr sinnvoll ist, aber Sie können den Austausch für ein einzelnes Verzeichnis nicht ändern. Ich weiß zwar über cgroups Bescheid, sehe aber keine Möglichkeit, tmp zu einer cgroup zu machen?


seit Kernel 3.5 -vm.swappiness=0
mikeserv

Ich habe die Antwort von hier erhalten: unix.stackexchange.com/a/90337/56970 vm.swappiness ist sinnvoll, aber Sie können es nicht auf ein einziges Verzeichnis beschränken.
CMCDragonkai

@mikeserv Aber ich möchte immer noch, dass Anwendungen ausgetauscht werden können.
CMCDragonkai

Dieser Patch ändert das Verhalten mit swappiness == 0. Wenn wir swappiness == 0 setzen, wird der Kernel nicht vollständig ausgelagert (für die globale Rückforderung, bis die Anzahl der freien Seiten und dateibasierten Seiten in einer Zone auf etwas sehr sehr Kleines reduziert wurde (nr_free + nr_filebacked <hohes Wasserzeichen)).
Mikeserv

Ihre Frage hat sehr wenig mit dem Verzeichnis zu tun, /tmpaber viel mehr mit dem, was zuerst ausgetauscht wird - Prozessspeicher oder Seitencache? Weil tmpfsist Seitencache gemountet. Schauen Sie sich diesen Kommentar auf der oben verlinkten Seite an.
Mikeserv

Antworten:


6

Wenn alles gut geht, sollte Ihr Kernel selbst entscheiden, "das Richtige zu tun". Es werden viele ausgefallene Heuristiken verwendet, um zu entscheiden, was ausgetauscht werden soll und was bei Speicherdruck aufbewahrt werden soll. Diese Heuristiken wurden sorgfältig von wirklich intelligenten Leuten mit viel Erfahrung in der Speicherverwaltung erstellt und sind bereits gut genug, dass sie ziemlich schwer zu verbessern sind.

Der Kernel verwendet eine Kombination solcher Dinge, um zu entscheiden, was ausgetauscht werden soll:

  • Wie kürzlich wurde der Speicher verwendet?
  • Gibt an, ob der Speicher seit seiner Zuordnung geändert wurde. So wird beispielsweise eine gemeinsam genutzte Bibliothek vor dem Heap-Speicher verschoben, da der Heap-Speicher verschmutzt ist und zum Auslagern geschrieben werden muss, während der zugeordnete Speicher der gemeinsam genutzten Bibliothek erneut aus der Originaldatei auf der Festplatte geladen werden kann, falls er erneut benötigt wird Sie müssen diese Seiten also nicht schreiben, um sie auszutauschen. Hier sollten Sie feststellen, dass der tmpfsSpeicher immer schmutzig ist (es sei denn, es handelt sich um eine neue Seite mit Nullen), da er nicht durch irgendetwas gesichert ist.
  • Hinweise von mprotect().
  • Wahrscheinlich noch viel mehr.

Kurze Antwort: Nein, Sie können die Entscheidungen des Kernels über die Speicherverwaltung nicht direkt überschreiben.


Ich denke, ich muss ein Experiment schreiben, um zu sehen, wie tmpfs ausgetauscht wird.
CMCDragonkai

2

cgroups dienen zur Steuerung von Anwendungen, nicht von Dateisystemen. Was Sie wollen, muss entweder eine Sysctl- oder eine Mount-Option sein, da es sich um ein gesamtes Dateisystem handelt. Leider sieht es nicht so aus, als ob eine dieser beiden Funktionen für dieses Problem erstellt wurde. Das liegt wahrscheinlich daran, wie einzigartig ein solches Problem ist.

Um dies zu umgehen, können Sie versuchen, einen Cronjob zu schreiben, z.

*/5 * * * * find /tmp -type f -exec cat {} \; >/dev/null 2>&1

Dies sollte den Kernel zwingen, alle Dateien einzulesen, wodurch die Seiten zurück in den Speicher verschoben werden.

Das heißt, Dateien, auf die Ihre Workload-Anwendung häufig zugreift, funktionieren im Wesentlichen genauso wie beim Cronjob (und nur für die spezifischen Dateien, die tatsächlich anstelle des gesamten Mount verwendet werden). Ich kann nicht viel Vorteil sehen, um dies zu tun.

Was ist das eigentliche Ziel hier?

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.