为什么运行 du -s 时 ecryptfs 这么慢?

Leo*_*Leo 4 performance encryption ecryptfs

我已经使用 Ubuntu 的加密主文件夹系统有一段时间了,除了两个特定情况外,并没有真正注意到任何减速。

  1. 当我du -s在我的主文件夹中运行时,它比在未加密分区上的相同数据上运行所需的时间长几倍。
  2. 在 Krusader 中输入包含超过 1000 张图像的文件夹时,Krusader 需要 10-20 秒才能显示文件(在此期间完全没有响应)。

两者似乎都与访问数千个文件有关,而没有真正读取它们的任何数据,这似乎意味着系统将不得不遍历大量的 inode。我不明白为什么在 ecryptfs 上这会比不使用加密时慢,因为即使 inode 全部加密,这仍然应该是 IO 绑定而不是 CPU 绑定。

有没有人有任何想法?

ish*_*ish 5

这就是为什么,基于Canonical 主要开发人员之一的解释

  • 获取目录中所有文件名的列表需要解码、解析和解密较低的文件名。

  • 来自 du 的 stat() 调用导致查找,这需要分配一个 eCryptfs inode,读取较低文件元数据的一部分,检查以确保它是 eCryptfs 文件,然后解析出未加密的文件大小以设置 eCryptfs inode 的 i_size 字段. 请记住,从下层文件系统读取元数据涉及将页面读入下层文件系统的页面缓存。

简而言之,问题不在于 I/O 速率,而在于 IOP——大量的 IOP!

随着 eCryptFS 的发展,它变得越来越好:比较9.1011.10的 Phoronix 基准测试。

您可能需要考虑 dm-crypt,它历来速度更快,而且似乎仍然具有优势