kvm内存超售的方法一般而言就三种。
·
·
·
内存交换(Swap)
当系统内存不够用时,宿主机把部分长时间未操作(读写)的内存交换到磁盘上配置的Swap分区,等相关程序需要运行时再恢复到内存中。
·
说白了,就是宿主机的swap当内存用
·
·
·
气球驱动(Balloon)
通过virtio_balloon驱动实现动态调整Guest与Host的可用内存空间。Balloon的工作原理是在虚拟机中安装一个kmod,KVM宿主机内存不足,会根据virtio_balloon判断哪些内存页面可以被回收,然后virtio_balloon将这些内存占用,返回给宿主机使用。
·
说白了,就是小鸡的一个间谍virtio_balloon,KVM宿主机内存不足,virtio_balloon kmod会申请占用小鸡空闲的内存。占用的内存就会释放到宿主机。
·
·
·
KSM(Kernel Samepage Merging)
KSM是一种内存合并技术,它可以在KVM中实现内存共享,从而节省内存空间。是Linux kernel的一种内存共享机制,在2.6.32版本引入,用于合并具有相同内容的物理主存页面以减少页面冗余。在Kernel中KSM会定期扫描用户注册的内存区域,当有相同的页面就会将其合并,并用一个添加到页表中的新页面来代替原来的页面。当需要修改时,复制新的内存页,再做修改(将其标记为 copy-on-write)
·
说白了,就是相同小鸡的内存页面有重复,KVM宿主机会把这些内存只存为一份。
·
·
·
·
·
简单介绍一下各个方案的问题,和如何发现内存被超售
·
宿主机加swap当内存,
用这个方法是最蠢的,看一下iowait就能发现。客户长期跑基于内存的应用(memcached),还会导致io爆表(传说中的滥用内存)。基本测试一下内存就能发现。内存读取速度低于1G/s(ddr3 ecc都比这个快)
·
·
·
·
小鸡被加了气球驱动(Balloon)
检查lsmod|grep virtio
,看看有没有virtio_balloon。如果有,直接rmmod virtio_balloon
这种方法对性能来说没有明显缺点,就是客户的RAM内存会莫名其妙的少一大截。
·
·
·
·
KSM(Kernel Samepage Merging)合并内存页
这种方法,正常来说是没有什么缺点,但是如果kvm宿主机的内存满了,客户机(小鸡)想要修改时,必须复制新的内存页,再做修改(copy-on-write),但是内存不够,那么会引发 OOM Killer 导致进程 crash。
·
如何检查ksm超售
cd /sys/kernel/mm/ksm
里面有几个文件
run 这个是是否打开的标志 为1时打开,0表示停止,2表示正在强行停止KSM并取消合并所有合并页
pages_shared 共享的物理页数
pages_sharing 正在被共享的物理页数
·
检查
`cat /sys/kernel/mm/ksm/run ``
·
·
·
我好像有一点洁癖,不允许我的内存被超售,(可能是我写软件本来就特别吃内存【内存滥用】),粗略总结了一下,可能有一些不完美。大家可以指正
·
补充,还有一个zram内存的方法。原理就是压缩内存,本质上是用cpu换内存。
zram在小鸡上使用,可以自己超售自己。
在母鸡上使用就可以超售母鸡
@斯大林 #0
感谢您发布此信息! 我刚刚开始了解 KVM,所以本教程很有帮助!
Thanks for posting this! I am just beginning to learn about KVM, so this tutorial was helpful!
如果有人感兴趣,这里是我的教程小提纲以及来自 Google Cloud 和 Oracle Cloud 的 KVM VPSes 的快速测试。
In case anybody is interested, here is my little outline of the tutorial plus quick tests from KVM VPSes at Google Cloud and at Oracle Cloud.
KVM memory overbooking
Oracle Cloud (VM.Standard.E2.1.Micro x86_64)
Google Cloud (e2 micro Intel Haswell)
似乎谷歌正在使用 virtio_balloon,但甲骨文没有。
It seems like Google is using the virtio_balloon, but Oracle is not.
我 记得添加第二个交换文件 到 Oracle 实例。 我想我可能也添加了第一个交换文件,但也许第一个交换文件是实例附带的。 也许我在某处有笔记。
I remember adding the second swap file to the Oracle instance. I think I might have added the first swap file also, but maybe the first swap file came with the instance. Maybe I have notes somewhere.
再次感谢发布教程!
Thanks again for posting the tutorial!
坦
Tom
学到了,大佬们都很专业
还真的有,在vpshostingservice.co, BuyVM, VirMach的机器上发现了。
Oracle没有发现。
技术贴
ding
@1号城管 #1 pr?
真用virtio_balloon会不会太明显呢?
绑定
补充一个:
contabo,使用zram内存压缩技术,内存读写速度会下降,但不会降特别多,所以很多人都觉得还凑合
好帖,增加50鸡腿,先预付精品贴奖励了