私の仮定(間違っているようです)は、ecryptfs(通常はFUSEファイルシステム)が次のスタッキングメカニズムを使用していることです。
- ユーザーコードの問題
read()
- カーネルは、既存の(暗号化されていない)バッファからの要求を満たすことを試みます。
- バッファが存在しません。カーネルはecryptfsにチャンクロードを要求します。
- ecryptfsはカーネルが物理(暗号化された)ブロックをロードするように要求し、カーネルはそれを実行してバッファキャッシュに格納します。
- ecryptfs は物理ブロックを復号化します。
- カーネルは復号化されたブロックをバッファキャッシュに格納します。
- 後続の読み取りは、キャッシュの復号化されたブロックで実行されます。
ただし、暗号化されたファイルシステムと暗号化されていないファイルシステムで同じジョブの「sys」時間を比較すると、キャッシュ内の唯一のバッファが暗号化され、ecryptfsが各々で実行されるように見えますread()
。ヒューズホームページにはバッファキャッシュに関する言及はありませんが、ブロックレベルではなくシステムコールレベルでタスクが発生していることを示しているようです。
ecryptfs(Dustin?) または FUSE の内部に精通している人は、この質問に答えることができますか?