RAID-5 oder RAID-6?



Das ist insofern interessant, als das mein Ansatz demnach unsinnig war: Ich brauche keinen immensen Durchsatz, sondern in erster Linie tatsächlich viele IOPS. Und die erreiche ich mit meiner Chunksize von 512 KB wohl durchaus, da die meisten einzelnen I/O-Zugriffe da "reinpassen" und das RAID-Array somit möglichst viele solcher Zugriffe gleichzeitig bearbeiten bzw. auf viele Platten verteilen kann.

Also ich verstehe das richtig, Du willst bei schreibenden Zugriffen viele IOPS und verwendest dennoch RAID5? Wie passt dass denn zusammen? :-P

Bei Schreibzugriffen kleiner als das Stripe Set (Stripe Set = N * chunksize, N = anz. Platten ohne Parity-Platte(n)) ist dein Raid bei jedem Schreibzugriff zusätzlich mit dem Lesen anderer Chunks des Stripsets beschäftigt, um die Parität neu errechnen zu können. Das kostet ganz böse Performance.

Die Aussage 'große Chunksize um einen IO nicht unnötig aufzuteilen' gilt hier also nur sehr eingeschränkt und ist eher für RAID10 passend.

Wenn Du ganz genau sein willst solltest Du mal mit blktrace anschauen, welche request sizes denn wirklich an dein Raid geschickt werden, und dann nochmal über die Einstellungen nachdenken.

schöne Grüße,
Nils
 
Moin nochmal,

wenn Du schon am mke2fs-Optionen schraubst, dann schau Dir mal die Optionen

stride=stride-size
stripe_width=stripe-width

in der manpage von mke2fs an.
Hier kann man sich die Parameter auch ausrechnen lassen:
http://busybox.net/~aldot/mkfs_stride.html

Und ich würde wie auch thunderbyte schon schreibt an der blocksize nichts ändern und diese bei 4k lassen.

schöne Grüße,
Nils
 
Bei den Miniaturen verschwende ich ja nur in "Ausnahmefällen" Speicher.

Du verschwendest pro *Datei*, nicht nur pro Miniatur. Denn die größeren Dateien enden ja auch nicht genau an einer passenden Grenze.
Lediglich der *prozentuale* Schwund ist bei kleinen Dateien natürlich am Größten.
 
Also ich verstehe das richtig, Du willst bei schreibenden Zugriffen viele IOPS und verwendest dennoch RAID5? Wie passt dass denn zusammen? :-P
Nein, das verstehst du nicht richtig. :) Ich setze bewusst ein Paritäts-RAID ein, um möglichst viel Nettokapazität zu haben. Aus diesem RAID wiederum möchte ich möglichst viel Performance holen - diese steht aber nicht an erster Stelle.
Von möglichst performanten Schreibzugriffen hab ich nicht gesprochen. Gelesen wird deutlich mehr, somit sind diese eigentlich sogar wichtiger.

Bei Schreibzugriffen kleiner als das Stripe Set (Stripe Set = N * chunksize, N = anz. Platten ohne Parity-Platte(n)) ist dein Raid bei jedem Schreibzugriff zusätzlich mit dem Lesen anderer Chunks des Stripsets beschäftigt, um die Parität neu errechnen zu können. Das kostet ganz böse Performance.
Das versteh ich nur teilweise. Bzw. es leuchtet ein, aber warum muss das RAID bei Schreibzugriffen, die größer als das Stripe Set sind, keine anderen Chunks lesen?
Und mal in diesem Kontext gefragt: Was würdest du in meinem Fall anders machen (wir bleiben aber beim RAID-5 :D)?

Die Aussage 'große Chunksize um einen IO nicht unnötig aufzuteilen' gilt hier also nur sehr eingeschränkt und ist eher für RAID10 passend.
Wie gesagt: Leuchtet mir nicht ganz ein. :( Wenn ich jetzt einen Schreibzugriff auf mein RAID schicke und dieser nicht einen sondern sagen wir drei Chunks "füllen" kann, muss ich doch immer noch woanders mich um die Parität kümmern. Da seh ich nicht den Nachteil bei kleinen Schreibzugriffen und großen Chunks.

wenn Du schon am mke2fs-Optionen schraubst, dann schau Dir mal die Optionen

stride=stride-size
stripe_width=stripe-width

in der manpage von mke2fs an.
Die kenne ich. :) ext4 hat da aber schon die richtigen Werte selbst errechnet.

