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=1
    trait:CUSTOM_HPTS_ZTE=required
  • FPGA 请求时编程的 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 属性的使用情况,供操作员使用。

参考资料

1(1,2)

设备配置文件

2

标准加速器名称

3

设备配置文件加速器键

4

启用 Nova 调度器中使用嵌套资源提供者

历史记录

可选部分,旨在每次更新规范时描述新的设计、API 或任何数据库模式更新。对于让读者了解一段时间内发生的事情很有用。

修订

发布名称

描述

Rocky

作为 cyborg-nova-sched.rst 引入

Stein

更新

Train

更新