Cyborg FPGA Bitstream 元数据规范

蓝图网址: https://blueprints.launchpad.net/openstack-cyborg/+spec/cyborg-fpga-bitstream-metadata-spec

本文档提出了用于比特流管理的 FPGA Bitstream 元数据规范

问题描述

现场可编程门阵列 (FPGA) 是一种集成电路,设计为在制造后由客户或设计者进行配置。它们的优势在于,对于某些应用,由于其并行性和在给定工艺中使用的门数量的优化,它们有时会显著更快。因此,在云中使用 FPGA 进行应用加速变得越来越受欢迎。遇到的一个问题是,在比特流管理方面,很难将比特流映射到合适的 FPGA 板或可重构区域。本提案的目的是提供一组标准化的元数据,这些元数据应与比特流存储一起封装。

用例

当用户请求使用云环境中的特定功能重新编程 FPGA 板时,他或她需要从存储中检索合适的比特流。为了找到合适的比特流,需要根据元数据中定义的某些属性对比特流进行分类。

提议的变更

对于每个元数据,它将以键值对的形式存储在此 Glance 的 image_properties 中:列 [name] 包含键,而列 [value] 包含值。注意:不需要更改数据库模式。本文档是指导如何使用现有的 Glance 表格来存储 FPGA 比特流的标准化文档。

鉴于此,Cyborg 将标准化键约定如下

name

value

nullable

description

bs-name

aes-128

False

比特流名称(非唯一)

bs-uuid

{uuid}

False

在综合期间生成的 uuid

vendor

Xilinx

False

卡的供应商

board

KU115

False

用于加载此比特流的板类型

shell_id

{uuid}

True

bs 所需的 shell bs-uuid

version

1.0

False

设备版本号

driver

SDX

True

此比特流的驱动程序类型

driver_ver

1.0

False

驱动程序版本

driver_path

/path/

False

检索驱动程序二进制文件的位置

topology

{CLOB}

False

功能拓扑

description

desc

True

描述

region_uuid

{uuid}

True

目标区域类型的 uuid

function_uuid

{uuid}

False

bs 函数类型的 uuid

function_name

nic-40

True

此比特流的功能名称

以下是关于一些定义的键的详细信息。

[shell_id] 此字段是可选的。如果加载此 PR 比特流需要 shell 镜像,则此字段指定 shell 比特流的 uuid。如果此字段为空,则表示此比特流是 shell 比特流。

[driver] 这指定了要安装的一组脚本/二进制文件的路径,以便使用加载的比特流(例如,insmod 一些内核驱动程序/git 克隆一些远程源代码等)

[region_uuid] 此值指定加载此比特流所需的区域类型。此类型是在 shell 比特流综合期间生成的 uuid。

[function_uuid] 此值指定此比特流的功能类型。它有助于上游调度器将特征与合适的比特流匹配。

[topology] 此字段描述了比特流加载到 FPGA 上的功能结构拓扑。特别是,它使用 JSON 格式来可视化物理功能、虚拟功能之间的关联方式。解释此信息并为 Cyborg Agent 准备适当报告是供应商驱动程序的责任。例如

{
  "pf_num": 2,
  "vf_num": 2,
  "pf": [
    {
      "name": "pf_1",
      "capability": "",
      "kpi": "",
      "pci_offset": "0",
      "vf": [
        {
          "name": "vf_1",
          "pci_offset": "1"
        }
      ]
    },
    {
      "name": "pf_2",
      "capability": "",
      "kpi": "",
      "pci_offset": "2",
      "vf": [
        {
          "name": "vf_2",
          "pci_offset": "3"
        }
      ]
    }
  ]
}

此 JSON 模板指导 Cyborg Agent 在 Cyborg 中填充 vf/pf/deployable 列表。

鉴于上述 JSON 拓扑,Cyborg Driver 应该能够将加速器结构解释如下

              =============
              =Accelerator=
              =============
                    |
              ============
              =Deployable=
              ============
                   /\
                  /  \
===================  ===================
= Deployable pf_1 =  = Deployable pf_2 =
===================  ===================
               |        |
               |        |
===================  ===================
= Deployable vf_1 =  = Deployable vf_2 =
===================  ===================

注意:1. 拓扑不是必须填写的,只要供应商驱动程序可以在比特流加载后确定要报告的资源即可。 2. 此处提供的 JSON 仅为参考模板。它不必以 PCI 为中心等,并且供应商可以根据其产品定义它。 3. 应在图中创建一个根 deployable。 此外,这里的 pfs 和 vfs 都是 deployable 的实例。请参阅有关 physical_function 和 virtual_function 的 DB 对象规范。

最后,所有 FPGA 比特流都应在 Glance 中标记为“FPGA”。这有助于在过滤期间区分正常的 VM 镜像和比特流镜像。

备选方案

数据模型影响

RPC API 影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发者影响

加速器供应商应在 program() api 中实现逻辑以填充加载的拓扑

实现

负责人

主要负责人

李刘 <liliu1@huawei.com> 冯少河 <shaohe.feng@intel.com>

工作项

  • 提供比特流的示例 JSON 格式

  • 提供供应商驱动程序的示例实现

依赖项

测试

文档影响

参考资料

历史记录

修订版

发布名称

描述

Rocky

引入