我一直在读这一页,http://www.tldp.org/LDP/tlk/fs/filesystem.html,而且我很难组织它所讨论的所有不同的缓存。特别是,我不明白每个使用时的不同场景。
从我的理解来看,有
缓冲区高速缓存:由 VFS 使用。表示数据缓冲区放入缓存中。我不知道缓冲区缓存中是否只有数据缓冲区。另外,我不确定它是否仅由 VFS 使用。
VFS inode 缓存:访问文件后,其 inode 会放入缓存中,以便更快地查找。我不确定拥有 inode 信息是否意味着系统不再需要沿着文件系统树到达该位置(例如,如果文件位于 Documents 下,则它将不再需要从根目录访问 Documents) 。
EXT2(或其他使用 inode 的文件系统)inode 缓存:存在吗?它从未被提及,但我假设它存在。
VFS目录缓存:存储“目录名到inode”的映射。正如链接中的以下引用所述,显然您可以仅使用 VFS 缓存获取 VFS inode:
如果目录缓存中没有条目,则实际文件系统会从底层文件系统或索引节点缓存中获取 VFS inode。
那么为什么我们还需要目录缓存呢?这与 dentry 缓存有关吗?
Dentry缓存:为什么上面的文章没有提到这一点?难道没有关系吗?
答案1
那么为什么我们还需要目录缓存呢?
这只是另一个级别的缓存。即使所有路径组件都可以在其他缓存中找到,但将它们全部遍历一遍仍然需要时间。因此,目录缓存提供了一种缓存整个路径的方法,避免每次从根目录逐个路径元素查找内容。