Der Betrieb von mkfs dauert unter Linux Software Raid 5 sehr lange

8

Ich habe ein Linux-Software-Raid-Level 5 eingerichtet, das aus 4 * 2-TB-Festplatten besteht. Das Festplattenarray wurde mit einer Streifengröße von 64 KB und ohne weitere Konfigurationsparameter erstellt. Nach der ersten Neuerstellung habe ich versucht, ein Dateisystem zu erstellen, und dieser Schritt dauert sehr lange (ungefähr eine halbe Stunde oder länger). Ich habe versucht, ein xfs- und ein ext3-Dateisystem zu erstellen. Beide haben lange gedauert. Mit mkfs.ext3 habe ich das folgende Verhalten beobachtet, das hilfreich sein könnte:

  • Das Schreiben von Inode-Tabellen läuft schnell, bis es 1053 (~ 1 Sekunde) erreicht, dann schreibt es ungefähr 50, wartet zwei Sekunden, dann werden die nächsten 50 geschrieben (gemäß der Konsolenanzeige)
  • Wenn ich versuche, den Vorgang mit Strg + C abzubrechen, bleibt er eine halbe Minute lang hängen, bevor er wirklich abgebrochen wird

Die Leistung der einzelnen Festplatten ist sehr gut. Ich habe bonnie ++ auf jeder Festplatte mit Schreib- / Lesewerten von etwa 95/110 MB / s separat ausgeführt. Selbst wenn ich bonnie ++ auf jedem Laufwerk parallel ausführe, werden die Werte nur um ca. 10 MB reduziert. Daher schließe ich die Hardware- / E / A-Planung im Allgemeinen als Problemquelle aus.

Ich habe erfolglos verschiedene Konfigurationsparameter für stripe_cache_size und readahead size ausprobiert, aber ich denke nicht, dass sie für die Erstellung des Dateisystems so relevant sind.

Die Serverdetails:

  • Linux Server 2.6.35-27-generisches # 48-Ubuntu SMP x86_64 GNU / Linux
  • mdadm - v2.6.7.1

Hat jemand einen Vorschlag, wie man dies weiter debuggt?

Elmar Weber
quelle

Antworten:

3

Ich bin damit einverstanden, dass dies mit der Streifenausrichtung zusammenhängt. Nach meiner Erfahrung dauert die Erstellung von nicht ausgerichtetem XFS auf 3 * 2 TB RAID-0 ~ 5 Minuten, aber wenn es auf die Stripe-Größe ausgerichtet ist, beträgt es ~ 10-15 Sekunden. Hier ist ein Befehl zum Ausrichten von XFS an der Streifengröße von 256 KB:

mkfs.xfs -l internal,lazy-count=1,sunit=512 -d agsize=64g,sunit=512,swidth=1536 -b size=4096 /dev/vg10/lv00

Übrigens beträgt die Streifenbreite in meinem Fall 3 Einheiten, was für Sie mit 4 Laufwerken, aber in RAID-5 gleich ist.

Dies verbessert natürlich auch die FS-Leistung, sodass Sie sie besser ausrichten können.

dtoubelis
quelle
Hallo, das hat keinen Unterschied gemacht, ich habe es versucht: Das time mkfs.xfs -l sunit=128 -d agsize=64g,sunit=128,swidth=512 -b size=4096 /dev/md0 -fhat ungefähr genauso lange gedauert wie mkfs ohne Parameter
Elmar Weber
Ich verwende bonnie ++, um zu sehen, ob es während des Betriebs zu Leistungsunterschieden kommt. Übrigens: Gibt es einen Grund für den Parameter agsize? Ich habe die Manpage gelesen, konnte aber nicht den Vorteil ableiten, sie auf einen Wert zu setzen.
Elmar Weber
(Übrigens: obiger Befehl war falsch, korrekter Swidth war 384)
Elmar Weber
Ich habe keine Leistungssteigerung bei mkfs erhalten, aber die mit bonnie ++ gemessene Gesamtleistung ist viel besser: Dateierstellungs- / Löschvorgänge sind ungefähr viermal besser als zuvor und die sequentielle Schreibgeschwindigkeit ungefähr 15%. Vielen Dank.
Elmar Weber
2
agsize ist hier nicht wirklich notwendig - mkfs berechnet es automatisch (wahrscheinlich wird die Größe des Volumes durch die Anzahl der logischen CPUs geteilt). Es ist von meinem eigenen Setup übrig geblieben - ich habe dieses Volume mit einer gewissen Erwartung für zukünftige Konfigurationsänderungen erstellt.
Dtoubelis
6

Ich vermute, Sie stoßen auf das typische RAID5-Problem mit kleinen Schreibvorgängen. Für Schreibvorgänge unter der Größe einer Streifengröße muss sowohl für die Daten als auch für die Parität ein Lese-, Änderungs- und Schreibvorgang ausgeführt werden. Wenn der Schreibvorgang dieselbe Größe wie der Streifen hat, kann er die Parität einfach überschreiben, da er den Wert kennt und ihn nicht neu berechnen muss.

malcolmpdx
quelle
Wäre es sinnvoll, sehe ich das richtig?: Laut der Ausgabe von mkfs.ext3 werden ungefähr 25 Inode-Tabellen pro Sekunde geschrieben. Ich gehe davon aus, dass sie bei der ersten Erstellung kleiner als 64 KB sind, sodass ein 64 KB-Streifen geschrieben wird. Dies würde einen 16k-Schreibvorgang auf jede Festplatte bedeuten, also zusammen 25 zufällige 16k-Schreibvorgänge pro Sekunde, bei einer Sektorgröße von 4kb bedeutet dies 100 zufällige E / A-Operationen pro Sekunde, was ungefähr dem entspricht, was bonnie ++ gezeigt hat.
Elmar Weber
Entspricht dem Ergebnis von bonnie ++ beim eigentlichen RAID, 335 MB Lesen und 310 MB Schreiben, jedoch macht das Erstellen und Löschen von Dateien nur 1/4 der Leistung einer einzelnen Festplatte aus.
Elmar Weber
3

Die Leistung Ihres mkfs und des nachfolgenden Dateisystems kann sich verbessern, wenn Sie beim Erstellen des Dateisystems den Schritt und die Streifenbreite angeben. Wenn Sie die Standard-4k-Blöcke verwenden, beträgt Ihr Schritt 16 (RAID-Streifen von 64k geteilt durch den Dateisystemblock von 4k) und Ihre Streifenbreite 48 (Dateisystemschritt von 16 multipliziert mit den 3 Datenplatten in Ihrem Array).

mkfs.ext3 -E stride=16 stripe-width=48 /dev/your_raid_device
Sciurus
quelle