Cyborg FPGA driver support
Co-Authored-By: Dolpher Du <Dolpher.Du@intel.com> Change-Id: I5b27063a2644e067da0fb6ddbc39d82b4a9a244e
This commit is contained in:
parent
288b7c75f1
commit
9db9994f57
|
@ -0,0 +1,192 @@
|
|||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
===========================
|
||||
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 Cyborg [1]_ 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 ref
|
||||
[2]_.
|
||||
|
||||
* 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.
|
||||
|
||||
2. 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 Cyborg [1]_ 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 ref [2]_ 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
|
||||
=======
|
||||
c
|
||||
|
||||
.. list-table:: Revisions
|
||||
:header-rows: 1
|
||||
|
||||
* - Release
|
||||
- Description
|
||||
* - Pike
|
||||
- Introduced
|
||||
|
||||
References
|
||||
==========
|
||||
.. [1] https://blueprints.launchpad.net/openstack-cyborg/+spec/cyborg-fpga-modelling
|
||||
.. [2] https://01.org/OPAE
|
Loading…
Reference in New Issue