启用 qemu 内存气球统计信息¶
https://blueprints.launchpad.net/nova/+spec/enabled-qemu-memballoon-stats
我们可以从 libvirt API ‘virDomainMemoryStats’ 获取虚拟机内存统计信息,这有助于遥测模块(如 Ceilometer)收集虚拟机内存使用情况,但默认情况下 qemu 中的内存统计功能是禁用的,我们需要添加统计周期才能启用内存统计。
问题描述¶
默认情况下,qemu 中的内存统计功能是禁用的,我们需要添加统计周期才能启用内存统计,如下所示
<memballoon model='virtio'>
<stats period='10'/>
</memballoon>
在启动实例时,在 libvirt.xml 中添加 memballoon 设备统计周期。
实际的内存统计功能在 libvirt 1.1.1+ 和 qemu 1.5+ 上有效,并且需要支持该功能的客户机驱动程序,但使用内存统计周期启动实例不会导致在 libvirt 0.9.6+ 和 qemu 1.0+ 上失败。
有关 libvirt API ‘virDomainMemoryStats’ 的详细信息,请参阅 [1]。
有关 libvirt.xml 中的 memballoon 详细信息,请参阅 [2]。
启用内存统计信息的详细信息:[3]
提议的变更¶
将选项 ‘mem_stats_period_seconds’ 添加到 nova.conf(libvirt 部分)。
如果用户在 ‘mem_stats_period_seconds’ 大于 0 时启动实例,则启用 memballoon 设备的统计周期。‘mem_stats_period_seconds’ 是内存使用情况统计周期的秒数。默认情况下,mem_stats_period_seconds=10。
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
用户需要在镜像中准备合适的 balloon 驱动程序,特别是对于 Windows 客户机,大多数现代 Linux 系统都内置了它。在没有镜像 balloon 驱动程序的情况下启动实例也会成功,只是无法从 ‘virDomainMemoryStats’ API 获取客户机内存统计信息。
性能影响¶
无
其他部署者影响¶
在 nova.conf libvirt 部分添加一个新的选项 ‘mem_stats_period_seconds’。默认情况下,mem_stats_period_seconds=10,该统计功能已启用,‘mem_stats_period_seconds’ 是内存使用情况统计周期的秒数。如果 mem_stats_period_seconds <= 0,则禁用该功能。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
<kiwik-chenrui>
工作项¶
添加一个 LibvirtConfigMemoryBalloon 类,继承自 LibvirtConfigGuestDevice。
对 libvirt 驱动程序的 get_guest_config 方法进行更改,以在实例启动期间检查 nova.conf 中的选项 ‘mem_stats_period_seconds’。
如果 mem_stats_period_seconds>0,则设置实例中内存气球设备的统计周期。
依赖项¶
libvirt 1.1.1+
qemu 1.5+
支持内存气球统计信息的客户机驱动程序
测试¶
单元测试和 tempest 测试将验证此功能。将在当前 devstack 环境(libvirt0.9.8 和 qemu1.0.0)上验证兼容性,并使用 ‘mem_stats_period_seconds’ 启动实例。
内存统计信息在当前的 gate 环境中不起作用,有关详细信息,请参阅 Dependencies 部分。完整的测试需要确保 devstack VM gate 具有更新的 libvirt、qemu 版本和客户机驱动程序兼容性。
文档影响¶
默认情况下,此功能已启用,‘mem_stats_period_seconds’=10。如果您想更改统计周期,请修改 nova.conf。
‘mem_stats_period_seconds’ 是内存使用情况统计周期的秒数。
如果您设置 mem_stats_period_seconds<=0,则将禁用内存统计信息,默认情况下 mem_stats_period_seconds=10。
此蓝图只是将统计周期添加到内存气球设备,这不足以保证此功能有效,因为您需要满足 Dependencies 部分的要求,并且需要处理 API ‘virDomainMemoryStats’ 调用返回无数据的情况(此 bp 的范围之外)。