Was ist das beste „dirty_background_ratio“ und „dirty_ratio“ für meinen Einsatzzweck?

Was ist das beste „dirty_background_ratio“ und „dirty_ratio“ für meinen Einsatzzweck?

Ich spiele also herum dirty_background_ratio and dirty_ratiound hoffe, mit Ihrer professionellen Hilfe die richtigen Parameter zu finden.

Im Moment verwende ich:

vm.dirty_background_ratio = 20 vm.dirty_ratio = 60

Die Hauptverwendung ist Torrenting, das heißt, dass die Dateien über einen Torrent-Client heruntergeladen und dann geseedet werden. Es sind viele Downloads auf einmal möglich, deshalb sollte ich RAM-Caching verwenden und dabei an korrekte Werte denken.

Vielleicht könnt ihr mir die richtigen Werte vorschlagen?

Antwort1

Deine Idee und die Werte (ungefähre Verdoppelung) scheinen mir in Ordnung zu sein, aber du hast nicht erklärt, was du genau mit RAM meinst.Zwischenspeicherung. Hier ist es mehr nur einPufferungweil alle schmutzigen Seiten unverändert auf die Festplatte gelangen.

Wenn Sie viele IO auf demselben Blockgerät haben, kommt es etwas später zu Kollisionen. Die Anzahl der schmutzigen Seiten ist nicht der einzige Auslöser, es gibt auch (mm/page-writeback.c):

/*
 * The longest time for which data is allowed to remain dirty
 */
unsigned int dirty_expire_interval = 30 * 100; /* centiseconds */

Das ergibt den Standardwert von 30 s. Das könnte gerade genug sein. Es bedeutet aber, dass ältere schmutzige Seiten nicht zurückgehalten werden (Zeitdimension des Pufferns/Cachings).

Und wenn Sie über gleichzeitige E/A verfügen, wirken sich diese globalen Einstellungen auch darauf aus.


Die beste Erklärung fürschmutziges_VerhältnisUndschmutziges_Hintergrundverhältnisbefindet sich in der gleichen Datei:

/* The following parameters are exported via /proc/sys/vm */

/*
 * Start background writeback (via writeback threads) at this percentage
 */
int dirty_background_ratio = 10;
...
/*
 * The generator of dirty data starts writeback at this percentage
 */
int vm_dirty_ratio = 20;

Zeigt, dass es sich von verschiedenen Seiten um dasselbe handelt (jetzt schmutzig, später aufräumen).


Hier sind einige Befehle zum Analysieren schmutziger Seiten:

]# cp MAINTAINERS MAINTAINERS-2

]# grep dirty /proc/vmstat 
nr_dirty 135
nr_dirty_threshold 311361
nr_dirty_background_threshold 155490

Die Schwellenwerte werden aus den Verhältniswerten (angegeben als Prozent oder Bytes) berechnet. Ich habe 8 GB = 2 Millionen Seiten, also sind dies jeweils 10 % und 20 %.


Mit dem Tool „page-types“ können Sie diese schmutzigen Seiten genauer identifizieren. Dies liest /proc/kpageflags und dauert etwa 200 ms.

]# ./tools/vm/page-types  -b dirty -b lru -b ~active,~reclaim,~mmap |cut -c-80
             flags      page-count       MB  symbolic-flags                     long-symbolic-flags
0x0000000000000030               1        0  ____Dl__________________________________
0x0000000000000038             130        0  ___UDl__________________________________
0x0000000000044038               1        0  ___UDl________b___u_____________________
0x000000000000403c              23        0  __RUDl________b_________________________
             total             155        0

Egal, ob ich einfach dasitze und warte (30 Sekunden) oder es manuell mache sync, die schmutzigen Seiten sind schnell weg.

]# sync
]# grep dirty /proc/vmstat 
nr_dirty 0
...

Und alle 130 Seiten der „UDl“ sind weg, also die, die „aktuell, schmutzig, auf der LRU-Liste“ sind.

]# ./tools/vm/page-types  -b dirty -b lru -b ~active,~reclaim,~mmap |cut -c-80
             flags      page-count       MB  symbolic-flags                     long-symbolic-flags
0x0000000000044038               1        0  ___UDl________b___u_____________________
0x000000000000403c              23        0  __RUDl________b_________________________
             total              24        0

Diese 130 + 1 Seiten Unterschied auf zwei Zeilen entsprechen genau der Größe der Datei:

]# ls --block-size=4096 -s MAINTAINERS 
131 MAINTAINERS

Dies sind meine professionellen Herumprobier-Tipps.

verwandte Informationen