summaryrefslogtreecommitdiffstats
path: root/doc/guides/nics
diff options
context:
space:
mode:
authorLuca Boccassi <luca.boccassi@gmail.com>2017-08-16 18:42:05 +0100
committerLuca Boccassi <luca.boccassi@gmail.com>2017-08-16 18:46:04 +0100
commitf239aed5e674965691846e8ce3f187dd47523689 (patch)
treea153a3125c6e183c73871a8ecaa4b285fed5fbd5 /doc/guides/nics
parentbf7567fd2a5b0b28ab724046143c24561d38d015 (diff)
New upstream version 17.08
Change-Id: I288b50990f52646089d6b1f3aaa6ba2f091a51d7 Signed-off-by: Luca Boccassi <luca.boccassi@gmail.com>
Diffstat (limited to 'doc/guides/nics')
-rw-r--r--doc/guides/nics/cxgbe.rst45
-rw-r--r--doc/guides/nics/dpaa2.rst22
-rw-r--r--doc/guides/nics/enic.rst52
-rw-r--r--doc/guides/nics/fail_safe.rst221
-rw-r--r--doc/guides/nics/features.rst890
-rw-r--r--doc/guides/nics/features/ark.ini1
-rw-r--r--doc/guides/nics/features/bnx2x.ini1
-rw-r--r--doc/guides/nics/features/bnx2x_vf.ini1
-rw-r--r--doc/guides/nics/features/bnxt.ini10
-rw-r--r--doc/guides/nics/features/cxgbe.ini1
-rw-r--r--doc/guides/nics/features/default.ini2
-rw-r--r--doc/guides/nics/features/dpaa2.ini8
-rw-r--r--doc/guides/nics/features/e1000.ini1
-rw-r--r--doc/guides/nics/features/ena.ini1
-rw-r--r--doc/guides/nics/features/enic.ini1
-rw-r--r--doc/guides/nics/features/failsafe.ini26
-rw-r--r--doc/guides/nics/features/fm10k.ini1
-rw-r--r--doc/guides/nics/features/fm10k_vec.ini1
-rw-r--r--doc/guides/nics/features/fm10k_vf.ini1
-rw-r--r--doc/guides/nics/features/fm10k_vf_vec.ini1
-rw-r--r--doc/guides/nics/features/i40e.ini1
-rw-r--r--doc/guides/nics/features/i40e_vec.ini1
-rw-r--r--doc/guides/nics/features/igb.ini2
-rw-r--r--doc/guides/nics/features/ixgbe.ini1
-rw-r--r--doc/guides/nics/features/ixgbe_vec.ini1
-rw-r--r--doc/guides/nics/features/liquidio.ini1
-rw-r--r--doc/guides/nics/features/mlx4.ini2
-rw-r--r--doc/guides/nics/features/mlx5.ini4
-rw-r--r--doc/guides/nics/features/qede.ini2
-rw-r--r--doc/guides/nics/features/qede_vf.ini2
-rw-r--r--doc/guides/nics/features/sfc_efx.ini1
-rw-r--r--doc/guides/nics/features/szedata2.ini1
-rw-r--r--doc/guides/nics/features/tap.ini4
-rw-r--r--doc/guides/nics/features/virtio.ini1
-rw-r--r--doc/guides/nics/features/virtio_vec.ini1
-rw-r--r--doc/guides/nics/features/vmxnet3.ini2
-rw-r--r--doc/guides/nics/i40e.rst116
-rw-r--r--doc/guides/nics/img/intel_perf_test_setup.svg507
-rw-r--r--doc/guides/nics/index.rst2
-rw-r--r--doc/guides/nics/mlx4.rst148
-rw-r--r--doc/guides/nics/mlx5.rst218
-rw-r--r--doc/guides/nics/overview.rst2
-rw-r--r--doc/guides/nics/qede.rst2
-rw-r--r--doc/guides/nics/sfc_efx.rst2
-rw-r--r--doc/guides/nics/szedata2.rst32
-rw-r--r--doc/guides/nics/tap.rst13
-rw-r--r--doc/guides/nics/thunderx.rst6
-rw-r--r--doc/guides/nics/virtio.rst13
48 files changed, 2307 insertions, 68 deletions
diff --git a/doc/guides/nics/cxgbe.rst b/doc/guides/nics/cxgbe.rst
index a205b43f..8651a7be 100644
--- a/doc/guides/nics/cxgbe.rst
+++ b/doc/guides/nics/cxgbe.rst
@@ -1,5 +1,5 @@
.. BSD LICENSE
- Copyright 2015 Chelsio Communications.
+ Copyright 2015-2017 Chelsio Communications.
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -32,8 +32,8 @@ CXGBE Poll Mode Driver
======================
The CXGBE PMD (**librte_pmd_cxgbe**) provides poll mode driver support
-for **Chelsio T5** 10/40 Gbps family of adapters. CXGBE PMD has support
-for the latest Linux and FreeBSD operating systems.
+for **Chelsio Terminator** 10/25/40/100 Gbps family of adapters. CXGBE PMD
+has support for the latest Linux and FreeBSD operating systems.
More information can be found at `Chelsio Communications Official Website
<http://www.chelsio.com>`_.
@@ -55,9 +55,10 @@ CXGBE PMD has support for:
Limitations
-----------
-The Chelsio T5 devices provide two/four ports but expose a single PCI bus
-address, thus, librte_pmd_cxgbe registers itself as a
-PCI driver that allocates one Ethernet device per detected port.
+The Chelsio Terminator series of devices provide two/four ports but
+expose a single PCI bus address, thus, librte_pmd_cxgbe registers
+itself as a PCI driver that allocates one Ethernet device per detected
+port.
For this reason, one cannot whitelist/blacklist a single port without
whitelisting/blacklisting the other ports on the same device.
@@ -70,10 +71,16 @@ Supported Chelsio T5 NICs
- 40G NICs: T580-CR, T580-LP-CR, T580-SO-CR
- Other T5 NICs: T522-CR
+Supported Chelsio T6 NICs
+-------------------------
+
+- 25G NICs: T6425-CR, T6225-CR, T6225-LL-CR, T6225-SO-CR
+- 100G NICs: T62100-CR, T62100-LP-CR, T62100-SO-CR
+
Prerequisites
-------------
-- Requires firmware version **1.13.32.0** and higher. Visit
+- Requires firmware version **1.16.43.0** and higher. Visit
`Chelsio Download Center <http://service.chelsio.com>`_ to get latest firmware
bundled with the latest Chelsio Unified Wire package.
@@ -123,6 +130,10 @@ enabling debugging options may affect system performance.
Toggle display of receiving data path run-time check messages.
+- ``CONFIG_RTE_LIBRTE_CXGBE_TPUT`` (default **y**)
+
+ Toggle behaviour to prefer Throughput or Latency.
+
.. _driver-compilation:
Driver compilation and testing
@@ -197,12 +208,12 @@ Unified Wire package for Linux operating system are as follows:
.. code-block:: console
- firmware-version: 1.13.32.0, TP 0.1.4.8
+ firmware-version: 1.16.43.0, TP 0.1.4.9
Running testpmd
~~~~~~~~~~~~~~~
-This section demonstrates how to launch **testpmd** with Chelsio T5
+This section demonstrates how to launch **testpmd** with Chelsio
devices managed by librte_pmd_cxgbe in Linux operating system.
#. Load the kernel module:
@@ -226,7 +237,7 @@ devices managed by librte_pmd_cxgbe in Linux operating system.
.. note::
- Both the interfaces of a Chelsio T5 2-port adapter are bound to the
+ Both the interfaces of a Chelsio 2-port adapter are bound to the
same PCI bus address.
#. Unload the kernel module:
@@ -243,7 +254,7 @@ devices managed by librte_pmd_cxgbe in Linux operating system.
.. note::
- Currently, CXGBE PMD only supports the binding of PF4 for Chelsio T5 NICs.
+ Currently, CXGBE PMD only supports the binding of PF4 for Chelsio NICs.
Example output:
@@ -255,7 +266,7 @@ devices managed by librte_pmd_cxgbe in Linux operating system.
EAL: PCI memory mapped at 0x7fd7c0200000
EAL: PCI memory mapped at 0x7fd77cdfd000
EAL: PCI memory mapped at 0x7fd7c10b7000
- PMD: rte_cxgbe_pmd: fw: 1.13.32.0, TP: 0.1.4.8
+ PMD: rte_cxgbe_pmd: fw: 1.16.43.0, TP: 0.1.4.9
PMD: rte_cxgbe_pmd: Coming up as MASTER: Initializing adapter
Interactive-mode selected
Configuring Port 0 (socket 0)
@@ -339,12 +350,12 @@ Unified Wire package for FreeBSD operating system are as follows:
.. code-block:: console
- dev.t5nex.0.firmware_version: 1.13.32.0
+ dev.t5nex.0.firmware_version: 1.16.43.0
Running testpmd
~~~~~~~~~~~~~~~
-This section demonstrates how to launch **testpmd** with Chelsio T5
+This section demonstrates how to launch **testpmd** with Chelsio
devices managed by librte_pmd_cxgbe in FreeBSD operating system.
#. Change to DPDK source directory where the target has been compiled in
@@ -413,7 +424,7 @@ devices managed by librte_pmd_cxgbe in FreeBSD operating system.
.. note::
- Both the interfaces of a Chelsio T5 2-port adapter are bound to the
+ Both the interfaces of a Chelsio 2-port adapter are bound to the
same PCI bus address.
#. Unload the kernel module:
@@ -433,7 +444,7 @@ devices managed by librte_pmd_cxgbe in FreeBSD operating system.
.. note::
- Currently, CXGBE PMD only supports the binding of PF4 for Chelsio T5 NICs.
+ Currently, CXGBE PMD only supports the binding of PF4 for Chelsio NICs.
#. Load nic_uio kernel driver:
@@ -457,7 +468,7 @@ devices managed by librte_pmd_cxgbe in FreeBSD operating system.
EAL: PCI memory mapped at 0x8007ec000
EAL: PCI memory mapped at 0x842800000
EAL: PCI memory mapped at 0x80086c000
- PMD: rte_cxgbe_pmd: fw: 1.13.32.0, TP: 0.1.4.8
+ PMD: rte_cxgbe_pmd: fw: 1.16.43.0, TP: 0.1.4.9
PMD: rte_cxgbe_pmd: Coming up as MASTER: Initializing adapter
Interactive-mode selected
Configuring Port 0 (socket 0)
diff --git a/doc/guides/nics/dpaa2.rst b/doc/guides/nics/dpaa2.rst
index 1ca27d45..d6b1f21e 100644
--- a/doc/guides/nics/dpaa2.rst
+++ b/doc/guides/nics/dpaa2.rst
@@ -1,6 +1,5 @@
.. BSD LICENSE
- Copyright (C) NXP. 2016.
- All rights reserved.
+ Copyright 2016 NXP.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -423,9 +422,15 @@ Features of the DPAA2 PMD are:
- Multiple queues for TX and RX
- Receive Side Scaling (RSS)
+- MAC/VLAN filtering
- Packet type information
- Checksum offload
- Promiscuous mode
+- Multicast mode
+- Port hardware statistics
+- Jumbo frames
+- Link flow control
+- Scattered and gather for TX and RX
Supported DPAA2 SoCs
--------------------
@@ -473,12 +478,12 @@ separately:
SDK and related information can be obtained from: `NXP QorIQ SDK <http://www.nxp.com/products/software-and-tools/run-time-software/linux-sdk/linux-sdk-for-qoriq-processors:SDKLINUX>`_.
-- **DPDK Helper Scripts**
+- **DPDK Extra Scripts**
DPAA2 based resources can be configured easily with the help of ready scripts
- as provided in the DPDK helper repository.
+ as provided in the DPDK Extra repository.
- `DPDK Helper Scripts <https://github.com/qoriq-open-source/dpdk-helper>`_.
+ `DPDK Extras Scripts <https://github.com/qoriq-open-source/dpdk-extras>`_.
Currently supported by DPDK:
@@ -592,3 +597,10 @@ The DPAA2 SoC family support a maximum of a 10240 jumbo frame. The value
is fixed and cannot be changed. So, even when the ``rxmode.max_rx_pkt_len``
member of ``struct rte_eth_conf`` is set to a value lower than 10240, frames
up to 10240 bytes can still reach the host interface.
+
+Other Limitations
+~~~~~~~~~~~~~~~~~
+
+- RSS hash key cannot be modified.
+- RSS RETA cannot be configured.
+- Secondary process packet I/O is not supported.
diff --git a/doc/guides/nics/enic.rst b/doc/guides/nics/enic.rst
index 89a30158..cb5ae125 100644
--- a/doc/guides/nics/enic.rst
+++ b/doc/guides/nics/enic.rst
@@ -213,6 +213,45 @@ or ``vfio`` in non-IOMMU mode.
Please see :ref:`Limitations <enic_limitations>` for limitations in
the use of SR-IOV.
+.. _enic-genic-flow-api:
+
+Generic Flow API support
+------------------------
+
+Generic Flow API is supported. The baseline support is:
+
+- **1200 series VICs**
+
+ 5-tuple exact Flow support for 1200 series adapters. This allows:
+
+ - Attributes: ingress
+ - Items: ipv4, ipv6, udp, tcp (must exactly match src/dst IP
+ addresses and ports and all must be specified).
+ - Actions: queue and void
+ - Selectors: 'is'
+
+- **1300 series VICS with Advanced filters disabled**
+
+ With advanced filters disabled, an IPv4 or IPv6 item must be specified
+ in the pattern.
+
+ - Attributes: ingress
+ - Items: eth, ipv4, ipv6, udp, tcp, vxlan, inner eth, ipv4, ipv6, udp, tcp
+ - Actions: queue and void
+ - Selectors: 'is', 'spec' and 'mask'. 'last' is not supported
+ - In total, up to 64 bytes of mask is allowed across all haeders
+
+- **1300 series VICS with Advanced filters enabled**
+
+ - Attributes: ingress
+ - Items: eth, ipv4, ipv6, udp, tcp, vxlan, inner eth, ipv4, ipv6, udp, tcp
+ - Actions: queue, mark, flag and void
+ - Selectors: 'is', 'spec' and 'mask'. 'last' is not supported
+ - In total, up to 64 bytes of mask is allowed across all haeders
+
+More features may be added in future firmware and new versions of the VIC.
+Please refer to the release notes.
+
.. _enic_limitations:
Limitations
@@ -260,9 +299,21 @@ Limitations
- The number of SR-IOV devices is limited to 256. Components on target system
might limit this number to fewer than 256.
+- **Flow API**
+
+ - The number of filters that can be specified with the Generic Flow API is
+ dependent on how many header fields are being masked. Use 'flow create' in
+ a loop to determine how many filters your VIC will support (not more than
+ 1000 for 1300 series VICs). Filter are checked for matching in the order they
+ were added. Since there currently is no grouping or priority support,
+ 'catch-all' filters should be added last.
+
How to build the suite
----------------------
+The build instructions for the DPDK suite should be followed. By default
+the ENIC PMD library will be built into the DPDK library.
+
Refer to the document :ref:`compiling and testing a PMD for a NIC
<pmd_build_and_test>` for details.
@@ -313,6 +364,7 @@ Supported features
- Scattered Rx
- MTU update
- SR-IOV on UCS managed servers connected to Fabric Interconnects.
+- Flow API
Known bugs and unsupported features in this release
---------------------------------------------------
diff --git a/doc/guides/nics/fail_safe.rst b/doc/guides/nics/fail_safe.rst
new file mode 100644
index 00000000..34ecae2d
--- /dev/null
+++ b/doc/guides/nics/fail_safe.rst
@@ -0,0 +1,221 @@
+.. BSD LICENSE
+ Copyright 2017 6WIND S.A.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of 6WIND S.A. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Fail-safe poll mode driver library
+==================================
+
+The Fail-safe poll mode driver library (**librte_pmd_failsafe**) is a virtual
+device that allows using any device supporting hotplug (sudden device removal
+and plugging on its bus), without modifying other components relying on such
+device (application, other PMDs).
+
+Additionally to the Seamless Hotplug feature, the Fail-safe PMD offers the
+ability to redirect operations to secondary devices when the primary has been
+removed from the system.
+
+.. note::
+
+ The library is enabled by default. You can enable it or disable it manually
+ by setting the ``CONFIG_RTE_LIBRTE_PMD_FAILSAFE`` configuration option.
+
+Features
+--------
+
+The Fail-safe PMD only supports a limited set of features. If you plan to use a
+device underneath the Fail-safe PMD with a specific feature, this feature must
+be supported by the Fail-safe PMD to avoid throwing any error.
+
+A notable exception is the device removal feature. The fail-safe PMD being a
+virtual device, it cannot currently be removed in the sense of a specific bus
+hotplug, like for PCI for example. It will however enable this feature for its
+sub-device automatically, detecting those that are capable and register the
+relevant callback for such event.
+
+Check the feature matrix for the complete set of supported features.
+
+Compilation option
+------------------
+
+This option can be modified in the ``$RTE_TARGET/build/.config`` file.
+
+- ``CONFIG_RTE_LIBRTE_PMD_FAILSAFE`` (default **y**)
+
+ Toggle compiling librte_pmd_failsafe.
+
+Using the Fail-safe PMD from the EAL command line
+-------------------------------------------------
+
+The Fail-safe PMD can be used like most other DPDK virtual devices, by passing a
+``--vdev`` parameter to the EAL when starting the application. The device name
+must start with the *net_failsafe* prefix, followed by numbers or letters. This
+name must be unique for each device. Each fail-safe instance must have at least one
+sub-device, up to ``RTE_MAX_ETHPORTS-1``.
+
+A sub-device can be any legal DPDK device, including possibly another fail-safe
+instance.
+
+Fail-safe command line parameters
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- **dev(<iface>)** parameter
+
+ This parameter allows the user to define a sub-device. The ``<iface>`` part of
+ this parameter must be a valid device definition. It could be the argument
+ provided to any ``-w`` device specification or the argument that would be
+ given to a ``--vdev`` parameter (including a fail-safe).
+ Enclosing the device definition within parenthesis here allows using
+ additional sub-device parameters if need be. They will be passed on to the
+ sub-device.
+
+- **exec(<shell command>)** parameter
+
+ This parameter allows the user to provide a command to the fail-safe PMD to
+ execute and define a sub-device.
+ It is done within a regular shell context.
+ The first line of its output is read by the fail-safe PMD and otherwise
+ interpreted as if passed by the regular **dev** parameter.
+ Any other line is discarded.
+ If the command fail or output an incorrect string, the sub-device is not
+ initialized.
+ All commas within the ``shell command`` are replaced by spaces before
+ executing the command. This helps using scripts to specify devices.
+
+- **mac** parameter [MAC address]
+
+ This parameter allows the user to set a default MAC address to the fail-safe
+ and all of its sub-devices.
+ If no default mac address is provided, the fail-safe PMD will read the MAC
+ address of the first of its sub-device to be successfully probed and use it as
+ its default MAC address, trying to set it to all of its other sub-devices.
+ If no sub-device was successfully probed at initialization, then a random MAC
+ address is generated, that will be subsequently applied to all sub-device once
+ they are probed.
+
+- **hotplug_poll** parameter [UINT64] (default **2000**)
+
+ This parameter allows the user to configure the amount of time in milliseconds
+ between two slave upkeep round.
+
+Usage example
+~~~~~~~~~~~~~
+
+This section shows some example of using **testpmd** with a fail-safe PMD.
+
+#. To build a PMD and configure DPDK, refer to the document
+ :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>`.
+
+#. Start testpmd. The slave device should be blacklisted from normal EAL
+ operations to avoid probing it twice when in PCI blacklist mode.
+
+ .. code-block:: console
+
+ $RTE_TARGET/build/app/testpmd -c 0xff -n 4 \
+ --vdev 'net_failsafe0,mac=de:ad:be:ef:01:02,dev(84:00.0),dev(net_ring0)'
+ -b 84:00.0 -b 00:04.0 -- -i
+
+ If the slave device being used is not blacklisted, it will be probed by the
+ EAL first. When the fail-safe then tries to initialize it the probe operation
+ fails.
+
+ Note that PCI blacklist mode is the default PCI operating mode.
+
+#. Alternatively, it can be used alongside any other device in whitelist mode.
+
+ .. code-block:: console
+
+ $RTE_TARGET/build/app/testpmd -c 0xff -n 4 \
+ --vdev 'net_failsafe0,mac=de:ad:be:ef:01:02,dev(84:00.0),dev(net_ring0)'
+ -w 81:00.0 -- -i
+
+#. Start testpmd using a flexible device definition
+
+ .. code-block:: console
+
+ $RTE_TARGET/build/app/testpmd -c 0xff -n 4 --no-pci \
+ --vdev='net_failsafe0,exec(echo 84:00.0)' -- -i
+
+Using the Fail-safe PMD from an application
+-------------------------------------------
+
+This driver strives to be as seamless as possible to existing applications, in
+order to propose the hotplug functionality in the easiest way possible.
+
+Care must be taken, however, to respect the **ether** API concerning device
+access, and in particular, using the ``RTE_ETH_FOREACH_DEV`` macro to iterate
+over ethernet devices, instead of directly accessing them or by writing one's
+own device iterator.
+
+Plug-in feature
+---------------
+
+A sub-device can be defined without existing on the system when the fail-safe
+PMD is initialized. Upon probing this device, the fail-safe PMD will detect its
+absence and postpone its use. It will then register for a periodic check on any
+missing sub-device.
+
+During this time, the fail-safe PMD can be used normally, configured and told to
+emit and receive packets. It will store any applied configuration, and try to
+apply it upon the probing of its missing sub-device. After this configuration
+pass, the new sub-device will be synchronized with other sub-devices, i.e. be
+started if the fail-safe PMD has been started by the user before.
+
+Plug-out feature
+----------------
+
+A sub-device supporting the device removal event can be removed from its bus at
+any time. The fail-safe PMD will register a callback for such event and react
+accordingly. It will try to safely stop, close and uninit the sub-device having
+emitted this event, allowing it to free its eventual resources.
+
+Fail-safe glossary
+------------------
+
+Fallback device : Secondary device
+ The fail-safe will fail-over onto this device when the preferred device is
+ absent.
+
+Preferred device : Primary device
+ The first declared sub-device in the fail-safe parameters.
+ When this device is plugged, it is always used as emitting device.
+ It is the main sub-device and is used as target for configuration
+ operations if there is any ambiguity.
+
+Upkeep round
+ Periodical process when slaves are serviced. Each devices having a state
+ different to that of the fail-safe device itself, is synchronized with it.
+ Additionally, each slave having the remove flag set are cleaned-up.
+
+Slave
+ In the context of the fail-safe PMD, synonymous to sub-device.
+
+Sub-device
+ A device being utilized by the fail-safe PMD.
+ This is another PMD running underneath the fail-safe PMD.
+ Any sub-device can disappear at any time. The fail-safe will ensure
+ that the device removal happens gracefully.
diff --git a/doc/guides/nics/features.rst b/doc/guides/nics/features.rst
new file mode 100644
index 00000000..37ffbc68
--- /dev/null
+++ b/doc/guides/nics/features.rst
@@ -0,0 +1,890 @@
+.. BSD LICENSE
+ Copyright(c) 2017 Intel Corporation. All rights reserved.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Features Overview
+=================
+
+This section explains the supported features that are listed in the
+:doc:`overview`.
+
+As a guide to implementers it also shows the structs where the features are
+defined and the APIs that can be use to get/set the values.
+
+Following tags used for feature details, these are from driver point of view:
+
+``[uses]`` : Driver uses some kind of input from the application.
+
+``[implements]`` : Driver implements a functionality.
+
+``[provides]`` : Driver provides some kind of data to the application. It is possible
+to provide data by implementing some function, but "provides" is used
+for cases where provided data can't be represented simply by a function.
+
+``[related]`` : Related API with that feature.
+
+
+.. _nic_features_speed_capabilities:
+
+Speed capabilities
+------------------
+
+Supports getting the speed capabilities that the current device is capable of.
+
+* **[provides] rte_eth_dev_info**: ``speed_capa:ETH_LINK_SPEED_*``.
+* **[related] API**: ``rte_eth_dev_info_get()``.
+
+
+.. _nic_features_link_status:
+
+Link status
+-----------
+
+Supports getting the link speed, duplex mode and link state (up/down).
+
+* **[implements] eth_dev_ops**: ``link_update``.
+* **[implements] rte_eth_dev_data**: ``dev_link``.
+* **[related] API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``.
+
+
+.. _nic_features_link_status_event:
+
+Link status event
+-----------------
+
+Supports Link Status Change interrupts.
+
+* **[uses] user config**: ``dev_conf.intr_conf.lsc``.
+* **[uses] rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_LSC``.
+* **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_LSC``.
+* **[implements] rte_eth_dev_data**: ``dev_link``.
+* **[provides] rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_LSC``.
+* **[related] API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``.
+
+
+.. _nic_features_removal_event:
+
+Removal event
+-------------
+
+Supports device removal interrupts.
+
+* **[uses] user config**: ``dev_conf.intr_conf.rmv``.
+* **[uses] rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_RMV``.
+* **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_RMV``.
+* **[provides] rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_RMV``.
+
+
+.. _nic_features_queue_status_event:
+
+Queue status event
+------------------
+
+Supports queue enable/disable events.
+
+* **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_QUEUE_STATE``.
+
+
+.. _nic_features_rx_interrupt:
+
+Rx interrupt
+------------
+
+Supports Rx interrupts.
+
+* **[uses] user config**: ``dev_conf.intr_conf.rxq``.
+* **[implements] eth_dev_ops**: ``rx_queue_intr_enable``, ``rx_queue_intr_disable``.
+* **[related] API**: ``rte_eth_dev_rx_intr_enable()``, ``rte_eth_dev_rx_intr_disable()``.
+
+
+.. _nic_features_lock-free_tx_queue:
+
+Lock-free Tx queue
+------------------
+
+If a PMD advertises DEV_TX_OFFLOAD_MT_LOCKFREE capable, multiple threads can
+invoke rte_eth_tx_burst() concurrently on the same Tx queue without SW lock.
+
+* **[provides] rte_eth_dev_info**: ``tx_offload_capa:DEV_TX_OFFLOAD_MT_LOCKFREE``.
+* **[related] API**: ``rte_eth_tx_burst()``.
+
+
+.. _nic_features_free_tx_mbuf_on_demand:
+
+Free Tx mbuf on demand
+----------------------
+
+Supports freeing consumed buffers on a Tx ring.
+
+* **[implements] eth_dev_ops**: ``tx_done_cleanup``.
+* **[related] API**: ``rte_eth_tx_done_cleanup()``.
+
+
+.. _nic_features_queue_start_stop:
+
+Queue start/stop
+----------------
+
+Supports starting/stopping a specific Rx/Tx queue of a port.
+
+* **[implements] eth_dev_ops**: ``rx_queue_start``, ``rx_queue_stop``, ``tx_queue_start``,
+ ``tx_queue_stop``.
+* **[related] API**: ``rte_eth_dev_rx_queue_start()``, ``rte_eth_dev_rx_queue_stop()``,
+ ``rte_eth_dev_tx_queue_start()``, ``rte_eth_dev_tx_queue_stop()``.
+
+
+.. _nic_features_mtu_update:
+
+MTU update
+----------
+
+Supports updating port MTU.
+
+* **[implements] eth_dev_ops**: ``mtu_set``.
+* **[implements] rte_eth_dev_data**: ``mtu``.
+* **[provides] rte_eth_dev_info**: ``max_rx_pktlen``.
+* **[related] API**: ``rte_eth_dev_set_mtu()``, ``rte_eth_dev_get_mtu()``.
+
+
+.. _nic_features_jumbo_frame:
+
+Jumbo frame
+-----------
+
+Supports Rx jumbo frames.
+
+* **[uses] user config**: ``dev_conf.rxmode.jumbo_frame``,
+ ``dev_conf.rxmode.max_rx_pkt_len``.
+* **[related] rte_eth_dev_info**: ``max_rx_pktlen``.
+* **[related] API**: ``rte_eth_dev_set_mtu()``.
+
+
+.. _nic_features_scattered_rx:
+
+Scattered Rx
+------------
+
+Supports receiving segmented mbufs.
+
+* **[uses] user config**: ``dev_conf.rxmode.enable_scatter``.
+* **[implements] datapath**: ``Scattered Rx function``.
+* **[implements] rte_eth_dev_data**: ``scattered_rx``.
+* **[provides] eth_dev_ops**: ``rxq_info_get:scattered_rx``.
+* **[related] eth_dev_ops**: ``rx_pkt_burst``.
+
+
+.. _nic_features_lro:
+
+LRO
+---
+
+Supports Large Receive Offload.
+
+* **[uses] user config**: ``dev_conf.rxmode.enable_lro``.
+* **[implements] datapath**: ``LRO functionality``.
+* **[implements] rte_eth_dev_data**: ``lro``.
+* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_LRO``, ``mbuf.tso_segsz``.
+* **[provides] rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_TCP_LRO``.
+
+
+.. _nic_features_tso:
+
+TSO
+---
+
+Supports TCP Segmentation Offloading.
+
+* **[uses] rte_eth_desc_lim**: ``nb_seg_max``, ``nb_mtu_seg_max``.
+* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_TCP_SEG``.
+* **[uses] mbuf**: ``mbuf.tso_segsz``, ``mbuf.l2_len``, ``mbuf.l3_len``, ``mbuf.l4_len``.
+* **[implements] datapath**: ``TSO functionality``.
+* **[provides] rte_eth_dev_info**: ``tx_offload_capa:DEV_TX_OFFLOAD_TCP_TSO,DEV_TX_OFFLOAD_UDP_TSO``.
+
+
+.. _nic_features_promiscuous_mode:
+
+Promiscuous mode
+----------------
+
+Supports enabling/disabling promiscuous mode for a port.
+
+* **[implements] eth_dev_ops**: ``promiscuous_enable``, ``promiscuous_disable``.
+* **[implements] rte_eth_dev_data**: ``promiscuous``.
+* **[related] API**: ``rte_eth_promiscuous_enable()``, ``rte_eth_promiscuous_disable()``,
+ ``rte_eth_promiscuous_get()``.
+
+
+.. _nic_features_allmulticast_mode:
+
+Allmulticast mode
+-----------------
+
+Supports enabling/disabling receiving multicast frames.
+
+* **[implements] eth_dev_ops**: ``allmulticast_enable``, ``allmulticast_disable``.
+* **[implements] rte_eth_dev_data**: ``all_multicast``.
+* **[related] API**: ``rte_eth_allmulticast_enable()``,
+ ``rte_eth_allmulticast_disable()``, ``rte_eth_allmulticast_get()``.
+
+
+.. _nic_features_unicast_mac_filter:
+
+Unicast MAC filter
+------------------
+
+Supports adding MAC addresses to enable whitelist filtering to accept packets.
+
+* **[implements] eth_dev_ops**: ``mac_addr_set``, ``mac_addr_add``, ``mac_addr_remove``.
+* **[implements] rte_eth_dev_data**: ``mac_addrs``.
+* **[related] API**: ``rte_eth_dev_default_mac_addr_set()``,
+ ``rte_eth_dev_mac_addr_add()``, ``rte_eth_dev_mac_addr_remove()``,
+ ``rte_eth_macaddr_get()``.
+
+
+.. _nic_features_multicast_mac_filter:
+
+Multicast MAC filter
+--------------------
+
+Supports setting multicast addresses to filter.
+
+* **[implements] eth_dev_ops**: ``set_mc_addr_list``.
+* **[related] API**: ``rte_eth_dev_set_mc_addr_list()``.
+
+
+.. _nic_features_rss_hash:
+
+RSS hash
+--------
+
+Supports RSS hashing on RX.
+
+* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_RSS_FLAG``.
+* **[uses] user config**: ``dev_conf.rx_adv_conf.rss_conf``.
+* **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``.
+* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
+
+
+.. _nic_features_rss_key_update:
+
+RSS key update
+--------------
+
+Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
+Receive Side Scaling (RSS) hash key.
+
+* **[implements] eth_dev_ops**: ``rss_hash_update``, ``rss_hash_conf_get``.
+* **[provides] rte_eth_dev_info**: ``hash_key_size``.
+* **[related] API**: ``rte_eth_dev_rss_hash_update()``,
+ ``rte_eth_dev_rss_hash_conf_get()``.
+
+
+.. _nic_features_rss_reta_update:
+
+RSS reta update
+---------------
+
+Supports updating Redirection Table of the Receive Side Scaling (RSS).
+
+* **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``.
+* **[provides] rte_eth_dev_info**: ``reta_size``.
+* **[related] API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``.
+
+
+.. _nic_features_vmdq:
+
+VMDq
+----
+
+Supports Virtual Machine Device Queues (VMDq).
+
+* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_VMDQ_FLAG``.
+* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
+* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``.
+* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
+* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
+
+
+.. _nic_features_sriov:
+
+SR-IOV
+------
+
+Driver supports creating Virtual Functions.
+
+* **[implements] rte_eth_dev_data**: ``sriov``.
+
+.. _nic_features_dcb:
+
+DCB
+---
+
+Supports Data Center Bridging (DCB).
+
+* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_DCB_FLAG``.
+* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
+* **[uses] user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``.
+* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
+* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
+* **[implements] eth_dev_ops**: ``get_dcb_info``.
+* **[related] API**: ``rte_eth_dev_get_dcb_info()``.
+
+
+.. _nic_features_vlan_filter:
+
+VLAN filter
+-----------
+
+Supports filtering of a VLAN Tag identifier.
+
+* **[uses] user config**: ``dev_conf.rxmode.hw_vlan_filter``.
+* **[implements] eth_dev_ops**: ``vlan_filter_set``.
+* **[related] API**: ``rte_eth_dev_vlan_filter()``.
+
+
+.. _nic_features_ethertype_filter:
+
+Ethertype filter
+----------------
+
+Supports filtering on Ethernet type.
+
+* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_ETHERTYPE``.
+* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
+
+.. _nic_features_ntuple_filter:
+
+N-tuple filter
+--------------
+
+Supports filtering on N-tuple values.
+
+* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_NTUPLE``.
+* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
+
+
+.. _nic_features_syn_filter:
+
+SYN filter
+----------
+
+Supports TCP syn filtering.
+
+* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_SYN``.
+* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
+
+
+.. _nic_features_tunnel_filter:
+
+Tunnel filter
+-------------
+
+Supports tunnel filtering.
+
+* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_TUNNEL``.
+* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
+
+
+.. _nic_features_flexible_filter:
+
+Flexible filter
+---------------
+
+Supports a flexible (non-tuple or Ethertype) filter.
+
+* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FLEXIBLE``.
+* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
+
+
+.. _nic_features_hash_filter:
+
+Hash filter
+-----------
+
+Supports Hash filtering.
+
+* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_HASH``.
+* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
+
+
+.. _nic_features_flow_director:
+
+Flow director
+-------------
+
+Supports Flow Director style filtering to queues.
+
+* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FDIR``.
+* **[provides] mbuf**: ``mbuf.ol_flags:`` ``PKT_RX_FDIR``, ``PKT_RX_FDIR_ID``,
+ ``PKT_RX_FDIR_FLX``.
+* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
+
+
+.. _nic_features_flow_control:
+
+Flow control
+------------
+
+Supports configuring link flow control.
+
+* **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``,
+ ``priority_flow_ctrl_set``.
+* **[related] API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``,
+ ``rte_eth_dev_priority_flow_ctrl_set()``.
+
+
+.. _nic_features_flow_api:
+
+Flow API
+--------
+
+Supports the DPDK Flow API for generic filtering.
+
+* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_GENERIC``.
+* **[implements] rte_flow_ops**: ``All``.
+
+
+.. _nic_features_rate_limitation:
+
+Rate limitation
+---------------
+
+Supports Tx rate limitation for a queue.
+
+* **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
+* **[related] API**: ``rte_eth_set_queue_rate_limit()``.
+
+
+.. _nic_features_traffic_mirroring:
+
+Traffic mirroring
+-----------------
+
+Supports adding traffic mirroring rules.
+
+* **[implements] eth_dev_ops**: ``mirror_rule_set``, ``mirror_rule_reset``.
+* **[related] API**: ``rte_eth_mirror_rule_set()``, ``rte_eth_mirror_rule_reset()``.
+
+
+.. _nic_features_crc_offload:
+
+CRC offload
+-----------
+
+Supports CRC stripping by hardware.
+
+* **[uses] user config**: ``dev_conf.rxmode.hw_strip_crc``.
+
+
+.. _nic_features_vlan_offload:
+
+VLAN offload
+------------
+
+Supports VLAN offload to hardware.
+
+* **[uses] user config**: ``dev_conf.rxmode.hw_vlan_strip``,
+ ``dev_conf.rxmode.hw_vlan_filter``, ``dev_conf.rxmode.hw_vlan_extend``.
+* **[implements] eth_dev_ops**: ``vlan_offload_set``.
+* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.vlan_tci``.
+* **[provides] rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,
+ ``tx_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``.
+* **[related] API**: ``rte_eth_dev_set_vlan_offload()``,
+ ``rte_eth_dev_get_vlan_offload()``.
+
+
+.. _nic_features_qinq_offload:
+
+QinQ offload
+------------
+
+Supports QinQ (queue in queue) offload.
+
+* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ_PKT``.
+* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.vlan_tci``,
+ ``mbuf.vlan_tci_outer``.
+* **[provides] rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``,
+ ``tx_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``.
+
+
+.. _nic_features_l3_checksum_offload:
+
+L3 checksum offload
+-------------------
+
+Supports L3 checksum offload.
+
+* **[uses] user config**: ``dev_conf.rxmode.hw_ip_checksum``.
+* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
+ ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.
+* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
+ ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
+ ``PKT_RX_IP_CKSUM_NONE``.
+* **[provides] rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
+ ``tx_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
+
+
+.. _nic_features_l4_checksum_offload:
+
+L4 checksum offload
+-------------------
+
+Supports L4 checksum offload.
+
+* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
+ ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
+ ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
+* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
+ ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
+ ``PKT_RX_L4_CKSUM_NONE``.
+* **[provides] rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM``,
+ ``tx_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
+
+
+.. _nic_features_macsec_offload:
+
+MACsec offload
+--------------
+
+Supports MACsec.
+
+* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
+* **[provides] rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
+ ``tx_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
+
+
+.. _nic_features_inner_l3_checksum:
+
+Inner L3 checksum
+-----------------
+
+Supports inner packet L3 checksum.
+
+* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
+ ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
+ ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
+ ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
+* **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
+* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_EIP_CKSUM_BAD``.
+* **[provides] rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
+ ``tx_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
+
+
+.. _nic_features_inner_l4_checksum:
+
+Inner L4 checksum
+-----------------
+
+Supports inner packet L4 checksum.
+
+
+.. _nic_features_packet_type_parsing:
+
+Packet type parsing
+-------------------
+
+Supports packet type parsing and returns a list of supported types.
+
+* **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``.
+* **[related] API**: ``rte_eth_dev_get_supported_ptypes()``.
+
+
+.. _nic_features_timesync:
+
+Timesync
+--------
+
+Supports IEEE1588/802.1AS timestamping.
+
+* **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
+ ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
+ ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
+* **[related] API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
+ ``rte_eth_timesync_read_rx_timestamp()``,
+ ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
+ ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
+
+
+.. _nic_features_rx_descriptor_status:
+
+Rx descriptor status
+--------------------
+
+Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
+used, status can be "Available", "Done" or "Unavailable". When
+``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is
+not set".
+
+* **[implements] eth_dev_ops**: ``rx_descriptor_status``.
+* **[related] API**: ``rte_eth_rx_descriptor_status()``.
+* **[implements] eth_dev_ops**: ``rx_descriptor_done``.
+* **[related] API**: ``rte_eth_rx_descriptor_done()``.
+
+
+.. _nic_features_tx_descriptor_status:
+
+Tx descriptor status
+--------------------
+
+Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
+or "Unavailable."
+
+* **[implements] eth_dev_ops**: ``tx_descriptor_status``.
+* **[related] API**: ``rte_eth_tx_descriptor_status()``.
+
+
+.. _nic_features_basic_stats:
+
+Basic stats
+-----------
+
+Support basic statistics such as: ipackets, opackets, ibytes, obytes,
+imissed, ierrors, oerrors, rx_nombuf.
+
+And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
+
+These apply to all drivers.
+
+* **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
+* **[related] API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
+
+
+.. _nic_features_extended_stats:
+
+Extended stats
+--------------
+
+Supports Extended Statistics, changes from driver to driver.
+
+* **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
+* **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
+* **[related] API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
+ ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
+ ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
+
+
+.. _nic_features_stats_per_queue:
+
+Stats per queue
+---------------
+
+Supports configuring per-queue stat counter mapping.
+
+* **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
+* **[related] API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
+ ``rte_eth_dev_set_tx_queue_stats_mapping()``.
+
+
+.. _nic_features_fw_version:
+
+FW version
+----------
+
+Supports getting device hardware firmware information.
+
+* **[implements] eth_dev_ops**: ``fw_version_get``.
+* **[related] API**: ``rte_eth_dev_fw_version_get()``.
+
+
+.. _nic_features_eeprom_dump:
+
+EEPROM dump
+-----------
+
+Supports getting/setting device eeprom data.
+
+* **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
+* **[related] API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
+ ``rte_eth_dev_set_eeprom()``.
+
+
+.. _nic_features_register_dump:
+
+Registers dump
+--------------
+
+Supports retrieving device registers and registering attributes (number of
+registers and register size).
+
+* **[implements] eth_dev_ops**: ``get_reg``.
+* **[related] API**: ``rte_eth_dev_get_reg_info()``.
+
+
+.. _nic_features_led:
+
+LED
+---
+
+Supports turning on/off a software controllable LED on a device.
+
+* **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
+* **[related] API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
+
+
+.. _nic_features_multiprocess_aware:
+
+Multiprocess aware
+------------------
+
+Driver can be used for primary-secondary process model.
+
+
+.. _nic_features_bsd_nic_uio:
+
+BSD nic_uio
+-----------
+
+BSD ``nic_uio`` module supported.
+
+
+.. _nic_features_linux_uio:
+
+Linux UIO
+---------
+
+Works with ``igb_uio`` kernel module.
+
+* **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``igb_uio``.
+
+.. _nic_features_linux_vfio:
+
+Linux VFIO
+----------
+
+Works with ``vfio-pci`` kernel module.
+
+* **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``vfio-pci``.
+
+.. _nic_features_other_kdrv:
+
+Other kdrv
+----------
+
+Kernel module other than above ones supported.
+
+
+.. _nic_features_armv7:
+
+ARMv7
+-----
+
+Support armv7 architecture.
+
+Use ``defconfig_arm-armv7a-*-*``.
+
+
+.. _nic_features_armv8:
+
+ARMv8
+-----
+
+Support armv8a (64bit) architecture.
+
+Use ``defconfig_arm64-armv8a-*-*``
+
+
+.. _nic_features_power8:
+
+Power8
+------
+
+Support PowerPC architecture.
+
+Use ``defconfig_ppc_64-power8-*-*``
+
+.. _nic_features_x86-32:
+
+x86-32
+------
+
+Support 32bits x86 architecture.
+
+Use ``defconfig_x86_x32-native-*-*`` and ``defconfig_i686-native-*-*``.
+
+
+.. _nic_features_x86-64:
+
+x86-64
+------
+
+Support 64bits x86 architecture.
+
+Use ``defconfig_x86_64-native-*-*``.
+
+
+.. _nic_features_usage_doc:
+
+Usage doc
+---------
+
+Documentation describes usage.
+
+See ``doc/guides/nics/*.rst``
+
+
+.. _nic_features_design_doc:
+
+Design doc
+----------
+
+Documentation describes design.
+
+See ``doc/guides/nics/*.rst``.
+
+
+.. _nic_features_perf_doc:
+
+Perf doc
+--------
+
+Documentation describes performance values.
+
+See ``dpdk.org/doc/perf/*``.
+
+
+
+.. _nic_features_other:
+
+Other dev ops not represented by a Feature
+------------------------------------------
+
+* ``rxq_info_get``
+* ``txq_info_get``
+* ``vlan_tpid_set``
+* ``vlan_strip_queue_set``
+* ``vlan_pvid_set``
+* ``rx_queue_count``
+* ``l2_tunnel_offload_set``
+* ``uc_hash_table_set``
+* ``uc_all_hash_table_set``
+* ``udp_tunnel_port_add``
+* ``udp_tunnel_port_del``
+* ``l2_tunnel_eth_type_conf``
+* ``l2_tunnel_offload_set``
+* ``tx_pkt_prepare``
diff --git a/doc/guides/nics/features/ark.ini b/doc/guides/nics/features/ark.ini
index 31a35279..ec8a2b99 100644
--- a/doc/guides/nics/features/ark.ini
+++ b/doc/guides/nics/features/ark.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = Y
Queue start/stop = Y
Jumbo frame = Y
Scattered Rx = Y
diff --git a/doc/guides/nics/features/bnx2x.ini b/doc/guides/nics/features/bnx2x.ini
index 1ad8a3e8..3e33e9ab 100644
--- a/doc/guides/nics/features/bnx2x.ini
+++ b/doc/guides/nics/features/bnx2x.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = P
Link status = Y
Link status event = Y
Promiscuous mode = Y
diff --git a/doc/guides/nics/features/bnx2x_vf.ini b/doc/guides/nics/features/bnx2x_vf.ini
index da9168ea..c270902e 100644
--- a/doc/guides/nics/features/bnx2x_vf.ini
+++ b/doc/guides/nics/features/bnx2x_vf.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = P
Link status = Y
Link status event = Y
Promiscuous mode = Y
diff --git a/doc/guides/nics/features/bnxt.ini b/doc/guides/nics/features/bnxt.ini
index 013a9cda..119132e1 100644
--- a/doc/guides/nics/features/bnxt.ini
+++ b/doc/guides/nics/features/bnxt.ini
@@ -6,11 +6,21 @@
[Features]
Link status = Y
Queue start/stop = Y
+MTU update = Y
+Jumbo frame = Y
+LRO = Y
Promiscuous mode = Y
+Allmulticast mode = Y
Unicast MAC filter = Y
Multicast MAC filter = Y
RSS reta update = Y
+SR-IOV = Y
+VLAN filter = Y
+VLAN offload = Y
Basic stats = Y
Extended stats = Y
+FW version = Y
+LED = Y
Linux UIO = Y
+Linux VFIO = Y
x86-64 = Y
diff --git a/doc/guides/nics/features/cxgbe.ini b/doc/guides/nics/features/cxgbe.ini
index 2e72a107..3d0fde2f 100644
--- a/doc/guides/nics/features/cxgbe.ini
+++ b/doc/guides/nics/features/cxgbe.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = Y
Link status = Y
Queue start/stop = Y
MTU update = Y
diff --git a/doc/guides/nics/features/default.ini b/doc/guides/nics/features/default.ini
index cafc6c70..54243069 100644
--- a/doc/guides/nics/features/default.ini
+++ b/doc/guides/nics/features/default.ini
@@ -13,6 +13,7 @@ Link status event =
Removal event =
Queue status event =
Rx interrupt =
+Lock-free Tx queue =
Free Tx mbuf on demand =
Queue start/stop =
MTU update =
@@ -60,6 +61,7 @@ Stats per queue =
FW version =
EEPROM dump =
Registers dump =
+LED =
Multiprocess aware =
BSD nic_uio =
Linux UIO =
diff --git a/doc/guides/nics/features/dpaa2.ini b/doc/guides/nics/features/dpaa2.ini
index d43f4046..146e087f 100644
--- a/doc/guides/nics/features/dpaa2.ini
+++ b/doc/guides/nics/features/dpaa2.ini
@@ -4,15 +4,23 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = P
Link status = Y
Queue start/stop = Y
+Jumbo frame = Y
MTU update = Y
Promiscuous mode = Y
+Allmulticast mode = Y
+Unicast MAC filter = Y
RSS hash = Y
+VLAN filter = Y
+Flow control = Y
+VLAN offload = Y
L3 checksum offload = Y
L4 checksum offload = Y
Packet type parsing = Y
Basic stats = Y
+FW version = Y
Linux VFIO = Y
ARMv8 = Y
Usage doc = Y
diff --git a/doc/guides/nics/features/e1000.ini b/doc/guides/nics/features/e1000.ini
index 260d46da..51ca580f 100644
--- a/doc/guides/nics/features/e1000.ini
+++ b/doc/guides/nics/features/e1000.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = P
Link status = Y
Link status event = Y
Rx interrupt = Y
diff --git a/doc/guides/nics/features/ena.ini b/doc/guides/nics/features/ena.ini
index 74969fd0..691c1e3d 100644
--- a/doc/guides/nics/features/ena.ini
+++ b/doc/guides/nics/features/ena.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = P
Queue start/stop = Y
MTU update = Y
Jumbo frame = Y
diff --git a/doc/guides/nics/features/enic.ini b/doc/guides/nics/features/enic.ini
index 94e7f3cb..0de3ef53 100644
--- a/doc/guides/nics/features/enic.ini
+++ b/doc/guides/nics/features/enic.ini
@@ -20,6 +20,7 @@ VLAN filter = Y
CRC offload = Y
VLAN offload = Y
Flow director = Y
+Flow API = Y
L3 checksum offload = Y
L4 checksum offload = Y
Packet type parsing = Y
diff --git a/doc/guides/nics/features/failsafe.ini b/doc/guides/nics/features/failsafe.ini
new file mode 100644
index 00000000..a42e344a
--- /dev/null
+++ b/doc/guides/nics/features/failsafe.ini
@@ -0,0 +1,26 @@
+;
+; Supported features of the 'fail-safe' poll mode driver.
+;
+; Refer to default.ini for the full list of available PMD features.
+;
+[Features]
+Link status = Y
+Link status event = Y
+MTU update = Y
+Jumbo frame = Y
+Promiscuous mode = Y
+Allmulticast mode = Y
+Unicast MAC filter = Y
+Multicast MAC filter = Y
+VLAN filter = Y
+Flow control = Y
+Flow API = Y
+Packet type parsing = Y
+Basic stats = Y
+Stats per queue = Y
+ARMv7 = Y
+ARMv8 = Y
+Power8 = Y
+x86-32 = Y
+x86-64 = Y
+Usage doc = Y
diff --git a/doc/guides/nics/features/fm10k.ini b/doc/guides/nics/features/fm10k.ini
index 9e1035f3..f0f61a7d 100644
--- a/doc/guides/nics/features/fm10k.ini
+++ b/doc/guides/nics/features/fm10k.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = P
Rx interrupt = Y
Queue start/stop = Y
Jumbo frame = Y
diff --git a/doc/guides/nics/features/fm10k_vec.ini b/doc/guides/nics/features/fm10k_vec.ini
index 1384ab15..4917e820 100644
--- a/doc/guides/nics/features/fm10k_vec.ini
+++ b/doc/guides/nics/features/fm10k_vec.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = P
Rx interrupt = Y
Queue start/stop = Y
Jumbo frame = Y
diff --git a/doc/guides/nics/features/fm10k_vf.ini b/doc/guides/nics/features/fm10k_vf.ini
index 15de536f..32b93df4 100644
--- a/doc/guides/nics/features/fm10k_vf.ini
+++ b/doc/guides/nics/features/fm10k_vf.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = P
Rx interrupt = Y
Queue start/stop = Y
Jumbo frame = Y
diff --git a/doc/guides/nics/features/fm10k_vf_vec.ini b/doc/guides/nics/features/fm10k_vf_vec.ini
index b32550cb..6f4a639a 100644
--- a/doc/guides/nics/features/fm10k_vf_vec.ini
+++ b/doc/guides/nics/features/fm10k_vf_vec.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = P
Rx interrupt = Y
Queue start/stop = Y
Jumbo frame = Y
diff --git a/doc/guides/nics/features/i40e.ini b/doc/guides/nics/features/i40e.ini
index ecabce0b..e862712c 100644
--- a/doc/guides/nics/features/i40e.ini
+++ b/doc/guides/nics/features/i40e.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = Y
Link status = Y
Link status event = Y
Rx interrupt = Y
diff --git a/doc/guides/nics/features/i40e_vec.ini b/doc/guides/nics/features/i40e_vec.ini
index 206f348b..7d7b3a92 100644
--- a/doc/guides/nics/features/i40e_vec.ini
+++ b/doc/guides/nics/features/i40e_vec.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = Y
Link status = Y
Link status event = Y
Rx interrupt = Y
diff --git a/doc/guides/nics/features/igb.ini b/doc/guides/nics/features/igb.ini
index 11450270..33d64d99 100644
--- a/doc/guides/nics/features/igb.ini
+++ b/doc/guides/nics/features/igb.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = P
Link status = Y
Link status event = Y
Rx interrupt = Y
@@ -26,6 +27,7 @@ N-tuple filter = Y
SYN filter = Y
Flexible filter = Y
Flow control = Y
+Flow API = Y
CRC offload = Y
VLAN offload = Y
QinQ offload = Y
diff --git a/doc/guides/nics/features/ixgbe.ini b/doc/guides/nics/features/ixgbe.ini
index 4aa7af6d..9ff5d8f8 100644
--- a/doc/guides/nics/features/ixgbe.ini
+++ b/doc/guides/nics/features/ixgbe.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = Y
Link status = Y
Link status event = Y
Rx interrupt = Y
diff --git a/doc/guides/nics/features/ixgbe_vec.ini b/doc/guides/nics/features/ixgbe_vec.ini
index 4da81182..4d56df4f 100644
--- a/doc/guides/nics/features/ixgbe_vec.ini
+++ b/doc/guides/nics/features/ixgbe_vec.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = Y
Link status = Y
Link status event = Y
Rx interrupt = Y
diff --git a/doc/guides/nics/features/liquidio.ini b/doc/guides/nics/features/liquidio.ini
index 49cc3566..3bea03a3 100644
--- a/doc/guides/nics/features/liquidio.ini
+++ b/doc/guides/nics/features/liquidio.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = Y
Link status = Y
Link status event = Y
Jumbo frame = Y
diff --git a/doc/guides/nics/features/mlx4.ini b/doc/guides/nics/features/mlx4.ini
index 285f0ecf..1d5f2668 100644
--- a/doc/guides/nics/features/mlx4.ini
+++ b/doc/guides/nics/features/mlx4.ini
@@ -4,9 +4,11 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = P
Link status = Y
Link status event = Y
Removal event = Y
+Rx interrupt = Y
Queue start/stop = Y
MTU update = Y
Jumbo frame = Y
diff --git a/doc/guides/nics/features/mlx5.ini b/doc/guides/nics/features/mlx5.ini
index e228c412..2913591c 100644
--- a/doc/guides/nics/features/mlx5.ini
+++ b/doc/guides/nics/features/mlx5.ini
@@ -28,15 +28,15 @@ CRC offload = Y
VLAN offload = Y
L3 checksum offload = Y
L4 checksum offload = Y
-Inner L3 checksum = Y
-Inner L4 checksum = Y
Packet type parsing = Y
Rx descriptor status = Y
Tx descriptor status = Y
Basic stats = Y
+Extended stats = Y
Stats per queue = Y
Multiprocess aware = Y
Other kdrv = Y
+ARMv8 = Y
Power8 = Y
x86-32 = Y
x86-64 = Y
diff --git a/doc/guides/nics/features/qede.ini b/doc/guides/nics/features/qede.ini
index fba5dc33..cbadc194 100644
--- a/doc/guides/nics/features/qede.ini
+++ b/doc/guides/nics/features/qede.ini
@@ -32,6 +32,8 @@ Extended stats = Y
Stats per queue = Y
Multiprocess aware = Y
Linux UIO = Y
+ARMv8 = Y
+x86-32 = Y
x86-64 = Y
Usage doc = Y
N-tuple filter = Y
diff --git a/doc/guides/nics/features/qede_vf.ini b/doc/guides/nics/features/qede_vf.ini
index 21ec40fa..18857b6e 100644
--- a/doc/guides/nics/features/qede_vf.ini
+++ b/doc/guides/nics/features/qede_vf.ini
@@ -30,6 +30,8 @@ Extended stats = Y
Stats per queue = Y
Multiprocess aware = Y
Linux UIO = Y
+ARMv8 = Y
+x86-32 = Y
x86-64 = Y
LRO = Y
TSO = Y
diff --git a/doc/guides/nics/features/sfc_efx.ini b/doc/guides/nics/features/sfc_efx.ini
index 7957b5e9..1db7f67b 100644
--- a/doc/guides/nics/features/sfc_efx.ini
+++ b/doc/guides/nics/features/sfc_efx.ini
@@ -28,6 +28,7 @@ Packet type parsing = Y
Basic stats = Y
Extended stats = Y
FW version = Y
+Multiprocess aware = Y
BSD nic_uio = Y
Linux UIO = Y
Linux VFIO = Y
diff --git a/doc/guides/nics/features/szedata2.ini b/doc/guides/nics/features/szedata2.ini
index 624314d3..a0e6f6e8 100644
--- a/doc/guides/nics/features/szedata2.ini
+++ b/doc/guides/nics/features/szedata2.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = P
Link status = Y
Queue start/stop = Y
Scattered Rx = Y
diff --git a/doc/guides/nics/features/tap.ini b/doc/guides/nics/features/tap.ini
index 3efae758..f0e893d6 100644
--- a/doc/guides/nics/features/tap.ini
+++ b/doc/guides/nics/features/tap.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = P
Link status = Y
Link status event = Y
Jumbo frame = Y
@@ -11,9 +12,10 @@ Promiscuous mode = Y
Allmulticast mode = Y
Basic stats = Y
Flow API = Y
+L3 checksum offload = Y
+L4 checksum offload = Y
MTU update = Y
Multicast MAC filter = Y
-Speed capabilities = Y
Unicast MAC filter = Y
Packet type parsing = Y
Flow control = Y
diff --git a/doc/guides/nics/features/virtio.ini b/doc/guides/nics/features/virtio.ini
index 8e3aca1d..16e577df 100644
--- a/doc/guides/nics/features/virtio.ini
+++ b/doc/guides/nics/features/virtio.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = P
Link status = Y
Rx interrupt = Y
Queue start/stop = Y
diff --git a/doc/guides/nics/features/virtio_vec.ini b/doc/guides/nics/features/virtio_vec.ini
index ec93f5c4..c06c860d 100644
--- a/doc/guides/nics/features/virtio_vec.ini
+++ b/doc/guides/nics/features/virtio_vec.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = P
Link status = Y
Rx interrupt = Y
Queue start/stop = Y
diff --git a/doc/guides/nics/features/vmxnet3.ini b/doc/guides/nics/features/vmxnet3.ini
index ef95932a..9a115138 100644
--- a/doc/guides/nics/features/vmxnet3.ini
+++ b/doc/guides/nics/features/vmxnet3.ini
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Speed capabilities = P
Link status = Y
Link status event = Y
Queue start/stop = Y
@@ -20,6 +21,7 @@ VLAN offload = Y
L4 checksum offload = Y
Packet type parsing = Y
Basic stats = Y
+Extended stats = Y
Stats per queue = Y
Linux UIO = Y
Linux VFIO = Y
diff --git a/doc/guides/nics/i40e.rst b/doc/guides/nics/i40e.rst
index 4d3c7ca0..bc200d39 100644
--- a/doc/guides/nics/i40e.rst
+++ b/doc/guides/nics/i40e.rst
@@ -404,16 +404,6 @@ is used as the VF driver, DPDK cannot choose 16 byte receive descriptor. That
is to say, user should keep ``CONFIG_RTE_LIBRTE_I40E_16BYTE_RX_DESC=n`` in
config file.
-Link down with i40e kernel driver after DPDK application exit
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-After DPDK application quit, and the device is bound back to Linux i40e
-kernel driver, the link cannot be up after ``ifconfig <dev> up``.
-To work around this issue, ``ethtool -s <dev> autoneg on`` should be
-set first and then the link can be brought up through ``ifconfig <dev> up``.
-
-NOTE: requires Linux kernel i40e driver version >= 1.4.X
-
Receive packets with Ethertype 0x88A8
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -447,3 +437,109 @@ It means if APP has set the max bandwidth for that TC, it comes to no
effect.
It's suggested to set the strict priority mode for a TC that is latency
sensitive but no consuming much bandwidth.
+
+VF performance is impacted by PCI extended tag setting
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To reach maximum NIC performance in the VF the PCI extended tag must be
+enabled. The DPDK I40E PF driver will set this feature during initialization,
+but the kernel PF driver does not. So when running traffic on a VF which is
+managed by the kernel PF driver, a significant NIC performance downgrade has
+been observed (for 64 byte packets, there is about 25% linerate downgrade for
+a 25G device and about 35% for a 40G device).
+
+For kernel version >= 4.11, the kernel's PCI driver will enable the extended
+tag if it detects that the device supports it. So by default, this is not an
+issue. For kernels <= 4.11 or when the PCI extended tag is disabled it can be
+enabled using the steps below.
+
+#. Get the current value of the PCI configure register::
+
+ setpci -s <XX:XX.X> a8.w
+
+#. Set bit 8::
+
+ value = value | 0x100
+
+#. Set the PCI configure register with new value::
+
+ setpci -s <XX:XX.X> a8.w=<value>
+
+High Performance of Small Packets on 40G NIC
+--------------------------------------------
+
+As there might be firmware fixes for performance enhancement in latest version
+of firmware image, the firmware update might be needed for getting high performance.
+Check with the local Intel's Network Division application engineers for firmware updates.
+Users should consult the release notes specific to a DPDK release to identify
+the validated firmware version for a NIC using the i40e driver.
+
+Use 16 Bytes RX Descriptor Size
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+As i40e PMD supports both 16 and 32 bytes RX descriptor sizes, and 16 bytes size can provide helps to high performance of small packets.
+Configuration of ``CONFIG_RTE_LIBRTE_I40E_16BYTE_RX_DESC`` in config files can be changed to use 16 bytes size RX descriptors.
+
+High Performance and per Packet Latency Tradeoff
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Due to the hardware design, the interrupt signal inside NIC is needed for per
+packet descriptor write-back. The minimum interval of interrupts could be set
+at compile time by ``CONFIG_RTE_LIBRTE_I40E_ITR_INTERVAL`` in configuration files.
+Though there is a default configuration, the interval could be tuned by the
+users with that configuration item depends on what the user cares about more,
+performance or per packet latency.
+
+Example of getting best performance with l3fwd example
+------------------------------------------------------
+
+The following is an example of running the DPDK ``l3fwd`` sample application to get high performance with an
+Intel server platform and Intel XL710 NICs.
+
+The example scenario is to get best performance with two Intel XL710 40GbE ports.
+See :numref:`figure_intel_perf_test_setup` for the performance test setup.
+
+.. _figure_intel_perf_test_setup:
+
+.. figure:: img/intel_perf_test_setup.*
+
+ Performance Test Setup
+
+
+1. Add two Intel XL710 NICs to the platform, and use one port per card to get best performance.
+ The reason for using two NICs is to overcome a PCIe Gen3's limitation since it cannot provide 80G bandwidth
+ for two 40G ports, but two different PCIe Gen3 x8 slot can.
+ Refer to the sample NICs output above, then we can select ``82:00.0`` and ``85:00.0`` as test ports::
+
+ 82:00.0 Ethernet [0200]: Intel XL710 for 40GbE QSFP+ [8086:1583]
+ 85:00.0 Ethernet [0200]: Intel XL710 for 40GbE QSFP+ [8086:1583]
+
+2. Connect the ports to the traffic generator. For high speed testing, it's best to use a hardware traffic generator.
+
+3. Check the PCI devices numa node (socket id) and get the cores number on the exact socket id.
+ In this case, ``82:00.0`` and ``85:00.0`` are both in socket 1, and the cores on socket 1 in the referenced platform
+ are 18-35 and 54-71.
+ Note: Don't use 2 logical cores on the same core (e.g core18 has 2 logical cores, core18 and core54), instead, use 2 logical
+ cores from different cores (e.g core18 and core19).
+
+4. Bind these two ports to igb_uio.
+
+5. As to XL710 40G port, we need at least two queue pairs to achieve best performance, then two queues per port
+ will be required, and each queue pair will need a dedicated CPU core for receiving/transmitting packets.
+
+6. The DPDK sample application ``l3fwd`` will be used for performance testing, with using two ports for bi-directional forwarding.
+ Compile the ``l3fwd sample`` with the default lpm mode.
+
+7. The command line of running l3fwd would be something like the following::
+
+ ./l3fwd -l 18-21 -n 4 -w 82:00.0 -w 85:00.0 \
+ -- -p 0x3 --config '(0,0,18),(0,1,19),(1,0,20),(1,1,21)'
+
+ This means that the application uses core 18 for port 0, queue pair 0 forwarding, core 19 for port 0, queue pair 1 forwarding,
+ core 20 for port 1, queue pair 0 forwarding, and core 21 for port 1, queue pair 1 forwarding.
+
+8. Configure the traffic at a traffic generator.
+
+ * Start creating a stream on packet generator.
+
+ * Set the Ethernet II type to 0x0800.
diff --git a/doc/guides/nics/img/intel_perf_test_setup.svg b/doc/guides/nics/img/intel_perf_test_setup.svg
new file mode 100644
index 00000000..27c3c1cd
--- /dev/null
+++ b/doc/guides/nics/img/intel_perf_test_setup.svg
@@ -0,0 +1,507 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="750.94739"
+ height="466.69046"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="intel_perf_test_setup.svg">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lstart"
+ style="overflow:visible">
+ <path
+ id="path4005"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="DotL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="DotL"
+ style="overflow:visible">
+ <path
+ id="path4066"
+ d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+ transform="matrix(0.8,0,0,0.8,5.92,0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="SquareL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="SquareL"
+ style="overflow:visible">
+ <path
+ id="path4075"
+ d="M -5,-5 -5,5 5,5 5,-5 -5,-5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+ transform="scale(0.8,0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ id="path4026"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ id="path4008"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-8"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4008-3"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5981"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path5983"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="121.51181"
+ inkscape:cy="-18.047453"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1168"
+ inkscape:window-height="1153"
+ inkscape:window-x="236"
+ inkscape:window-y="101"
+ inkscape:window-maximized="0"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="BG and Nics"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline"
+ transform="translate(-1.4142135,-45.442127)">
+ <rect
+ style="fill:none;stroke:none"
+ id="rect6962"
+ width="750.94739"
+ height="466.69046"
+ x="1.4142135"
+ y="45.442127" />
+ <rect
+ style="fill:#4f87bb;fill-opacity:1;stroke:#4f87bb;stroke-width:1.99999988;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect2985"
+ width="219.20311"
+ height="385.99997"
+ x="22.223356"
+ y="63.362179" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none"
+ x="28.550247"
+ y="90.837059"
+ id="text3755"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3757"
+ x="28.550247"
+ y="90.837059"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1">Traffic Generator</tspan></text>
+ <rect
+ style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3759-5-4-9"
+ width="233.5"
+ height="126.23654"
+ x="21.723356"
+ y="116.68151" />
+ <rect
+ style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3759-6-9"
+ width="80"
+ height="62.142132"
+ x="179.5"
+ y="148.72871" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="38.832031"
+ y="179.08876"
+ id="text3787-2"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3789-3"
+ x="38.832031"
+ y="179.08876"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Dest MAC: Port 0</tspan><tspan
+ sodipodi:role="line"
+ x="38.832031"
+ y="199.08876"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan3814">Dest IP: 2.1.1.1</tspan><tspan
+ sodipodi:role="line"
+ x="38.832031"
+ y="219.08876"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan3812">Src IP: Random</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="193.77002"
+ y="186.13669"
+ id="text3755-1"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3757-6"
+ x="193.77002"
+ y="186.13669"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Port A</tspan></text>
+ <rect
+ style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3759-5-8"
+ width="233.5"
+ height="126.23654"
+ x="20.499784"
+ y="312.46304" />
+ <rect
+ style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3759-6-9-6"
+ width="80"
+ height="62.142132"
+ x="178.79289"
+ y="344.51025" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="37.831818"
+ y="375.68961"
+ id="text3787-2-2"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="37.831818"
+ y="375.68961"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan6829">Dest MAC: Port 1</tspan><tspan
+ sodipodi:role="line"
+ x="37.831818"
+ y="395.68961"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan3814-7">Dest IP: 1.1.1.1</tspan><tspan
+ sodipodi:role="line"
+ x="37.831818"
+ y="415.68961"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan3812-1">Src IP: Random</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="193.5551"
+ y="381.91824"
+ id="text3755-1-2"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3757-6-6"
+ x="193.5551"
+ y="381.91824"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Port B</tspan></text>
+ <rect
+ style="fill:#4f87bb;fill-opacity:1;stroke:#4f87bb;stroke-width:1.99999964;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect2985-0"
+ width="388.73865"
+ height="379.41064"
+ x="352.02893"
+ y="118.51651" />
+ <rect
+ style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3759-5-4"
+ width="233.5"
+ height="168.96492"
+ x="340.08374"
+ y="126.68118" />
+ <rect
+ style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3759-6"
+ width="80"
+ height="62.142132"
+ x="333.83652"
+ y="148.75992" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="465.28302"
+ y="206.81598"
+ id="text3787-2-0"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="465.28302"
+ y="206.81598"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan3812-2">Intel XL 710</tspan><tspan
+ sodipodi:role="line"
+ x="465.28302"
+ y="226.81598"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan3954">40G Ethernet</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="349.54794"
+ y="186.15866"
+ id="text3755-1-4"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3757-6-5"
+ x="349.54794"
+ y="186.15866"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Port 0</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="64.119629"
+ y="345.36218"
+ id="text6833"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6835"
+ x="64.119629"
+ y="345.36218">Flow 2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="65.428223"
+ y="151.4325"
+ id="text6833-6"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6835-2"
+ x="65.428223"
+ y="151.4325">Flow 1</tspan></text>
+ <rect
+ style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3759-6-7"
+ width="80"
+ height="62.142132"
+ x="334.14633"
+ y="218.72491" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="349.85776"
+ y="256.12366"
+ id="text3755-1-4-5"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3757-6-5-7"
+ x="349.85776"
+ y="256.12366"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Port X</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="flows"
+ style="display:inline"
+ transform="translate(-1.4142135,-45.442127)">
+ <rect
+ style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3759-5-4-8"
+ width="233.5"
+ height="168.96492"
+ x="339.71588"
+ y="322.33286" />
+ <rect
+ style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3759-6-2"
+ width="80"
+ height="62.142132"
+ x="333.46866"
+ y="344.41159" />
+ <path
+ style="fill:none;stroke:#000018;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lend);marker-mid:none;marker-end:url(#Arrow1Lend)"
+ d="m 271.54621,160.17507 171.45382,0 0,234.88637 -185.57109,0"
+ id="path3981"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="460.91516"
+ y="402.46765"
+ id="text3787-2-0-7"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="460.91516"
+ y="402.46765"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan3812-2-8">Intel XL 710</tspan><tspan
+ sodipodi:role="line"
+ x="460.91516"
+ y="422.46765"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan3954-0">40G Ethernet</tspan></text>
+ <path
+ style="fill:none;stroke:#000018;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:url(#Arrow1Lstart)"
+ d="m 258.67113,197.20047 170.29749,0 0,157.21541 -156.72961,0"
+ id="path3981-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="349.18008"
+ y="381.81033"
+ id="text3755-1-4-2"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3757-6-5-0"
+ x="349.18008"
+ y="381.81033"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Port 1</tspan></text>
+ <rect
+ style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3759-6-7-8"
+ width="80"
+ height="62.142132"
+ x="333.77847"
+ y="414.37659" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="349.4899"
+ y="451.77533"
+ id="text3755-1-4-5-9"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3757-6-5-7-2"
+ x="349.4899"
+ y="451.77533"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Port X</tspan></text>
+ <rect
+ style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3759-5-4-8-8"
+ width="153.5"
+ height="364.84363"
+ x="580.25"
+ y="126.87973" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="602.55469"
+ y="354.36218"
+ id="text6927"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="602.55469"
+ y="354.36218"
+ id="tspan6931"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Port 0 to Port 1</tspan><tspan
+ sodipodi:role="line"
+ x="602.55469"
+ y="374.36218"
+ id="tspan6933"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Port 1 to Port 0 </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
+ x="601.75293"
+ y="323.36218"
+ id="text6937"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6939"
+ x="601.75293"
+ y="323.36218"
+ style="font-size:22px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Forwarding</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+ x="597.66797"
+ y="218.65639"
+ id="text3755-4"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3757-9"
+ x="597.66797"
+ y="218.65639"
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">IA Platform</tspan><tspan
+ sodipodi:role="line"
+ x="597.66797"
+ y="248.65639"
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan3948">(Socket 1)</tspan></text>
+ </g>
+</svg>
diff --git a/doc/guides/nics/index.rst b/doc/guides/nics/index.rst
index 240d0824..36f4f3ff 100644
--- a/doc/guides/nics/index.rst
+++ b/doc/guides/nics/index.rst
@@ -36,6 +36,7 @@ Network Interface Controller Drivers
:numbered:
overview
+ features
build_and_test
ark
avp
@@ -64,6 +65,7 @@ Network Interface Controller Drivers
vhost
vmxnet3
pcap_ring
+ fail_safe
**Figures**
diff --git a/doc/guides/nics/mlx4.rst b/doc/guides/nics/mlx4.rst
index f1f26d4f..f8885b23 100644
--- a/doc/guides/nics/mlx4.rst
+++ b/doc/guides/nics/mlx4.rst
@@ -1,5 +1,6 @@
.. BSD LICENSE
Copyright 2012-2015 6WIND S.A.
+ Copyright 2015 Mellanox
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -76,6 +77,7 @@ Compiling librte_pmd_mlx4 causes DPDK to be linked against libibverbs.
Features
--------
+- Multi arch support: x86_64 and POWER8.
- RSS, also known as RCA, is supported. In this mode the number of
configured RX queues must be a power of two.
- VLAN filtering is supported.
@@ -87,6 +89,7 @@ Features
- Inner L3/L4 (IP, TCP and UDP) TX/RX checksum offloading and validation.
- Outer L3 (IP) TX/RX checksum offloading and validation for VXLAN frames.
- Secondary process TX is supported.
+- RX interrupts.
Limitations
-----------
@@ -116,6 +119,14 @@ These options can be modified in the ``.config`` file.
adds additional run-time checks and debugging messages at the cost of
lower performance.
+- ``CONFIG_RTE_LIBRTE_MLX4_DEBUG_BROKEN_VERBS`` (default **n**)
+
+ Mellanox OFED versions earlier than 4.2 may return false errors from
+ Verbs object destruction APIs after the device is plugged out.
+ Enabling this option replaces assertion checks that cause the program
+ to abort with harmless debugging messages as a workaround.
+ Relevant only when CONFIG_RTE_LIBRTE_MLX4_DEBUG is enabled.
+
- ``CONFIG_RTE_LIBRTE_MLX4_SGE_WR_N`` (default **4**)
Number of scatter/gather elements (SGEs) per work request (WR). Lowering
@@ -244,9 +255,8 @@ DPDK and must be installed separately:
Currently supported by DPDK:
-- Mellanox OFED **4.0-2.0.0.0**.
-- Firmware version **2.40.7000**.
-- Supported architectures: **x86_64** and **POWER8**.
+- Mellanox OFED **4.1**.
+- Firmware version **2.36.5000** and above.
Getting Mellanox OFED
~~~~~~~~~~~~~~~~~~~~~
@@ -273,6 +283,138 @@ Supported NICs
* Mellanox(R) ConnectX(R)-3 Pro 40G MCX354A-FCC_Ax (2*40G)
+Quick Start Guide
+-----------------
+
+1. Download latest Mellanox OFED. For more info check the `prerequisites`_.
+
+2. Install the required libraries and kernel modules either by installing
+ only the required set, or by installing the entire Mellanox OFED:
+
+ For bare metal use:
+
+ .. code-block:: console
+
+ ./mlnxofedinstall
+
+ For SR-IOV hypervisors use:
+
+ .. code-block:: console
+
+ ./mlnxofedinstall --enable-sriov -hypervisor
+
+ For SR-IOV virtual machine use:
+
+ .. code-block:: console
+
+ ./mlnxofedinstall --guest
+
+3. Verify the firmware is the correct one:
+
+ .. code-block:: console
+
+ ibv_devinfo
+
+4. Set all ports links to Ethernet, follow instructions on the screen:
+
+ .. code-block:: console
+
+ connectx_port_config
+
+ Or in the manual way:
+
+ .. code-block:: console
+
+ PCI=<NIC PCI address>
+ echo eth > "/sys/bus/pci/devices/$PCI/mlx4_port0"
+ echo eth > "/sys/bus/pci/devices/$PCI/mlx4_port1"
+
+5. In case of bare metal or hypervisor, configure optimized steering mode
+ by adding the following line to ``/etc/modprobe.d/mlx4_core.conf``:
+
+ .. code-block:: console
+
+ options mlx4_core log_num_mgm_entry_size=-7
+
+ .. note::
+
+ If VLAN filtering is used, set log_num_mgm_entry_size=-1.
+ Performance degradation can occur on this case.
+
+6. Restart the driver:
+
+ .. code-block:: console
+
+ /etc/init.d/openibd restart
+
+ or:
+
+ .. code-block:: console
+
+ service openibd restart
+
+7. Compile DPDK and you are ready to go. See instructions on
+ :ref:`Development Kit Build System <Development_Kit_Build_System>`
+
+Performance tuning
+------------------
+
+1. Verify the optimized steering mode is configured:
+
+ .. code-block:: console
+
+ cat /sys/module/mlx4_core/parameters/log_num_mgm_entry_size
+
+2. Use environment variable MLX4_INLINE_RECV_SIZE=64 to get maximum
+ performance for 64B messages.
+
+3. Use the CPU near local NUMA node to which the PCIe adapter is connected,
+ for better performance. For VMs, verify that the right CPU
+ and NUMA node are pinned according to the above. Run:
+
+ .. code-block:: console
+
+ lstopo-no-graphics
+
+ to identify the NUMA node to which the PCIe adapter is connected.
+
+4. If more than one adapter is used, and root complex capabilities allow
+ to put both adapters on the same NUMA node without PCI bandwidth degradation,
+ it is recommended to locate both adapters on the same NUMA node.
+ This in order to forward packets from one to the other without
+ NUMA performance penalty.
+
+5. Disable pause frames:
+
+ .. code-block:: console
+
+ ethtool -A <netdev> rx off tx off
+
+6. Verify IO non-posted prefetch is disabled by default. This can be checked
+ via the BIOS configuration. Please contact you server provider for more
+ information about the settings.
+
+.. note::
+
+ On some machines, depends on the machine integrator, it is beneficial
+ to set the PCI max read request parameter to 1K. This can be
+ done in the following way:
+
+ To query the read request size use:
+
+ .. code-block:: console
+
+ setpci -s <NIC PCI address> 68.w
+
+ If the output is different than 3XXX, set it by:
+
+ .. code-block:: console
+
+ setpci -s <NIC PCI address> 68.w=3XXX
+
+ The XXX can be different on different systems. Make sure to configure
+ according to the setpci output.
+
Usage example
-------------
diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst
index da6dc278..f4cb18bc 100644
--- a/doc/guides/nics/mlx5.rst
+++ b/doc/guides/nics/mlx5.rst
@@ -1,5 +1,6 @@
.. BSD LICENSE
Copyright 2015 6WIND S.A.
+ Copyright 2015 Mellanox
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -64,6 +65,9 @@ physical memory (or memory that does not belong to the current process).
This capability allows the PMD to coexist with kernel network interfaces
which remain functional, although they stop receiving unicast packets as
long as they share the same MAC address.
+This means legacy linux control tools (for example: ethtool, ifconfig and
+more) can operate on the same network interfaces that owned by the DPDK
+application.
Enabling librte_pmd_mlx5 causes DPDK applications to be linked against
libibverbs.
@@ -71,6 +75,7 @@ libibverbs.
Features
--------
+- Multi arch support: x86_64, POWER8, ARMv8.
- Multiple TX and RX queues.
- Support for scattered TX and RX frames.
- IPv4, IPv6, TCPv4, TCPv6, UDPv4 and UDPv6 RSS on any number of queues.
@@ -92,6 +97,8 @@ Features
- RSS hash result is supported.
- Hardware TSO.
- Hardware checksum TX offload for VXLAN and GRE.
+- RX interrupts.
+- Statistics query including Basic, Extended and per queue.
Limitations
-----------
@@ -100,6 +107,22 @@ Limitations
- Port statistics through software counters only.
- Hardware checksum RX offloads for VXLAN inner header are not supported yet.
- Secondary process RX is not supported.
+- Flow pattern without any specific vlan will match for vlan packets as well:
+
+ When VLAN spec is not specified in the pattern, the matching rule will be created with VLAN as a wild card.
+ Meaning, the flow rule::
+
+ flow create 0 ingress pattern eth / vlan vid is 3 / ipv4 / end ...
+
+ Will only match vlan packets with vid=3. and the flow rules::
+
+ flow create 0 ingress pattern eth / ipv4 / end ...
+
+ Or::
+
+ flow create 0 ingress pattern eth / vlan / ipv4 / end ...
+
+ Will match any ipv4 packet (VLAN included).
Configuration
-------------
@@ -156,13 +179,12 @@ Run-time configuration
- ``rxq_cqe_comp_en`` parameter [int]
A nonzero value enables the compression of CQE on RX side. This feature
- allows to save PCI bandwidth and improve performance at the cost of a
- slightly higher CPU usage. Enabled by default.
+ allows to save PCI bandwidth and improve performance. Enabled by default.
Supported on:
- - x86_64 with ConnectX4 and ConnectX4 LX
- - Power8 with ConnectX4 LX
+ - x86_64 with ConnectX-4, ConnectX-4 LX and ConnectX-5.
+ - POWER8 and ARMv8 with ConnectX-4 LX and ConnectX-5.
- ``txq_inline`` parameter [int]
@@ -170,8 +192,8 @@ Run-time configuration
Can improve PPS performance when PCI back pressure is detected and may be
useful for scenarios involving heavy traffic on many queues.
- It is not enabled by default (set to 0) since the additional software
- logic necessary to handle this mode can lower performance when back
+ Because additional software logic is necessary to handle this mode, this
+ option should be used with care, as it can lower performance when back
pressure is not expected.
- ``txqs_min_inline`` parameter [int]
@@ -181,6 +203,15 @@ Run-time configuration
This option should be used in combination with ``txq_inline`` above.
+ On ConnectX-4, ConnectX-4 LX and ConnectX-5 without Enhanced MPW:
+
+ - Disabled by default.
+ - In case ``txq_inline`` is set recommendation is 4.
+
+ On ConnectX-5 with Enhanced MPW:
+
+ - Set to 8 by default.
+
- ``txq_mpw_en`` parameter [int]
A nonzero value enables multi-packet send (MPS) for ConnectX-4 Lx and
@@ -221,9 +252,21 @@ Run-time configuration
A nonzero value enables hardware TSO.
When hardware TSO is enabled, packets marked with TCP segmentation
- offload will be divided into segments by the hardware.
+ offload will be divided into segments by the hardware. Disabled by default.
+
+- ``tx_vec_en`` parameter [int]
- Disabled by default.
+ A nonzero value enables Tx vector on ConnectX-5 only NIC if the number of
+ global Tx queues on the port is lesser than MLX5_VPMD_MIN_TXQS.
+
+ Enabled by default on ConnectX-5.
+
+- ``rx_vec_en`` parameter [int]
+
+ A nonzero value enables Rx vector if the port is not configured in
+ multi-segment otherwise this parameter is ignored.
+
+ Enabled by default.
Prerequisites
-------------
@@ -279,13 +322,13 @@ DPDK and must be installed separately:
Currently supported by DPDK:
-- Mellanox OFED version: **4.0-2.0.0.0**
+- Mellanox OFED version: **4.1**.
- firmware version:
- - ConnectX-4: **12.18.2000**
- - ConnectX-4 Lx: **14.18.2000**
- - ConnectX-5: **16.19.1200**
- - ConnectX-5 Ex: **16.19.1200**
+ - ConnectX-4: **12.20.1010** and above.
+ - ConnectX-4 Lx: **14.20.1010** and above.
+ - ConnectX-5: **16.20.1010** and above.
+ - ConnectX-5 Ex: **16.20.1010** and above.
Getting Mellanox OFED
~~~~~~~~~~~~~~~~~~~~~
@@ -330,6 +373,155 @@ Supported NICs
* Mellanox(R) ConnectX(R)-5 100G MCX556A-ECAT (2x100G)
* Mellanox(R) ConnectX(R)-5 Ex EN 100G MCX516A-CDAT (2x100G)
+Quick Start Guide
+-----------------
+
+1. Download latest Mellanox OFED. For more info check the `prerequisites`_.
+
+
+2. Install the required libraries and kernel modules either by installing
+ only the required set, or by installing the entire Mellanox OFED:
+
+ .. code-block:: console
+
+ ./mlnxofedinstall
+
+3. Verify the firmware is the correct one:
+
+ .. code-block:: console
+
+ ibv_devinfo
+
+4. Verify all ports links are set to Ethernet:
+
+ .. code-block:: console
+
+ mlxconfig -d <mst device> query | grep LINK_TYPE
+ LINK_TYPE_P1 ETH(2)
+ LINK_TYPE_P2 ETH(2)
+
+ Link types may have to be configured to Ethernet:
+
+ .. code-block:: console
+
+ mlxconfig -d <mst device> set LINK_TYPE_P1/2=1/2/3
+
+ * LINK_TYPE_P1=<1|2|3> , 1=Infiniband 2=Ethernet 3=VPI(auto-sense)
+
+ For hypervisors verify SR-IOV is enabled on the NIC:
+
+ .. code-block:: console
+
+ mlxconfig -d <mst device> query | grep SRIOV_EN
+ SRIOV_EN True(1)
+
+ If needed, set enable the set the relevant fields:
+
+ .. code-block:: console
+
+ mlxconfig -d <mst device> set SRIOV_EN=1 NUM_OF_VFS=16
+ mlxfwreset -d <mst device> reset
+
+5. Restart the driver:
+
+ .. code-block:: console
+
+ /etc/init.d/openibd restart
+
+ or:
+
+ .. code-block:: console
+
+ service openibd restart
+
+ If link type was changed, firmware must be reset as well:
+
+ .. code-block:: console
+
+ mlxfwreset -d <mst device> reset
+
+ For hypervisors, after reset write the sysfs number of virtual functions
+ needed for the PF.
+
+ To dynamically instantiate a given number of virtual functions (VFs):
+
+ .. code-block:: console
+
+ echo [num_vfs] > /sys/class/infiniband/mlx5_0/device/sriov_numvfs
+
+6. Compile DPDK and you are ready to go. See instructions on
+ :ref:`Development Kit Build System <Development_Kit_Build_System>`
+
+Performance tuning
+------------------
+
+1. Configure aggressive CQE Zipping for maximum performance:
+
+ .. code-block:: console
+
+ mlxconfig -d <mst device> s CQE_COMPRESSION=1
+
+ To set it back to the default CQE Zipping mode use:
+
+ .. code-block:: console
+
+ mlxconfig -d <mst device> s CQE_COMPRESSION=0
+
+2. In case of virtualization:
+
+ - Make sure that hypervisor kernel is 3.16 or newer.
+ - Configure boot with ``iommu=pt``.
+ - Use 1G huge pages.
+ - Make sure to allocate a VM on huge pages.
+ - Make sure to set CPU pinning.
+
+3. Use the CPU near local NUMA node to which the PCIe adapter is connected,
+ for better performance. For VMs, verify that the right CPU
+ and NUMA node are pinned according to the above. Run:
+
+ .. code-block:: console
+
+ lstopo-no-graphics
+
+ to identify the NUMA node to which the PCIe adapter is connected.
+
+4. If more than one adapter is used, and root complex capabilities allow
+ to put both adapters on the same NUMA node without PCI bandwidth degradation,
+ it is recommended to locate both adapters on the same NUMA node.
+ This in order to forward packets from one to the other without
+ NUMA performance penalty.
+
+5. Disable pause frames:
+
+ .. code-block:: console
+
+ ethtool -A <netdev> rx off tx off
+
+6. Verify IO non-posted prefetch is disabled by default. This can be checked
+ via the BIOS configuration. Please contact you server provider for more
+ information about the settings.
+
+.. note::
+
+ On some machines, depends on the machine integrator, it is beneficial
+ to set the PCI max read request parameter to 1K. This can be
+ done in the following way:
+
+ To query the read request size use:
+
+ .. code-block:: console
+
+ setpci -s <NIC PCI address> 68.w
+
+ If the output is different than 3XXX, set it by:
+
+ .. code-block:: console
+
+ setpci -s <NIC PCI address> 68.w=3XXX
+
+ The XXX can be different on different systems. Make sure to configure
+ according to the setpci output.
+
Notes for testpmd
-----------------
diff --git a/doc/guides/nics/overview.rst b/doc/guides/nics/overview.rst
index 757a3c90..0df0ef81 100644
--- a/doc/guides/nics/overview.rst
+++ b/doc/guides/nics/overview.rst
@@ -48,6 +48,8 @@ There are more differences between drivers regarding some internal properties,
portability or even documentation availability.
Most of these differences are summarized below.
+More details about features can be found in :doc:`features`.
+
.. _table_net_pmd_features:
.. include:: overview_table.txt
diff --git a/doc/guides/nics/qede.rst b/doc/guides/nics/qede.rst
index afe2df89..09a10be1 100644
--- a/doc/guides/nics/qede.rst
+++ b/doc/guides/nics/qede.rst
@@ -62,13 +62,13 @@ Supported Features
- VXLAN tunneling offload
- N-tuple filter and flow director (limited support)
- LRO/TSO
+- NPAR (NIC Partitioning)
Non-supported Features
----------------------
- SR-IOV PF
- GENEVE and NVGRE Tunneling offloads
-- NPAR
Supported QLogic Adapters
-------------------------
diff --git a/doc/guides/nics/sfc_efx.rst b/doc/guides/nics/sfc_efx.rst
index 5f825e9a..7761989c 100644
--- a/doc/guides/nics/sfc_efx.rst
+++ b/doc/guides/nics/sfc_efx.rst
@@ -259,7 +259,7 @@ boolean parameters value.
- ``debug_init`` [bool] (default **n**)
- Enable extra logging during device intialization and startup.
+ Enable extra logging during device initialization and startup.
- ``mcdi_logging`` [bool] (default **n**)
diff --git a/doc/guides/nics/szedata2.rst b/doc/guides/nics/szedata2.rst
index 60080a9f..1a5d4138 100644
--- a/doc/guides/nics/szedata2.rst
+++ b/doc/guides/nics/szedata2.rst
@@ -91,14 +91,34 @@ These configuration options can be modified before compilation in the
* ``CONFIG_RTE_LIBRTE_PMD_SZEDATA2_AS`` default value: **0**
- This option defines type of firmware address space.
- Currently supported value is:
+ This option defines type of firmware address space and must be set
+ according to the used card and mode.
+ Currently supported values are:
- * **0** for firmwares:
+ * **0** - for cards (modes):
- * NIC_100G1_LR4
- * HANIC_100G1_LR4
- * HANIC_100G1_SR10
+ * NFB-100G1 (100G1)
+
+ * **1** - for cards (modes):
+
+ * NFB-100G2Q (100G1)
+
+ * **2** - for cards (modes):
+
+ * NFB-40G2 (40G2)
+ * NFB-100G2C (100G2)
+ * NFB-100G2Q (40G2)
+
+ * **3** - for cards (modes):
+
+ * NFB-40G2 (10G8)
+ * NFB-100G2Q (10G8)
+
+ * **4** - for cards (modes):
+
+ * NFB-100G1 (10G10)
+
+ * **5** - for experimental firmwares and future use
Using the SZEDATA2 PMD
----------------------
diff --git a/doc/guides/nics/tap.rst b/doc/guides/nics/tap.rst
index 5c5ba535..f3ee95d2 100644
--- a/doc/guides/nics/tap.rst
+++ b/doc/guides/nics/tap.rst
@@ -46,7 +46,7 @@ These TAP interfaces can be used with Wireshark or tcpdump or Pktgen-DPDK
along with being able to be used as a network connection to the DPDK
application. The method enable one or more interfaces is to use the
``--vdev=net_tap0`` option on the DPDK application command line. Each
-``--vdev=net_tap1`` option give will create an interface named dtap0, dtap1,
+``--vdev=net_tap1`` option given will create an interface named dtap0, dtap1,
and so on.
The interface name can be changed by adding the ``iface=foo0``, for example::
@@ -58,6 +58,17 @@ needed, but the interface does not enforce that speed, for example::
--vdev=net_tap0,iface=foo0,speed=25000
+Normally the PMD will generate a random MAC address, but when testing or with
+a static configuration the developer may need a fixed MAC address style.
+Using the option ``mac=fixed`` you can create a fixed known MAC address::
+
+ --vdev=net_tap0,mac=fixed
+
+The MAC address will have a fixed value with the last octet incrementing by one
+for each interface string containing ``mac=fixed``. The MAC address is formatted
+as 00:'d':'t':'a':'p':[00-FF]. Convert the characters to hex and you get the
+actual MAC address: ``00:64:74:61:70:[00-FF]``.
+
It is possible to specify a remote netdevice to capture packets from by adding
``remote=foo1``, for example::
diff --git a/doc/guides/nics/thunderx.rst b/doc/guides/nics/thunderx.rst
index 4fa0039d..45bc690a 100644
--- a/doc/guides/nics/thunderx.rst
+++ b/doc/guides/nics/thunderx.rst
@@ -1,5 +1,5 @@
.. BSD LICENSE
- Copyright (C) Cavium networks Ltd. 2016.
+ Copyright (C) Cavium, Inc. 2016.
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -12,7 +12,7 @@
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
- * Neither the name of Cavium networks nor the names of its
+ * Neither the name of Cavium, Inc nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
@@ -35,7 +35,7 @@ The ThunderX NICVF PMD (**librte_pmd_thunderx_nicvf**) provides poll mode driver
support for the inbuilt NIC found in the **Cavium ThunderX** SoC family
as well as their virtual functions (VF) in SR-IOV context.
-More information can be found at `Cavium Networks Official Website
+More information can be found at `Cavium, Inc Official Website
<http://www.cavium.com/ThunderX_ARM_Processors.html>`_.
Features
diff --git a/doc/guides/nics/virtio.rst b/doc/guides/nics/virtio.rst
index 91bedea6..4d6a8376 100644
--- a/doc/guides/nics/virtio.rst
+++ b/doc/guides/nics/virtio.rst
@@ -34,6 +34,7 @@ Poll Mode Driver for Emulated Virtio NIC
Virtio is a para-virtualization framework initiated by IBM, and supported by KVM hypervisor.
In the Data Plane Development Kit (DPDK),
we provide a virtio Poll Mode Driver (PMD) as a software solution, comparing to SRIOV hardware solution,
+
for fast guest VM to guest VM communication and guest VM to host communication.
Vhost is a kernel acceleration module for virtio qemu backend.
@@ -41,9 +42,6 @@ The DPDK extends kni to support vhost raw socket interface,
which enables vhost to directly read/ write packets from/to a physical port.
With this enhancement, virtio could achieve quite promising performance.
-In future release, we will also make enhancement to vhost backend,
-releasing peak performance of virtio PMD driver.
-
For basic qemu-KVM installation and other Intel EM poll mode driver in guest VM,
please refer to Chapter "Driver for VM Emulated Devices".
@@ -73,15 +71,20 @@ In this release, the virtio PMD driver provides the basic functionality of packe
* It supports multicast packets and promiscuous mode.
-* The descriptor number for the Rx/Tx queue is hard-coded to be 256 by qemu.
+* The descriptor number for the Rx/Tx queue is hard-coded to be 256 by qemu 2.7 and below.
If given a different descriptor number by the upper application,
the virtio PMD generates a warning and fall back to the hard-coded value.
+ Rx queue size can be configureable and up to 1024 since qemu 2.8 and above. Rx queue size is 256
+ by default. Tx queue size is still hard-coded to be 256.
* Features of mac/vlan filter are supported, negotiation with vhost/backend are needed to support them.
When backend can't support vlan filter, virtio app on guest should disable vlan filter to make sure
the virtio port is configured correctly. E.g. specify '--disable-hw-vlan' in testpmd command line.
-* RTE_PKTMBUF_HEADROOM should be defined larger than sizeof(struct virtio_net_hdr), which is 10 bytes.
+* "RTE_PKTMBUF_HEADROOM" should be defined
+ no less than "sizeof(struct virtio_net_hdr_mrg_rxbuf)", which is 12 bytes when mergeable or
+ "VIRTIO_F_VERSION_1" is set.
+ no less than "sizeof(struct virtio_net_hdr)", which is 10 bytes, when using non-mergeable.
* Virtio does not support runtime configuration.