Cyborg FPGA 编程服务提案¶
蓝图 URL 尚未可用 https://blueprints.launchpad.net/openstack-cyborg/+spec/cyborg-fpga-programming-ability
本规范提出将编程服务添加到 Cyborg,以便用户动态更改云环境中 FPGA 上加载的功能。
问题描述¶
现场可编程门阵列 (FPGA) 是一种集成电路,设计为在制造后由客户或设计者进行配置。它们的优势在于,对于某些应用,由于其并行性和在特定过程使用的门数量方面达到最优,它们有时会显著更快。此外,FPGA 可以根据不同的应用进行重新编程。因此,在云中使用 FPGA 进行应用加速变得越来越受欢迎。作为异构加速器的管理框架,Cyborg 非常需要跟踪、部署和重新编程 FPGA 的功能。由于 FPGA 建模已经在另一份文档中提出,因此本规范将侧重于为 Cyborg 中的 FPGA 提出重新编程服务。
用例¶
在 OpenCL 的场景中,用户将加速器加载到 FPGA 上以用于其应用程序。当不同的应用程序在 OpenCL 环境中执行时,加速器会随着时间的推移而改变。实验室管理员手动登录到每个主机并更改 FPGA 配置将不可行。相反,通过重新编程服务,用户可以使用一组 REST API 来管理 FPGA 的功能。
类似地,在 FPGA 的维护过程中,管理员需要更新/迁移数据中心内的 FPGA 上的 shell 和 bitstream。Cyborg 重新编程服务将允许他们从集中控制台使用 API。
由于这只是编程 API 的纯提案,因此它不会关注上游用例/运行时是什么。这些细节将在需要时在单独的规范中说明。
提议的变更¶
首先,Cyborg 需要添加额外的 REST API 以允许其他人调用编程服务。REST API 应该具有以下格式
Url: {base_url}/fpga/{deployable_uuid}
Method: POST
URL Params:
None
Data Params:
glance_bitstream_uuid
Success Response:
POST:
Code: 200
Body: { "msg" : "bitstream has been loaded successfully"}
Error Response
Code: 401 UNAUTHORIZED
Body: { error : "Log in" }
OR
Code: 422 Unprocessable Entry
Body: { error : "User is not authorized to use the resource" }
Sample Call:
To program fpga resource with deployable_uuid=2864a139-c2cd-4f9f-abf3-44eb3f09b83c
with bitstream with uuid=0b955a5b-f5dd-49d0-8c4f-28729427d303
$.ajax({
url: "/fpga/2864a139-c2cd-4f9f-abf3-44eb3f09b83c",
data: {
"glance_bitstream_uuid": "0b955a5b-f5dd-49d0-8c4f-28729427d303"
},
dataType: "json",
type : "post",
success : function(r) {
console.log(r);
}
});
其次,在 Cyborg 中实现该服务,执行以下三个任务:1. 识别请求的 FPGA/部分重新配置 (PR) 区域的主机位置(例如,板位于哪个主机上)。 2. 检查用户(API 调用者、OpenStack 登录用户等)是否具有使用给定的 bitstream、FPGA 或主机的权限。 3. 如果前面的检查通过,Cyborg 将向目标主机发送带有请求的 FPGA 的程序通知。
第三,在 Cyborg Agent 中实现通知被调用者。这应该是一个具有以下签名的 rpc 调用
int program_fpga_with_bitstream(deployable_uuid, bitstream_uuid)
该函数将 deployable_uuid 和 bitstream_uuid 作为输入。它使用 deployable_uuid 来识别将要编程的特定 FPGA/PR 区域,并使用 bitstream_uuid 从 bitstream 存储服务(在 OpenStack 的上下文中为 Glance)检索 bitstream。此外,这是一个同步的,这意味着它将等待编程任务完成,然后返回一个整数状态码。返回码应具有以下解释
代码 |
含义 |
0 |
程序成功 |
1 |
出现未知错误 |
2 |
无效的 deployable_uuid(目标 FPGA 未找到) |
3 |
无效的 bitstream_uuid(无法下载 bitstream) |
备选方案¶
数据模型影响¶
REST API 影响¶
如前所述,将向 Cyborg 服务添加一个 rest api。它不应影响任何现有的 rest api
安全影响¶
对 FPGA/PR 区域和 bitstream 的访问应仔细检查。
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发者影响¶
在 Cyborg Agent 侧,它依赖于供应商实现的 program() api。
实现¶
负责人¶
- 主要负责人
刘力 <liliu1@huawei.com>
工作项¶
实现 cyborg 编程服务 rest api
实现 cyborg 编程服务
在 Cyborg Agent 中实现通知调用,该调用调用供应商驱动程序
依赖项¶
测试¶
文档影响¶
与 Cyborg-Nova 交互相关的规范需要了解 FPGA 被重新编程时加速器的变化。
参考资料¶
无
历史记录¶
发布名称 |
描述 |
|---|---|
Rocky |
引入 |