Change-Id: I1d7bc34762a2a105487b2f9664cb3fa12a53eb00
4.5 KiB
Cyborg FPGA Driver Proposal
https://blueprints.launchpad.net/openstack-cyborg/+spec/cyborg-fpga-driver
This spec proposes to provide the initial design for Cyborg's FPGA driver.
Problem description
A Field Programmable Gate Array(FPGA) is an integrated circuit designed to be configured by a customer or a designer after manufacturing. The advantage lies in that they are sometimes significantly faster for some applications because of their parallel nature and optimality in terms of the number of gates used for a certain process. Hence, using FPGA for application acceleration in cloud has been becoming desirable.
There is a management framwork in Cyborg1 for heterogeneous accelerators, tracking and deploying FPGAs. This spec will add a FPGA driver for Cyborg to manage specific FPGA devices.
Use Cases
- When Cyborg agent starts or does resource checking periodically, the Cyborg FPGA driver should enumerate the list of the FPGA devices, and report the details of all available FPGA accelerators on the host, such as BDF(Bus, Device, Function), PID(Product id) VID(Vendor id), IMAGE_ID and PF(Physical Function)/VF(Virtual Function) type.
- When user uses empty FPGA regions as their accelerators, Cyborg agent will call driver's program() interface. Cyborg agent should provide BDF of PF/VF, and local image path to the driver. More details can be found in ref2.
- When there maybe more thant one vendor fpga card on a host, or on different hosts in the cluster, Cyborg agent can discover the wendors easiy and intelligently by Cyborg FPGA driver, and call the correct driver to execute it's operations, such as discover() and program().
Proposed changes
In general, the goal is to develop a Cyborg FPGA driver that supports discover/program interfaces for FPGA accelerator framework.
The driver should include the follow functions: 1. discover() driver reports devices as following:
[{
"vendor": "0x8086",
"product": "bcc0",
"pr_num": 1,
"devices": "0000:be:00:0",
"path": "/sys/class/fpga/intel-fpga-dev.0",
"regions": [
{"vendor": "0x8086",
"product": "bcc1",
"regions": 1,
"devices": "0000:be:00:1",
"path": "/sys/class/fpga/intel-fpga-dev.1"
}]
}]
pr_num: partial reconfiguration region numbers.
- program(device_path, image) program the image to a PR region specified by device_path. device_path: the sys path of accelerator device. image: The local path of programming image.
Image Format
Alternatives
None
Data model impact
FPGA driver will not touch Data model. The Cyborg Agent can call FPGA driver to update the database during the discover/program operations.
REST API impact
The related FPGA accelerator APIs is out of scope for this spec. The FPGA management framework for Cyborg3 will alter the proposal.
Security impact
None
Notifications impact
None
Other end user impact
None
Performance Impact
None
Other deployer impact
Deployers should install the specific FPGA management stack that the driver depends on.
Please see ref4 for details.
Developer impact
There will be some developer impact vis-à-vis new functionality that will be available to devs.
Implementation
Assignee(s)
- Primary assignee:
-
Shaohe Feng <shaohe.feng@intel.com> Dolpher Du <dolpher.du@intel.com>
Work Items
- Implement the cyborg-fpga-driver in this spec.
Dependencies
- Cyborg API Spec
- Cyborg Agent Spec
- Cyborg Driver Spec
- Cyborg Conductor Spec
Testing
- Unit tests will be added to test Cyborg FPGA driver.
- Functional tests will be added to test Cyborg FPGA driver.
Documentation Impact
Document FPGA driver in the Cyborg project
References
- Cyborg API Spec
- Cyborg Agent Spec
- Cyborg Driver Spec
- Cyborg Conductor Spec
History
Release | Description |
---|---|
Queens | Introduced |