Ecryptfsとdm-cryptを使って少しベンチマークを行ったところ、興味深い結果が得られました。以下のすべては、Btrfsファイルシステムで実行されました。dd
を使用して〜700MBのファイルをRAMディスクとの間でコピーし、conv=fdatasync
オプションを使用してデータの同期を強制します。各テストの前に、ディスクキャッシュがクリアされました。
No encryption:
read - 165MB/s
write - 120MB/s
ecryptfs:
read - 125MB/s
write - 15MB/s
dm-crypt:
read - 150MB/s
write - 115MB/s
dm-crypt + ecryptfs:
read - 120MB/s
write - 15MB/s
暗号化は生のファイルシステムよりも遅いことを理解しましたが、ecryptfsによる書き込みパフォーマンスの大幅な低下は予想していませんでした。データの同期を強制しているという事実は、このテストを非現実的にしますか?または、書き込みを高速化するためにecryptfsに渡すことができるオプションはありますか?
Ecryptfsでファイル名暗号化を使用していましたが、それ以外はすべてデフォルトに設定されていました。
dd
についてのfdatasync
のマニュアルページには次のように書かれています:physically write output file data before finishing
なので、データを物理的に「1回」だけ書き込みます(「Xブロックまたはバイトごとにフラッシュを強制するのではなく、最後に1回フラッシュする」と読みます)。 dd
を使用してテストを行う場合は、最も正確な結果を得るのに最適な方法です。逆に、その特定のフラグを使用しないと、結果が非現実的になります。dd
はデータをコピーしているだけなので、フラグを省略すると、暗号化自体の時間が失われる可能性があります。
それでも、あなたの結果については何かが起こっていると思いましたが、 この記事 ほぼ同じことを示しています:ecryptfsは痛々しいほど遅いです。そして、あなたのテスト(単一のファイルがコピーされる)はecryptfsの最良のシナリオです!
Ecryptfsは、クリアテキストバージョンごとに暗号化されたファイル(メタデータを含むカスタムヘッダーを含む)を書き込むため、小さなファイルがたくさんあると、パフォーマンスがさらに低下します。
ただし、ecryptfsには利点があります。暗号化を失うことなく、暗号化されたファイルをすぐに送信できます。データと同じ大きさのファイルのみをコピーするため、バックアップ(暗号化データをバックアップしていると仮定)はより高速になります(ファイルがあればさらに高速になります)変更されたファイルのみをコピーするため、増分です)。
一方、dm-cryptの方がはるかに高速ですが、暗号化をそのまま維持するには、コンテナー全体(ファイルシステム全体)を送信する必要があります。また、バックアップもコンテナ全体で構成され、ほとんどの場合、増分バックアップを実行できません。
私は暗号化されたデータを保持するために両方の方法(同じツールではありません)を使用しました(そしてまだ使用しています):ファイルベース(ecryptfs)は、PC間のドロップボックスなどのオンラインホスティングサービスを介して同期を維持するのが簡単ですが、変更を行うと、下にあるファイルシステムでいくつかの問題が発生しました(ファイルを書き込むことができると想定しており、ファイルシステムの制限に関連する問題は全体を壊す傾向があります)。私はブロックデバイス暗号化を好みます。私はそれらを単純なパーティションとして扱うので、制限や問題がそれほどひどく破られることはありません。唯一の欠点は、コンテナをコピーすることです。これには時間がかかる場合があります。