KVM 主机不使用内存进行缓存

KVM 主机不使用内存进行缓存

我有一台 KVM 主机(Linux 3.14.32),上面运行着 8 台虚拟机。这些虚拟机配置过多(分配给它们的内存大于主机上可用的物理内存)。但是它们只消耗了大约 85% 的物理内存,这应该会留出一些空间用于缓存。但是,主机上的所有东西都慢得令人难以忍受,free 报告说几乎没有内存用于缓存:

             total       used       free     shared    buffers     cached
Mem:         32224      26767       5457          0          0          3
-/+ buffers/cache:      26762       5461
Swap:         1021        414        607

可以看到,浪费了 5.5 GB。关闭虚拟机后,一切恢复正常 - 内核使用 260M 缓存。

/proc/meminfo:

MemTotal:       32997976 kB
MemFree:         5543224 kB
MemAvailable:    5584332 kB
Buffers:            2612 kB
Cached:            83876 kB
SwapCached:        72524 kB
Active:         24721804 kB
Inactive:        2214632 kB
Active(anon):   24675412 kB
Inactive(anon):  2175048 kB
Active(file):      46392 kB
Inactive(file):    39584 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1046520 kB
SwapFree:         622068 kB
Dirty:                84 kB
Writeback:             4 kB
AnonPages:      26806104 kB
Mapped:            28436 kB
Shmem:               488 kB
Slab:              60024 kB
SReclaimable:      25076 kB
SUnreclaim:        34948 kB
KernelStack:        3232 kB
PageTables:        62212 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    17545508 kB
Committed_AS:   53713960 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      431560 kB
VmallocChunk:   34359138492 kB
HardwareCorrupted:     0 kB
DirectMap4k:        9728 kB
DirectMap2M:    33536000 kB

我将 swappiness 设置为 0。VM 的磁盘映像位于 LVM 上,并且 cache=writeback。

答案1

建议cache=none在使用 RAW 设备时绕过缓存 ( )。这将使用 O_DIRECT 模式,因此主机页面缓存将被绕过,并且 I/O 直接在 qemu-kvm 用户空间缓冲区和存储设备之间进行。

QEMU 还支持多种缓存模式。如果您使用原始卷或分区,最好完全避免使用缓存,以减少数据复制和总线流量。

参考:调整 KVM

答案2

我认为你可能遇到了一些 I/O 问题,而不是内存问题。查看 top(查看 IO_WAIT)并查看它是否高于 ~5%。

此外,当你进行交换时,可能某个进程试图分配超出其能力的资源。查看 KSMhttps://www.kernel.org/doc/Documentation/vm/ksm.txt并且它可能能够将你的重复数据删除到一个合适的水平,或者尝试将 RAM 分配降低几个分数,看看是否会产生影响。

相关内容