Ich habe ein RAID 10-Setup mit 8 Laufwerken an einen Adaptec 5805Z angeschlossen, auf dem Centos 5.5 und der Terminplaner ausgeführt werden.
Ein grundlegender dd
Lesetest zeigt 400 MBit / s und ein grundlegender Schreibtest dd
zeigt ungefähr dasselbe.
Wenn ich die beiden gleichzeitig ausführe, sinkt die Lesegeschwindigkeit auf ~ 5 MB / s, während die Schreibgeschwindigkeit mehr oder weniger bei 400 MB / s bleibt. Die Ausgabe von iostat -x
wie erwartet zeigt, dass nur sehr wenige Lesetransaktionen ausgeführt werden, während die Festplatte mit Schreibvorgängen bombardiert wird.
Wenn ich den Writeback-Cache des Controllers ausschalte, sehe ich keine 50: 50-Aufteilung, aber ich sehe eine deutliche Verbesserung, irgendwo bei 100 MB / s Lesevorgängen und 300 MB / s Schreibvorgängen. Ich habe auch festgestellt, dass ich beim Lesen der Einstellung nr_requests in der Warteschlange des Laufwerks (etwa 8 scheint optimal zu sein) Lesevorgänge mit 150 MBit / s und Schreibvorgänge mit 150 MBit / s erzielen kann. dh. Eine Reduzierung des Gesamtdurchsatzes, aber sicherlich besser für meine Arbeitsbelastung geeignet.
Ist das ein echtes Phänomen? Oder ist mein synthetischer Test zu einfach?
Der Grund, warum dies passieren könnte, scheint klar genug zu sein: Wenn der Scheduler von Lesevorgängen zu Schreibvorgängen wechselt, kann er jede Menge Schreibanforderungen ausführen, da alle nur im Cache des Controllers landen, aber irgendwann ausgeführt werden müssen. Ich würde vermuten, dass die tatsächlichen Festplattenschreibvorgänge auftreten, wenn der Scheduler erneut versucht, Lesevorgänge auszuführen, was dazu führt, dass nur sehr wenige Leseanforderungen ausgeführt werden.
Dies scheint eine vernünftige Erklärung zu sein, aber es scheint auch ein massiver Nachteil bei der Verwendung des Rückschreibcaches auf einem System mit nicht trivialen Schreiblasten zu sein. Ich habe den ganzen Nachmittag nach Diskussionen gesucht und nichts gefunden. Was vermisse ich?
quelle
Antworten:
Nun, ein Basis-DD ist wahrscheinlich nicht der beste Weg, um den Laufwerksdurchsatz zu messen. Es ist keine realistische Belastung. Wenn Sie jedoch ausführen
dd
, übergeben Sie bitte dasoflag=direct
Flag in der Befehlszeile, um die Auswirkungen des Dateisystem-Cache zu beseitigen. Siehe auch: Wie wird der Festplattendurchsatz gemessen? Vorschläge zur Messung der Arbeitslast.Ich denke, Ihre Wahl des Schedulers hat einen größeren Einfluss auf Ihre Ergebnisse als alles andere. Bei RAID-Controllern mit Akku oder Flash-Backed-Cache (Schreibcache) habe ich früher mit dem
deadline
Scheduler ausgeführt, jetzt verwende ich den Scheduler,noop
wenn der Cache 512 MB oder 1 GB groß ist. Sie können den Scheduler im laufenden Betrieb austauschen. Probieren Sie die Tests mit demnoop
Algorithmus und dem ausoflag=direct
und sehen Sie, wie die Ergebnisse aussehen.Bist du gelaufen
bonnie++
oderiozone
?quelle
noop
es gemacht?Wenn Sie vorhaben,
iozone
hier zu verwenden, gibt es einige Möglichkeiten, Ihre Leistung zu überprüfen. Diese sind besser alsdd
sie die Art von Test ermöglichen, die Sie suchen.Dadurch werden Tests mit einem 4-GB-Dataset (
-s 4G
) unter Verwendung einer variablen Datensatzgröße ausgeführt und der Schreibtest (-i 0
), der Lesetest (-i 1
) und der zufällige Lese- / Schreibtest (-i 2
) ausgeführt. Die Auswahl der Dateigröße ist entscheidend. Wenn Sie eine auswählen, die in den Arbeitsspeicher passt, basieren Ihre Ergebnisse mehr auf dem Datei-Cache als auf der tatsächlichen Speicherleistung. Wenn Sie also einen Server mit 4 GB RAM haben, testen Sie mit einer größeren Dateigröße.Wenn Sie jedoch über obszöne RAM-Mengen verfügen (ich habe einen Server mit 12 GB) und möchten, dass Ihre Tests in weniger als vielen Stunden abgeschlossen sind, können Sie die
-I
Option angeben, mit der iozone angewiesen wird, O_DIRECT festzulegen und den Dateisystem-Cache zu umgehen. Dort erhalten Sie die tatsächliche Leistung Ihres Speichersubsystems.Sie können auch Tests durchführen, die auf gleichzeitigen Zugriff prüfen.
Dadurch werden 32 gleichzeitige 128-MB-Threads ausgeführt, die dieselben Tests wie der vorherige Befehl ausführen, jedoch eine Datensatzgröße von 4 KB aufweisen (
-r 4k
). Der Arbeitssatz ist 4 GB groß, aber einige der Dateien passen in den Datei-Cache. Je nachdem, was Sie mit diesem Speicher tun, kann dies ein genauerer Test Ihrer wahrscheinlichen Leistung sein. Wie zuvor setzt der-I
Parameter O_DIRECT.Dies entspricht dem obigen Befehl, führt jedoch eine Reihe von Tests aus, die mit 16 Threads beginnen und auf 32 Threads ansteigen.
quelle