我很困惑,因为所有的 dentry 都有指向 inode 对象的指针。据我所知,您总是通过目录项来查找索引节点。那么,为什么会有inode缓存呢?
答案1
目录条目和 inode 是不同的对象,因此它们有单独的缓存:dentry 缓存位于dcache.c
,inode 缓存在inode_hashtable
在inode.c
。但 inode 缓存是 dcache 的从属:
dcache 是 icache 的主控——只要 dcache 条目存在,inode 就会始终存在。
您无疑已经知道,这些缓存的目的是提高性能并避免不断的磁盘访问,特别是对于在文件打开时可以多次更新的索引节点。
答案2
您询问的是作为 Linux 虚拟文件系统 (VFS) 的一部分实现的 inode 缓存。缓存(包括索引节点缓存)不仅仅用于提供功能(例如访问索引节点条目),正如您所指出的,还有其他机制可以实现这一点。
缓存可用于提高性能,在这种情况下,从磁盘等 io 设备查找 inode 数据非常慢,因此将以前访问过的 inode 数据存储在内存中可以使文件系统访问速度更快。