docs: break up long lines in vmxnet3.rst to avoid line wrap
[vpp.git] / docs / usecases / vmxnet3.rst
1 .. _vmxnet3:
2
3 VPP with VMware/Vmxnet3
4 =======================
5
6 This section describes a native Vmxnet3 driver that is included with VPP.
7 This driver is written as a plugin and is found in src/plugin/vmxnet3.
8
9 Advantages
10 ----------
11
12 The native VPP native vmxnet3 driver provides the following features
13 that are not provided with the standard dpdk vmxnet3 driver.
14
15 -  Interrupt mode
16 -  Adaptive mode
17 -  LRO/TSO mode
18
19 Does not support
20 ----------------
21
22 This driver does yet support the following features.
23
24 -  VLAN filter
25
26 Prerequisites
27 -------------
28
29 -  This code is tested with vfio-pci driver installed with Ubuntu 18.04
30    which has kernel version 4.15.0-33-generic.
31
32 -  This code is tested with ESXi vSwitch version 6.5 and 6.7 for LRO/TSO support,
33    VMware Workstation 15 Pro (no LRO/TSO), and VMware Fusion 11 Pro (no LRO/TSO).
34
35 -  Driver requires MSI-X interrupt support, which is not supported by
36    uio_pci_generic driver, so vfio-pci needs to be used. On systems
37    without IOMMU vfio driver can still be used with recent kernels which
38    support no-iommu mode.
39
40 VMware Fusion for Mac
41 ---------------------
42
43 VMware fusion does not have a menu option to change the default driver (e1000)
44 to the **vmxnet3** driver. VPP supports the **vmxnet3** driver.
45
46 These instructions describe how to change the e1000 driver for VMware fusion.
47
48 * From the VMware Fusion menu bar select **Window** then **Virtual Machine
49   Library**.
50 * From the Virtual Machine menu right click on the Virtual Machine you are using
51   and select **Show in Finder**
52 * Find the name associated with the VM you are using, right click on it and
53   select **Show Package Contents**
54 * Find the **.vmx** file and edit it.
55 * Find all the occurences of **e1000** and change them to **vmxnet3**
56
57 If you are concerned more with configuration not performance the vmxnet3 driver
58 can be set to **interrupt** mode in VPP. This will save a great deal on battery
59 usage. Do this with the following
60
61 VMware Workstatiom PRO 15 for Linux
62 -----------------------------------
63
64 VMware Workstation does not have a menu option to change the default driver
65 (e1000) to the **vmxnet3** driver. VPP supports the **vmxnet3** driver.
66
67 These instructions describe how to change the e1000 driver for VMware
68 Workstation PRO 15 Linux. You may need to be a superuser for performing these
69 steps.
70
71 * Shut down the VM you are about to change.
72 * From the vmware folder where vmware creates and stores the VM's, change the
73   directory to the specific VM which you want to modify, and use your favorite
74   text editor to open the corresponding VM's .vmx file. By default, it is
75   $HOME/vmware/<vm-name>/<vm-name>.vmx
76 * Locate the line for the interface which you want to modify. For example, if it
77   is ethernet1, then change the line **ethernet1.virtualDev = "e1000"** to
78   **ethernet1.virtualDev = "vmxnet3"**
79 * Save the file and power on the VM.
80
81 If you are concerned more with configuration not performance the vmxnet3 driver
82 can be set to **interrupt** mode in VPP. This will save a great deal on battery
83 usage. Do this with the following
84
85 .. code-block:: console
86
87     $ sudo vppctl set interface rx-mode <interface> interrupt
88
89
90 System setup
91 ~~~~~~~~~~~~
92
93 To use the native VPP vmxnet3 driver use the following Steps
94
95 Load VFIO driver
96
97 .. code-block:: console
98
99     $ sudo modprobe vfio-pci
100
101 Make sure the interface is down
102
103 .. code-block:: console
104
105     $ sudo ifconfig <if-name> down
106
107 The next 2 steps are optional and may be accomplished by specifying the optional
108 "bind" keyword when creating the vmxnet3 interface.
109
110 For systems without IOMMU only, enable unsafe NOIOMMU mode
111
112 .. code-block:: console
113
114     $ echo Y | sudo tee /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
115
116 To bind interface to vfio-pci first install the :ref:`configutil`. This will
117 download the dpdk_devbind.py script. It is located in
118 */usr/vpp/vpp-config/scripts* with Centos and
119 */usr/local/vpp/vpp-config/scripts* with Ubuntu.
120
121 Bind the driver with the following commands:
122
123 .. code-block:: console
124
125     $ sudo /usr/local/vpp/vpp-config/scripts/dpdk-devbind.py -s
126
127     Network devices using DPDK-compatible driver
128     ============================================
129     <none>
130     
131     Network devices using kernel driver
132     ===================================
133     0000:03:00.0 'VMXNET3 Ethernet Controller' if=ens160 drv=vmxnet3 unused=vfio-pci,uio_pci_generic 
134     0000:0b:00.0 'VMXNET3 Ethernet Controller' drv=vfio-pci unused=vmxnet3,uio_pci_generic
135     0000:13:00.0 'VMXNET3 Ethernet Controller' drv=vfio-pci unused=vmxnet3,uio_pci_generic
136     .....
137
138     $ sudo /usr/local/vpp/vpp-config/scripts/dpdk-devbind.py --bind vfio-pci 0b:00.0
139
140
141 Interface Creation
142 ~~~~~~~~~~~~~~~~~~
143
144 Now create the interface dynamically with following. The bind option must be
145 specified if pci is not already bound manually by above steps.
146
147 .. code-block:: console
148
149     $ sudo vppctl create interface vmxnet3 0000:0b:00.0 bind
150     $ sudo vppctl set interface state vmxnet3-0/b/0/0 up
151
152 Interface Deletion
153 ~~~~~~~~~~~~~~~~~~
154
155 If the interface needs to be deleted:
156
157 .. code-block:: console
158
159     $ sudo vppctl delete interface vmxnet3 <if-name>
160
161 Show vmxnet3
162 ~~~~~~~~~~~~
163
164 Interface and ring information can be obtained with the command
165 **show vmxnet3 [if-name] [desc]**
166
167 For example:
168
169 .. code-block:: console
170
171     $ sudo vppctl show vmxnet3
172     Interface: vmxnet3-0/b/0/0 (ifindex 1)
173       Version: 1
174       PCI Address: 0000:0b:00.0
175       Mac Address: 00:50:56:88:63:be
176       hw if index: 1
177       Device instance: 0
178       Number of interrupts: 2
179       Queue 0 (RX)
180         RX completion next index 786
181         RX completion generation flag 0x80000000
182         ring 0 size 4096 fill 4094 consume 785 produce 784
183         ring 1 size 4096 fill 4096 consume 0 produce 0
184       Queue 0 (TX)
185         TX completion next index 216
186         TX completion generation flag 0x0
187         size 4096 consume 216 produce 245