整蛊回答的只是一个单一的线 - 这可能是为什么花了这么长时间得到任何答案都没有。
部分答案取决于文件系统 - 不同的文件系统会给出不同的答案。但是,执行'ls
'需要读取包含目录条目的页面,并阅读包含目录中标识的inode的页面。多少个页面 - 因此有多少个磁盘读取 - 取决于页面大小和目录大小。如果您认为每个文件名的开销为6-8字节,则不会太远。如果名称每个大约12个字符,则每个文件大约有20个字节,如果您的页面大小为4096个字节(4KB),则每个目录页面大约有200个文件。
如果您仅使用'ls
'列出名称而不是其他属性,则表示完成。如果列出属性(大小等),则必须读取inode。我不确定现代inode有多大。几十年前,在一个原始文件系统上,它每个都是64字节;从那时起它可能会增长。每个页面会有多个inode,但是你不能确定你需要的inode是连续的(在磁盘上彼此相邻)。在最糟糕的情况下,您可能需要为每个单独的文件阅读另一个页面,但在实践中这是不太可能的。幸运的是,内核在缓存磁盘页面方面相当不错,所以不太可能需要重新读取页面。我们不可能很好地猜测相关inode条目的密度;它也许可能是每页4个inode,但是从1到64的任何估计可能是合理的。因此,您可能需要为包含200个文件的目录读取50个页面。
当涉及到在文件上运行'cat
'时,系统必须为每个文件找到inode,就像'ls
'一样;然后它必须读取文件的数据。除非数据存储在inode本身中(我认为这在某些带有较大inode和足够小文件体的文件系统中是可行的),那么您必须为每个文件读取一个页面 - 除非小文件的部分页面聚集在一起在一页上(我似乎还记得在某些文件系统中可能会发生这种情况)。
所以,对于一个200文件目录:
- 平原
ls
:1页
ls -l
:
cat *
51页:
我不知道我是251页d非常相信这些数字 - 但您可以看到改进估算所需的那种数据。
也许你最好问“我怎么测量?” – 2010-07-23 02:32:39
“我怎么测量?” :) – 2010-07-23 06:07:08