从 CPU 型号列表中选择 CPU 型号

https://blueprints.launchpad.net/nova/+spec/cpu-model-selection

问题描述

在 libvirt virt 驱动中,目前我们使用 nova.conf 中的 cpu_model(当 cpu_mode 设置为 custom 时)来指定实例在此主机上应使用的 CPU 型号。 如果最终使用了一个 advanced CPU 型号,而你真正关心的只是一个较旧的特性标志,这可能会对实时迁移计算节点可用性产生影响。

用例

作为用户,我希望在一个支持特定 CPU 特性的主机上启动一个实例,并且该实例能够实时迁移到尽可能多的其他也支持该实例的主机。

提议的变更

cpu_model 替换为 cpu_models,这是一个主机支持的有序 CPU 型号列表。 预计该列表将按顺序排列,以便更常见和不太先进的 CPU 型号排在前面。 报告的 CPU 特性特征将是所有 CPU 型号特征的并集。

最终用户通过特性 [1] 指定他们需要的 CPU 特性。 如果 cpu_mode 设置为 custom,libvirt 驱动程序将选择 cpu_models 列表中的第一个 CPU 型号(如果指定了 cpu_model_extra_flags,则与 cpu_model_extra_flags 结合使用),该型号可以提供所需的特性特征。 这将更有可能使实例以后可以实时迁移。 如果未指定任何 CPU 特性特征,则实例将配置为使用列表中的第一个 CPU 型号。

例如,如果最终用户指定 CPU 特性 avx 和 avx2,如下所示

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

并且 cpu_models 配置如下

[libvirt]
cpu_mode = custom
cpu_models = Conroe,Penryn,Nehalem,Westmere,SandyBridge,IvyBridge,Haswell,Broadwell,Skylake-Client,Skylake-Server

那么 Haswell,第一个同时支持 avx 和 avx2 的 CPU 型号将被 libvirt 选择。

如果指定了 cpu_model_extra_flags,则应使用 host.compare_cpu() 将其与 cpu_models 列表中的每个 CPU 型号进行检查,以确保它与 cpu_models 列表中的所有型号兼容。 任何不兼容都应阻止计算主机启动,并且用户需要更正配置。

如果同时设置了 cpu_modelscpu_model,则将忽略 cpu_model

备选方案

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

可以忽略不计。

其他部署者影响

在配置选项帮助文本中添加一些信息,指示操作员应小心仅指定硬件可以完全支持的型号。 如果他们指定使用 qemu 模拟的 CPU 特性的型号,可能会导致性能下降。

开发人员影响

升级影响

操作员需要在升级后适当地设置配置选项。 如果未设置 cpu_models,则应将其默认设置为 cpu_model 的值。

实现

负责人

待定

工作项

  • 配置:定义 [libvirt]cpu_models[libvirt]cpu_model 已弃用。

  • Virt 驱动程序更改。

  • 添加/修改单元测试。

依赖项

测试

将添加单元测试。

文档影响

更新引入 [libvirt]cpu_models 的发布说明。

参考资料

历史

修订

发布名称

描述

Stein

引入