特定のデバイスの書き込みキャッシュサイズを制限しますか?

特定のデバイスの書き込みキャッシュサイズを制限しますか?

データをディスクにフラッシュする前に、Linuxが特定のブロックデバイスの書き込みキャッシュにキャッシュするデータ量を制限する方法はありますか?

私のサーバーには多くのRAM(約64 GB)があります。ロータリーメディア(スローメディアなど)やスローUSBフラッシュドライブに大容量ファイルを書き込むたびに、LinuxキャッシュギガバイトRAMに書き込むことができるデータ量。これは少量のデータだけを書き込む多くの作業に適しており、Linuxは最終的にキャッシュをディスクにフラッシュします。

ただし、大容量ファイルに対して大規模な操作を実行すると、書き込みキャッシュとそれに応じたリフレッシュの結果、UIは非常に不均一に見えます。pv大容量ファイルをRAMディスクから書き込みが遅いUSBフラッシュドライブの安定したストレージに転送する簡単な例を見てみましょう。 1GBを超えるデータを膨大な速度で読み取り、通常のディスク書き込み速度で遅くなりますが、書き込みが完了するとキャッシュをフラッシュするのに1分以上かかります。

他のアプリケーションは、ほぼすぐに複数回の書き込み操作を実行し、しばらくの間完全に停止し、すぐに別の書き込み操作を実行してから停止するようです。回転するディスクは遅すぎるため、キャッシュフラッシュの遅延によってプロセスが120秒以上中断され、カーネルOOPSがトリガーされることがあります。この効果は、ffmpegを使用してファイルをリミックスしたり、VMwareディスクイメージを転送したり、大規模な連続ファイルに似た「一括」書き込み操作を実行したりするなどの操作によって発生します。

私はLinuxに、「キャッシュフラッシュを開始する前に/ dev / sdXデバイスに最大64 MBのデータしかキャッシュしない」と言うことを望みます。これは、上記の例では、pvUIに書き込みが完了したことを示した後に最大64 MBのデータのみを書き込むことができることを意味します。syncコマンドを入力するには、64MBのみフラッシュする必要があります。 (現在、Linuxはギガバイトのデータをキャッシュし、書き込み速度が毎秒1桁または数十メガバイトに過ぎないデバイスにフラッシュするため、aの後pvにaを実行すると2分以上中断syncされる可能性があります。)sync

システム全体の書き込みキャッシュを必ずしも制限したくない。例えば、SSDのブートドライブは確かにキャッシュの利点を得ることができ、非常に小さな書き込みに関連する一般的な作業もキャッシュによって多くの利点を得ることができるからである。大きなファイルが目に見える場所にある程度順次記録される場合にのみ該当します。

編集:私のお気に入りのディストリビューションはArch Linuxですが、他のディストリビューションの指示を自分の設定に合わせて調整するのはかなり上手です。

関連情報