我使用带有 ZFS ZVOL 或 LVM-thin 的 Proxmox 作为磁盘卷,据说使用磁盘缓存写回模式将使内存使用量超过分配量。
有没有办法检查、限制和增加 Linux KVM 中 qemu 磁盘缓存写回模式的内存使用量?
答案1
在写回模式下,QEMU/KVM 通过主机的页面缓存进行写入,基本上与任何其他用户空间程序一样。要获取有关页面缓存内容和活动的信息,您可以发出:
[user@localhost ~]$ grep -i "^cache\|dirty\|writeback:" /proc/meminfo
Cached: 84548 kB
Dirty: 0 kB
Writeback: 0 kB
检查输出,我们可以看到:
已缓存:是用于读取缓存的内存量。如果您在客户机中读取某些内容,它将结束两个都在主机内存缓存中和在客户机自己的页面缓存中。有人认为这种双重缓存是一种资源浪费;实际上,如果内存压力很大,只读缓存可能会被立即丢弃。另一方面,主机的缓存通常比客户机的缓存大得多,因此可以通过打开 QEMU 写回缓存(与直接访问相比)来获得净性能提升;
肮脏的:它表示要写入(即更改)的内存量。为了回收这些内存,系统必须将更改写入磁盘。这意味着,根据底层 IO 子系统,脏页回收可能会很慢;
回写:这是系统内存的大小目前正在写作到磁盘,既由于内存压力(和脏页回收),也由于时间(最多 30 秒后,脏页会被写回到磁盘)。
总而言之,页面缓存的奇妙之处在于,它由主机系统自动管理,以响应内存压力和其他因素(即各种sysctl
条目)。由于它经常导致客户系统的净性能提升,因此我为大多数虚拟机设置了写回缓存。
可以找到更多信息这里