通用 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 调度器使用
记录新功能
参考资料¶
- 1
https://docs.openstack.org/developer/ironic/drivers/ilo.html#hardware-inspection-support
- 2
http://ark.intel.com/products/87380/Intel-Visual-Compute-Accelerator
- 3
https://wiki.openstack.org/wiki/Pci_passthrough#Configure_the_nova
- 4
https://docs.openstack.org/developer/ironic/deploy/inspection.html#capabilities-discovery