
内存 balloon 是指在虚拟化环境下，宿主机可以将分配给虚机的部分内存进行回收给 其他虚机或其他进程 使用的一种技术，目前 kvm，xen，vmware 等都对 balloon 技术提供支持，这里只介绍 kvm 下的 balloon 技术。

气球 中的内存是指 host 中可以使用的内存，给气球充气，就是讲 guest 中不使用的部分内存放到气球中让 host 中的进程使用。给气球放气，就是将气球中的内存释放给 guest 使用。

## qemu 中 balloon 的使用

```conf
# 在 qemu 的配置文件中添加

[device "balloon0"]
driver = "virtio-balloon"
```

启动虚拟机，我们只开了 1G 内存

在虚拟机内部看到有 1G 内存，符合预期，我们调整 balloon 的大小

观察到 balloon 的大小被调整到 512M，虚拟机内部的内存也被调整到 512M，符合预期

在宿主机上 虚拟机进程占用的 内存也相应减少了

![image](./files/image1.png)

![image](./files/20250426102501.png)

![image](./files/20250426130021.png)

![image](./files/20250426130108.png)

![image](./files/20250426102939.png)

## balloon 可以做什么

防止 host 出现 OOM 如果宿主机有 8G 内存，开了 4 个 2G 的虚拟机，但是 每个虚拟机并不是一直都会占用 2G 内存，在宿主机内存占用过高时，可以动态调整每个虚拟机的内存大小，防止 host 出现 OOM。

## 参考

1. <https://kvm-forum.qemu.org/2020/KVM%20Forum%202020%20Virtio-%28balloon%20pmem%20mem%29%20Managing%20Guest%20Memory.pdf>

