Cyborg-Nova 放置交互¶
https://blueprints.launchpad.net/openstack-cyborg/+spec/cyborg-nova-placement
本规范描述了 Cyborg 在 Placement 中表示设备和加速器的机制。
本规范适用于所有加速器,包括 GPU、基于 ASIC 的设备等。由于 FPGA 比其他设备有更多需要考虑的方面,因此某些部分重点介绍了 FPGA 特定的因素。
问题描述¶
Cyborg 应在 Placement 中表示设备和加速器,以便 Nova 可以调度具有加速器的实例。
虽然 PCI Express 在数据中心中已根深蒂固,但设备可能由 PCI 总线-设备-功能以外的某些标识符标识,并且加速器可能通过 PCI 功能以外的连接句柄连接到实例。因此,Cyborg 不应在 Placement 中表示 PCI 功能。
术语¶
加速器:可以分配给实例以卸载特定功能的单元。对于非 FPGA 设备,它是设备本身或其虚拟化版本(例如 vGPU)。对于 FPGA,加速器可以是整个设备、设备内的区域或功能。
位流:FPGA 镜像,通常是二进制文件,可能包含特定于供应商的元数据。位流可以实现一个或多个功能。
功能:特定的功能,例如矩阵乘法或视频转码,通常表示为字符串或 UUID。此术语可用于具有多功能的设备,包括 FPGA 和其他固定功能硬件,例如 Intel QuickAssist。
区域:FPGA 的一部分,可以在不干扰该 FPGA 其他部分的情况下进行编程。如果 FPGA 不支持部分重新配置,则整个设备构成一个区域。区域可以实现一个或多个功能。
背景¶
Cyborg 设备具有一个或多个名为 deployable 的组件,每个组件包含一个或多个加速器。设备具有一个管理接口,其地址是控制路径标识符:对于 SR-IOV 设备,这通常是 PCI 物理功能 (PF)。每个 deployable 具有一个或多个连接句柄,通常为 deployable 中的每个加速器资源提供一个。连接句柄表示将加速器与实例关联的对象:对于 SR-IOV 设备,这通常是 PCI 虚拟功能 (VF)。
设备可能具有与 Nova 或 Placement 无关的组件,例如闪存或 BMC。这些组件可能具有属性,例如闪存容量或 BMC 固件版本。
以下图示说明了这一点
Control Path Identifier
+----+
| |
+-+----+--------------------------------------+
| |
| Attach Handles Attach Handles |
| +--+ +--+ +--+ +--+ |
| | | | | | | | | |
| +-+--+----+--+-+ +-+--+----+--+-+ |
| | ACC1 ACC2 | | ACC1 ACC2 | |
| +--------------+ +--------------+ |
| Deployable 1 Deployable 2 |
| |
+---------------------------------------------+
用例¶
操作员应能够使用 Cyborg 公布的资源、特征和属性,为以下定义的任何或所有租户用例定义设备配置文件。租户(用户)应能够指定实例所需的加速器,并使用操作员定义的设备配置文件。
租户角色的用例如下
设备即服务 (DaaS):用户请求一个她将自行管理的 deployable。这适用于了解设备特定细节的强大用户。示例:GPU 用户请求可以支持特定驱动程序版本(们)的特定 GPU 型号。
FPGA 变体:用户选择需要编程到设备(或区域)的 bitstream。为了解决潜在的安全问题,我们定义了三种变体,前两种将 bitstream 编程委托给 Cyborg 以减轻某些风险
请求时编程:设备配置文件指定一个 bitstream。Cyborg 在实例启动之前应用 bitstream。
运行时编程:实例可以动态请求一个或多个 bitstream。Cyborg 接收请求并执行编程。(此用例可能不会在 Train 中解决。)
加速功能即服务 (AFaaS):用户请求需要卸载的功能(例如 ipsec)或算法。应将包含该功能的加速器分配给实例。
这不需要对设备或 bitstream 的详细了解,因此可以扩大用户范围。
操作员可以通过两种方式满足此用例
预编程:不允许编排修改任何功能,原因如下
仅提供固定功能硬件。(例如,ASIC。)
操作简单性。
通过通过审核的过程离线进行所有编程来确保租户的编程安全。
编排编程:对于 FPGA,允许编排根据需要进行编程,以最大限度地提高灵活性和资源可用性。
操作员必须能够在同一集群中提供设备即服务和加速功能即服务。
提议的变更¶
表示¶
Cyborg 将为设备类型表示一个通用加速器,作为该类型的标准或自定义资源类 (RC)。已经为 GPU 和 FPGA 提出了标准 RC:PGPU 和 FPGA 2。对于其他设备,Cyborg 将创建形式为 CUSTOM_ACCELERATOR_<device-type> 的自定义 RC。例如,CUSTOM_ACCELERATOR_AICHIP。为每种设备类型使用不同的 RC 有助于为不同的设备类型定义单独的配额。
请注意,加速器在 Cyborg 或 Placement 中都不是对象。它是一种虚拟资源,表示为 Placement 中的 RP 库存。
将来,可能还有其他资源类。例如,可能存在一个用于设备本地内存的 RC(即仅对设备可用的内存,通常以 PCIe 板上的 DDR、QDR 或高带宽内存的形式存在,以及该设备)。
由于设备可能具有与 Placement 或 Nova 无关的组件(参见背景部分),Cyborg 不直接在 Placement 中表示设备。
每个 deployable 在 Placement 中表示为一个资源提供者 (RP)。该 deployable 中的每个加速器表示为相应 RP 的库存。
Cyborg 将根据需要将设备系列特征与每个 deployable 关联,形式为 CUSTOM_<device-type>_<vendor>_<family>。例如,CUSTOM_FPGA_INTEL_ARRIA10。这不是产品名称,而是设备系列名称,用于将实例镜像中的软件与设备系列匹配。
对于 FPGA,Cyborg 将将区域类型特征与每个区域(或如果不支持部分重新配置,则与 FPGA 本身)关联,形式为 CUSTOM_FPGA_REGION_<vendor>_<id-string>。例如,CUSTOM_FPGA_REGION_INTEL_<id-string>。这对于带有 FPGA 的设备即服务是必需的。
对于 FPGA,Cyborg 可以在区域编程时将函数类型特征与区域关联,形式为 CUSTOM_FPGA_FUNCTION_ID_<vendor>_<id-string>。例如,CUSTOM_FPGA_FUNCTION_ID_INTEL_<gzip-id>。这对于 AFaaS 用例是必需的。
除了上述内容之外,Cyborg 还会将 Cyborg 驱动程序为该 deployable 报告的额外自定义特征关联起来。
除了特征之外,用户对加速器的请求可能包含设备配置文件中的 Cyborg 特定属性。Nova 不会解释这些属性。它们在设备配置文件规范中说明 (3)。
设备配置文件中的用法¶
本节展示了操作员如何使用前一节中的 RC 和特征以及 Cyborg 特定属性,在设备配置文件中实现“用例”。
从 1 回顾,使用具有嵌入式设备配置文件的 flavor,或单独使用 flavor 和设备配置文件,可以使用 flavor 来请求创建具有加速器的实例。无论哪种情况,加速器规范都完全在设备配置文件中。
现在我们展示如何为各种用例定义设备配置文件。
一些通用的设备 DaaS 设备配置文件的示例
| resources:ACCELERATOR_GPU=1 | trait:CUSTOM_GPU_AMD_RADEON_R9=required
resources:CUSTOM_ACCELERATOR_HPTS=1trait:CUSTOM_HPTS_ZTE=requiredFPGA 请求时编程的 DaaS 设备配置文件示例
| resources:ACCELERATOR_FPGA=1 | trait:CUSTOM_FPGA_REGION_ID_INTEL_<id>=required | accel:bitstream_id=3AFB
FPGA 运行时编程的 DaaS 设备配置文件示例
| resources:CUSTOM_ACCELERATOR_FPGA=1 | trait:CUSTOM_FPGA_REGION_INTEL_<name>=required | accel:bitstream_at_runtime=required
预编程 FPGA 的 AFaaS 设备配置文件示例
| resources:CUSTOM_ACCELERATOR_FPGA=1 | trait:CUSTOM_FPGA_INTEL_ARRIA10=required | trait:CUSTOM_FPGA_FUNCTION_ID_INTEL_<gzip-id-string>=required
由于需要函数特征,如果没有任何具有该特征的可用加速器,则请求将失败。不会尝试重新编程另一个 FPGA 来获取该函数。
编排编程的 AFaaS 设备配置文件示例
| resources:CUSTOM_ACCELERATOR_FPGA=1 | trait:CUSTOM_FPGA_INTEL_ARRIA10=required | accel:function:CUSTOM_FPGA_FUNCTION_INTEL_<gzip-id-string>=required
未将函数指定为特征,因此 Nova 会忽略它。Placement 返回包含唯一声明特征的所有分配候选列表,即包含该 FPGA 设备型号的所有节点的列表。在绑定期间,Cyborg 会注意到所选设备 RP 是否实际具有请求的函数,如果不是,将启动重新编程。
注意:当 Nova 支持首选特征时,我们可以使用它而不是“function”关键字在额外的规范中。
注意:为了让 Cyborg 获取此功能的 bitstream,假设操作员已将功能 ID 配置为 Glance 中 bitstream 镜像的属性。
另一个用于 AFaaS 编排编程的设备配置文件示例,为了便于使用,按名称引用函数
| resources:CUSTOM_ACCELERATOR_FPGA=1 | trait:CUSTOM_FPGA_INTEL_ARRIA10=required | accel:function_name:<string>=required
注意:这假定操作员已将功能名称配置为 Glance 中 bitstream 镜像的属性。FPGA 硬件预计不会公开功能名称,因此 Cyborg 不会将功能名称表示为特征。
备选方案¶
N/A
数据模型影响¶
Cyborg 需要进行以下更改。
不要将 PCI 功能作为 Nova 中的资源发布。而是发布 RC/RP 信息到 Nova,并在内部保留 RP-PCI 映射。
Cyborg 应将 RP/RC 和 PF/VF 与其内部 DB 中的 Deployable 关联(作为 deployable 属性表的一部分)。
驱动程序/代理接口需要报告设备/区域类型,以便可以创建 RC。
Deployables 表应跟踪哪个 RP 对应于每个 Deployable。
REST API 影响¶
Placement API 不需要更改。
Cyborg API 用于创建和使用设备配置文件在设备配置文件规范中说明 1。
Cyborg API 用于 Nova 在实例生成/更新工作流程期间使用,在其他地方说明。
安全影响¶
DaaS 运行时编程和直接编程的用例在解决安全问题之前不会被采用。
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
操作员必须根据 RC、特征和 Cyborg 属性定义设备配置文件。
开发者影响¶
当一个发布中的自定义特征在另一个发布中成为标准特征时,需要一个升级脚本来转换设备配置文件。
实现¶
负责人¶
无
工作项¶
描述此设备表示所需的代码更改在其他规范中说明。工作项目在这些规范中说明。
依赖项¶
测试¶
描述此设备表示所需的代码更改在其他规范中说明。测试要求在这些规范中说明。
文档影响¶
必须记录 RC、特征和 Cyborg 属性的使用情况,供操作员使用。
参考资料¶
历史记录¶
可选部分,旨在每次更新规范时描述新的设计、API 或任何数据库模式更新。对于让读者了解一段时间内发生的事情很有用。
发布名称 |
描述 |
|---|---|
Rocky |
作为 cyborg-nova-sched.rst 引入 |
Stein |
更新 |
Train |
更新 |