Cyborg Xilinx FPGA 驱动器提案¶
https://blueprints.launchpad.net/openstack-cyborg/+spec/add-xilinx-fpga-driver
本文档提出为 Cyborg 提供 Xilinx FPGA 驱动器的初始设计。
问题描述¶
我们希望使用 Cyborg 管理 Xilinx FPGA 设备,但目前没有相应的驱动程序。因此,我们希望添加 Xilinx FPGA 驱动程序,以支持 Cyborg 管理 Xilinx FPGA 设备。
用例¶
作为操作员,我希望 Cyborg agent 能够周期性地启动或进行资源检查。Cyborg Xilinx FPGA 驱动程序应提供
discover()函数来枚举 Xilinx FPGA 设备的列表,并报告主机上所有可用 Xilinx FPGA 加速器的详细信息,例如 PID(产品 ID)、VID(供应商 ID)和设备。作为用户,我希望启动一个带有 Xilinx FPGA 设备的虚拟机。Cyborg 应该能够管理这种类型的加速资源,将其分配给虚拟机(绑定)并对其进行编程。
提议的变更¶
Xilinx FPGA 是基于 PCIe 的平台,由物理分区组成,称为 Shell 和 User。Shell 具有两个物理功能:特权 PF0,也称为 mgmt pf,和非特权 PF1,也称为 user pf。Shell 为 Alveo 平台提供基本基础设施。用户分区(也称为 PR-Region)包含用户编译的二进制文件。[1]_
在安装 Xilinx 驱动程序 xrt 后才能显示用户 PF。并且用户 PF 和 mgmt PF 的 PCI 地址之间的区别在于 func 字段。例如,mgmt PF 的 PCI 地址为 ‘0000:3b:00.0’,而 user PF 的地址为 ‘0000:3b:00.1’。func 字段增加 1。因此,可以通过 mgmt PF 的地址计算 user PF 的 PCI 地址。此计算规则也适用于 ‘product’。
根据以上描述,Xilinx FPGA 驱动程序应实现以下方法
discover():此函数通过执行lspci命令来工作,并报告设备的原始信息样本如下[ { "vendor": "10ee", "product": "5000", "device": "0000:3b:00.0" } ]
在上面的示例中,“5000” 是 mgmt PF。因此,驱动程序应为每个设备添加三个特性,包括 “CUSTOM_FPGA_<VENDOR_ID>”、“CUSTOM_FPGA_PRODUCT_ID_<ID>”。此外,驱动程序应仅为该设备在 deployable 表中创建记录。目前,只有当 mgmt PF 和 user PF 都绑定到一个虚拟机时,最终用户才能编程 FPGA 设备。因此,绑定到虚拟机时有两个 attach handle。
program():此函数通过执行xbmgmt program命令来工作,该命令包含在 XRT 安装包中。[2]_ 此外,应在绑定到虚拟机之前调用此函数进行预编程。
下面是描述 FPGA 设备的对象的示例,符合 Cyborg 数据库模式和 Placement 数据模型。
Hardware Driver objects Placement data model
| | |
1 FPGA 1 devices |
| | |
| 1 deployable ---> resource_provider
| | ---> parent resource_provider: compute node
| | |
1 FPGA 2 attach_handle ---> inventories(total:1)
备选方案¶
无
数据模型影响¶
Xilinx FPGA 驱动程序不会触及数据模型。Cyborg Agent 可以在 discover、bind 和 unbind 操作期间调用 Xilinx FPGA 驱动程序来更新数据库。
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
将新的驱动程序 xilinx_fpga_driver 添加到 agent 的 enabled_drivers 中。
开发者影响¶
无
实现¶
负责人¶
- 主要负责人
Eric Xie
工作项¶
在 Cyborg 中实现 Xilinx FPGA 驱动程序
添加相关的测试用例。
依赖项¶
无
测试¶
将添加单元测试来测试此驱动程序。
文档影响¶
在 Cyborg 项目中记录 Xilinx FPGA 驱动程序。在 Cyborg wiki 中提供测试报告
参考资料¶
历史记录¶
发布 |
描述 |
|---|---|
瑜伽 |
引入 |