< Previous | Contents | Next >
5.1. Prerequisites
This package is currently compiled for the lowest possible CPU requirements. Which still requires at least SSE3 to be supported by the CPU.
The list of upstream DPDK supported network cards can be found at supported NICs22. But a lot of those are disabled by default in the upstream Project as they are not yet in a stable state. The subset of network cards that DPDK has enabled in the package as available in Ubuntu 16.04 is:
Intel
• e100023 (82540, 82545, 82546)
• e1000e24 (82571..82574, 82583, ICH8..ICH10, PCH..PCH2)
• igb25 (82575..82576, 82580, I210, I211, I350, I354, DH89xx)
• ixgbe26 (82598..82599, X540, X550)
• i40e27 (X710, XL710, X722)
• fm10k28 (FM10420)
Chelsio
• cxgbe29 (Terminator 5)
Cisco
• enic30 (UCS Virtual Interface Card) Paravirtualization
23 http://dpdk.org/doc/guides/nics/e1000em.html
24 http://dpdk.org/browse/dpdk/tree/drivers/net/e1000/
25 http://dpdk.org/browse/dpdk/tree/drivers/net/e1000/
26 http://dpdk.org/doc/guides/nics/ixgbe.html
27 http://dpdk.org/browse/dpdk/tree/drivers/net/i40e/
28 http://dpdk.org/doc/guides/nics/fm10k.html
29 http://dpdk.org/doc/guides/nics/cxgbe.html
30 http://dpdk.org/browse/dpdk/tree/drivers/net/enic
• virtio-net31 (QEMU)
• vmxnet332
Others
• af_packet33 (Linux AF_PACKET socket)
• ring34 (memory)
On top it experimentally enables the following two PMD drivers as they represent (virtual) devices that are very accessible to end users.
Paravirtualization
• xenvirt35 (Xen)
Others
• pcap36 (file or kernel driver)
Cards have to be unassigned from their kernel driver and instead be assigned to uio_pci_generic of vfio-pci. uio_pci_generic is older and usually getting to work more easily.
The newer vfio-pci requires that you activate the following kernel parameters to enable iommu.
iommu=pt intel_iommu=on
On top for vfio-pci you then have to configure and assign the iommu groups accordingly.
Note: In virtio based environment it is enough to "unassign" devices from the kernel driver. Without that DPDK will reject to use the device to avoid issues with kernel and DPDK working on the device at the same time. Since DPDK can work directly on virtio devices it is not required to assign e.g. uio_pci_generic to those devices.
Manual configuration and status checks can be done via sysfs or with the tool dpdk_nic_bind
dpdk_nic_bind --help
Usage:
------
dpdk_nic_bind [options] DEVICE1 DEVICE2 ....
where DEVICE1, DEVICE2 etc, are specified via PCI "domain:bus:slot.func" syntax or "bus:slot.func" syntax. For devices bound to Linux kernel drivers, they may
31 http://dpdk.org/doc/guides/nics/virtio.html
32 http://dpdk.org/doc/guides/nics/vmxnet3.html
33 http://dpdk.org/browse/dpdk/tree/drivers/net/af_packet
34 http://dpdk.org/doc/guides/nics/pcap_ring.html#rings-based-pmd
35 http://dpdk.org/doc/guides/xen/pkt_switch.html#xen-pmd-frontend-prerequisites
36 http://dpdk.org/doc/guides/nics/pcap_ring.html#libpcap-based-pmd
also be referred to by Linux interface name e.g. eth0, eth1, em0, em1, etc.
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.
Examples:
---------
To display current device status: dpdk_nic_bind --status
To bind eth1 from the current driver and move to use igb_uio dpdk_nic_bind --bind=igb_uio eth1
To unbind 0000:01:00.0 from using any driver dpdk_nic_bind -u 0000:01:00.0
To bind 0000:02:00.0 and 0000:02:00.1 to the ixgbe kernel driver dpdk_nic_bind -b ixgbe 02:00.0 02:00.