Nova 中将主机内存带宽报告为指标

https://blueprints.launchpad.net/nova/+spec/memory-bw

本文档提出将主机内存带宽作为主机指标引入。内存带宽是确定虚拟机性能瓶颈的重要因素,并且可以用于基于 NUMA 的更好放置。

使用 Linux 平台接口,如 linux perf APIs,nova-compute 应该能够暴露每个 NUMA 节点的主机内存带宽利用率。该内存带宽可以通过 Openstack 暴露为监控指标来利用。

这将遵循与现有 CPU 监控器(cpu_monitor.py)类似的方法。

问题描述

针对高 CPU/内存密集型工作负载进行优化可能具有挑战性。这适用于运行 Redis/Hadoop 等工作负载。主机内存带宽利用率数据是表示内存总线过载的关键指标,可以通过 Linux Perf APIs 暴露。然后,该指标可用于更好地放置/优化高 CPU/内存密集型工作负载。

用例

  • 通过添加 BaseResourceMonitor 的新子类来获取内存带宽统计数据作为指标数据。

项目优先级

提议的变更

性能协同飞行员 (PCP) 是一种系统性能和分析框架,适用于大多数流行的发行版。linux perf APIs 通过 PCP 工具调用。PCPD 守护程序可用于获取/提取每个 NUMA 节点上的 Nest/Uncore 内存 PMU 计数器的值。

PCP 提供将在 nova 的 openstack 监控代码中调用的 python 绑定,以获取所需的内存带宽利用率值。

预计的更改将在以下位置进行

  • 扩展资源监控框架以实现内存带宽利用率的可选监控器,与 CPU 监控器类似。

  • 在 virt 驱动程序父类中定义两种方法,并在 livirt 驱动程序中实现它们

    • get_max_memory_bw: 返回每个 NUMA 节点的最大内存带宽。

    • get_memory_bw_counter_agg: 返回与每个 NUMA 节点的内存带宽相关的聚合计数器值。

    Nova 将计算两次调用之间聚合计数器值的差异并计算速率。此速率将与最大带宽值进行比较以获得利用率。get_max_memory_bw 仅在监控器初始化期间调用一次。

    速率的表示单位将与从计数器获得的值保持一致。

  • 引入 nova 对象模型表示数据。

备选方案

另一种方法是直接调用 perf APIs,但这会引入平台特定的依赖关系。PMU 计数器名称和推导内存带宽的数学公式在不同平台和硬件类型之间会有所不同。PCP 将弥合这一差距。

数据模型影响

REST API 影响

安全影响

无。

通知影响

其他最终用户影响

性能影响

性能影响可以忽略不计,因为数据由硬件聚合并通过 PCP 访问。Openstack 将每分钟调用此 API 一次,并可以选择增加间隔。

其他部署者影响

应将以下软件包添加到系统中

  • pcp

  • python-pcp

开发人员影响

实现

负责人

主要负责人

Sudipta Biswas sbiswas7

其他负责人

Pradipta Banerjee bpradipt

工作项

  1. 使用 pcp python 绑定获取内存带宽利用率。

  2. 在监控代码中执行数据采样。

  3. 创建指标插件以采样内存带宽数据。

依赖项

测试

这些修改将通过单元测试来验证。

文档影响

参考资料

http://pcp.io/