The VFS Inode Cache

| 暂无评论 | 暂无引用通告

-->

当游历安装的文件系统的时候,它们的 VFS inode 不断地被读取,有时是写入。虚拟文件系统维护一个 inode cache ,用于加速对于所有安装的文件系统的访问。每一次从 inode cache 读出一个 VFS inode ,系统就可以省去对于物理设备的访问。

参见 fs/inode.c

     VFS inode cache 用散列表( hash table )的方式实现,条目是指针,指向既有同样 hash value 的 VFS inode 列表。一个 inode 的 hash value 从它的 inode 编号和包括这个文件系统的底层的物理设备的设备编号中计算出来。不论何时虚拟文件系统需要访问一个 inode ,它首先查看 VFS inode cache 。为了在 inode hash table 中查找一个 inode ,系统首先计算它的 hash value ,然后用它作为 inode hash table 的索引。这样得到了具有相同 hash value 的 inode 的列表的指针。然后它一次读取所有的 inode 直到它找到和它要找的 inode 具有相同的 inode 编号和相同的设备标识符的 inode 为止。

     如果可以在 cache 中找到这个 inode ,它的 count 就增加,表示它有了另一个用户,文件系统的访问继续进行。否则必须找到一个空闲的 VFS inode 让文件系统把 inode 读入到内存。如何得到一个空闲的 inode , VFS 有一系列选择。如果系统可以分配更多的 VFS inode ,它就这样做:它分配核心页并把它们分成新的、空闲的 inode ,放到 inode 列表中。系统中所有的 VFS inode 除了在 inode hash table 中之外也在一个由 first_inode 指向的列表。如果系统已经拥有了它允许有的所有的 inode ,它必须找到一个可以重用的 inode 。好的候选是哪些使用量( count )是 0 的 inode :这表示系统当前没有使用它们。真正重要的 VFS inode ,例如文件系统的 root inode ,已经有了一个大于 0 的使用量,所以永远不会选做重用。一旦定位到一个重用的候选,它就被清除。这个 VFS inode 可能是脏的,这时系统必须等待它被解锁然后才能继续。在重用之前这个 VFS inode 的候选必须被清除。

     虽然找到了一个新的 VFS inode ,还必须调用一个和文件系统相关的例程,用从底层的真正的文件系统中毒取得信息填充这个 inode 。当它填充的时候,这个新的 VFS inode 的使用量为 1 ,并被锁定,所以在它填入了有效的信息之前除了它没有其它进程可以访问。

     为了得到它实际需要的 VFS inode ,文件系统可能需要访问其它一些 inode 。这发生在你读取一个目录的时候:只有最终目录的 inode 是需要的,但是中间目录的 inode 也必须读取。当 VFS inode cache 使用过程并填满时,较少使用的 inode 会被废弃,较多使用的 inode 会保留在高速缓存中。

暂无引用通告

发送引用通告网址: http://supersun.info/mt/mt-tb.cgi/919
如果您想引用这篇日记到您的Blog,请复制上面的链接,放置到您发表文章时的相应界面中。

发表评论

最新资源

  • IMG_1437.JPG
  • line.png
  • bar.png
  • perl_calander.jpg

关于此日记

此日记由 supersun 发表于 2009年2月26日 15:44

此Blog上的上一篇日记Linux分页管理机制

此Blog上的下一篇日记/proc/meminfo

首页归档页可以看到最新的日记和所有日记。