qemu热迁移后内存占用突增问题

1.问题描述

虚拟机配置了memoryBacking=memfd的情况下,热迁移虚拟机后,在目的节点 qemu-kvm 进程占用 rss 会突增很多。

如果去掉这个配置没这个现象。

<memoryBacking>
  <source type='memfd'/>
</memoryBacking>

2.问题现象

2.1 不配置 memoryBacking=memfd的情况
  • 热迁移前 rss 占用如下:

在这里插入图片描述

  • 热迁移后 rss 占用如下:

在这里插入图片描述
可以看到 rss 占用还有所减少(减小原因是迁移过程中对 零页面 进行了lazy 处理),迁移前后变化不大, 多次反复迁移rss占用基本维持在 400M 左右。

2.2 配置 memoryBacking=memfd的情况

在这里插入图片描述

  • 热迁移前 rss 占用如下:
    在这里插入图片描述
  • 热迁移后 rss 占用如下:

在这里插入图片描述
可以看到 rss 占用突然 从 468M 增到 1087M, 多次反复迁移rss占用基本维持在 1080M 左右。

3.问题分析

迁移前 memfd 占用如下:
在这里插入图片描述
迁移后 memfd 占用如下:

在这里插入图片描述
可以看出,迁移前后内存突增基本是来自memfd的 rss 占用

如下图,qemu代码中中对memfd 申请的内存,都是非匿名的:

在这里插入图片描述

如下图代码,是qemu迁移时候,对全零页的处理,对于 memfd 申请的内存,调用 buffer_is_zero() 函数会出发缺页异常,因而会进行内存分配。

在这里插入图片描述

4.结论

使用了memfd的虚拟机,热迁移后qemu内存rss占用会增大到虚拟机设置大小,原因是热迁移时候会读取整个虚拟机内存页面,对于memfd内存,读操作会分配物理页面,而mmap分配的普通匿名内存则不会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值