ecryptfs写入性能差

Modified on: Sat, 12 Jan 2019 15:20:02 +0800

我对ecryptfs和dm-crypt进行了一些基准测试,得到了一些有趣的结果。以下所有内容均使用Btrfs文件系统完成,使用dd将~700MB文件复制到ramdisk中,并使用conv=fdatasync选项将数据同步复制到ramdisk。在每次测试之前清除磁盘缓存。

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上使用文件名加密,但除此之外,所有内容都设置为默认值。

作者:Xenopathic

最佳答案

关于ddfdatasync的手册页读取:physically write output file data before finishing之前物理写入输出文件数据,因此它只在物理上“一次”写入数据(将其读作“每X个块或字节不强制刷新,但最后一次刷新”)。
如果您使用dd进行测试,这是获得最准确结果的最佳方法。相反,不使用该特定标志会使您的结果变得不现实:省略它可能会错过加密本身的时间,因为dd只是复制数据。

尽管如此,我还认为你的结果有所改变,但我发现这篇文章显示几乎相同:ecryptfs非常缓慢。并且您的测试(单个文件被复制)是ecryptfs的最佳情况!

由于ecryptfs为每个明文版本编写了一个加密文件(带有元数据的自定义标头),因此拥有大量小文件意味着性能下降更大。

但是,ecryptfs有其优点:您可以立即发送加密文件而不会丢失加密。您的备份(假设您正在备份加密的数据)会更快,因为您只会复制与数据一样大的文件(如果它们是增量文件则更快,因为您只复制修改后的文件)

另一方面,dm-crypt可能会更快,但您需要发送整个容器(整个文件系统)以保持加密原样。备份也将包含整个容器,在大多数情况下无法进行增量备份。

我已经使用(并且仍然使用)这两种方法(不是相同的工具)来保存加密数据:基于文件(ecryptfs)更容易通过在线托管服务(例如PC之间的Dropbox)保持同步,但它是在进行更改时非常慢,并且导致我在底层文件系统中遇到一些问题(假设它可以编写文件,并且与文件系统的限制相关的问题往往会破坏整个事情);我更喜欢块设备加密:我将它们视为简单的分区,因此限制和问题不会如此严重。唯一的缺点是复制容器,这可能会花费更长的时间。

作者:NuTTyX

相关问答

添加新评论