kvm内存优化--内存气球

时间:2024-05-19 19:44:43

一、内存气球技术(使用virtio_balloon)

1、Balloon简介
通常来说,要改变客户机占用的宿主机内存,是要先关闭客户机,修改启动时的内存配置,然后重启客户机才能实现。而内存的ballooning(气球)技术可以在客户机运行时动态地调整它所占用的宿主机内存资源,而不需要关闭客户机。
Ballooning技术形象地在客户机占用的内存中引入气球(Balloon)的概念,气球中的内存是可以供宿主机使用的(但不能被客户机访问或使用),所以,当宿主机内存使用紧张,空余内存不多时,可以请求客户机回收利用已分配给客户机的部分内存,客户机就会释放其空闲的内存,此时若客户机空闲内存不足,可能还会回收部分使用中的内存,可能会换出部分内存到客户机的交换分区(swap)中,从而使得内存气球充气膨胀,从而让宿主机回收气球中的内存可用于其他进程(或其他客户机)。反之,当客户机中内存不足时,也可以让客户机的内存气球压缩,释放出内存气球中的部分内存,让客户机使用更多的内存。
当使用balloon命令使客户机内存增加时,最大值不可以大于QEMU命令行启动时设置的内存,大于的部分不会生效。

2、KVM中Ballooning的原理
KVM中Ballooning的工作过程主要如下几个步骤:
(1)Hypervisor(即KVM)发送请求到客户机操作系统让其归还一定数量的内存给hypervisor。
(2)客户机操作系统中的virtio_balloon驱动接收到hypervisor的请求。
(3)virtio_balloon驱动使客户机的内存气球膨胀,气球中的内存就不能被客户机访问。如果此时客户机中内存剩余量不多(如某应用程序绑定/申请了大量的内存),并不能让内存气球膨胀到足够大以满足hypervisor的请求,那么virtio_balloon驱动也会让尽可能多地提供内存内存使气球膨胀,尽量去满足hypervisor的请求中的内存数量(即使不一定能完全满足)。
(4)客户机操作系统归还气球中的内存给hypervisor。
(5)hypervisor可以将从气球中得来的内存分配到任何需要的地方。
(6)如果从气球中得到来内存没有处于使用中,hypervisor也可以将内存返还到客户机中,这个过程为:a. hypervisor发请求到客户机的virtio_balloon驱动;b. 这个请求让客户机操作系统压缩内存气球;c. 在气球中的内存被释放出来,重新让客户机可以访问和使用。

3、KVM中Balloon的劣势
(1) Ballooning需要客户机操作系统加载virtio_balloon驱动,然而并非每个客户机系统都有该驱动(如windows需要自己安装该驱动)。
(2)如果有大量内存从客户机系统中回收,Ballooning可能会降低客户机操作系统运行的性能。一方面,内存的减少,可能会让客户机中作为磁盘数据缓存的内存被放到气球中,从而客户机中的磁盘I/O访问会增加;另一方面,如果处理机制不够好,也可能让客户机中正在运行的进程由于内存不足而执行失败。
(3)目前没有比较方便的、自动化的机制来管理ballooning,一般都是采用在QEMU monitor中执行balloon命令来实现ballooning的。没有对客户机的有效监控,没有自动化的ballooning机制,这可能会让生产环境中实现大规模自动化部署并不很方便。
(4)内存的动态增加或减少,可能会使内存被过度碎片化,从而降低内存使用时的性能。另外,内存的变化会影响到客户机内核对内存使用的优化,比如:内核起初根据目前状态对内存的分配采取了某个策略,而突然由于balloon的效果让可用内存减少了很多,这时起初的内存策略可能就不是太优化的了。

二、内存气球技术的应用实例

(一)内存限制技术
1、宿主机内存气球技术配置
KVM的内存气球技术可以在虚拟机之间按照需要调节内存大小,提高内存的利用率。使用的时候需要在虚拟机中安装virt balloon的驱动,内核开启CONFIG_VIRTIO_BALLOON(对于CentOS6.x以上的系统默认开启),并且默认已经安装virt balloon驱动。
(1)如图查看宿主机是否支持virtio:
kvm内存优化--内存气球
只要有Virtio的关键字,就代表支持virtio
(2)如图查看CentOS6.5虚拟机中安装驱动:
kvm内存优化--内存气球

2、虚拟机内存气球配置
(1)查看当前内存大小
kvm内存优化--内存气球
(2)限制内存
kvm内存优化--内存气球

3、windows系统
(1) 对于windows系统,需要安装virt balloon设备驱动,安装完成后,在设备管理器中的“系统设备”可以查看到virt balloon的PCI设备“VirtIO Ballon Driver”。
kvm内存优化--内存气球
(2) 安装内存气球服务,使用命令blnsvr.exe -i。
kvm内存优化--内存气球
下载地址:https://fedoraproject.org/wiki/Windows_Virtio_Drivers

(二)在宿主机中获取虚拟机内存利用率
该功能只能在CentOS7中使用(很无语。。。。)
1、CentOS虚拟机
(1)设置采集信息,可以在虚拟机配置文件中更改也可以手动设置
kvm内存优化--内存气球
手动设置:
kvm内存优化--内存气球
(2)查看内存
kvm内存优化--内存气球
根据这些信息即可求得内存利用率。
2、对于windows虚拟机
(1)安装驱动
a. 进入“设备管理器” - “系统设备”,安装“未知设备”为“Virtio Balloon Driver”
b. 将virtio-win光驱中的WIN7/X86目录拷贝到“c:/Program files/Balloon”
c. 以管理员身份使用cmd命令行进入上述目录
d. 执行“blnsvr.exe -i”用以安装BLNSVR服务
e. 正常关机保存设置
(2)与CentOS系统相同。

三、使用CentOS7注意事项

1、安装Linux虚拟机没问题
2、安装windows虚拟机需用命令安装
virt-install –name=win71 –ram=2048 –vcpus=4 –disk path=/home/kvmshare/win7_64.img,size=60 –cdrom /data/win7_64.iso –force –autostart –network bridge=br0,model=virtio –graphics vnc –os-variant rhel6

相关文章