KVM内存管理(四)—— balloon

19 篇文章 2 订阅
18 篇文章 2 订阅

 

Ballooning简介

通常来说,要改变客户机占用的宿主机内存,是要先关闭客户机,修改启动时的内存配置,然后重启客户机才能实现。而内存的ballooning(气球)技术可以在客户机运行时动态地调整它所占用的宿主机内存资源,而不需要关闭客户机。

Ballooning技术形象地在客户机占用的内存中引入气球(Balloon)的概念,气球中的内存是可以供宿主机使用的(但不能被客户机访问或使用),所以,当宿主机内存使用紧张,空余内存不多时,可以请求客户机回收利用已分配给客户机的部分内存,客户机就会释放其空闲的内存,此时若客户机空闲内存不足,可能还会回收部分使用中的内存,可能会换出部分内存到客户机的交换分区(swap)中,从而使得内存气球充气膨胀,从而让宿主机回收气球中的内存可用于其他进程(或其他客户机)。反之,当客户机中内存不足时,也可以让客户机的内存气球压缩,释放出内存气球中的部分内存,让客户机使用更多的内存。

很多现代的虚拟机,如KVM、Xen、VMware等,都对Ballooning技术提供支持。关于内存Balloon的概念,如图所示。

 

linux ballooning

 

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. 在气球中的内存被释放出来,重新让客户机可以访问和使用。

 

KVM中Ballooning使用示例

KVM中的Ballooning是通过宿主机和客户机协同来实现的,linux内核需配置 “CONFIG_VIRTIO_BALLOON=m”

在QEMU命令行中可用“-balloon virtio”参数来分配Balloon设备给客户机让其调用virtio_balloon驱动来工作,而默认值为没有分配Balloon设备(与“-balloon none”效果相同)。

-balloon virtio[,addr=addr]  #使用VirtIO balloon设备,addr可配置客户机中该设备的PCI地址。

在QEMU monitor中,提供了两个命令查看和设置客户机内存的大小。

(qemu) info balloon   #查看客户机内存占用量(Balloon信息)

(qemu) balloon num   #设置客户机内存占用量为numMB

 

KVM中使用ballooning的操作步骤如下:

启动虚拟机

[root@localhost ~]# 
[root@localhost ~]# /usr/libexec/qemu-kvm centos70-64.qcow2 -m 2G -balloon virtio -monitor telnet::3333,server,nowait -serial stdio
qemu-kvm: -balloon virtio: warning: This option is deprecated. Use '--device virtio-balloon' to enable the balloon device.
VNC server running on ::1:5900
qemu-kvm: terminating on signal 2
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# /usr/libexec/qemu-kvm centos70-64.qcow2 -m 2G -device virtio-balloon -monitor telnet::3333,server,nowait -serial stdio
VNC server running on ::1:5900

CentOS Linux 7 (Core)
Kernel 3.10.0-1127.el7.x86_64 on an x86_64

localhost login: root
Password: 
Last login: Tue Apr 13 21:59:21 on ttyS0
[root@localhost ~]# 
[root@localhost ~]# 

连接qemu monitor,

[root@localhost ~]# telnet localhost 3333
Trying ::1...
Connected to localhost.
Escape character is '^]'.
QEMU 2.12.0 monitor - type 'help' for more information
(qemu) 
(qemu) info balloon
balloon: actual=2048
(qemu) balloon 1024
(qemu) info balloon
balloon: actual=1024
(qemu) 

 

查看内存变化

[root@localhost ~]# 
[root@localhost ~]#  
[root@localhost ~]# lspci | grep -i balloon
00:04.0 Unclassified device [00ff]: Red Hat, Inc. Virtio memory balloon
[root@localhost ~]# lspci -s 00:04.0 -v
00:04.0 Unclassified device [00ff]: Red Hat, Inc. Virtio memory balloon
	Subsystem: Red Hat, Inc. Device 0005
	Physical Slot: 4
	Flags: bus master, fast devsel, latency 0, IRQ 11
	I/O ports at c040 [size=32]
	Memory at fe000000 (64-bit, prefetchable) [size=16K]
	Capabilities: [84] Vendor Specific Information: VirtIO: <unknown>
	Capabilities: [70] Vendor Specific Information: VirtIO: Notify
	Capabilities: [60] Vendor Specific Information: VirtIO: DeviceCfg
	Capabilities: [50] Vendor Specific Information: VirtIO: ISR
	Capabilities: [40] Vendor Specific Information: VirtIO: CommonCfg
	Kernel driver in use: virtio-pci
	Kernel modules: virtio_pci

[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1837         116        1598           8         122        1582
Swap:           923           0         923
[root@localhost ~]# 
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            813         116         574           8         122         558
Swap:           923           0         923
[root@localhost ~]# 
[root@localhost ~]# 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值