書き込みキャッシュは、速度が異なるディスクにまたがるファイルシステムでどのように機能しますか?

書き込みキャッシュは、速度が異なるディスクにまたがるファイルシステムでどのように機能しますか?

低速(HDD)および高速(SSD)ドライブにわたって複数のディスクとソフトウェアRAIDを備えた最新のLinuxシステムでファイルシステムへの書き込みをキャッシュする方法は?

md-raid RAID1を使用すると、アレイをおよびとして構成できます--write-mostly--write-behindつまり、高速ディスクでの読み取りが行われ、遅いディスクへの書き込みが遅れる可能性があります。しかし、カーネルレベルではどのようにキャッシュされますか?カーネルキャッシュディスクは、md-raidレイヤの前または後に記録しますか? write()呼び出しの終わりに、ディスクではなくディスクの1つにデータが書き込まれることを保証しますか--write-behind

RAID1でもbtrfs同じ状況がどのように発生しますか?機能がないため、--write-behindダーティページはデバイスレベルまたはファイルシステムレベルで計算されますか? write() はいつ返されますか?

vm.dirty_*ratio調整可能なパラメータはこれらの設定にどのような影響を与えますか?

ベストアンサー1

--write-mostly、ドライバによって内部的に処理されます--write-behind。デフォルトでは、どのデータが書き込まれていて、どのデータがまだ失われているかを書き込む書き込み意図ビットマップ(後の書き込み機能に必要)などのメタデータが保存されます。これは、データが既定の書き込みデバイスに到達していない状態で停電が発生した場合に必要です。この場合、影響を受けたデータ領域は再同期されます(あなたの場合はSSDから読み取られ、HDDに書き込まれます)。mdmd

しかし、カーネルレベルではどのようにキャッシュされますか?

write-behindの場合、mdドライバはデフォルトで書き込み要求を内部的に複製します。デフォルトの書き込み要求はプライマリドライブに送信され、上位レイヤに「OK、完了しました」と通知します。その後、複製された書き込み要求はRAIDの背面書き込み側に保持され、完了するのに長い時間がかかることがあります。一通のお知らせが届きます。

その後、RAID層は、キューに保留中の書き込み要求がある間に書き込み優先デバイスからデータを読み取らないようにいくつかの手順を実行します。書き込み指向デバイスからデータを読み取るのはなぜですか?まあ、SSDが故障した可能性があるので、残っているのはそれです。複雑でwrite-behindのためにいくつかの特別なケースが発生します。

これがおそらくRAID-1レベルのみをサポートし、他のレベルはサポートしていない理由です。理論的には、本質的にSSDをRAID-0として使用し、write-behindモードで2つのパリティHDDを使用することは合理的ですが、このようなwrite-behind RAID-6はサポートされていません。 RAID-1専用で、そこでもほとんど使用されません。

md他のキャッシュ設定はこれに影響されません。デフォルトでは、キャッシングメカニズム全体は、ドライバが内部的にどのように実装するのか全く気にしません。キャッシュがその仕事をし、mdがその仕事をします。したがって、ファイルシステムキャッシュは、ベアドライブと同様に、mdの上にあるファイルシステムでも同じように機能します。 (もう少し複雑ですが、こう考えてください。)

おすすめ記事