Ihre Frage
Gelöst

RAID 5 größere Blockgröße erhöht Leistung

Stichwörter:
  • Leistung
  • Raid
Letzte Antwort: in Festplatten, optische Laufwerke und Controller
5. Oktober 2017 18:13:11

Hallo,

ich habe ein paar Tests durchgeführt, verstehe aber das Ergebnis nicht genau.

Und zwar habe ich jeweils 4 HDDs und 4 SSDs zusammen in RAID 5 betrieben. Dazu kam zum einen ein HW Controller zum Einsatz, zum anderen mdadm und btrfs. mdadm und beim HW Raid habe ich ext4 verwendet.
Die Dateisysteme haben 4k Blockgröße und die stripe und stride dinger habe ich hiermit berechnet:https://busybox.net/~aldot/mkfs_stride.html

Danach habe ich immer 1GB auf die RAIDs geschrieben und dabei die Blockgröße (beim Schreiben!!) von 2k bis 512k variiert.
Die Zeit, die es zum Schreiben braucht wird immer kürzer, je größer die Blockgröße. Wenn das jetzt die Blockgröße wäre, die das raid benutzt wäre es klar. Größer Blöcke > weniger Parität berechnen > schnelleres Schreiben.
Aber kann mir jemand erklären, wieso schneller geschrieben wird, wenn ich mit größeren Blöcken schreibe, dabei aber die Blockgröße vom FS konstant bleibt?

Ach ja es ist vlt. noch wichtig, dass durch O_DIRECT der Pagecache nicht verwendet wird.

Beste Grüße

Mehr über : raid groessere blockgroesse erhoeht leistung

Beste Lösung

5. Oktober 2017 22:34:40

Ist ganz einfach - Eine 1GB große Datei in 2k Stücke macht mehr Arbeit als in 512k Stücke :) 
Teilen
6. Oktober 2017 11:56:52

Aber das gilt ja auch für RAID 0 und 1 und dort tritt spätestens bei 32k, meist schon bei 8k eine Sättigung ein.
m
0
l
6. Oktober 2017 13:08:31

Ich bin ganz ehrlich ich gebe mir keine Mühe weil das was Du oben geschrieben hast so unmöglich schwer zu verstehen ist ^^
Ich gebe Dir mal das wieder was ich anhand des oben geschriebenen verstehe.

Du hast 4 HDDS und 4SSDS zusammen im Raid betrieben -> Ein RAID aus 8 Platten im RAID 5 (man mischt keine HDD und SSD im RAID!)

Einmal hast Du das mit einem Hardware Controller getestet und einmal alle Platten im SoftwareRAID.

Von Raid 0 und 1 steht ganz oben nix aber die Sättigung tritt dort schneller/ früher ein, weil es bei RAID 1 und 0 nix zu berechnen gibt für den Controller, darum kann er bereits bei kleineren Datei Stücken seine volle Leistung entfalten.
m
0
l
6. Oktober 2017 14:06:08

:ange:  ok ich sehe schon der Fehler liegt bei mir.

Ich habe natürlich nicht die RAIDs mit gemischten Festplatten gemacht.
Sondern:

4 HDDs in einem RAID 5
4 SSDs in einem eigenen RAID 5

Und das habe ich einmal mit HW, btrfs und einmal mit mdadm gemacht. (in der summe also 6 verschiedene RAIDs)

Analoge Tests habe ich für die Level 0 und 1 durchgeführt.

Bei allen RAIDs kam als FS ext4 zum Einsatz (mit Ausnahme von btrfs natürlich) und die FS hatten immer eine Blockgröße von 4K

Auf die verschiedenen RAIDs wurde dann 1GB geschrieben, wobei ich die beim Schreiben verwendete Blockgröße variiert habe.
Bei allen ist die Blockgröße von 2K am langsamsten (bei btrfs besonders krass, was am CoW liegt) und mit steigender Blockgröße wird es schneller. Wobei ab 8k oder spätestens 32k sich die Geschwindigkeit auf einen Endwert einpendelt.
Anders ist das bei RAID 5. Dort wird selbst bei 512k noch kein Endwert erreicht (höhere Blockgrößen habe ich nicht getestet).

