9ad39c026c
This patch refactors the VPP sphinx docs in order to make it easier to consume for external readers as well as VPP developers. It also makes sphinx the single source of documentation, which simplifies maintenance and operation. Most important updates are: - reformat the existing documentation as rst - split RELEASE.md and move it into separate rst files - remove section 'events' - remove section 'archive' - remove section 'related projects' - remove section 'feature by release' - remove section 'Various links' - make (Configuration reference, CLI docs, developer docs) top level items in the list - move 'Use Cases' as part of 'About VPP' - move 'Troubleshooting' as part of 'Getting Started' - move test framework docs into 'Developer Documentation' - add a 'Contributing' section for gerrit, docs and other contributer related infos - deprecate doxygen and test-docs targets - redirect the "make doxygen" target to "make docs" Type: refactor Change-Id: I552a5645d5b7964d547f99b1336e2ac24e7c209f Signed-off-by: Nathan Skrzypczak <nathan.skrzypczak@gmail.com> Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
185 lines
5.6 KiB
ReStructuredText
185 lines
5.6 KiB
ReStructuredText
.. _vmxnet3:
|
|
|
|
VPP with VMware/Vmxnet3
|
|
=======================
|
|
|
|
This section describes a native Vmxnet3 driver that is included with VPP.
|
|
This driver is written as a plugin and is found in src/plugin/vmxnet3.
|
|
|
|
Advantages
|
|
----------
|
|
|
|
The native VPP native vmxnet3 driver provides the following features
|
|
that are not provided with the standard dpdk vmxnet3 driver.
|
|
|
|
- Interrupt mode
|
|
- Adaptive mode
|
|
- LRO/TSO mode
|
|
|
|
Does not support
|
|
----------------
|
|
|
|
This driver does yet support the following features.
|
|
|
|
- VLAN filter
|
|
|
|
Prerequisites
|
|
-------------
|
|
|
|
- This code is tested with vfio-pci driver installed with Ubuntu 18.04
|
|
which has kernel version 4.15.0-33-generic.
|
|
|
|
- This code is tested with ESXi vSwitch version 6.5 and 6.7 for LRO/TSO support,
|
|
VMware Workstation 15 Pro (no LRO/TSO), and VMware Fusion 11 Pro (no LRO/TSO).
|
|
|
|
- Driver requires MSI-X interrupt support, which is not supported by
|
|
uio_pci_generic driver, so vfio-pci needs to be used. On systems
|
|
without IOMMU vfio driver can still be used with recent kernels which
|
|
support no-iommu mode.
|
|
|
|
VMware Fusion for Mac
|
|
---------------------
|
|
|
|
VMware fusion does not have a menu option to change the default driver (e1000)
|
|
to the **vmxnet3** driver. VPP supports the **vmxnet3** driver.
|
|
|
|
These instructions describe how to change the e1000 driver for VMware fusion.
|
|
|
|
* From the VMware Fusion menu bar select **Window** then **Virtual Machine
|
|
Library**.
|
|
* From the Virtual Machine menu right click on the Virtual Machine you are using
|
|
and select **Show in Finder**
|
|
* Find the name associated with the VM you are using, right click on it and
|
|
select **Show Package Contents**
|
|
* Find the **.vmx** file and edit it.
|
|
* Find all the occurrences of **e1000** and change them to **vmxnet3**
|
|
|
|
If you are concerned more with configuration not performance the vmxnet3 driver
|
|
can be set to **interrupt** mode in VPP. This will save a great deal on battery
|
|
usage. Do this with the following
|
|
|
|
VMware Workstation PRO 15 for Linux
|
|
-----------------------------------
|
|
|
|
VMware Workstation does not have a menu option to change the default driver
|
|
(e1000) to the **vmxnet3** driver. VPP supports the **vmxnet3** driver.
|
|
|
|
These instructions describe how to change the e1000 driver for VMware
|
|
Workstation PRO 15 Linux. You may need to be a superuser for performing these
|
|
steps.
|
|
|
|
* Shut down the VM you are about to change.
|
|
* From the vmware folder where vmware creates and stores the VM's, change the
|
|
directory to the specific VM which you want to modify, and use your favorite
|
|
text editor to open the corresponding VM's .vmx file. By default, it is
|
|
$HOME/vmware/<vm-name>/<vm-name>.vmx
|
|
* Locate the line for the interface which you want to modify. For example, if it
|
|
is ethernet1, then change the line **ethernet1.virtualDev = "e1000"** to
|
|
**ethernet1.virtualDev = "vmxnet3"**
|
|
* Save the file and power on the VM.
|
|
|
|
If you are concerned more with configuration not performance the vmxnet3 driver
|
|
can be set to **interrupt** mode in VPP. This will save a great deal on battery
|
|
usage. Do this with the following
|
|
|
|
.. code-block:: console
|
|
|
|
$ sudo vppctl set interface rx-mode <interface> interrupt
|
|
|
|
|
|
System setup
|
|
~~~~~~~~~~~~
|
|
|
|
To use the native VPP vmxnet3 driver use the following Steps
|
|
|
|
Load VFIO driver
|
|
|
|
.. code-block:: console
|
|
|
|
$ sudo modprobe vfio-pci
|
|
|
|
Make sure the interface is down
|
|
|
|
.. code-block:: console
|
|
|
|
$ sudo ifconfig <if-name> down
|
|
|
|
The next 2 steps are optional and may be accomplished by specifying the optional
|
|
"bind" keyword when creating the vmxnet3 interface.
|
|
|
|
For systems without IOMMU only, enable unsafe NOIOMMU mode
|
|
|
|
.. code-block:: console
|
|
|
|
$ echo Y | sudo tee /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
|
|
|
|
To bind interface to vfio-pci first install get the dpdk_devbind.py script.
|
|
|
|
Bind the driver with the following commands:
|
|
|
|
.. code-block:: console
|
|
|
|
$ sudo /usr/local/vpp/vpp-config/scripts/dpdk-devbind.py -s
|
|
|
|
Network devices using DPDK-compatible driver
|
|
============================================
|
|
<none>
|
|
|
|
Network devices using kernel driver
|
|
===================================
|
|
0000:03:00.0 'VMXNET3 Ethernet Controller' if=ens160 drv=vmxnet3 unused=vfio-pci,uio_pci_generic
|
|
0000:0b:00.0 'VMXNET3 Ethernet Controller' drv=vfio-pci unused=vmxnet3,uio_pci_generic
|
|
0000:13:00.0 'VMXNET3 Ethernet Controller' drv=vfio-pci unused=vmxnet3,uio_pci_generic
|
|
.....
|
|
|
|
$ sudo /usr/local/vpp/vpp-config/scripts/dpdk-devbind.py --bind vfio-pci 0b:00.0
|
|
|
|
|
|
Interface Creation
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
Now create the interface dynamically with following. The bind option must be
|
|
specified if pci is not already bound manually by above steps.
|
|
|
|
.. code-block:: console
|
|
|
|
$ sudo vppctl create interface vmxnet3 0000:0b:00.0 bind
|
|
$ sudo vppctl set interface state vmxnet3-0/b/0/0 up
|
|
|
|
Interface Deletion
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
If the interface needs to be deleted:
|
|
|
|
.. code-block:: console
|
|
|
|
$ sudo vppctl delete interface vmxnet3 <if-name>
|
|
|
|
Show vmxnet3
|
|
~~~~~~~~~~~~
|
|
|
|
Interface and ring information can be obtained with the command
|
|
**show vmxnet3 [if-name] [desc]**
|
|
|
|
For example:
|
|
|
|
.. code-block:: console
|
|
|
|
$ sudo vppctl show vmxnet3
|
|
Interface: vmxnet3-0/b/0/0 (ifindex 1)
|
|
Version: 1
|
|
PCI Address: 0000:0b:00.0
|
|
Mac Address: 00:50:56:88:63:be
|
|
hw if index: 1
|
|
Device instance: 0
|
|
Number of interrupts: 2
|
|
Queue 0 (RX)
|
|
RX completion next index 786
|
|
RX completion generation flag 0x80000000
|
|
ring 0 size 4096 fill 4094 consume 785 produce 784
|
|
ring 1 size 4096 fill 4096 consume 0 produce 0
|
|
Queue 0 (TX)
|
|
TX completion next index 216
|
|
TX completion generation flag 0x0
|
|
size 4096 consume 216 produce 245
|