The Netvsc Poll Mode driver (PMD) provides support for the paravirtualized
network device for Microsoft Hyper-V. It can be used with
-Window Server 2008/2012/2016, Windows 10 and Azure cloud.
+Window Server 2008/2012/2016, Windows 10.
The device offers multi-queue support (if kernel and host support it),
checksum and segmentation offloads.
* The PMD supports multicast packets and promiscuous mode subject to restrictions on the host.
In order to this to work, the guest network configuration on Hyper-V must be configured to allow MAC address
- spoofing. This option is not available on Azure.
+ spoofing.
* The device has only a single MAC address.
Hyper-V driver does not support MAC or VLAN filtering because the Hyper-V host does not support it.
* VLAN tags are always stripped and presented in mbuf tci field.
-* The Hyper-V driver does not use or support Link State or Rx interrupt.
+* The Hyper-V driver does not use or support interrupts. Link state change
+ callback is done via change events in the packet ring.
* The maximum number of queues is limited by the host (currently 64).
When used with 4.16 kernel only a single queue is available.
-* This driver is intended for use with synthetic path only.
- Accelerated Networking (SR-IOV) acceleration is not supported yet.
- Use the VDEV_NETVSC device for accelerated networking instead.
-
+* This driver supports SR-IOV network acceleration.
+ If SR-IOV is enabled then the driver will transparently manage the interface,
+ and send and receive packets using the VF path.
+ The VDEV_NETVSC and FAILSAFE drivers are *not* used when using netvsc PMD.
Installation
------------
.. _`UUID`: https://en.wikipedia.org/wiki/Universally_unique_identifier
-There are several possible ways to assign the uio device driver for a device.
+There are several possible ways to assign the UIO device driver for a device.
The easiest way (but only on 4.18 or later)
is to use the `driverctl Device Driver control utility`_ to override
the normal kernel device.
.. Note::
- The dpkd-devbind.py script should not be used. It only handles PCI devices.
+ The dpdk-devbind.py script can not be used since it only handles PCI devices.
Prerequisites
* Linux kernel support for UIO on vmbus is done with the uio_hv_generic driver.
Full support of multiple queues requires the 4.17 kernel. It is possible
to use the netvsc PMD with 4.16 kernel but it is limited to a single queue.
+
+
+Netvsc PMD arguments
+--------------------
+
+The user can specify below argument in devargs.
+
+#. ``latency``:
+
+ A netvsc device uses a mailbox page to indicate to the host that there
+ is something in the transmit queue. The host scans this page at a
+ periodic interval. This parameter allows adjusting the value that
+ is used by the host. Smaller values improve transmit latency, and larger
+ values save CPU cycles. This parameter is in microseconds.
+ If the value is too large or too small it will be
+ ignored by the host. (Default: 50)
+
+#. ``rx_copybreak``:
+
+ The rx_copybreak sets the threshold where the driver uses an external
+ mbuf to avoid having to copy data. Setting 0 for copybreak will cause
+ driver to always create an external mbuf. Setting a value greater than
+ the MTU would prevent it from ever making an external mbuf and always
+ copy. The default value is 256 (bytes).
+
+#. ``tx_copybreak``:
+
+ The tx_copybreak sets the threshold where the driver aggregates
+ multiple small packets into one request. If tx_copybreak is 0 then
+ each packet goes as a VMBus request (no copying). If tx_copybreak is
+ set larger than the MTU, then all packets smaller than the chunk size
+ of the VMBus send buffer will be copied; larger packets always have to
+ go as a single direct request. The default value is 512 (bytes).
+
+#. ``rx_extmbuf_enable``:
+ The rx_extmbuf_enable is used to control if netvsc should use external
+ mbuf for receiving packets. The default value is 0. (netvsc doesn't use
+ external mbuf, it always allocates mbuf and copy received data to mbuf)
+ A non-zero value tells netvsc to attach external buffers to mbuf on
+ receiving packets, thus avoid copying memory. Use of external buffers
+ requires the application is able to read data from external mbuf.