在 Debian(及其他 Linux 发行版)上提升 readdir 相关效率,通常要从文件系统、内核参数、应用层调用方式、目录结构几个方面入手。下面按“由慢到快”的常见优化路径说明。
readdir 的性能与目录下 entry 数量强相关。
示例:
bad: /data/files/123456.jpg
good: /data/files/12/34/123456.jpg
经验值:
mkfs.xfs /dev/sdX
getdents64 而不是 readdirreaddir 是 libc 封装getdents64 一次系统调用返回更多 entryC 示例思路:
syscall(SYS_getdents64, fd, buf, sizeof(buf));
很多高性能程序(如 rsync、find)底层都用它。
很多人写:
while ((de = readdir(dir))) {
stat(de->d_name, &st); // ❌ 很慢
}
readdir + d_typeif (de->d_type == DT_REG) { ... }
statfstatat(AT_NO_AUTOMOUNT)vfs_cache_pressure 调整(谨慎)sysctl -w vm.vfs_cache_pressure=50
noop / mq-deadlineapt update
apt install linux-image-amd64
ulimit -n 100000
可以告诉我:
我可以给你针对性代码级优化方案。