Optimieren Sie den Algorithmus zum Leeren des Schreibdatenträger-Cache

Optimieren Sie den Algorithmus zum Leeren des Schreibdatenträger-Cache

Ich möchte den freien Speicher für den Schreibcache verwenden. Linux macht das automatisch, hat aber einen seltsamen Leerungsalgorithmus, den ich für meine Zwecke anpassen möchte.

Ich habe es kürzlich ddrescuezum Kopieren einer Festplatte verwendet. Es liest einen Block und schreibt den Block auf die Festplatte.

Ich möchte, dass beim Lesen so viel wie möglich gelesen wird, bis nichts mehr frei ist, und dann blockiert wird, bis etwas Platz freigegeben wird, während gleichzeitig beim Schreiben so schnell wie möglich geschrieben wird, um Speicher freizugeben.

Wenn also die Schreibplatte schneller ist als die Leseplatte, wird kein Speicher verwendet, und wenn die Schreibplatte langsamer ist als die Leseplatte, bleibt der gesamte Speicher verwendet, bis der Kopiervorgang abgeschlossen ist.

In beiden Szenarien bleibt die Speichernutzung konstant (es sei denn, andere Programme belegen einen Teil des freien Speichers).

Aber was ich sehe, ist Folgendes:

Schreibcache

Das Lesen füllt den Cache (während wenig bis gar nicht geschrieben wird) und wenn der Cache ein Limit erreicht (oder nach einer gewissen Zeit), wird das Lesen blockiert, währendalleder Cache wird auf die Festplatte geschrieben. Es ist fast so, als würde ein Troll ab und zu „sync“ ausführen.

Ich habe versucht, /proc/sys/vm/dirty_* zu ändern, aber ohne Erfolg: Die einzige Änderung, die ich bewirken konnte, ist die Höhe der Spitzen. Eine Antwort, die /proc/sys/vm/dirty_* erwähnt, muss also getestete Werte liefern, die das Sägezahndiagramm messbar abflachen.

Für meinen Zweck ist eine Einstellung am ehesten geeignet, die Linux anweist, so schnell wie möglich mit dem Schreiben zu beginnen, das Lesen oder Schreiben jedoch niemals blockiert, wenn freier Speicherplatz vorhanden ist.

Ich kenne Tools wie mbuffer. Sie glätten den Graphen, sind aber nicht dynamisch (d. h. geben Speicher frei, wenn nur noch wenig freier Speicher vorhanden ist) und erlauben keine Suchvorgänge. Sie funktionieren daher nicht mit Programmen wie ddrescue(das hin und her suchen muss).

verwandte Informationen