我对 ecryptfs 和 dm-crypt 进行了一些基准测试,并得到了一些有趣的结果。以下所有测试都是使用 Btrfs 文件系统完成的,用于将dd
大约 700MB 的文件复制到 ramdisk 或从 ramdisk 复制文件,并可以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 上使用文件名加密,但除此之外,一切都设置为默认值。
答案1
dd
about的手册页fdatasync
内容为:physically write output file data before finishing
,因此它只在物理上“一次”写入数据(将其读作“不是强制每 X 个块或字节刷新一次,而是在最后刷新一次”)。如果您使用dd
来进行测试,这是获得最准确结果的最佳方法。相反,不使用该特定标志会使您的结果不切实际:省略它可能会错过加密本身的时间,因为dd
只是复制数据。
尽管如此,我也认为你的结果一定有什么问题,但我发现本文几乎一样:ecryptfs 非常慢。而你的测试(单个文件被复制)是 ecryptfs 的最佳情况!
由于 ecryptfs 为每个明文版本写入一个加密文件(带有包含元数据的自定义标头),因此拥有大量小文件意味着更大的性能下降。
但是,ecryptfs 有其优点:你可以立即发送加密文件而不会丢失加密。你的备份(假设你正在备份你的加密如果您只复制与数据一样大的文件,则复制速度会更快(如果是增量文件,则速度会更快,因为您只会复制已修改的文件)。
另一方面,dm-crypt 可能要快得多,但您需要发送整个容器(整个文件系统)才能保持加密原样。而且备份也将由整个容器组成,在大多数情况下无法进行增量备份。
我曾经使用过(现在仍在使用)这两种方法(虽然不是同一种工具)来保存加密数据:基于文件(ecryptfs)更容易通过在线托管服务(如 PC 之间的 dropbox)保持同步,但在进行更改时速度非常慢,并且导致我遇到了一些底层文件系统问题(它假设它可以写入文件,而与文件系统限制相关的问题往往会破坏整个过程);我更喜欢块设备加密:我将它们视为简单分区,因此限制和问题不会那么严重。唯一的缺点是复制容器,这可能需要更长的时间。