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

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

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

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

两者似乎都与访问数千个文件而不真正读取任何数据有关,这似乎意味着系统必须遍历大量的 inode。但我不明白为什么在 ecryptfs 上这会比不使用加密时更慢,因为即使所有 inode 都加密了,这仍然应该是 IO 密集型的,而不是 CPU 密集型的。

有人有什么想法吗?

答案1

原因如下,基于解释由一位主要的 Canonical 开发人员编写:

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

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

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

eCryptFS 在不断发展,越来越好:比较 Phoronix 基准测试9.10对阵11.10

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

相关内容