首页 理论教育 virtio

virtio

时间:2023-10-19 理论教育 版权反馈
【摘要】:Balloon气球概述virtio_balloon驱动即内存气泡,可以用来动态调整内存。balloon driver需要客户机协作,但客户机不直接控制balloon。使用balloon改变Linux客户机内存接下来以Ubuntu14.04虚拟机为例,进行balloon的使用和配置。在很多Linux发行版中都已经配置有“CONFIG_Virtio_BALLOON=m”,所以用较新的Linux作为客户机系统,一般不需要额外配置virtio_balloon驱动,使用默认内核配置即可。4-31修改前的Ubuntu虚拟机内存使用量接下来在宿主机的QEMU monitor中,使用命令“info balloon”查看虚拟机内存,显示实际内存为启动虚拟机时设置的1024MB。

virtio_balloon配置|KVM桌面云服务端

(1)Balloon气球概述

virtio_balloon驱动即内存气泡,可以用来动态调整内存。通常来说,要改变客户机的内存大小,我们需要关闭客户机,用qemu-system-x86_64重新分配。但是这个在实际应用中很不方便,于是balloon技术出现了。

ballooning(气球)技术可以在客户机运行时动态地调整内存大小,而不需要关闭客户机。它是客户机的balloon driver通过virtio虚拟队列接口和宿主机协同工作来完成的。balloon driver的作用在于它既可以膨胀扩大自己使用的内存大小,也可以缩减减少自己的内存使用量(可以缩减至几近于无)。

气球中的内存是供宿主机使用的,不能被客户机访问或使用,所以,当宿主机内存使用紧张,空余内存不多时,可以请求客户机回收利用已分配给客户机的部分内存,客户机就会释放其空闲的内存,从而使得内存气球充气膨胀,从而让宿主机回收气球中的内存可用于其他进程(或其他客户机)。反之,当客户机中内存不足时,也可以让宿主机的内存气球压缩,释放出内存气球中的部分内存,让客户机使用更多的内存。

balloon driver本身并不直接管理balloon,它的扩容与缩减都是通过virtio队列由宿主机发送信号管理。客户机的balloon driver可以通过virtio通道与主机通信,并接受主机给它的伸/缩信号。balloon driver需要客户机协作,但客户机不直接控制balloon。宿主机可以把balloon中的内存页从客户机取消映射,拿来给其他客户机使用,也可以映射回去,用来增加客户机内存。因为客户机不能使用balloon里面的内存,所以当客户机的内存不足以满足自身应用时,它要么使用swap,要么选择性杀死一些进程。

(2)使用balloon改变Linux客户机内存

接下来以Ubuntu14.04虚拟机为例,进行balloon的使用和配置。在虚拟机运行过程中,通过balloon动态调整虚拟机内存大小,同时在宿主机由QEMU监控器监控虚拟机内存使用情况。

由于KVM中的Balloon是通过宿主机和客户机协同来实现的,在宿主机中应该使用2.6.27及以上版本的Linux内核(包括KVM模块),使用较新的QEMU,在客户机中使用2.6.27及以上内核且将“CONFIG_Virtio_BALLOON”配置为模块或编译到内核。在很多Linux发行版中都已经配置有“CONFIG_Virtio_BALLOON=m”,所以用较新的Linux作为客户机系统,一般不需要额外配置virtio_balloon驱动,使用默认内核配置即可。

在QEMU命令行中可用“-balloon virtio”参数来分配Balloon设备给客户机让其调用virtio_balloon驱动来工作,而默认值为没有分配Balloon设备(与“-balloon none”效果相同)。“-balloon virtio”的参数格式为-balloon virtio[,addr=addr],该参数表示使用Virtio balloon设备,addr可配置客户机中该设备的PCI地址

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

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

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

首先在宿主机中使用命令“qemu-system-x86_64 ubuntu14.04.img-m 1024-balloon virtio--enable-kvm-vnc:1-monitor stdio”启动Ubuntu14.04虚拟机,“-monitor stdio”参数表示打开QEMU监控器,如图4-28所示。

图4-28 Ubuntu14.04虚拟机启动

在启动后的Ubuntu虚拟机中使用“lspci”命令查看balloon设备使用情况,可以看到“Red Hat,Inc Virtio memory balloon”字样,表明设备已经正常加载,如图4-29所示。

图4-29 在Ubuntu14.04虚拟机上查看pci设备

然后继续在Ubuntu虚拟机中使用命令“grep Virtio_BALLOON/boot/config-3.13.0-24-generic”在Ubuntu内核文件中可以查看到balloon已经编译至内核,如图4-30所示。

4-30 Ubuntu14.04内核文件的balloon配置

在Ubuntu虚拟机中使用“free-m”命令查看其内存使用量,可以看到系统总内存数为993MB(大致相等于启动虚拟机时通过QEMU命令设置的1024MB),已使用136MB,如图4-31所示。

(www.xing528.com)

4-31 修改前的Ubuntu虚拟机内存使用量

接下来在宿主机的QEMU monitor中,使用命令“info balloon”查看虚拟机内存,显示实际内存为启动虚拟机时设置的1024MB。接下来,使用命令“balloon 512”更改Ubuntu虚拟机内存为512MB,再使用命令“info balloon”查看,显示实际内存为修改后的512MB。如图4-32所示。

图4-32 在QEMU monitor中更改客户机内存

设置了虚拟机内存为512MB后,再在虚拟机中使用“free-m”命令查看其内存使用量,可以看到系统总内存数为481MB,比修改前的总内存数993MB正好减少了512MB,如图4-33所示。

图4-33 修改后的Ubuntu虚拟机内存使用量

这减少的512MB内存即baloon设备占用的内存,ubuntu虚拟机的总内存数减少,宿主机回收512MB的内存,将再次分配将其用于其他进程或其他用途。

此外,需要注意的是,当“balloon”命令使客户机内存增大时,其增大的最大值不能超过使用QEMU命令启动虚拟机时设置的内存大小。也就是说,如果启动虚拟机时QEMU命令行里设置的内存为2048MB,那么在QEMU的monitor中能够给虚拟机设置的最大内存量为2048MB,如果执行“balloon 4096”命令,那么设置的4096MB的内存不会生效,虚拟机内存仍然是启动时设置的2048MB。

(3)使用balloon改变Windows客户机内存

使用以下命令启动Win 7虚拟机:

Win 7虚拟机启动后,打开Windows的任务管理器,在“任务管理器”中可以看到系统物理内存总数为“1023”,其中“可用”内存为713MB,如图4-34所示。

4-34 修改前的Win 7虚拟机内存使用量

在QEMU monitor中使用命令“info balloon”查看Win 7客户机内存,显示实际内存为启动虚拟机时设置的1024MB。接下来,使用命令“balloon 512”更改客户机内存为512MB,再使用命令“info balloon”查看Win 7客户机内存,显示实际内存为修改后的512MB,如图4-35所示。

图4-35 在QEMU monitor中更改客户机内存

然后,在Win 7虚拟机中,再次查看“任务管理器”,发现在宿主机更改其内存后,Win 7虚拟机中的物理内存总数并没有发生改变,但是看到它的可用内存已经从图4-34中的713使用量降低为图4-36中的222使用量。这减少的491MB的内存使用量即是balloon设备占用的,虽然Win 7虚拟机的内存总量没变,但是可用的内存使用量已经降低,也就是说balloon设备占用的491MB内存Win 7虚拟机是不能使用的,这时宿主机可以将这491MB的内存重新分配给其他进程,用于其他用途。

图4-36 修改后的Win 7虚拟机内存使用量

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