Warum löscht Linux Caches nicht automatisch?

Warum löscht Linux Caches nicht automatisch?

Hintergrund

Meine Frage ist im Grunde eine Fortsetzung davonFrageUndAntwortund insbesondere dieseKommentar.

Immer wenn ich große Mengen an Dateien kopieren oder per rsync synchronisieren muss, neigt der Speicher meines Systems dazu, voll zu werden. Daher führe ich ein Skript wie das folgende aus (als Root):

while true ; do echo "syncing" && sync && echo 3 > /proc/sys/vm/drop_caches && echo "done" && sleep 60 ; done ;

Fragen

  • Könnte dies dem System in irgendeiner Weise schaden oder negative Auswirkungen haben? (Welche „Risiken“ werden insbesondere im referenzierten Kommentar erwähnt?)
  • Wenn die Antwort „nein“ ist (was ich vermute), warum führt Linux diesen Befehl dann nicht standardmäßig automatisch aus? (Ich sehe dadurch keine merkliche Änderung, ich stelle nur fest, dass mir der Speicher nicht ausgeht ...)

Antwort1

Weil es nie einen Vorteil bringt, Caches zu löschen. Der Vorteil liegt nicht darin, Dinge zu vergessen. Der Vorteil liegt in der Wiederverwendung des Speichers, und das wird sowieso passieren. Irgendwann werden die Daten aus dem Speicher gelöscht.

Die Ausführung dieser umfangreichen Aufträge kann jedoch zu Leistungseinbußen führen: Wenn Daten zwischengespeichert, aber nie wiederverwendet werden, werden andere Daten gelöscht, ohne dass dies einen Nutzen bringt.

Daher müssen Sie den Job ohne Caching ausführen (leider erinnere ich mich nicht an den entsprechenden Befehl).

Antwort2

Warum löscht Linux Caches nicht automatisch?

Es wird.

ron> free -g
             total       used       free     shared    buffers     cached
Mem:           504        415         88          1          0        352
-/+ buffers/cache:         62        441
Swap:            0          0          0

Der zwischengespeicherte Speicher sollte weiterhin als freier Speicher betrachtet werden.

Wenn der freie Wert auf 0 sinkt, wird es aus dem Cache abgerufen.

Könnte dies dem System in irgendeiner Weise schaden oder negative Auswirkungen haben?

Schaden = nein. Recherchieren Sie echo 3 > /proc/sys/vm/drop_cachesund Sie werden sehen, dass es einzerstörungsfreiBetrieb.

Der negative Effekt wäre die Leistungseinbuße, die dadurch entsteht, dass etwas von der Festplatte gelesen werden muss, das sich im Cache befunden hätte. Schreiben Sie beispielsweise ein C-Programm, das eine 10 GB große Datendatei einliest. Beim ersten Ausführen wird es langsam sein, weil es von der Festplatte liest, aber bei jedem weiteren Ausführen wird es viel schneller sein, weil die Datendatei im RAM zwischengespeichert ist. Löschen Sie den Cache, und der nächste Programmdurchlauf, bei dem die Datendatei gelesen wird, wird genauso langsam sein wie beim ersten Ausführen. Dies ist leicht zu beobachten und wiederholbar.

Wenn die Antwort Nein ist, warum führt Linux diesen Befehl dann nicht standardmäßig automatisch aus?

Sie müssten näher erläutern, wie und wo dies bei Ihnen passiert. Ich kenne es unter aktuellen Linux-Versionen wie RHEL/CentOS 7.7 nicht. Aber bei älteren Linux-Versionen (wie Kerneln vor 3.x) könnte es eine Entscheidung dieser Distribution gewesen sein, als das Caching noch nicht so robust war wie heute (meiner Meinung nach). Als ich vor ein paar Jahren SLES 11.4 verwendete, bin ich mir ziemlich sicher, dass die Leute bei SuSE keinen Code geschrieben haben, um diesen Drop-Cache automatisch zu aktivieren, aber für einige Arbeitsserver, bei denen ich sie gekauft und SLES für uns konfiguriert hatte, haben die Leute, von denen wir sie damals gekauft und SLES für uns konfiguriert hatten, einen Crontab ausgeführt, um periodisches Drop-Caching durchzuführen, also ist es eine Grauzone, warum dies gemacht wird. Ich vermute, es ist eine „Haushaltsführung = gut“-Mentalität, und da es nie ein destruktiver Befehl ist, kann es nicht wirklich schaden. Die paar Male, die ich es echo 3 > drop_cachesunter SLES 11.4 manuell gemacht habe, dienten der Fehlerbehebung, da es nie wirklich etwas gelöst hat, bei dem letztendlich ein Neustart erforderlich war.

Sehen Sie sich den RHEL-Leitfaden zur Leistungsoptimierung und Optimierung des virtuellen Speichers an. Ich weiß nicht, wie viel davon RHEL-spezifisch ist und wie viel davon niedrig genug ist, um vollständig mit dem Linux-Kernel in Zusammenhang zu stehen und nicht spezifisch für eine Linux-Distribution zu sein. Außerdem ist zu beachten, was sich von Kernel 2.6 über 3.x bis 4.x geändert hat, was in dieser Hinsicht sicherlich von Bedeutung ist. Lesen Sie also die Versionshinweise zum Linux-Kernel.

verwandte Informationen