我正在开发一个无状态文件系统来浏览基于网络的目录和文件。我的主机上有自己的文件/目录的inode缓存。我设计了我的文件系统模块,当从VFS层调用evict_inode()函数时,我的主机inode缓存将被删除。但是,只有在高内存压力或写入3到/ proc / sys / vm / drop_caches时才会刷新。我不知道如何刷新我的主机inode缓存。随着时间的推移,我的主机端inode缓存变得越来越大,因为evict_inode()没有被调用。当我向/ proc / sys / vm / drop_caches写入3时,会调用它。
我想将dentry缓存和inode缓存标记为以NFS为限时删除,但我不知道如何实现这一点。
或者,任何更好的想法来实现这一目标?让VFS inode与我的主机inode同步会很有帮助。任何想法都将得到很好的赞赏。
答案 0 :(得分:0)
免费提供pagecache: echo 1>的/ proc / SYS / VM / drop_caches
要释放dentries和inode: echo 2>的/ proc / SYS / VM / drop_caches
释放pagecache,dentries和inode: echo 3>的/ proc / SYS / VM / drop_caches
了解详情:http://linuxpoison.blogspot.jp/2010/08/how-to-free-linux-kernel-page-cache.html#ixzz24ni162iL
引自:http://linuxpoison.blogspot.jp/2010/08/how-to-free-linux-kernel-page-cache.html
答案 1 :(得分:0)
我希望像NFS那样以时间限制的方式标记dentry缓存和inode缓存,但我不知道如何实现这一点。
我不认为NFS缓存inode和dentry得到删除"到期后。过期的inode和dentry只是在过期时重新生效。为了从缓存中实际驱逐它们,我认为最简单的想法是垃圾收集过时的条目。 (一种简单的方法是将echo 3 > /proc/sys/vm/drop_caches
放在一个cron作业中......)FUSE也有时间限制验证。