Libvirt: 添加性能事件支持

https://blueprints.launchpad.net/nova/+spec/support-perf-event

此蓝图的目的是为 nova 添加支持性能事件的能力,以便为每个实例获取统计信息(例如 CPU 缓存使用情况)。这些性能事件数据将由 Ceilometer 收集。[1]

问题描述

性能事件是 Linux 的一项功能,它提供了一个框架,用于在硬件和软件级别分析性能事件。通过可测量事件列表,我们可以测量来自不同资源(如上下文切换、缓存未命中等)的事件,并为每个实例获取统计信息。

Perf 从 1.3.3 版本开始集成到 libvirt 中,现在支持获取 CPU 缓存,并且将添加更多事件类型。我们可以在 Nova 中启用 perf 支持。

用例

作为云运营商,他/她希望了解云中的实例占用哪些类型的资源,例如 CPU、内存、CPU 缓存、内存带宽等,以及实例使用的资源量。这些类型的监控数据可以从 Ceilometer 收集。有了这些监控数据,运营商可以进行一些分析,以确定对该实例最重要的资源是什么,并且他/她可以执行进一步的操作,例如迁移到其他主机,以提供更好的资源来满足客户的 SLA。

Ceilometer 规范要求 nova 具有 perf 支持。[1]_

提议的变更

添加新的 libvirt 驱动程序列表配置选项 enabled_perf_events,这是一个列表,用于指示 perf 事件类型,默认值为 []

在生成 XML 定义时添加缺失的元素到 libvirt 驱动程序中,以支持根据 enabled_perf_events 配置的 perf 事件。仅支持具有适当 Libvirt 版本的事件,如果 Libvirt 的版本太旧,则将被忽略。

例如,我们启用了 enabled_perf_events=[‘cmt’],则 XML 元素将如下所示

<perf>
  <event enable="yes" name="cmt"/>
</perf>

Libvirt 需要在 XML 中使用此标志来初始化文件描述符,然后我们才能获取统计信息,在调用 Libvirt API 之前不会开始轮询。

在此规范中,我们不建议 nova 自身轮询统计数据,Ceilometer 可以从这种配置中受益。

备选方案

另一种解决方案是使用 flavor 的 extra_spec,通过实例启用 perf 事件,例如添加 ‘perf:event=cmt,…’,并将聚合添加到主机。从运营商的角度来看,启用它很复杂。

不使用 flavor 的 extra_spec 的原因是这不是用户应该关心的规范,它不是 VM 的功能,而是平台可以为我们提供的东西,因此如果平台可以为我们提供此功能,我们可以从中受益。用户希望实例调度到可以进行性能监控的主机上是没有意义的。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

不会有性能影响。启用 perf 事件时,操作只是将计数写入内存,并且影响可以忽略不计,特别是我们仅为 VM 启用事件(而不是为每个进程)。

不需要任何额外的 API 调用。

其他部署者影响

开发人员影响

实现

负责人

主要负责人

Eli Qiao <liyong.qiao@intel.com>

其他贡献者

qiaowei-ren <qiaowei.ren@intel.com>

工作项

主要工作项目是

  • 添加新的 libvirt 驱动程序配置选项。

  • 如果 libvirt 的版本足够新,可以支持 XML 中的标志,则在 libvirt 驱动程序配置中指定一个或多个 perf 事件时,更新 libvirt guest XML 配置。

依赖项

此规范将依赖于以下库

  • libvirt >= 1.3.3

测试

  • 添加单元测试用例以验证 guest XML 是否已正确更新。

文档影响

  • 添加对新添加的 libvirt 配置的说明。

参考资料

历史

修订

发布名称

描述

Newton

介绍。