私は、約 50 MB/秒の速度で、常に RAID 10 HDD 構成にデータを順次書き込むリアルタイム アプリケーションを持っています。このアプリケーションは mmap を使用し、I/O の待機によって書き込みがブロックされることはありません。
その後、時々、大量の読み取りバーストが発生します。たとえば、ドライブから 500 GB の連続データをできるだけ早く読み取りたい場合などです。ただし、書き込みアプリケーションの I/O がブロックされることはありません。
現在、書き込みアプリケーションを SCHED_FIFO に設定し、読み取りアプリケーションで CFQ I/O Scheduler + I/O nice を使用することでこの問題を解決しています。これは問題なく動作しますが、ドライブは書き込みと読み取りの両方を実行するために何度もシークする必要があるため、少し非効率的です。
これを改善する戦略があるかどうか疑問に思っています。システム ドライブは高速な 256 GB SSD ドライブです。スペースがあり読み取りが行われている間に、Linux が SSD に書き込むようにすることはできますか? これは、たとえば bcache、dmcache、またはその他のモジュールで実現できますか? つまり、HDD への読み取りが行われている間だけ SSD に書き込み、後で HDD にフラッシュします。SSD キャッシュが「いっぱい」の場合、HDD への書き込みは読み取りよりも優先されます。