Caching 直接使用Linux VFS函数时是否有缓存机制?

Caching 直接使用Linux VFS函数时是否有缓存机制?,caching,linux-kernel,kvm,vfs,Caching,Linux Kernel,Kvm,Vfs,我正在KVM虚拟机监控程序之上构建一个应用程序,通过直接调用Linux内核VFS函数,我可以访问(数千次)一个小数据库(3MB) 在构建了我的应用程序的稳定原型之后,我想优化它对数据库的访问(例如通过添加缓存)。 我知道,通过从用户空间执行文件操作,Linux使用页面缓存来加速应用程序,在从内核空间使用VFS函数时也是这样吗?是的,正如我所期望的那样,VFS是一个抽象层,其思想是所有文件系统看起来都一样,无论它们的实现细节是什么 因此,VFS可以在VFS级别进行一些缓存,然后在层蛋糕下面的所有块

我正在KVM虚拟机监控程序之上构建一个应用程序,通过直接调用Linux内核VFS函数,我可以访问(数千次)一个小数据库(3MB)

在构建了我的应用程序的稳定原型之后,我想优化它对数据库的访问(例如通过添加缓存)。
我知道,通过从用户空间执行文件操作,Linux使用页面缓存来加速应用程序,在从内核空间使用VFS函数时也是这样吗?

是的,正如我所期望的那样,VFS是一个抽象层,其思想是所有文件系统看起来都一样,无论它们的实现细节是什么


因此,VFS可以在VFS级别进行一些缓存,然后在层蛋糕下面的所有块设备上都有一个缓冲缓存。

我感觉多次读取数据库文件会使我的应用程序速度变慢,一次读取所有文件并进行计算所需的时间大大减少。有没有办法检查我的应用程序每次读取文件时是否命中(或不命中)缓存?嗯,有趣的是,有一些方法可以通过在/proc中写入内容来删除至少一些缓存,但是尝试在无效或不无效后对访问进行测试听起来有点尴尬,你的问题不是我以前直接面对的问题。您看过“perf”了吗?它是一个很好的工具,可以让您深入了解内核和它在做什么,但是它通过采样工作,所以它有局限性。很好的帮助你找到时间花在哪里。。。无论这是否是FS缓存问题,都可能会或可能不会对您有所帮助。当然,应用程序本地缓存总是最快的。刚找到“cachestats”。它可以打印文件的缓存和未缓存页面数。刚刚试过,似乎有效,
cachestats/vmlinuz
显示
0/760(0.0%)
然后在
cat/vmlinuz>/dev/null
之后,它是
760/760(100.0%)
我想你可以在你的文件上试一下,看看它是否被缓存了……我找不到这个命令,如何安装它?它包含在什么包中?对于我的debian Linux jessie发行版,“cachestats”二进制文件与“cachedel”一起出现在“nocache”包中,后者使文件的页面缓存无效。两者都有助于您的测试乐趣。也是“nocache”,但我对这个有点怀疑。