如何在Linux上查看我的磁盘caching是否被禁用?

我在这里有一个Ubuntu的Linux虚拟机,我认为没有磁盘caching

例如,这是free -m的输出:

  total used free shared buffers cached Mem: 512 98 413 0 0 0 -/+ buffers/cache: 98 413 Swap: 0 0 0 

如果我创build大文件,阅读大文件,读取我的主目录中的所有文件(2.2GB的文件),我总是看到0为'缓冲区','caching'和“缓冲区/caching”行总是相同它上面的线。

同样,top和htop都不显示正在使用的磁盘caching。

我试图放下所有的caching:

 echo 3 > /proc/sys/vm/drop_caches 

我得到一个错误echo: write error: Operation not permitted (即使以root身份运行)。

所以它看起来像caching被禁用,但我认为这是不可能的。 是否有可能禁用磁盘caching? 有无论如何确认我是否有磁盘caching? 也许我只是不幸运,还没有看到任何磁盘caching的使用。

注意:这是一个托pipe的VPS /虚拟机。 有些东西被禁用,如交换(这是正确的,我不能swapon,swapon系统调用返回EPERM)。 磁盘caching可以做到这一点吗? 有没有办法看看是否已经完成?

您的VPS正在Virtuozzo / OpenVZ下运行。 在这种设置中,Xen和VMware并不是一个完全隔离的虚拟机。 使用OpenVZ和Virtuozzo,运行内核的一个实例(而不是每个虚拟机一个),并且该内核负责保持在不同的访客虚拟机下运行的所有进程之间的分离。 这包括pipe理磁盘caching层。 由于此function在虚拟机之外运行,因此您无法了解caching的外观。

我不确定这是否是您主机实施OpenVZ的具体问题,还是OpenVZ虚拟化的副作用。

顺便说一句,我检查了我有权访问的一个OpenVZ VM,并且无法在那里看到caching信息。 如果您需要访问这些信息,我build议转移到使用Xen或其他一些真正的pipe理程序的VPS提供商。