Kann das Aktivieren des Writeback-Cache eines RAID-Controllers die Gesamtleistung beeinträchtigen?


7

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 ddLesetest zeigt 400 MBit / s und ein grundlegender Schreibtest ddzeigt 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 -xwie 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?


Würde es Ihnen etwas ausmachen, Ihre Daten in einer strukturierten Tabelle zusammenzufassen? Dies sind einige sehr interessante Beobachtungen, die Sie machen. Ich würde gerne sehen, ob es ein Muster gibt.
Marcin

Antworten:


3

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 das oflag=directFlag 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 deadlineScheduler ausgeführt, jetzt verwende ich den Scheduler, noopwenn der Cache 512 MB oder 1 GB groß ist. Sie können den Scheduler im laufenden Betrieb austauschen. Probieren Sie die Tests mit dem noopAlgorithmus und dem aus oflag=directund sehen Sie, wie die Ergebnisse aussehen.

Bist du gelaufen bonnie++oder iozone?


+1 für oflag = direkt. Ich empfehle auch iozone.
sysadmin1138

Ich werde noop versuchen, obwohl ich bisher gesehen habe, dass der Scheduler nur sehr geringe Auswirkungen hat, wenn das Zurückschreiben aktiviert ist. Ich werde auch die Iozone ausprobieren, aber ich bin nicht besonders an der Gesamtleistung interessiert. Ich interessiere mich mehr für das, was ich als Lesemangel interpretiere, da Schreibvorgänge "sofort" ausgeführt werden, wenn das Zurückschreiben aktiviert ist.
Nathan O'Sullivan

1
oflag = direct tendiert dazu, genau die entgegengesetzten Ergebnisse zu liefern. Wenn das Zurückschreiben aktiviert ist, wird eine 50/50-Aufteilung angezeigt, was ich möchte. Mit deaktiviertem Rückschreiben sehe ich Schreibhunger
Nathan O'Sullivan

Und die Änderung im Kernelaufzug? Wie hat noopes gemacht?
ewwhite

1

Wenn Sie vorhaben, iozonehier zu verwenden, gibt es einige Möglichkeiten, Ihre Leistung zu überprüfen. Diese sind besser als ddsie die Art von Test ermöglichen, die Sie suchen.

iozone -s 4G -a -i 0 -i 1 -i 2

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 -IOption 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.

iozone -s 128M -r 4k -t 32 -i 0 -i 1 -i 2

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 -IParameter O_DIRECT.

iozone -s 128M -r 4k -l 16 -u 32 -i 0 -i 1 -i 2

Dies entspricht dem obigen Befehl, führt jedoch eine Reihe von Tests aus, die mit 16 Threads beginnen und auf 32 Threads ansteigen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.