Du verschwendest pro *Datei*, nicht nur pro Miniatur. Denn die größeren Dateien enden ja auch nicht genau an einer passenden Grenze.
Stell dir vor: Das war mir klar. ^^

Lediglich der *prozentuale* Schwund ist bei kleinen Dateien natürlich am Größten.
Richtig, und genau diese prozentual geringe Verschwendung ist irrelevant bei diesen Datenmengen. Selbst wenn ich volle 16 KB pro "Durchschnittsbild" (~ 600 KB) verschwende, sind das 2-3% je Datei. Und das ist ja reine Theorie.

Weil die Spezifikationen für ext4 das einfach nicht vorsehen. Ein wenig Lektüre findest du unter https://ext4.wiki.kernel.org/index.php/Design_for_BigAlloc
Vorab: Ich bin schon etwas müde. :D
Aus dem Artikel geht für mich auf der einen Seite hervor, dass mehr als 4 KB Blockgröße halt nicht gehen. Und auf der anderen Seite lese ich Dinge heraus, die zu tun sind, wenn man mehr haben will. :confused:
 
Richtig, und genau diese prozentual geringe Verschwendung ist irrelevant bei diesen Datenmengen. Selbst wenn ich volle 16 KB pro "Durchschnittsbild" (~ 600 KB) verschwende, sind das 2-3% je Datei. Und das ist ja reine Theorie.

Hm, auf 15TB wären das 450GB. Das ist jetzt nicht sooo wenig, wie ich finde. Und wie gesagt, Du hast quasi keinen Vorteil durch zu große Blocksizes.
 
Weniger "Verwaltungsaufwand", weniger Fragmentierung => mehr Performance? :)

Aber die Diskussion scheint ja ohnehin nur noch theoretisch zu sein - sehe ich es richtig, dass das einfach absolut nicht geht? :D

(Vielleicht mal eine Gelegenheit, XFS anzutesten...)

Edit: Hab mal Google bemüht. Selbst wenn ich meine gewünschte Blockgröße mit XFS realisieren kann, ist das Ergebnis wohl langsamer als ext4. Das wäre ja im Hinblick auf die von mir gewünschte Performance eher dämlich. =)
 
Last edited by a moderator:
So viel war mir klar. ;) Bin auch schon dabei bzw. der Server ist dabei zu kompilieren. =)

Eine Frage, die sich mir an dieser Stelle stellt: Bringt mir ein möglichst "minimaler" Kernel Performancevorteile im Betrieb?
 
Eine Frage, die sich mir an dieser Stelle stellt: Bringt mir ein möglichst "minimaler" Kernel Performancevorteile im Betrieb?

Soweit ich weiß, reduzierst du durch weglassen unnötiger Module den Verbrauch. (Theorie mal wieder).
 
Soweit ich weiß, reduzierst du durch weglassen unnötiger Module den Verbrauch. (Theorie mal wieder).

Naja... unnötige Module werden gar nicht erst geladen. Das einzige was man da reduziert ist der Platzbedarf auf der Platte.
Interessant wird es höchstens, wenn man ganze Subsysteme aus dem Kernel wirft (z.B. Sound).
Letztendlich sind die Peformance Unterschiede durch einen minimalen Kernel --> minimal.

Die Optimierung auf deine CPU kann aber je nach CPU und Anwendungsfall deutlichere Performance Unterschiede bringen.
 
Das merkst Du an den Bootzeiten (je nachdem), ansonsten lädt (wie hier schon gesagt wurde) der Kernel sowieso nur die Module, die er braucht.
Es macht ggfls. noch Sinn um mögliche Angriffsvektoren zu minimieren.
 
Soweit ich das verstanden habe, geht es hier um einen reinen Fileserver, korrekt? Und du möchtest aus der Hardware das Maximum herausholen? Die Antwort darauf wäre eigentlich FreeBSD.

