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 |
引入 |