我已经实现了一个 FUSE 文件系统,现在我正在尝试优化性能,因为包含数千个文件的目录的等待时间会达到几秒钟。
一些日志记录显示,在返回文件名列表后,会为每个文件调用一次 getattr
(对于包含 10,000 个文件的测试目录,调用 10,000 次),结果是5 秒等待时间变为 20 秒等待时间的四倍。
我使用的 FUSE 版本 [1] 似乎支持返回元组列表 (name, stat, offset)
以及名称列表,因此我尝试返回
(
'<file_name>',
<stat with st_atime, st_mtime, st_mode, st_uid, st_gid, st_size>,
0,
)
对于每个文件,但仍为每个文件调用一次 getattr
。
有人知道我在 stat
中缺少什么导致操作系统仍然调用 getattr
吗?或者我无能为力来改变这种行为?
[1]
Copyright (c) 2008 Giorgos Verigakis
__version__
= '1.1'
我发现调用 getattr 的次数超出了您的控制范围。根据您的实现,您可以通过在 getattr 中缓存结果来提高性能。
我是一名优秀的程序员,十分优秀!