-Note that in order to use VFIO, your kernel must support it.
-VFIO kernel modules have been included in the Linux kernel since version 3.6.0 and are usually present by default,
-however please consult your distributions documentation to make sure that is the case.
-
-Also, to use VFIO, both kernel and BIOS must support and be configured to use IO virtualization (such as IntelĀ® VT-d).
-
-For proper operation of VFIO when running DPDK applications as a non-privileged user, correct permissions should also be set up.
-This can be done by using the DPDK setup script (called setup.sh and located in the tools directory).
-
-Binding and Unbinding Network Ports to/from the igb_uioor VFIO Modules
-----------------------------------------------------------------------
-
-As of release 1.4, DPDK applications no longer automatically unbind all supported network ports from the kernel driver in use.
-Instead, all ports that are to be used by an DPDK application must be bound to the igb_uio or vfio-pci module before the application is run.
-Any network ports under Linux* control will be ignored by the DPDK poll-mode drivers and cannot be used by the application.
-
-.. warning::
-
- The DPDK will, by default, no longer automatically unbind network ports from the kernel driver at startup.
- Any ports to be used by an DPDK application must be unbound from Linux* control and bound to the igb_uio or vfio-pci module before the application is run.
-
-To bind ports to the igb_uio or vfio-pci module for DPDK use, and then subsequently return ports to Linux* control,
-a utility script called dpdk_nic _bind.py is provided in the tools subdirectory.
-This utility can be used to provide a view of the current state of the network ports on the system,
-and to bind and unbind those ports from the different kernel modules, including igb_uio and vfio-pci.
-The following are some examples of how the script can be used.
-A full description of the script and its parameters can be obtained by calling the script with the --help or --usage options.
-
-.. 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_nic_bind.py script to view the status of the network ports,
- binding or unbinding network ports requires root privileges.
-
-To see the status of all network ports on the system:
-
-.. code-block:: console
-
- root@host:DPDK# ./tools/dpdk_nic_bind.py --status
-
- Network devices using IGB_UIO driver
- ====================================
- 0000:82:00.0 '82599EB 10-Gigabit SFI/SFP+ Network Connection' drv=igb_uio unused=ixgbe
- 0000:82:00.1 '82599EB 10-Gigabit SFI/SFP+ Network Connection' drv=igb_uio unused=ixgbe
-
- Network devices using kernel driver
- ===================================
- 0000:04:00.0 'I350 Gigabit Network Connection' if=em0 drv=igb unused=igb_uio *Active*
- 0000:04:00.1 'I350 Gigabit Network Connection' if=eth1 drv=igb unused=igb_uio
- 0000:04:00.2 'I350 Gigabit Network Connection' if=eth2 drv=igb unused=igb_uio
- 0000:04:00.3 'I350 Gigabit Network Connection' if=eth3 drv=igb unused=igb_uio
-
- Other network devices
- =====================
- <none>
-
-To bind device eth1, 04:00.1, to the igb_uio driver:
-
-.. code-block:: console
-
- root@host:DPDK# ./tools/dpdk_nic_bind.py --bind=igb_uio 04:00.1
-
-or, alternatively,