Virtio Balloon 虚拟机内存管理

发布时间: 更新时间: 总字数:576 阅读时间:2m 作者: IP上海 分享 网址

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
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数