通用 PCI 资源

https://bugs.launchpad.net/ironic-inspector/+bug/1580893

目前,iLO 驱动程序通过硬件检测(即 pci_gpu_devices 1)设置 GPU 资源能力。 在此规范中,我们希望提出一种更通用的硬件检测和更新节点能力的方法。 能力的名称以及 PCI 供应商和设备 ID 列表将由部署者配置。 创建相应的 flavor 后,nova 调度器可以根据 flavor 的 extra_specs 过滤节点,以支持各种 PCI 设备类型。

问题描述

某些工作负载可能需要特定硬件的存在。 例如,一个镜像 flavor 可能需要一个最小的硬件加速器集合才能有效运行。 另一个 flavor 可能需要不同数量的不同加速器。 HP iLO 驱动程序支持使用存在的 GPU 数量更新能力列表,这表明该功能对于使用特定硬件的客户来说有需求。 对各种硬件的更广泛支持也有需求,以适应进入市场的新的解决方案 2

提议的变更

建议的更改是在 ironic-python-agent inspector 模块中实现一个 PCI 设备收集器,它会将完整的 PCI 设备列表返回给 ironic inspector。

该列表将包含包含 vendor_id 和 product_id 字段的字典

hw_info['pci_devices'] = [{'vendor_id': '8086', 'product_id': '0412'},
                          {'vendor_id': '8086', 'product_id': '2955'}]

更改的第二部分是编写一个 ironic inspector 插件,它使用配置的属性更新节点,供 nova 调度器使用。

ironic-inspector 的配置将包括一个能力名称列表及其对应的供应商和设备 ID。 每个定义的 capability 的行为方式将与 iLO 驱动程序中的 pci_gpu_devices capability 相同。

配置选项将与 nova 中的 pci_alias PCI 直通配置选项相同 3

pci_alias={"vendor_id":"8086", "product_id":"1520", "name":"pci_gpu"}

可以通过在单独的配置行上分隔每个 pci_alias 来配置多个 pci_alias

pci_alias={"vendor_id":"8086", "product_id":"0412", "name":"pci_gpu"}
pci_alias={"vendor_id":"8086", "product_id":"2955", "name":"pci_vca"}

可以将多个 vendor/product ID 映射到同一个名称。 如果操作员确定它们执行相同的功能,则可以使用此方法。

然后 nova 调度器读取这些 capability,并通过与 flavor 的 extra_specs 匹配来用于过滤。4

备选方案

一种替代方案是使用 iLO 驱动程序,它支持 pci_gpu_devices extra capability,但不支持其他 PCI 设备。 另一种替代方案是手动更新节点 capability,而无需使用 ironic-inspector。 如果新硬件的所有实例都以相同的方式配置,这可能是一个有效的解决方案。

实现

负责人

主要负责人

xek

其他贡献者

szymon-borkowski

工作项

  • 创建一个用于列出 PCI 设备的工具模块

  • 在 ironic-python-agent inspector 模块中实现 PCI 设备收集器

  • 实现一个 ironic inspector 插件,它使用配置的 PCI 资源能力更新节点属性,供 nova 调度器使用

  • 记录新功能