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 |
介绍。 |