FUSE を使用して tmpfs + swap にパススルーする場合のレイテンシが高い

FUSE を使用して tmpfs + swap にパススルーする場合のレイテンシが高い

私は、インメモリ ファイル システム (tmpfs) 上に shim レイヤーを作成して、ファイル システム コマンドをインターセプトし、追加の処理を実行できるようにしています (最終目標は、フォールト トレランスのためにネットワーク経由で書き込みを複製することです)。ファイル システム コマンドをインターセプトするために、FUSE を使用しています。インメモリ ファイル システムには、tmpfs を使用しています。メモリ サイズが小さいことを克服するために、tmpfs が使用できる十分なスワップ領域を SSD 上に作成しました。

要約すると、dirtmpfs でマウントされたディレクトリがあります。shimすべてのアプリケーションが書き込む別のディレクトリを作成しました。FUSE は にマウントされshim、すべての操作を にリダイレクトしますdir

Filebench で直接書き込みを行うマイクロベンチマークを行った結果dir、tmpfs + swap のレイテンシは、特にディスク上の ext4 と比較すると非常に低いことがわかりました。tmpfs が RAM への書き込みから swap 領域への書き込みに切り替わっても、目立った速度低下はありません。これは、何らかの巧妙な先読みによるものだと思います。

FUSEで重ねるとパススルー_hp.cただし、マルチスレッドをオンにしても、ファイルの作成は非常に遅くなり、tmpfs + swap よりも約 60 倍のレイテンシになります。 を使用するとhtop、メモリではなく swap に書き込むときにのみ速度が低下することに気付きました (メモリが非常に早くいっぱいになり、swap がゆっくりと増加します)。それ以外の場合、FUSE 自体のオーバーヘッドはほとんどありません。

スワップを使用すると FUSE ではレイテンシ ヒットが発生し、tmpfs 単独ではレイテンシ ヒットが発生しない理由と、この追加のオーバーヘッドを最適化する方法を知っている人はいますか?

関連情報