Vermeidet TRIM die Leistungseinbußen von mdadm RAID 1 auf SSD?

Vermeidet TRIM die Leistungseinbußen von mdadm RAID 1 auf SSD?

In anderen Fragen wurde bereits erwähnt, dass Red Hat von der Verwendung von mdadm RAID 1 auf SSD abrät.

Red Hat weist außerdem darauf hin, dass die Software-RAID-Level 1, 4, 5 und 6 für die Verwendung auf SSDs nicht empfohlen werden. Während der Initialisierungsphase dieser RAID-Level schreiben einige RAID-Verwaltungsprogramme (wie mdadm) in alle Blöcke des Speichergeräts, um sicherzustellen, dass die Prüfsummen ordnungsgemäß funktionieren. Dies führt dazu, dass die Leistung der SSD schnell nachlässt.

Ich verstehe die Gründe dafür. Ich vermute jedoch, dass dies vor der Ankunft von geschrieben wurdemdtrim, das speziell für mdadm RAID 1 entwickelt wurde. Umgeht das das Problem? Wenn ich TRIM richtig verstehe, glaube ich, dass das der Fall ist, aber ich bin mir nicht sicher, deshalb frage ich.

TRIM ist jedoch möglicherweise nicht das Richtige für mich. Ich brauche es für ein Produktionssystem und mdtrim sieht bestenfalls experimentell aus. Noch wichtiger ist, dass ich eine starke Verschlüsselung benötige undForschunghat gezeigt, dass TRIM etwas zu viel preisgibt, indem es hervorhebt, welche Teile des Laufwerks tatsächlich verwendet werden. Gibt es eine Möglichkeit, das Leistungsproblem zu vermeiden und trotzdem eine starke Verschlüsselung zu haben? Ich habe mich gefragt, ob es möglich ist, ein teilweises TRIM durchzuführen, um einige der Blöcke für die Leistung freizugeben, aber nicht so viele, dass zu viel preisgegeben wird.

Ein Vorschlag, den ich gesehen habe, war, nur etwa 80 % jeder Festplatte zu verwenden, so dass nach der ersten Überprüfung durch mdadm noch eine Handvoll Blöcke ungenutzt bleiben. Aber wären diese Blöcke nicht die ersten, die bei der nächsten Verwendung der Festplatte verwendet werden? Sie würden trotzdem ziemlich schnell aufgebraucht sein und dann wäre ich nicht besser dran, oder?

Antwort1

Natürlich können Sie mit mdtrim (siehe --reserveOption) eine teilweise Kürzung durchführen, um immer einen Teil des freien Speicherplatzes ungekürzt zu lassen. Oder Sie könnten einfach eine große Datei mit dd(1) auf Ihrem verschlüsselten FS erstellen, um etwas Speicherplatz zu verbrauchen, der dann nie gekürzt (oder von Ihnen verwendet) wird. Ich denke, dass das Kürzen des gesamten, bis auf ca. 30 % des ungenutzten Speicherplatzes Ihnen viele Leistungsvorteile bringt, ohne die Sicherheit wesentlich zu beeinträchtigen.

Sie können (wie Sie vorschlagen) Overprovisioning statt Trimmen durchführen (auf einer neuen oder sicher über ATA gelöschten SSD), indem Sie eine Partition mit nur 80 % Speicherplatz erstellen und diese stattdessen verwenden. Sie wird nicht „ziemlich schnell aufgebraucht sein und dann wären Sie nicht besser dran“. Hier ist der Grund:

Nehmen Sie (der Einfachheit halber) an, dass Ihre Festplatte 10.000 Sektoren (LBAs) hat. Wenn Sie so partitionieren, dass nur die Hälfte davon verwendet wird (wiederum der Einfachheit halber), verwenden Sie nur LBA 0-4999, während LBA 5000-9999 nie berührt wird. Die Level-Wearing-Firmware im Laufwerk hat nun zwei Möglichkeiten, um zu erkennen, welche Sektoren ungenutzt sind – diejenigen, die Ihr Betriebssystem durch TRIM angegeben hat, und diejenigen, in die neu geschrieben wird. Wenn Sie also zum ersten Mal in LBA 100 schreiben, wird dieser verwendet (z. B. auf physischem Block 123). Wenn Sie ein zweites Mal auf LBA 100 schreiben, schreibt die SSD es an einen neuen Speicherort (z. B. physischen Block 124) und markiert dann die ALTE Version von LBA 100 (das ist der physische Block 123) als unbenutzt (TRIMed). So kann die SSD zu einem späteren Zeitpunkt, wenn sie im Leerlauf ist, eine Speicherbereinigung durchführen und (wenn alle anderen physischen Blöcke in diesem Löschblock auch unbenutzt sind) den gesamten Löschblock löschen (der viel größer ist als der physische Schreibblock – z. B. 512 KB gegenüber 4 KB).

Indem Sie also den Bereich der verwendeten LBAs auf die Hälfte reduzieren, erhöhen Sie die Anzahl der überprovisionierten physischen Sektoren, die das Laufwerk verwenden kann. Sie werden nicht „aufgebraucht“, aber Sie müssen genug davon haben, damit die Fragmentierung auf ihnen (teilweise verwendete und teilweise nicht verwendete physische Blöcke im selben Löschblock) verschwindet, bevor Ihnen der freie Speicherplatz ausgeht (andernfalls muss die SSD-Firmware verwendete Blöcke an einen anderen Ort kopieren, bevor der gesamte Löschblock gelöscht wird, was zu Schreibverstärkung, geringer Leistung und verkürzter Lebensdauer der SSD führt).

Der TRIM-Befehl ist immer noch nützlich, da er den Vorgang beschleunigt (ohne dass so viel Speicherplatz verloren geht), indem er unbenutzte Sektoren markiert, bevor erneut auf sie geschrieben werden muss (und so auch zusätzliche Schreibvorgänge vermeidet und die Lebensdauer der SSD verlängert).

Antwort2

Um die veraltete Antwort zu ergänzen: Ich habe vor Kurzem eine ausgefallene Festplatte auf meinem RAID1 durch eine SSD ersetzt. Bei meinen Experimenten und Untersuchungen habe ich Folgendes herausgefunden:

  • Linux md leitet seit ~2.6.39 TRIM-Befehle an die zugehörigen Laufwerke weiter, aber nur, wenn alle den TRIM-Befehl unterstützen.
    • Bei meinem HDD+SSD-RAID1 musste ich die HDD entfernen, TRIM ausführen und dann --re-adddie HDD.
  • TRIM kann auf einem Hot-Block-Gerät mithilfe von durchgeführt werden fstrim, Linux md leitet dies dann an die SSD weiter.
  • Bei der ersten RAID1-Wiederherstellung wird auf die gesamte SSD geschrieben.
  • Das mdtrim-Skript ist noch experimentell und wurde seit Jahren nicht aktualisiert.
  • Durch die Verwendung von TRIM auf den übermäßig geschriebenen Blöcken kann in den Augen der SSD-Firmware Speicherplatz freigegeben und die Leistung verbessert, die Schreibverstärkung reduziert und mehr werden.

verwandte Informationen