virtio balloon
驱动即内存气泡
,位于guest中复杂回收和释放内存的virtio设备,即可以用来动态调整VM的内存
介绍
virtio balloon
为虚拟机提供弹性内存管理机制
说明:
virtio balloon
和内存大页互斥,大页开启则 balloon 实现
- 每一个虚拟机只能配置一个 balloon 设备
原理
host 可以通过虚拟机(VM)将部分内存归还给host实现从虚拟机(VM)中回收内存,通过标记 内存页面
实现:
inflating balloon
:在虚拟机中申请内存,然后将申请的内存通知给qemu,然后qemu侧再将内存释放掉
deflating balloon
:在虚拟机中释放内存,虚拟机(VM)从 host 获取更多内存
使用
启动 KVM 虚拟机 kvm 命令:
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0×4
<devices>
<memballoon model='virtio'>
<alias name='balloon0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
<stats period='10'/>
</memballoon>
</devices>
Linux 虚拟机检测
modinfo virtio-balloon
安装
- Linux 系统默认集成在
virtio
中
- Windows 系统需要安装 VirtIO 驱动程序 程序,需要运行
BLNSVR.exe
程序
libvirt
通过如下配置内存信息:
<memory unit='GiB'>2</memory>
<currentMemory unit='GiB'>1</currentMemory>
memory
最大内存
currentMemory
当前申请的内存
更新
# 关闭VM,更新最大内存为 3GiB
virsh setmaxmem --domain $VM --size 3G --config
# 更新分配的内存 currentMemory
virsh setmem --domain $VM --size 1500M --current
# 查看当前的内存
$ virsh dominfo $VM
Max memory: 2097152 KiB
Used memory: 2097152 KiBB
$ virsh dommemstat --domain $VM
virsh dommemstat --domain $VM --period 5
修改后,会将更新频率写入 xml 文件中,如下:
<memballoon model='virtio'>
<stats period='5'/>
</memballoon>
FaQ
2021-08-17 18:23:55.470 2092953 WARNING ceilometer.compute.pollsters.memory [-] Cannot inspect data of MemoryUsagePollster for ba5020d0-71b8-11ec-849a-005056388862, non-fatal reason: Failed to inspect memory usage of instance <name=instance-0001f7ad, id=ba5020d0-71b8-11ec-849a-005056388862>, can not get info from libvirt.
ceilometer entry_points.txt
配置指定虚拟机内存 memory.usage
通过调用 virtio_balloon 实现,若虚拟机没有安装 virtio_balloon 驱动,libvirt 是无法获取内存信息的
[ceilometer.poll.compute]
memory.usage = ceilometer.compute.pollsters.memory:MemoryUsagePollster