[dpdk-dev] [PATCH 3/4] doc: add basic invocation info for dpdk-devbind

Christian Ehrhardt christian.ehrhardt at canonical.com
Thu Aug 4 13:16:58 CEST 2016


This summarizes the "how to call dpdk-pmdinfo" in one place to be
picked up by html/pdf/man-page docs.

That knowledge was available before but spread in various docs along
examples (which are great and have to be kept) as well as in the
--usage/--help option of the tool itself.

Signed-off-by: Christian Ehrhardt <christian.ehrhardt at canonical.com>
---
 doc/guides/conf.py                   |   4 +-
 doc/guides/sample_app_ug/devbind.rst | 150 +++++++++++++++++++++++++++++++++++
 doc/guides/sample_app_ug/index.rst   |   1 +
 3 files changed, 154 insertions(+), 1 deletion(-)
 create mode 100644 doc/guides/sample_app_ug/devbind.rst

diff --git a/doc/guides/conf.py b/doc/guides/conf.py
index 48fe890..ad8e8b3 100644
--- a/doc/guides/conf.py
+++ b/doc/guides/conf.py
@@ -100,7 +100,9 @@ man_pages = [("testpmd_app_ug/run_app", "testpmd",
              ("sample_app_ug/proc_info", "dpdk-procinfo",
               "access dpdk port stats and memory info", "", 1),
              ("sample_app_ug/pmdinfo", "dpdk-pmdinfo",
-              "dump a PMDs hardware support info", "", 1)]
+              "dump a PMDs hardware support info", "", 1),
+             ("sample_app_ug/devbind", "dpdk-devbind",
+              "check device status and bind/unbind them from drivers", "", 1)]
 
 ######## :numref: fallback ########
 # The following hook functions add some simple handling for the :numref:
diff --git a/doc/guides/sample_app_ug/devbind.rst b/doc/guides/sample_app_ug/devbind.rst
new file mode 100644
index 0000000..297e1b7
--- /dev/null
+++ b/doc/guides/sample_app_ug/devbind.rst
@@ -0,0 +1,150 @@
+
+..  BSD LICENSE
+    Copyright(c) 2016 Canonical Limited. 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.
+
+
+dpdk-devbind Application
+========================
+
+The ``dpdk-devbind`` tool is a Data Plane Development Kit (DPDK) tool that helps binding and unbinding devices from specific drivers.
+As well as checking their status in that regard.
+
+
+Running the Application
+-----------------------
+
+The tool has a number of command line options:
+
+.. code-block:: console
+
+   dpdk-devbind [options] DEVICE1 DEVICE2 ....
+
+OPTIONS
+-------
+
+* ``--help, --usage``
+
+        Display usage information and quit
+
+* ``-s, --status``
+
+        Print the current status of all known network interfaces.
+        For each device, it displays the PCI domain, bus, slot and function,
+        along with a text description of the device. Depending upon whether the
+        device is being used by a kernel driver, the igb_uio driver, or no
+        driver, other relevant information will be displayed:
+        * the Linux interface name e.g. if=eth0
+        * the driver being used e.g. drv=igb_uio
+        * any suitable drivers not currently using that device
+            e.g. unused=igb_uio
+        NOTE: if this flag is passed along with a bind/unbind option, the
+        status display will always occur after the other operations have taken
+        place.
+
+* ``-b driver, --bind=driver``
+
+        Select the driver to use or "none" to unbind the device
+
+* ``-u, --unbind``
+
+        Unbind a device (Equivalent to "-b none")
+
+* ``--force``
+
+        By default, devices which are used by Linux - as indicated by having
+        routes in the routing table - cannot be modified. Using the --force
+        flag overrides this behavior, allowing active links to be forcibly
+        unbound.
+        WARNING: This can lead to loss of network connection and should be used
+        with caution.
+
+
+.. warning::
+
+    Due to the way VFIO works, there are certain limitations to which devices can be used with VFIO.
+    Mainly it comes down to how IOMMU groups work.
+    Any Virtual Function device can be used with VFIO on its own, but physical devices will require either all ports bound to VFIO,
+    or some of them bound to VFIO while others not being bound to anything at all.
+
+    If your device is behind a PCI-to-PCI bridge, the bridge will then be part of the IOMMU group in which your device is in.
+    Therefore, the bridge driver should also be unbound from the bridge PCI device for VFIO to work with devices behind the bridge.
+
+.. warning::
+
+    While any user can run the dpdk-devbind.py script to view the status of the network ports,
+    binding or unbinding network ports requires root privileges.
+
+
+Examples
+--------
+
+To display current device status:
+.. code-block:: console
+
+   dpdk-devbind --status
+
+To bind eth1 from the current driver and move to use igb_uio
+.. code-block:: console
+
+   dpdk-devbind --bind=igb_uio eth1
+
+To unbind 0000:01:00.0 from using any driver
+.. code-block:: console
+
+   dpdk-devbind -u 0000:01:00.0
+
+To bind 0000:02:00.0 and 0000:02:00.1 to the ixgbe kernel driver
+.. code-block:: console
+
+   dpdk-devbind -b ixgbe 02:00.0 02:00.1
+
+To check status of all network ports, assign one to the igb_uio driver and check status again.
+
+.. code-block:: console
+
+   # Check the status of the available devices.
+   dpdk-devbind --status
+   Network devices using DPDK-compatible driver
+   ============================================
+   <none>
+
+   Network devices using kernel driver
+   ===================================
+   0000:0a:00.0 '82599ES 10-Gigabit' if=eth2 drv=ixgbe unused=
+
+
+   # Bind the device to igb_uio.
+   sudo dpdk-devbind -b igb_uio 0000:0a:00.0
+
+
+   # Recheck the status of the devices.
+   dpdk-devbind --status
+   Network devices using DPDK-compatible driver
+   ============================================
+   0000:0a:00.0 '82599ES 10-Gigabit' drv=igb_uio unused=
diff --git a/doc/guides/sample_app_ug/index.rst b/doc/guides/sample_app_ug/index.rst
index 7801688..c2fd566 100644
--- a/doc/guides/sample_app_ug/index.rst
+++ b/doc/guides/sample_app_ug/index.rst
@@ -78,6 +78,7 @@ Sample Applications User Guide
     ipsec_secgw
     pdump
     pmdinfo
+    devbind
 
 **Figures**
 
-- 
2.7.4



More information about the dev mailing list