向放置服务报告 CPU 特性

https://blueprints.launchpad.net/nova/+spec/report-cpu-features-as-traits

放置服务已经支持 Traits。所有计算节点的capabilities都应该使用 Traits API 报告给放置服务。本规范建议使用 Traits API 向放置服务报告计算节点的 CPU 特性。

问题描述

目前 Nova 支持基于计算节点的 CPU 特性调度实例,但目前还不够完善。

  • 所有虚拟驱动程序中 CPU 特性的命名不一致,这导致操作员的配置不一致。

  • 每个计算节点的 CPU 特性存储在 compute_nodes DB 表的 JSON-BLOB 中。因此,无法有效地查询具有特定 CPU 特性的计算节点。

  • Flavor extra spec capabilities 将 CPU 特性和其他内容混合在一起,并且依赖于虚拟驱动程序。

用例

  • 最终用户期望无论云使用哪种虚拟驱动程序,CPU 特性的命名都应该是标准且一致的。

  • 最终用户期望以一致的方式请求 CPU 特性的capabilities。

提议的变更

建议计算节点应使用 Traits API 将 CPU 特性报告给放置服务。CPU 特性应映射到 os-traits 库中定义的 CPU traits。

然后管理员可以在 extra spec traits 中为每个 flavor 定义所需的 traits

openstack flavor set 1 --property trait:HW_CPU_X86_AVX=required --property trait:HW_CPU_X86_AVX2=required

以上命令将两个 CPU 特性设置为 flavor 所需。这意味着启动该 flavor 的任何服务器都将被调度到具有 CPU 特性 avxavx2 的计算节点。

备选方案

如果只是保留基于 CPU 特性调度实例的旧方法,那么云互操作性上没有任何改进。

数据模型影响

REST API 影响

没有 API 变更,并将原始 CPU 特性报告保留到 DB 表 compute_nodes 中,以保持 /os-hypervisors API 的向后兼容性。

安全影响

通知影响

其他最终用户影响

最终用户应使用 flavor 中的 extra spec traits 而不是 extra spec capabilities:cpu_info:features 来定义所需的 CPU 特性。

性能影响

其他部署者影响

一旦所有虚拟驱动程序都使用 traits 一致地报告 CPU 特性,就可以弃用并删除 ComputeCapabilitiesFilter

开发人员影响

升级影响

实现

每个虚拟驱动程序应将 CPU traits 附加到计算节点的资源提供程序中,方法是使用 update_provider_tree() 方法。

Libvirt

配置选项 CONF.libvirt.cpu_modeCONF.libvirt.cpu_model 可以更改暴露给 guest 的 CPU 特性。libvirt 虚拟驱动程序应仅返回可供 guest 使用的 CPU 特性。

报告的 CPU 特性基于 guest CPU 模型。CPU 模型将由下表确定

+-----------------------+------------------------+------------------+
| CONF.libvirt.cpu_mode | CONF.libvirt.cpu_model | Guest CPU model  |
+-----------------------+------------------------+------------------+
| none                  | N/A                    | qemu64           |
| host-model            | N/A                    | host cpu model   |
| host-passthrough      | N/A                    | host cpu model   |
| custom                | custom cpu model       | custom cpu model |
+-----------------------+------------------------+------------------+

对于 libvirt 虚拟驱动程序,可以使用 virConnectBaselineCPU libvirt API 调用来查询 CPU 模型并将模型转换为 CPU 特性。其他虚拟驱动程序可以使用其虚拟 API 中的类似调用来确定 CPU 特性。

其他虚拟驱动程序没有相同的配置。对于其他虚拟驱动程序,它们将报告 CPU traits,方式与当前相同。

负责人

主要负责人

Alex Xu <hejie.xu@intel.com>

其他贡献者

Lei Zhang <lei.a.zhang@intel.com>

工作项

  • 实现一个接口,该接口返回每个虚拟驱动程序中 CPU 特性的 traits 列表。

  • update_provider_tree() 方法中实现将 CPU traits 报告给计算节点资源提供程序。

依赖项

N/A

测试

需要相关的单元测试和功能测试。

文档影响

在管理员指南中解释如何使用 traits 定义所需的 CPU 特性。

参考资料

历史

修订版

发布名称

描述

Rocky

引入