我这里有一个ubuntu linux虚拟机,我觉得没有磁盘缓存。
例如这是来自的输出free -m
:
total used free shared buffers cached
Mem: 512 98 413 0 0 0
-/+ buffers/cache: 98 413
Swap: 0 0 0
如果我创建大文件、读取大文件、读取我的主目录中的所有文件(2.2GB 的文件),我总是会看到“buffers”、“cached”为 0,并且“buffers/cache”行总是与其上面的行相同。
同样,top 和 htop 都显示没有使用磁盘缓存。
我尝试使用以下命令删除所有缓存:
echo 3 > /proc/sys/vm/drop_caches
并且我收到一个错误echo: write error: Operation not permitted
(即使以 root 身份运行)。
因此看起来缓存已被禁用,但我认为不可能做到这一点。是否可以禁用磁盘缓存?有没有办法确认我是否有磁盘缓存?也许我只是运气不好,还没有看到任何磁盘缓存的使用情况。
注意:这是一台托管的 VPS/虚拟机。有些东西被禁用了,比如 swap(没错,我无法 swapon,swapon 系统调用返回 EPERM)。是否可以使用磁盘缓存执行此操作?是否有某种方法可以查看是否已执行此操作?
答案1
您的 VPS 在 Virtuozzo/OpenVZ 下运行。在此设置中,它不是真正的完全隔离的 VM,就像 Xen 或 VMware 的情况一样。使用 OpenVZ 和 Virtuozzo,只有一个内核实例在运行(而不是每个 VM 一个),并且该内核负责维护在不同客户 VM 下运行的所有进程之间的分离。这包括管理磁盘缓存层。由于此功能在您的 VM 之外运行,因此您无法看到缓存的样子。
我不确定这是否是您的主机实施 OpenVZ 时特有的问题,或者这是否只是 OpenVZ 进行虚拟化方式的副作用。
另外,我检查了我可以访问的一台 OpenVZ VM,但在那里也看不到缓存信息。如果您需要访问此信息,我建议您转到使用 Xen 或其他真实虚拟机管理程序的 VPS 提供商。