PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Stripe-Size im RAID0


mofa84
2008-01-30, 09:11:25
Habe ein Frage zur Stripe-Size auf die mir Wiki & Co keine Antwort geben, also bitte nur was sagen wenn man was weiß oder einen Quelle hat, vermuten und spekulieren kann ich auch.

Was passiert mit einer Datei, die kleiner ist als die Stripe-Size? Wird die trotzdem gesplittet und belegt dann eben nicht den ganzen Stripe oder wird die dann nur auf eine Platte geschrieben (wo sie aber ebenfalls nicht den ganzen Stripe belegen würde)?

Drunk Master
2008-01-30, 10:41:58
Hi

Dateien kleiner als die stripe-size werden nur auf eine Platte geschrieben, daher kein geschwindigkeitsvorteil.

mfg
drunk

Birdman
2008-01-30, 12:08:40
Hi
Dateien kleiner als die stripe-size werden nur auf eine Platte geschrieben, daher kein geschwindigkeitsvorteil.
mfg
drunk
Meines Wissens nach ist diese Aussage inkorrekt.
Das Filesystem speichert Dateien in Cluster welche wiederum eine eine Grösseneinheit aufweisen. Heute sind das oftmals 4kb (ntfs, ext, etc).
Kleinere Files als 4KB kommen immer in einen Cluster und auch immer nur auf ein Stripe einer Platte, sofern die Stripesize grösser als 4kb ist. (heute meistens 46-256kb)
Ist das File aber grösser als die Clustersize, belegt es damit mehrere Cluster, und diese können nun über mehrere Raidstripes verteilt sein.
Daher sind können (müssen aber nicht) Files welche grösser als die CLustersite des Filesystems sind, auf mehrere Stripes liegen. Erst wenn die Files auch grösser sind als die Stripesize, liegen sie auch sicher auf mehreren Stripes.

mofa84
2008-01-30, 12:58:18
Meine Frage kommt daher, weil wenn kleine Dateien nur auf eine Platte geschrieben werden, wird das ja mit der Zeit vollkommen asymetrisch?!

Drunk Master
2008-01-30, 15:01:59
Ist das File aber grösser als die Clustersize, belegt es damit mehrere Cluster, und diese können nun über mehrere Raidstripes verteilt sein.


Eigentlich spielt die clustergröse keine rolle.
Willst du eine datei auf ein z.b. raid 0 schreiben teilt er die datei von z.B. 1000 kb durch die Stripe size (z.b.64kb). das ergibt 15 blöcke a 64 kb und einen block mit dem rest.Die 16 Blöcke teilt er jetzt auf die platten im raid auf.
Bei 16 disks würde jede disk einen block erhalten bei 2 disk jede 8.
ist die datei jetzt kleiner als die stripe size gibts bloss einen block und den schreibt er nur auf eine disk.


@mofa84
sollte nicht aber muss ich mich heut abend mal schlaumachen.

mfg
Drunkl

"Sollte" ich hier müll verzapft haben , immer feste druff.

Birdman
2008-01-30, 21:23:14
@DrunkMaster

Das ist kaum möglich, denn dann hättest bei kleinen Dateien einen mörder Verschnitt.
Z.B. Adaptec macht per default 256kB Stripe Size - bei 100 Dateien à 1Kb würde man damit 25.6MB belegen anstelle 100kB - uns das OS wüsste davon nicht mal was, da dies ja tansparent ist. Als würde z.B. Windows mit NTFS denken es hat erst 100x 4kB belegt, doch von der Platte sind schon 25MB weg.

Drunk Master
2008-01-31, 10:02:13
Schreibst du nur eine 1kb datei auf das raid trifft das zu, kopierst du aber hunderte 1 kb dateien ist der raidcontroller ja in der lage mehrere 1 kb dateien in ein stripe zu schreiben.Bei 256 kb stripe size ja 256 1kb dateien.Aber wie gesagt die kleinste adressierbare einheit die der raidcontoller "kennt" ist ein stripe.
Es wird ja daher auch emphfolen sich vorher gedanken um die datennutzung eines raids zu machen .auf einem raid mit vielen kleine dateien sollte man daher eher eine stripesize von 8kb nehmen.
Stripsize von 256 oder höher sind für raids mit großen dateien.


z.B.

RAID 0 bietet gesteigerte Transferraten, indem mehrere Festplatten zusammengeschlossen und Schreiboperationen auf allen parallel durchgeführt werden (engl. striping, was bedeutet "in Streifen zerlegen", abgeleitet von stripe - der "Streifen"). Die Performance-Steigerung (insbesondere bei sequentiellen Zugriffen) beruht darauf, dass die zu schreibenden Daten zunächst auf die Caches der verschiedenen Platten verteilt werden und jede einzelne Platte so weniger zu tun hat. Die Größe der Datenblöcke wird als striping-Granularität bezeichnet. Umgekehrt wird auch der Lesevorgang beschleunigt.