Bevor du Zeit in div. Kernel-Spielereien steckst, die meiner Ansicht wenig vielversprechend sind, könntest du diese Zeit auch dafür nutzen, um dir einmal FreeBSD anzuschauen. Gerade beim Thema Software-RAID bietet FreeBSD (respektive ZFS) einige Vorteile. Performancetechnisch solltest du damit auf jeden Fall einen Sprung nach vorne machen. Für die maximale Performance könntest du dann noch eine kleine (SLC-)SSD (z.B. Intel 313) als Caching-Device nutzen, was aber natürlich mit Zusatzkosten (ggf. 15€ für's Flexi-Pack + 15€ für die SSD) verbunden wäre.
 
Wenn er die Geldgeber schon nicht von dem Sinn eines HW Raid Controllers überzeugen kann (den ich der Flexi+SSD Konfiguration vorziehen würde), dann wirds mit anderen HW Änderungen auch nix.:rolleyes:
 
Von möglichst performanten Schreibzugriffen hab ich nicht gesprochen. Gelesen wird deutlich mehr, somit sind diese eigentlich sogar wichtiger.

Ich habe das aus den geposteten dd-Tests geschlossen, da sind es nur lineare Schreibzugriffe. Aber gut, falsch verstanden.

Das versteh ich nur teilweise. Bzw. es leuchtet ein, aber warum muss das RAID bei Schreibzugriffen, die größer als das Stripe Set sind, keine anderen Chunks lesen?

Ideal ist eben der Fall wenn immer ein komplettes Stripe Set geschrieben wird. Das ist auch der Grund wieso ein Raid-Controller mit Speicher und BBU einen auffälligen Performance-Vorteil hat.

Und mal in diesem Kontext gefragt: Was würdest du in meinem Fall anders machen (wir bleiben aber beim RAID-5 :D)?

Bzw. Performance würde ich testen, ob Du mit einer Chunksize kleiner 512k besser fährst. Derzeit ist dein Stripe Set 3MB groß, das ist schon recht viel für einen kompletten, Zusammenhängenden IO.

Grundsätzliche Tipps bzg. RAID5:

- habe immer ein gutes Backup
- regelmäßig die Konsistenz prüfen
- SMART-Werte der Platten im Auge behalten

Wie gesagt: Leuchtet mir nicht ganz ein. :( Wenn ich jetzt einen Schreibzugriff auf mein RAID schicke und dieser nicht einen sondern sagen wir drei Chunks "füllen" kann, muss ich doch immer noch woanders mich um die Parität kümmern.

Ist eine Frage des konkreten Verhältniss von Schreib- zu Lesevorgängen.

Wenn Du 1 Chunk schreibst und deswegen die anderen 5 lesen muss hast Du 7 IO-Vorgänge (Parität mit eingerechnet), aber nur 1 Chunk geschrieben. Wenn Du 6 Chunks (= Stripe Set) schreibst hast Du auch 7 IO-Vorgänge, aber 6 mal soviel durchsatz (weil Du 6 Chunks auf die Platte bekommen hast statt nur eines).

schöne Grüße,
Nils
 
Interessant wird es höchstens, wenn man ganze Subsysteme aus dem Kernel wirft (z.B. Sound).
Warum? :)

Letztendlich sind die Peformance Unterschiede durch einen minimalen Kernel --> minimal.
Die Frage wäre, wie minimal sie sind. ;)

Die Optimierung auf deine CPU kann aber je nach CPU und Anwendungsfall deutlichere Performance Unterschiede bringen.
Nie gehört. Hast du irgendwelchen Lesestoff dazu? =)

du möchtest aus der Hardware das Maximum herausholen? [..]
Für die maximale Performance könntest du dann noch eine kleine (SLC-)SSD (z.B. Intel 313) als Caching-Device nutzen, was aber natürlich mit Zusatzkosten (ggf. 15€ für's Flexi-Pack + 15€ für die SSD) verbunden wäre.
Noch mal: Ich möchte möglichst viel aus der Hardware herausholen und eine für den Betrieb ausreichende Geschwindigkeit erzielen sowie mich im Zuge dessen mit ein paar für mich neuen Dingen auseinandersetzen. Das Nonplusultra wird hier nicht gesucht, und an der Hardware wird auch nichts geändert. Das ist nicht meine Entscheidung.

Wenn er die Geldgeber schon nicht von dem Sinn eines HW Raid Controllers überzeugen kann (den ich der Flexi+SSD Konfiguration vorziehen würde), dann wirds mit anderen HW Änderungen auch nix.:rolleyes:
Richtig - und ganz einfach: Weil's nicht notwendig ist. :) Es gibt für den Betreiber keinen Grund, in nicht notwendige Dinge Geld zu investieren.


Ich habe das aus den geposteten dd-Tests geschlossen, da sind es nur lineare Schreibzugriffe. Aber gut, falsch verstanden.
Sorry, mein Fehler. Das war meinerseits nur ein "Reinschnuppern" in die Geschwindigkeit und sollte nicht als Benchmark oder Darstellung der Ansprüche ans System gelten.

Ideal ist eben der Fall wenn immer ein komplettes Stripe Set geschrieben wird.
Entweder bin ich komplett auf dem Holzweg (was nicht auszuschließen ist :D), oder wir reden aneinander vorbei. Deine Aussage ist meinem jetzigen Wissensstand nach dann korrekt, wenn man viel Durchsatz (also MB/s) will, da sich dann alle Platten mit dem "perfekten" IO beschäftigen. Was wir hier aber brauchen sind IOPS, sodass es eben nicht perfekt sein dürfte, wenn sich mehrere Platten um ein und denselben Request kümmern - denn in dem Moment stehen ja für weitere Requests weniger bis keine Platten zur Verfügung. Und genau das möchte ich mich einer Chunksize > durchschnittlicher Request verhindern, sodass mir möglichst viele Platten für möglichst viele IOPS zur Verfügung stehen.
Wobei ich jetzt hier vom Lesen spreche und das mit dem Schreiben auch vermutlich noch nicht ganz verstanden hab...

Das ist auch der Grund wieso ein Raid-Controller mit Speicher und BBU einen auffälligen Performance-Vorteil hat.
Was hat das jetzt mit Stripe- / Chunksize zu tun? :confused:

Bzw. Performance würde ich testen, ob Du mit einer Chunksize kleiner 512k besser fährst. Derzeit ist dein Stripe Set 3MB groß, das ist schon recht viel für einen kompletten, Zusammenhängenden IO.
Siehe oben. Würde mich über eine Erläuterung freuen; auch, was den Unterschied zwischen lesen & schreiben angeht. :)

