Cyborg Intel X710 Ethernet Adapter Driver
This spec introduce Intel X710 Ethernet Adapter Driver to Cyborg. Change-Id: Icb98cb601fbeb9969c298ea5f980ebd30d364b85 blueprint: sriov-smartnic-support
This commit is contained in:
parent
1b52f6defb
commit
563d160fee
|
@ -0,0 +1,221 @@
|
|||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
==================================
|
||||
Cyborg Intel® x710 driver proposal
|
||||
==================================
|
||||
|
||||
This spec proposes to provide a new Cyborg driver for Intel® x710 dirver,
|
||||
which is mentioned in Nova's SRIOV Nic Support spec [1]_. In Cyborg side,
|
||||
we need to implement a driver for SRIOV Nic in order to manage the lifecycle
|
||||
of this device, and to allow Nova request this kind of resource from Cyborg.
|
||||
|
||||
|
||||
Problem description
|
||||
===================
|
||||
The Intel Ethernet Converaged Network Adapter x710 [2]_ addressed the demanding
|
||||
need of an agile data center by providing unmatched features for both server
|
||||
and virtualization, flexibility for LAN or SAN networks and proven, reliable
|
||||
performance.
|
||||
|
||||
This device also support SR-IOV virtualization technology, it can be
|
||||
virtualized up to 128 VFs, each VF can support a unique and seperate date path
|
||||
for I/O related functions within the PCI Express hierarchy.
|
||||
|
||||
Using SR-IOV with the networking device, for example, allow the bandwidth of a
|
||||
single port(function) to be partitioned into smaller slices that can be
|
||||
allocated to specific VMs or guest, via a standard interface.
|
||||
|
||||
One of the key features of x710 Network Adapter is Dynamic Device
|
||||
Personalizaiton(DDP) [3]_.
|
||||
|
||||
DDP allows dynamic reconfiguration of the packet processing pipeline to meet
|
||||
specific use case needs on demand, adding new packet processing pipeline
|
||||
configuration profiles to a network adapter at run time, without resetting or
|
||||
rebooting the server. Software applies these custom profiles in a nonpermanent,
|
||||
transaction-like mode, so the original network controller’s configuration is
|
||||
restored after network adapter reset, or by rolling back profile changes by
|
||||
software. The DPDK provides all APIs to handle DDP packages.
|
||||
|
||||
|
||||
Use Cases
|
||||
---------
|
||||
* As an operator, I want to use Cyborg to manage lifycycle of Intel X710.
|
||||
Cyborg side driver should be able to manage this kind of acceleration
|
||||
resources including discover it, report it to Placement and program it.
|
||||
* As an end user, I want to boot up a VM with Intel X710 to acclerate network
|
||||
related workloas, Cyborg should be able to interact with Nova to assign it
|
||||
the VM.
|
||||
* As an advanced end user, I want to customize a profile to load on Intel X710
|
||||
when booting up a VM with it, Cyborg driver should be able to provide such
|
||||
program interface.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
In general, the goal is to develop a Cyborg Intel® x710 driver that supports
|
||||
discover() and program() interfaces.
|
||||
|
||||
Discovery
|
||||
---------
|
||||
|
||||
The driver should include discover functions which will be called by agent
|
||||
periodically, and encapsule the device information to Cyborg's unified data
|
||||
model, such as Device, Deployale, AttachHandle and so on.
|
||||
|
||||
Besides, we should also implement a configuration file to let Cyborg driver
|
||||
to discover the loaded DDP profile on X710, as well as the physnet name
|
||||
associated with this nic and then Cyborg can report these as the attributes.
|
||||
|
||||
An example of the configuration file is:
|
||||
|
||||
.. code-block:: RST
|
||||
|
||||
[dev-name]
|
||||
pci_address=0000:18:00.0
|
||||
function_name=GTPv1 # The name of the DDP profile
|
||||
physnet=physnet1
|
||||
|
||||
|
||||
Programming
|
||||
-----------
|
||||
|
||||
The driver should implement a program() function which allow Cyborg API to
|
||||
call to load a specific profile on the nic, this is a part-implementation of
|
||||
the third use case mentioned above.
|
||||
|
||||
To implement this functinality, Nova needs to parse user's request and get the
|
||||
profile's name, and Cyborg should get this profile's info from Nova and let
|
||||
this driver to load profile to the selected device.
|
||||
|
||||
Briefly, this function need to call some utility like (DPDK API or ethtool)
|
||||
to program the nic. For the first phase, we will work on the pre-programmed
|
||||
scenario. Another spec will be introduced to show the total design of dynamic
|
||||
programming functionality of this driver in the future.
|
||||
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
None
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
One physical X710 card has 2 PFs, and each of them can be virtualized into
|
||||
several VFs. The maximum number of the VFs are different according to
|
||||
different models.
|
||||
|
||||
Here, we take an example of 4 VFs in each PFs.
|
||||
|
||||
The data model in Cyborg should like this::
|
||||
|
||||
+---------------------------------------------------+
|
||||
| |
|
||||
| device A device B |
|
||||
| +------------------+ +------------------+ |
|
||||
| | deployable 1-4 | | deployables 5-8 | |
|
||||
| | +----+ +----+ | | +----+ +----+ | |
|
||||
| | | vf | | vf | | | | vf | | vf | | |
|
||||
| | +----+ +----+ | | +----+ +----+ | |
|
||||
| | +----+ +----+ | | +----+ +----+ | |
|
||||
| | | vf | | vf | | | | vf | | vf | | |
|
||||
| | +----+ +----+ | | +----+ +----+ | |
|
||||
| +------------------+ +------------------+ |
|
||||
| X710 |
|
||||
+---------------------------------------------------+
|
||||
|
||||
The resource provider tree's structure should be reported as::
|
||||
|
||||
+--------------+
|
||||
| |
|
||||
| compute node |
|
||||
| |
|
||||
+-------+------+
|
||||
|
|
||||
+----------------+-----+-----------------------+
|
||||
| | |
|
||||
v v v
|
||||
+-----+-----+ +----+-------+ +---+--------+
|
||||
| | | | | |
|
||||
|deployable1| |deployable 2| ... |deployable 8|
|
||||
+-----------+ +------------+ +------------+
|
||||
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Notifications impact
|
||||
--------------------
|
||||
|
||||
None
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
None
|
||||
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
Deployer need to install DPDK toolkit to configure the DDP feature.
|
||||
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
Xinran Wang(xin-ran.wang@intel.com)
|
||||
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None
|
||||
|
||||
Testing
|
||||
========
|
||||
|
||||
* Unit tests will be added to test this driver.
|
||||
* Add test result in Cyborg Wiki which is required by the Cyborg comunity.
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
Need add or update related documentations.
|
||||
|
||||
References
|
||||
==========
|
||||
.. [1] https://review.opendev.org/c/openstack/nova-specs/+/742785
|
||||
.. [2] https://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/ethernet-x710-brief.pdf
|
||||
.. [3] https://software.intel.com/content/www/us/en/develop/articles/dynamic-device-personalization-for-intel-ethernet-700-series.html
|
||||
|
||||
History
|
||||
=======
|
||||
|
||||
.. list-table:: Revisions
|
||||
:header-rows: 1
|
||||
|
||||
* - Release Name
|
||||
- Description
|
||||
* - Wallaby
|
||||
- Introduced
|
Loading…
Reference in New Issue