
用于关闭给定范围内所有文件描述符”FDs”的 close_range 系统调用,在正在开发的 Linux 7.0 内核中应该能享受到不错的速度提升。
上周看到了所有功能丰富的 VFS 拉取请求,这些请求带来了 nullfs 和 open_tree_namespace、标准化的通用 I/O 错误报告、非阻塞时间戳以及其他改进。周一发送的一些由 Christian Brauner 邮寄的遗留 VFS 补丁。
在 vfs misc 2 拉取请求中值得注意的是对 close_range 系统调用的优化。close_range 的使用从 O(范围大小)降低到 O(活动 FDs),现在更高效,为稀疏文件描述符表上的大范围关闭操作提供了”显著改进”。Brauner 总结如下:
“通过使用 open_fds 位图上的 find_next_bit() 而不是线性扫描整个请求范围来优化 close_range(),从 O(范围大小) 优化到 O(活动 FDs)。这对于稀疏文件描述符表上的大范围关闭操作是一个重大改进。”
close_range 系统调用用于关闭系统上给定范围内的所有文件描述符。
中国电信的 Qiliang Yuan,这位补丁的作者,也类似地写道:
在 close_range()中,内核传统上会对[fd, max_fd]范围内的文件描述符进行线性扫描,导致复杂度为 O(N),其中 N 是范围大小。对于文件描述符表稀疏的进程来说,这是低效的,因为它会检查许多未分配的槽位。
此补丁通过在 open_fds 位图上使用 find_next_bit()来跳过空洞,优化了__range_close()。这使算法复杂度从 O(范围大小)变为 O(活动文件描述符),为稀疏文件描述符表上的大范围关闭操作提供了显著的性能提升。
代码今天已合并到 Linux Git 中。为 Linux 7.0 的构建做了大量出色的工作。
转自 Linux 7.0 Merges “Significant Improvement” For close_range System Call – Phoronix
Linuxeden开源社区