启用 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 版本和客户机驱动程序兼容性。

文档影响

  1. 默认情况下,此功能已启用,‘mem_stats_period_seconds’=10。如果您想更改统计周期,请修改 nova.conf。

  2. ‘mem_stats_period_seconds’ 是内存使用情况统计周期的秒数。

  3. 如果您设置 mem_stats_period_seconds<=0,则将禁用内存统计信息,默认情况下 mem_stats_period_seconds=10。

此蓝图只是将统计周期添加到内存气球设备,这不足以保证此功能有效,因为您需要满足 Dependencies 部分的要求,并且需要处理 API ‘virDomainMemoryStats’ 调用返回无数据的情况(此 bp 的范围之外)。

参考资料