TRIM は SSD 上の mdadm RAID 1 のパフォーマンスへの影響を回避しますか?

TRIM は SSD 上の mdadm RAID 1 のパフォーマンスへの影響を回避しますか?

Red Hat では SSD 上で mdadm RAID 1 を使用しないことを推奨していることは、他の質問でもすでに述べられています。

Red Hat は、ソフトウェア RAID レベル 1、4、5、および 6 を SSD で使用することは推奨されないとも警告しています。これらの RAID レベルの初期化段階では、一部の RAID 管理ユーティリティ (mdadm など) がストレージ デバイス上のすべてのブロックに書き込み、チェックサムが適切に機能することを確認します。これにより、SSD のパフォーマンスが急速に低下します。

この理由は理解できます。しかし、これはトリムこれは mdadm RAID 1 専用に設計されています。これで問題は回避されますか? TRIM の理解が正しければ回避できると思いますが、確信が持てないので質問します。

TRIMは私には合わないかもしれない。本番システムにはこれが必要で、mdtrimはせいぜい実験的なものにしか見えない。さらに重要なのは、強力な暗号化が必要で、研究TRIM は、ドライブのどの部分が実際に使用されているかを強調表示することで、少し多くの情報を明らかにしすぎていることがわかりました。パフォーマンスの問題を回避しながらも、強力な暗号化を維持する方法はありますか? 部分的な TRIM を実行して、パフォーマンスのために一部のブロックを解放しながらも、あまり多くの情報を明らかにしすぎないようにすることは可能でしょうか。

私が見た 1 つの提案は、各ディスクの約 80% のみを使用するというもので、mdadm が最初のチェックを行った後も未使用のブロックがいくつか残るようにしていました。しかし、これらのブロックは、ディスクのその後の使用時に最初に使用されるのではないですか? それでもすぐに使い果たされてしまい、状況は改善されないのではないでしょうか?

答え1

もちろん、mdtrim (--reserveオプションを参照) を使用して部分的なトリムを実行し、常に一定量の空き領域をトリムせずに残すことができます。または、暗号化された FS に dd(1) を使用して大きなファイルを作成し、領域の一部を使用することもできます。このファイルはトリムされません (また、ユーザーによって使用されることもありません)。未使用の領域を約 30% 残してトリムすると、セキュリティをあまり損なうことなく、パフォーマンス上のメリットを十分に得られると思います。

(あなたが提案しているように) トリミングの代わりにオーバープロビジョニングを行い (新しい SSD または ATA で安全に消去された SSD で) 80% のスペースのみを持つパーティションを作成し、代わりにそれを使うことができます。 「すぐに使い果たされて、状況が改善しない」ということはありません。 理由は次のとおりです。

ディスクに 10000 個のセクター (LBA) があると仮定します (簡単にするため)。半分だけを使用するようにパーティションを作成すると (これも簡単にするため)、LBA 0 ~ 4999 のみが使用され、LBA 5000 ~ 9999 は変更されません。ドライブのレベル ウェア ファームウェアには、未使用のセクターを認識する方法が 2 つあります。OS が TRIM で指定したセクターと、REWRITE されているセクターです。したがって、最初に LBA 100 に書き込むと、それが使用されます (たとえば、物理ブロック 123)。 LBA 100 に 2 回目に書き込むと、SSD はそれを新しい場所 (たとえば、物理ブロック 124) に書き込み、LBA 100 の古いバージョン (物理ブロック 123) を未使用 (TRIM) としてマークします。そのため、後で SSD がアイドル状態のときにガベージ コレクションを実行し、(その消去ブロック内の他のすべての物理ブロックも未使用の場合) 消去ブロック全体を消去できます (消去ブロックは物理書き込みブロックよりもはるかに大きい - たとえば、4KB に対して 512KB)

したがって、使用される LBA の範囲を半分に減らすことで、ドライブが使用できるオーバープロビジョニングされた物理セクターの数が増えます。それらは「使い果たされる」ことはありませんが、空き領域がなくなる前にそれらの断片化 (同じ消去ブロック内の部分的に使用され、部分的に使用されていない物理ブロック) がなくなるように十分な数を確保する必要があります (そうしないと、SSD ファームウェアは、消去ブロック全体を消去する前に、使用済みのブロックを他の場所にコピーする必要があり、書き込み増幅、パフォーマンスの低下、SSD の寿命の短縮につながります)

TRIM コマンドは、再度書き込みが必要になる前に未使用のセクターをマークすることでプロセスを高速化し (スペースをあまり失わずに)、余分な書き込みを回避できるため、依然として便利です (これにより、SSD の寿命が延びます)。

答え2

古風な答えに加えて、最近 RAID1 上の故障した HDD を SSD に交換したのですが、行った実験と調査から、次のことがわかりました。

  • Linux md は ~2.6.39 以降、構成ドライブすべてで TRIM コマンドがサポートされている場合のみ、TRIM コマンドを構成ドライブに渡します。
    • 私の HDD+SSD RAID1 では、失敗して HDD を取り外し、TRIM を実行してから--re-addHDD を実行する必要がありました。
  • TRIM は を使用してホット ブロック デバイス上で実行できfstrim、Linux md はこれを SSD に中継します。
  • 最初の RAID1 リカバリでは、SSD 全体に書き込みが行われます。
  • mdtrim スクリプトはまだ実験段階であり、何年も更新されていません。
  • 過剰に書き込まれたブロックに TRIM を使用すると、SSD ファームウェアの観点からスペースが解放され、パフォーマンスが向上し、書き込み増幅が削減されるなど、さまざまな効果が得られます。

関連情報