Holt schrieb:
So ist es, es gibt einen StartLBA und #LB
Inzwischen nachgeblättert, das Command heißt "DATA SET MANAGEMENT", als Anzahl Sektoren(#LB) max. 65536 möglich, also 32MiB am Stück.
Holt schrieb:
I.d.R. geben die 00 zurück, aber das ist nicht definiert, die SSD darf da, genauso wie beim Lesen nicht auf Flashadressen gemappter LABs, also solcher die vorher nie beschrieben wurden, einfach irgendwas zurückgeben.
Nicht den früheren Inhalt, den neuen, nach dem TRIM, nur ist das wieder schwer, denn wann die SSD das genau ausführt ist ebenfalls nicht genau definiert und dauer einige Sekunden bis Minuten. Solange ist der alten Inhalt da noch auslesbar.
Der "undefinierte Inhalt" wird wohl als Beschreibung gewählt sein, weil bis zur Durchführung der alte Inhalt, danach aber (als neuer Inhalt) 0x00en zurückgegeben wird. Was anderes als einer diese beiden Inhalte wäre technischer Schwachsinn.
Holt schrieb:
Und wie soll der RAID Controller es eigentlich bzgl. der Parity lösen, wenn da nun keine Nullen ausgelesen werden?
Eine sauberee Lösung wäre nur möglich, wenn der genauso wie der Controller der SSD Buch darüber führt, welche LBAs mit gültigen Daten beschrieben sind und welche nicht.
Ginge auch anders, der RAID-Controller(Software) müsste vor dem TRIM einfach 0x00en reinschreiben und die dann Trimmen. Damit gibt es in jedem Fall des Lesens, egal ob das Trim schon ausgeführt ist oder nicht, definitiv 00en.
Holt schrieb:
Wieso er die alten Daten lesen sollte, verstehe ich nicht. Die neuen auch nur, wenn er die Parity hinterher entsprechend den zurücklesenen setzen will, sofern er eben nicht davon ausgeht, dass die sowieso 00 sind.
...
Ist die Parity für 00 auch 00?
Der XOR-Zauberspruch lautet:
(1) a xor a = 0
(2) a xor 0 = a
(3) 0 xor 0 = 0
(4) a xor b = b xor a (die Position der Operanden ist egal)
(5) a xor b xor c = (a xor b) xor c = a xor (b xor c) = (a xor c) xor b (Die Reihenfolge der Operationen ist egal)
(6) a xor b = p; ==> a xor p = b; b xor p = a
Warum er die alten Daten lesen muss, hier ein Beispiel.
wir haben bei RAID5 und 5 Platten ein Stripeset mit 4 Datenstripes A B C D und einem Paritystripe
A B C D P
die Parity kann auch an anderer Position stehen, was aber keinen Einfluss hat.
in jedem der Datenstripes A B C D befindet sich je nach Stripesize eine definierte Anzahl an Sektoren.
ein beliebiger Sektor a aus A hat einen an gleichem Offset im Stripe befindlichen Partner b c d und p
für die gilt (wie auch für das gesamte Stripe)
a xor b xor c xor d = p
Wenn jetzt der Sektor a neuen Inhalt a1 durch Schreiben bekommt, muss
- entweder b,c,d gelesen werden, p neu ausgerechnet und a,p zurückgeschrieben
- oder eleganter das alte a und p gelesen, p1=p xor a xor a1; und a1, p1 zurückgeschrieben
werden.
Holt schrieb:
Wenn ja, kann er die einfach trimmen und wenn nicht, dann würde die Parity nicht mehr stimmen und er würde Read-Errors melden, denn er weiß ja normalerweise nicht, ob die Daten nun gültig sein müssten oder nicht.
Würde statt den Sektor a zu beschreiben, dieser getrimmt werden, dann müsste der Controller
- das alte a und p lesen, p1 =p xor a; a1=0; und a1, p1 zurückschreiben
- dann a trimmen.
Damit bliebe die Konsistenz gewahrt.
Holt schrieb:
Ist aber eigentlich bei einer neuen, unbeschriebene SSD nicht anders, oder beschreibt es grundsätzlich beim Einrichten des RAID alle LBAs um gültige Parities zu bekommen?
Das hängt vom Controller ab, üblicherweise werden nur die Paritystripes aus den Daten errechnet und neu geschrieben, damit der Array konsistent ist.
Die Frage ist natürlich, was anschließend bei einer Formatierung des Filesystemes passiert, wenn es ein Full-Format ist. Zuerst Nullen hinschreiben, um dann den großen unbenutzten Bereich zu trimmen, wäre bei Win komödienreif, aber denkbar.
Wenn ein RAID-Controller nach der obigen Methode arbeiten würde, wäre eine TRIM-Unterstützung bei RAID5 natürlich möglich, bis sowas aber implementiert wird, dauerts wohl noch.
Sinnvollerweise sollte der dann aber auch gleich alle Sektoren, bei denen nur 00en als Inhalt geschrieben wird, sofort trimmen, womit auch Parity-Sektoren frei würden