* Virtio supports software vlan stripping and inserting.
-* Virtio supports using port IO to get PCI resource when uio/igb_uio module is not available.
+* Virtio supports using port IO to get PCI resource when UIO module is not available.
Prerequisites
-------------
insmod rte_kni.ko
- Other basic DPDK preparations like hugepage enabling, uio port binding are not listed here.
+ Other basic DPDK preparations like hugepage enabling,
+ UIO port binding are not listed here.
Please refer to the *DPDK Getting Started Guide* for detailed instructions.
#. Launch the kni user application:
.. code-block:: console
- examples/kni/build/app/kni -l 0-3 -n 4 -- -p 0x1 -P --config="(0,1,3)"
+ <build_dir>/examples/dpdk-kni -l 0-3 -n 4 -- -p 0x1 -P --config="(0,1,3)"
This command generates one network device vEth0 for physical port.
If specify more physical ports, the generated network device will be vEth1, vEth2, and so on.
.. code-block:: console
modprobe uio
- echo 512 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
+ dpdk-hugepages.py --setup 1G
modprobe uio_pci_generic
- python usertools/dpdk-devbind.py -b uio_pci_generic 00:03.0
+ ./usertools/dpdk-devbind.py -b uio_pci_generic 00:03.0
We use testpmd as the forwarding application in this example.
Example of using the vector version of the virtio poll mode driver in
``testpmd``::
- testpmd -l 0-2 -n 4 -- -i --rxq=1 --txq=1 --nb-cores=1
+ dpdk-testpmd -l 0-2 -n 4 -- -i --rxq=1 --txq=1 --nb-cores=1
In-order callbacks only work on simulated virtio user vdev.
.. code-block:: console
- python usertools/dpdk-devbind.py -b vfio-pci 00:03.0
+ ./usertools/dpdk-devbind.py -b vfio-pci 00:03.0
Example
~~~~~~~
.. code-block:: console
- $ l3fwd-power -l 0-1 -- -p 1 -P --config="(0,0,1)" \
+ $ dpdk-l3fwd-power -l 0-1 -- -p 1 -P --config="(0,0,1)" \
--no-numa --parse-ptype
It is used to specify link speed of virtio device. Link speed is a part of
link status structure. It could be requested by application using
rte_eth_link_get_nowait function.
- (Default: 10000 (10G))
+ (Default: 0xffffffff (Unknown))
#. ``vectorized``:
It is used to specify link speed of virtio device. Link speed is a part of
link status structure. It could be requested by application using
rte_eth_link_get_nowait function.
- (Default: 10000 (10G))
+ (Default: 0xffffffff (Unknown))
+#. ``vectorized``:
+
+ It is used to specify whether virtio device prefers to use vectorized path.
+ Afterwards, dependencies of vectorized path will be checked in path
+ election.
+ (Default: 0 (disabled))
Virtio paths Selection and Usage
--------------------------------
both negotiated, this path will be selected.
#. Packed virtqueue in-order non-mergeable path: If in-order feature is negotiated and
Rx mergeable is not negotiated, this path will be selected.
+#. Packed virtqueue vectorized Rx path: If building and running environment support
+ (AVX512 || NEON) && in-order feature is negotiated && Rx mergeable
+ is not negotiated && TCP_LRO Rx offloading is disabled && vectorized option enabled,
+ this path will be selected.
+#. Packed virtqueue vectorized Tx path: If building and running environment support
+ (AVX512 || NEON) && in-order feature is negotiated && vectorized option enabled,
+ this path will be selected.
Rx/Tx callbacks of each Virtio path
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packed virtqueue non-meregable path virtio_recv_pkts_packed virtio_xmit_pkts_packed
Packed virtqueue in-order mergeable path virtio_recv_mergeable_pkts_packed virtio_xmit_pkts_packed
Packed virtqueue in-order non-mergeable path virtio_recv_pkts_packed virtio_xmit_pkts_packed
+ Packed virtqueue vectorized Rx path virtio_recv_pkts_packed_vec virtio_xmit_pkts_packed
+ Packed virtqueue vectorized Tx path virtio_recv_pkts_packed virtio_xmit_pkts_packed_vec
============================================ ================================= ========================
Virtio paths Support Status from Release to Release
.. table:: Virtio Paths and Releases
- ============================================ ============= ============= =============
- Virtio paths 16.11 ~ 18.05 18.08 ~ 18.11 19.02 ~ 19.11
- ============================================ ============= ============= =============
- Split virtqueue mergeable path Y Y Y
- Split virtqueue non-mergeable path Y Y Y
- Split virtqueue vectorized Rx path Y Y Y
- Split virtqueue simple Tx path Y N N
- Split virtqueue in-order mergeable path Y Y
- Split virtqueue in-order non-mergeable path Y Y
- Packed virtqueue mergeable path Y
- Packed virtqueue non-mergeable path Y
- Packed virtqueue in-order mergeable path Y
- Packed virtqueue in-order non-mergeable path Y
- ============================================ ============= ============= =============
+ ============================================ ============= ============= ============= =======
+ Virtio paths 16.11 ~ 18.05 18.08 ~ 18.11 19.02 ~ 19.11 20.05 ~
+ ============================================ ============= ============= ============= =======
+ Split virtqueue mergeable path Y Y Y Y
+ Split virtqueue non-mergeable path Y Y Y Y
+ Split virtqueue vectorized Rx path Y Y Y Y
+ Split virtqueue simple Tx path Y N N N
+ Split virtqueue in-order mergeable path Y Y Y
+ Split virtqueue in-order non-mergeable path Y Y Y
+ Packed virtqueue mergeable path Y Y
+ Packed virtqueue non-mergeable path Y Y
+ Packed virtqueue in-order mergeable path Y Y
+ Packed virtqueue in-order non-mergeable path Y Y
+ Packed virtqueue vectorized Rx path Y
+ Packed virtqueue vectorized Tx path Y
+ ============================================ ============= ============= ============= =======
QEMU Support Status
~~~~~~~~~~~~~~~~~~~