在 Linux 本身层面,readdir 并不做“限流”(没有内建的速率限制机制)。
但可以从几个层面理解你问的“限流”:
readdir() / getdents() 是普通的系统调用buffer size 影响)✅ 结论:Linux 内核不对 readdir 限流
虽然没有“限流”,但会受以下影响:
readdir 可能触发大量磁盘 IO很多程序自己实现限流,例如:
usleep()如果你在:
可能通过 blkio / io cgroup 限制磁盘吞吐:
# 示例:限制 IO
echo "8:0 1048576" > /sys/fs/cgroup/.../io.max
这会间接限制 readdir 的性能
如果是:
那么:
| 现象 | 原因 |
|---|---|
| readdir 突然变慢 | dentry cache 被回收 |
| 大量 readdir 卡住 | 磁盘 IO 打满 |
| 容器里变慢 | cgroup IO 限制 |
| NFS 很慢 | 网络或服务端限制 |
Linux 的 readdir 本身不限流,但受文件系统、缓存、IO、cgroup 和网络影响,可能“表现得像被限流”。
如果你愿意,可以告诉我:
我可以更具体地分析你遇到的问题。