Meine Frage ist daher, warum ist RAID 5 mit steigender Blockgröße derart effizient? Da wie bei Raid 0 die Daten in Blöcke zerhackt werden ist klar, dass beim schreiben mit kleineren Blockgrößen die Geschwindigkeit langsamer ist. Aber sobald ich darüber hinaus komme, sollte das doch eigentlich recht schnell einem Endwert entgegenstreben, oder?

Es ist klar, dass wenn ich die Blockgröße von den RAIDs ändere das ganze schneller geht, weil z.B. Raid 5 nicht mehr 100 sondern nur noch 20 Paritäten berechnen muss. Aber an dieser Größe habe ich ja nichts geändert.
m
0
l
6. Oktober 2017 16:18:32

Mal eine andere doofe Frage: Du schreibst die ganze Zeit du hast die Blockgröße beim schreiben variiert. Meinst du, du hast einem Programm gesagt "schreibe 1GB in x kb Blöcken?" DENN bei einem Raid wählst du eine Stripe-size aus, diese ist aber nicht nur aufs schreiben sondern generell auf die Stripes des Raids bezogen und sind ausschlaggebend für die Performance des Raids, kleinere Stripes = mehr IOPS, größere Stripes = mehr Datendurchsatz (MB/s), aber das hängt auch im wesentlich von den Daten ab, 1MB auf 2x 512kb Stripes + Parität oder 1MB auf 1x 1MB Stripe + Parität oder 1MB auf 4x 256kb Stripes + Parität(en) ergeben alles unterschiedliche Leistungswerte, mal mehr IOPS oder mehr MB/s.

Wie robberlin schon geschrieben hat, die Paritätsberechnung macht sehr viel aus, höhere Blockgröße = weniger Blöcke = weniger Arbeit für den Controller und die HDD hat generell eine bessere Performance, wenn diese sequenziell größere Blöcke am Stück lesen/schreiben kann.

Bedenke übrigens auch, dein Test mit einer 1GB Datei mag nicht zwangsläufig dem Alltagsgeschehen entsprechen.
Wofür willst du das Raid nutzen? Als RAID fürs OS solltest du das RAID Stripe-size nicht zu groß wählen, wenn du im Gegensatz dazu große Videodateien streamen willst sind 1MB Stripes durchaus von Vorteil.

Mehr IOPS sind beim Systemstart und Programmstart besser als eine höhere Datenübertragungsrate.
m
0
l
6. Oktober 2017 20:16:52

Ok alles klar, so wird nen Schuh draus. Wobei HW und MDADM stehen ja für HArdware und SOftware Raid und BTRFS ist eigentlich nur nen Dateisystem ist wie ext4. Ryu hats gut erklärt :) 
m
0
l
7. Oktober 2017 14:47:27

Kuehlung sagte:
Ich sage dem Programm, mit welcher Blockgröße er schreiben soll. An den stripes ändere ich nichts. http://fio.readthedocs.io/en/latest/fio_doc.html#block-...

Du sagst den Programm also eigentlich nur, wie groß die Dateien sind, die für den Test geschrieben werden. Es kann weder die Stripe-Size des RAIDs ändern noch die physikalischen Eigenschaften der HDD ändern.

Kuehlung sagte:
Aber kann mir jemand erklären, wieso schneller geschrieben wird, wenn ich mit größeren Blöcken schreibe, dabei aber die Blockgröße vom FS konstant bleibt?

-> Das Dateisystem gibt nur den min. Speicherplatz den eine Datei im Dateisystem einnimmt an. Bsp.: Du hast das Dateisystem auf 4kb eingestellt, du nimmst eine Datei die nur 100Bytes groß ist, diese wird im Dateisystem die vollen 4kb belegen, ist die Datei 32kb belegt sie einfach 8x 4kb. Das Filesystem hat also keine Auswirkung auf deinen Benchmark, lediglich die Größe der Datei, welche geschrieben wird (Block-size für den Test).
Entsprechend des gewählten Raid Level (Sicherheit oder Geschwindigkeit) und der Stripe-Size wird die Datei nun im lesen/schreiben beschleunigt und/oder gegen physikalische Ausfälle gesichert.

https://www.heinlein-support.de/upload/slac08/Heinlein-...
https://de.wikipedia.org/wiki/RAID

Nun alles klar geworden?
m
0
l