Grundsätzliche Tipps bzg. RAID5:
- habe immer ein gutes Backup
- regelmäßig die Konsistenz prüfen
- SMART-Werte der Platten im Auge behalten
Wie gesagt: Das MogileFS speichert die Daten redundant. :) RAID-Checks sind ja eh bei Debian "ab Werk" dabei und werden auch durchgeführt, ebenso wie regelmäßige SMART-Langtests und Kontrolle der Werte.

Wenn Du 1 Chunk schreibst und deswegen die anderen 5 lesen muss hast Du 7 IO-Vorgänge (Parität mit eingerechnet), aber nur 1 Chunk geschrieben.
Oh Gott. :( Wieso muss ich denn dann die anderen lesen? Kannst du das genauer erklären?

Wenn Du 6 Chunks (= Stripe Set) schreibst hast Du auch 7 IO-Vorgänge, aber 6 mal soviel durchsatz (weil Du 6 Chunks auf die Platte bekommen hast statt nur eines).
Geht es hier ausschließlich um verlorenen Durchsatz? Dann wäre das ja in meinem Fall nicht schlimm. Wobei ich jetzt hier wiederum nicht verstehe, wieso man in diesem Fall nichts "Anderweitiges" lesen muss, oben aber schon.


Noch mal zum Artikel über XFS:
http://www.pro-linux.de/news/1/17945/xfs-greift-nach-dateisystem-krone.html

Ist das nur "Kosmetik", weil sie jetzt per Default "gefährliche" Einstellungen setzen, die in anderen Dateisystemen erst aktiviert werden müssen und so in Tests einfach schneller wirken? Ist halt interessant, denn das Dateisystem ist mir persönlich erstmal egal. Nur XFS reizt mich wegen der frei wählbaren Blockgröße. ^^
(Und den Kernel muss ich eh updaten, denn sonst will ext4 ohne Weiteres auch kein Riesen-Dateisystem anlegen. :D)
 
Mir gefallen viele Dinge in diesem Thread nicht wirklich, daher mein letztes Statement zu mehreren Punkten:

- Wenn mehr Schreibperformance auf dem Raid 5/6 gewünscht wird, kommt man um einen HW Raid Controller nicht herum. Und wenn man das WILL, dann ist er auch NOTWENDIG. Wenn man das nicht will, sollte man sich mit den Werten, die erzielt werden, abfinden und nicht irgendwelchen Luftschlössern nachjagen.

- Wenn man viele IOPS will, darf man sich vertrauensvoll einer SSD, oder zumindest einem SSD Cache (k.A. ob ZFS das in diesem Sinn handhabt) zuwenden. Wenn man das will, dann ist das notwendig.

- Wenn man ein stabiles KUNDENsystem aufbauen will, dann geht man konservativ an die Installation des Betriebssystems heran und verwendet keine "verrückten" Setups, die jenseits von allem normalen sind und stellt auch nicht absichtlich Einstellungen um, von denen sogar das OS selbst abrät.

- Wenn man etwas LERNEN will, dann macht man das auf einem EIGENEN System oder einer VM mit einer Testinstallation und keinesfalls mit einem "Real World" Server.
 
Back
Top