Gibt es eine Möglichkeit, den Linux-Kernel anzuweisen, nur einen bestimmten Prozentsatz des Speichers für den Puffercache zu verwenden? Ich weiß, /proc/sys/vm/drop_caches
dass der Cache vorübergehend geleert werden kann, aber gibt es eine permanente Einstellung, die verhindert, dass er auf mehr als z. B. 50% des Hauptspeichers anwächst?
Der Grund, warum ich dies tun möchte, ist, dass ich einen Server mit einem Ceph-OSD habe, der ständig Daten von der Festplatte bereitstellt und es schafft, innerhalb weniger Stunden den gesamten physischen Speicher als Puffer-Cache zu nutzen. Gleichzeitig muss ich Anwendungen ausführen, die eine große Menge (mehrere 10 GB) physischen Arbeitsspeichers zuweisen. Entgegen der landläufigen Meinung (siehe den Ratschlag zu fast allen Fragen zum Puffer-Cache) erfolgt die automatische Freigabe des Speichers durch Löschen sauberer Cache-Einträge nicht sofort: Das Starten meiner Anwendung kann bis zu einer Minute dauern, wenn der Puffer-Cache voll ist ( *), während nach dem Löschen des Cache (mit echo 3 > /proc/sys/vm/drop_caches
) die gleiche Anwendung fast sofort gestartet wird.
(*) Während dieser Minute der Startzeit ist die Anwendung fehlerhaft im neuen Speicher, verbringt jedoch 100% ihrer Zeit im Kernel, so Vtune in einer aufgerufenen Funktion pageblock_pfn_to_page
. Diese Funktion scheint mit der Speicherkomprimierung zu tun zu haben, die zum Auffinden großer Seiten erforderlich ist, was mich zu der Annahme veranlasst, dass tatsächlich die Fragmentierung das Problem ist.