Ich spiele also herum dirty_background_ratio and dirty_ratio
und 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.