Cache Optimierung

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
BerndHohmann
Beiträge: 70
Registriert: 17.02.2015 23:26:44
Wohnort: Nidderau
Kontaktdaten:

Cache Optimierung

Beitrag von BerndHohmann » 24.03.2015 02:00:42

Ich kämpfe gerade mit einem Host dessen VMs im Ernstfall mehr Daten ins Dirty schreiben als die Platten abkönnen.

Der Grund sind die vm.dirty_* defaults des Kernels welche bei viel freiem RAM auf dem Host den Dirty solange füllen bis alles zu spät ist.

Um da mal etwas Ordnung reinzubringen hab ich ein Script geschrieben welches (wahlweise kontinuierlich) anzeigt wie sich der Plattencache beim schreiben verhält.

pastebin.php?mode=view&s=38412

Für die Werte kann man mal

Code: Alles auswählen

 dd if=/dev/zero of=~/testfile bs=1G count=1 oflag=direct
laufen lassen - erstaunlich wieviel (oder wie wenig) selbst eine SSD abkann.

Mein Ziel ist es, über einen guten Schreibtest festzustzustellen wie niedrig der Cache-Writeback eingestellt werden muss damit kein überlauf (vulgo IO-Block) stattfindet und gleichzeitig mit dem Script das Writeback-Scheduling auf den Datendurchsatz des Hosts anzupassen.

Benutzeravatar
Six
Beiträge: 8066
Registriert: 21.12.2001 13:39:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Siegburg

Re: Cache Optimierung

Beitrag von Six » 03.04.2015 10:50:58

Da steht keine Frage. Aber es interessiert mich, deswegen gucke ich zu.
Be seeing you!

Benutzeravatar
BerndHohmann
Beiträge: 70
Registriert: 17.02.2015 23:26:44
Wohnort: Nidderau
Kontaktdaten:

Re: Cache Optimierung

Beitrag von BerndHohmann » 04.04.2015 01:33:29

Bei meinen Kernelforschungen was dirty_ratio und dirty_background_ratio angeht bin ich darauf gestossen, dass der Dirty-Cache nicht der Bestandteil des normalen Caches (/proc/meminfo -> Cached) ist sondern sich aus NR_FREE_PAGES sowie aus dem aktiven File-Cache (Zeug was gebraucht wird) und inaktivem File-Cache (was früher oder später aus dem Read-Cache herausfliegt) zusammensetzt.

Eine grobe Näherung gibt das Tool "free": Der Dirty-Cache wird zuerst aus dem Pool in der Spalte "free" gebildet. Wird mehr Dirty-Cache fürs Schreiben verlangt, werden aus dem Wert der Spalte "cached" alle veralteten Lesepuffer recycled und wenn das nicht mehr reicht kommt der aktive File-Cache ran. Es gibt bei "free" noch die Spalte "buffers", da hab ich im Kernel nicht gefunden wie das beim Dirty-Cache verwendet wird.

Da sich die Prozent-Parameter vm.dirty_ratio und vm.background_ratio auf die Kernelfunktion dirtyable_memory() beziehen und der Wert von dirtyable_memory() nirgendwo nach /proc/sonstwas geschrieben wird UND leider der Output von "free" unter Last recht kräftig von dirtyable_memory() abweicht hab ich die Kernelfunktion halt in Bash nachprogrammiert denn die wichtigsten Werte landen alle in /proc/meminfo und /proc/vmstat

Aktielles cachestats script: NoPaste-Eintrag38429

Nächster Schritt ist es die Funktionalität von get_dirty_limits nachzubauen damit das Script auch mit dirty_ratio und dirty_background_ratio umgehen kann.

Denn die ganzen %-Angaben für Dirty sind im modernen Serverbetrieb völlig für die Füsse.

Antworten