Er kann kleiner datenmengen als eine stripe nicht schreiben(ntfs mag das vorher in cluster aufteilen, aber der raidcontroller schreibt am ende immer ein stripe .


und

"Stripe size (Streifengröße) : Die Streifengröße in Kilobytes (1 Kilobyte = 1024 Byte) legt fest, wie viele Daten (bei den RAID-Levels 0, 0+1 und 5) auf eine Festplatte geschrieben werden, bevor die nächste Festplatte des Array verwendet wird. Kleinere Streifengrößen (8k) sind gut geeignet für den Großteil üblicher Applikationen. Für Applikationen, bei denen größere Datenmengen sequentiell gelesen werden (z. B. Videoapplikationen) sind größere Streifengrößen (64k) sinnvoll."

HisN
2008-01-31, 10:09:30
Macht doch die Probe aufs Exempel.
Raid0 einrichten
Stripsize einrichten
Ein Haufen kleine Dateien auf das Raid kopieren
Eine Platte entfernen
Schauen was eine Rettungs-Software noch an "ganzen" Files von der einen Platte restaurieren kann.

Werden wahrscheinlich alle kleiner als die Stripsize sein^^
Und ja, man bekommt "ganze" Dateien zurück, was wohl die Annahme das sie auf nur eine Platte geschrieben wurden unterstützt.
@Fred-Ersteller
Wer hat denn behauptet das ein Raid0 "symetrisch" ist? Kann es doch gar nicht aus den von Dir genannten Gründen.

Mach doch mal ne Analyse Deines Raid0 nach Dateigröße, im Regel-Desktop-Betrieb sind über 50% der Dateien auf dem Rechner kleiner als die eingestellte Stripsize. Meistens ist das Verhältnis noch ungünstiger.

Birdman
2008-01-31, 10:38:38
Schreibst du nur eine 1kb datei auf das raid trifft das zu, kopierst du aber hunderte 1 kb dateien ist der raidcontroller ja in der lage mehrere 1 kb dateien in ein stripe zu schreiben.Bei 256 kb stripe size ja 256 1kb dateien.Aber wie gesagt die kleinste adressierbare einheit die der raidcontoller "kennt" ist ein stripe.

Genau das ist es doch was ich meine.
Natürlich kann der Controller mehrere Dateien auf ein Stripe schreiben, doch dann muss er auch kleine Dateien auf mehrere Stripes aufteilen können.
Z.B bei einer 256kB StripeSize muss er 2 180KB Files schreiben. Das erste davon liegt nun also komplett auf einem Stripe von einer Disk. Das zweite liegt aber teilweise auf der ersten Disk (76kB) und zum andern Teil auf der nächsten Disk. (106kB)

PHuV
2008-01-31, 11:01:04
Wie wärs mit Toms Hardware, die haben mal einen Test darüber gemacht:
Toms Hardware : RAID-Analyse: Welche Blockgröße ist ideal? Vergleich: Stripe-Größen bei RAID 0, 5 und 6 (http://www.tomshardware.com/de/RAID-Stripes-Blockgrosse,testberichte-239896.html)

Drunk Master
2008-01-31, 11:08:45
Nein, er kann dateien die kleiner als ein stripe sind nicht teilen.
ich gehe von der annahme aus du schreibst blos eine datei.

Der raidcontroller teilt die grösse der datei durch seine stripesize um festzulegen wie viele stripes die eine datei belegt.
bei einer dateigröße von 100kb und einer stripe size von 256kb ist 100 aber nicht ein vielfaches von 256 und so kann er die datei nicht aufteilen.Er schreibt immer ein kompletten stripe auf die erste platte und danach den nächten stripe auf die zweite platte und so weiter.
DA die 100 kb aber komplett in den ersten stripe passen gibts keinen zweiten stripe und die datei liegt nur auf einer platte.

dazu:

Die Stripe-Größe bestimmt auch die Menge an Speicherkapazität, die auf einer RAID-Partition beim Schreiben einer Datei mindestens in Anspruch genommen wird. Sollten Sie z.B. eine Stripe-Größe von 64 KB wählen und eine Textdatei von 2 KB speichern, so nimmt diese Datei 64 KB in Anspruch. Also bestimmt die Stripe-Größe offensichtlich die Mindestmenge an Daten, die der RAID-Controller in Form von Dateien über seine Festplatten verteilt – in meinem Beispiel also ein 64 KB Stripe. Solange eine Datei auf einen einzelnen Stripe oder ein einzelnes Laufwerk geschrieben werden kann, bietet Ihnen der Betrieb dieses speziellen RAID-Arrays absolut keinen Vorteil.

und:

Haben die Datenblöcke beispielsweise eine Größe von 64 KB, so werden immer auch mindestens 64 KB geschrieben - auch wenn es sich nur um eine Textdatei mit 4 KB handelt. Je kleiner also die durchschnittliche Dateigröße ist, um so kleiner sollte die Stripesize sein. Darum sollte man sich von vorneherein darüber im klaren sein, mit welchen Dateigrößen vorwiegend gearbeitet wird.
Auch hinsichtlich der zu erwartenden Performance ist die Stripesize von großer Bedeutung, denn die kleinste Einheit bestimmt auch, ab wann eine Datei auf zwei oder mehr Laufwerke verteilt werden kann. Bei der erwähnten Stripesize von 64 KB würde das bedeuten, daß Dateien kleiner als 64 KB auf lediglich eine Festplatte geschrieben werden. Das geschieht auch in einem RAID-Array keinen Deut schneller als auf einer einzelnen Festplatte!
Eine 128 KB große Datei würde dann z.B. allerdings auf beide Festplatten verteilt werden: 64 + 64 KB. Der Controller kann nun von beiden Laufwerken gleichzeitig lesen, was den Lesevorgang erheblich verkürzt.


mfg
Drunk

die aussage das er 256 1kb dateien in ein 256 kb stripe schreiben kann ist mit vorsicht zu geniesen, er kann zwar mehere 1 kb dateien in ein stripe schreiben aber nur mit einen schreibvorgang, nicht nacheinander mehrere 1 kb in ein stripe.

DerRob
2008-01-31, 13:49:16
Die Stripe-Größe bestimmt auch die Menge an Speicherkapazität, die auf einer RAID-Partition beim Schreiben einer Datei mindestens in Anspruch genommen wird. Sollten Sie z.B. eine Stripe-Größe von 64 KB wählen und eine Textdatei von 2 KB speichern, so nimmt diese Datei 64 KB in Anspruch.
das ist doch wohl ziemlicher quatsch. ein raid arbeitet doch transparent, das heißt, das betriebssystem bzw. das datei-system bekommt doch von allein garnicht mit, daß es jetzt auf einem raid liegt, und nicht auf einer einzelnen festplatte. wenn jetzt also das betriebssystem einen einzelnen cluster mit 4kb belegt, kann doch nicht der raid-controller daher kommen, und bei einer stripe-size von 64kb die restlichen cluster einfach mitbelegen.

ich bin bisher immer davon ausgegangen, daß die cluster einfach hintereinander weg geschrieben werden, und am "ende " der einen stripesize dann auf die andere platte gewechselt wird. bei z.b. 4kb cluster- (bzw. block-) größe und einer stripesize von 16kb sähe das so aus:

_____________________ _____________________ _____________________
hd1 | 1 | 2 | 3 | 4 | | 9 | 10 | 11 | 12 | | 17 | 18 | 19 | 20 |
""""""""""""""""""""" """"""""""""""""""""" """""""""""""""""""""
_____________________ _____________________ _____________________
hd2 | 5 | 6 | 7 | 8 | | 13 | 14 | 15 | 16 | | 21 | 22 | 23 | 24 |
""""""""""""""""""""" """"""""""""""""""""" """""""""""""""""""""
^ \ /
| """""""""V"""""""""
cluster (4kb) stripe (16kb)
die dateien werden jetzt einfach so, wie sie auf der platte liegen, dort drin verteilt:
datei 1, 3kb groß, belegt cluster 1 (das raid bringt nix, weil die datei ja nur auf hd1 liegt)
datei 2 ist 5kb groß, belegt also cluster 2+3
datei 3 ist 45kb groß, belegt also cluster 4 bis 15. hier können also cluster 4+9+10+11+12 und 5+6+7+8+13+14+15 parallel gelesen werden. ob das ganze jetzt so in einem rutsch vom raid-controller geladen wird, oder erstmal parallel 1-4 und 5-8 (wovon 1-3 wieder verworfen wird) und danach 9-12 und 13-16 geladen werden, weiß ich allerdings nicht. kommt vielleicht auch auf den raidcontroller an.

Drunk Master
2008-01-31, 14:47:28
nö, der raidcontroller schreibt immer einen kompletten stripe.
Wie gesagt , für einen raidcontrolelr ist die kleinste adressierbare einheit ein stripe.der kann keine einzelnen cluster schreiben.

mfg
Drunk

Birdman
2008-02-11, 15:07:07
Klar kann der Controller einzelne Cluster schreiben, anders kanns gar nicht gehen.

Das OS kennt nur das Filesystem, aka die Cluster, und wenn es z.B. eine 4kB Datei schreiben will, dann sendet es einen Command welches dieses File im z.B. freien Cluster 2345677 speichert. Das OS kennt keine Stripes, kennt keinen Raidcontroller und nix, das sieht nur 100GB Storage welcher als NTFS formatiert ist.
Nun kann der Controller nicht einfach intern dieses File irgendwo anders speichern, der muss dies in genau diesem Custer ablegen, und der liegt z.B. nun mal am ende eines Stripes.

Diese ganze Stripe "Architektur" ist nur dazu da, die "Schwäche" von Plattenbasierten Harddisks zu umgehen, welche nur schnell sind wenn sie viele Daten am Stück schreiben/lesen können.
Daher verteilt man die Daten in RAIDs auch nicht Byteweise (auch wenn ex sogar explizit ein Raidmodi dafür gibt), sondern man verteilt es in deutlich grösseren Einheiten - den sog. Stripes.
Dies erlaubt es den Platten, zumindest teilweise grössere Blöcke zu schreiben/lesen, ohne den Schreibkopf neu positionieren zu müssen.