Ich verwende tmpfs für mein /tmp
Verzeichnis. Wie kann ich den Computer dazu bringen, die Dateien in der Datei /tmp
auszutauschen, bevor er etwas austauscht, das von Anwendungen verwendet wird?
Grundsätzlich sollten die darin enthaltenen Dateien /tmp
eine 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?
vm.swappiness=0
/tmp
aber viel mehr mit dem, was zuerst ausgetauscht wird - Prozessspeicher oder Seitencache? Weiltmpfs
ist Seitencache gemountet. Schauen Sie sich diesen Kommentar auf der oben verlinkten Seite an.Antworten:
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:
tmpfs
Speicher immer schmutzig ist (es sei denn, es handelt sich um eine neue Seite mit Nullen), da er nicht durch irgendetwas gesichert ist.mprotect()
.Kurze Antwort: Nein, Sie können die Entscheidungen des Kernels über die Speicherverwaltung nicht direkt überschreiben.
quelle
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.
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?
quelle