blob: 3cf730cbdc6465e20f55e9414c49859e9c27c241 [file] [log] [blame]
jdenisco82b22f72018-12-17 15:45:21 -05001.. _vmxnet3:
2
3VPP with VMware/Vmxnet3
4=======================
5
6This section describes a native Vmxnet3 driver that is included with VPP.
7This driver is written as a plugin and is found in src/plugin/vmxnet3.
8
9Advantages
10----------
11
12The native VPP native vmxnet3 driver provides the following features
13that are not provided with the standard dpdk vmxnet3 driver.
14
15- Interrupt mode
16- Adaptive mode
Steven Luong1ea74b52019-03-19 14:35:29 -070017- LRO/TSO mode
jdenisco82b22f72018-12-17 15:45:21 -050018
19Does not support
20----------------
21
22This driver does yet support the following features.
23
jdenisco82b22f72018-12-17 15:45:21 -050024- VLAN filter
25
26Prerequisites
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
Steven Luong1ea74b52019-03-19 14:35:29 -070032- This code is tested with ESXi vSwitch version 6.5 and 6.7 for LRO/TSO support,
Steven Luongee94ffa2019-03-14 12:07:29 -070033 VMware Workstation 15 Pro (no LRO/TSO), and VMware Fusion 11 Pro (no LRO/TSO).
jdenisco82b22f72018-12-17 15:45:21 -050034
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
jdeniscof5de0362019-01-30 10:43:43 -050040VMware Fusion for Mac
41---------------------
42
43VMware fusion does not have a menu option to change the default driver (e1000)
44to the **vmxnet3** driver. VPP supports the **vmxnet3** driver.
45
Steven Luongee94ffa2019-03-14 12:07:29 -070046These instructions describe how to change the e1000 driver for VMware fusion.
jdeniscof5de0362019-01-30 10:43:43 -050047
Steven Luong1ea74b52019-03-19 14:35:29 -070048* 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**
jdeniscof5de0362019-01-30 10:43:43 -050054* Find the **.vmx** file and edit it.
Jim Thompsonf324dec2019-04-08 03:22:21 -050055* Find all the occurrences of **e1000** and change them to **vmxnet3**
jdeniscof5de0362019-01-30 10:43:43 -050056
Steven Luong1ea74b52019-03-19 14:35:29 -070057If you are concerned more with configuration not performance the vmxnet3 driver
58can be set to **interrupt** mode in VPP. This will save a great deal on battery
59usage. Do this with the following
jdeniscof5de0362019-01-30 10:43:43 -050060
Paul Vinciguerra7fa3dd22019-10-27 17:28:10 -040061VMware Workstation PRO 15 for Linux
Steven Luongee94ffa2019-03-14 12:07:29 -070062-----------------------------------
63
Steven Luong1ea74b52019-03-19 14:35:29 -070064VMware Workstation does not have a menu option to change the default driver
65(e1000) to the **vmxnet3** driver. VPP supports the **vmxnet3** driver.
Steven Luongee94ffa2019-03-14 12:07:29 -070066
Steven Luong1ea74b52019-03-19 14:35:29 -070067These instructions describe how to change the e1000 driver for VMware
68Workstation PRO 15 Linux. You may need to be a superuser for performing these
69steps.
Steven Luongee94ffa2019-03-14 12:07:29 -070070
71* Shut down the VM you are about to change.
Steven Luong1ea74b52019-03-19 14:35:29 -070072* 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"**
Steven Luongee94ffa2019-03-14 12:07:29 -070079* Save the file and power on the VM.
80
Steven Luong1ea74b52019-03-19 14:35:29 -070081If you are concerned more with configuration not performance the vmxnet3 driver
82can be set to **interrupt** mode in VPP. This will save a great deal on battery
83usage. Do this with the following
Steven Luongee94ffa2019-03-14 12:07:29 -070084
jdeniscof5de0362019-01-30 10:43:43 -050085.. code-block:: console
86
Steven Luongee94ffa2019-03-14 12:07:29 -070087 $ sudo vppctl set interface rx-mode <interface> interrupt
jdeniscof5de0362019-01-30 10:43:43 -050088
89
jdenisco82b22f72018-12-17 15:45:21 -050090System setup
91~~~~~~~~~~~~
92
93To use the native VPP vmxnet3 driver use the following Steps
94
95Load VFIO driver
96
97.. code-block:: console
98
99 $ sudo modprobe vfio-pci
100
Steven Luongee94ffa2019-03-14 12:07:29 -0700101Make sure the interface is down
102
103.. code-block:: console
104
105 $ sudo ifconfig <if-name> down
106
Steven Luong1ea74b52019-03-19 14:35:29 -0700107The next 2 steps are optional and may be accomplished by specifying the optional
108"bind" keyword when creating the vmxnet3 interface.
Steven Luongee94ffa2019-03-14 12:07:29 -0700109
jdenisco82b22f72018-12-17 15:45:21 -0500110For 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
John DeNisco4f859682019-12-10 14:25:50 -0500116To bind interface to vfio-pci first install get the dpdk_devbind.py script.
jdenisco82b22f72018-12-17 15:45:21 -0500117
118Bind the driver with the following commands:
119
120.. code-block:: console
121
122 $ sudo /usr/local/vpp/vpp-config/scripts/dpdk-devbind.py -s
123
124 Network devices using DPDK-compatible driver
125 ============================================
126 <none>
Nathan Skrzypczak9ad39c02021-08-19 11:38:06 +0200127
jdenisco82b22f72018-12-17 15:45:21 -0500128 Network devices using kernel driver
129 ===================================
Nathan Skrzypczak9ad39c02021-08-19 11:38:06 +0200130 0000:03:00.0 'VMXNET3 Ethernet Controller' if=ens160 drv=vmxnet3 unused=vfio-pci,uio_pci_generic
jdenisco82b22f72018-12-17 15:45:21 -0500131 0000:0b:00.0 'VMXNET3 Ethernet Controller' drv=vfio-pci unused=vmxnet3,uio_pci_generic
132 0000:13:00.0 'VMXNET3 Ethernet Controller' drv=vfio-pci unused=vmxnet3,uio_pci_generic
133 .....
134
135 $ sudo /usr/local/vpp/vpp-config/scripts/dpdk-devbind.py --bind vfio-pci 0b:00.0
136
137
138Interface Creation
139~~~~~~~~~~~~~~~~~~
140
Steven Luong1ea74b52019-03-19 14:35:29 -0700141Now create the interface dynamically with following. The bind option must be
142specified if pci is not already bound manually by above steps.
jdenisco82b22f72018-12-17 15:45:21 -0500143
144.. code-block:: console
145
Steven Luongee94ffa2019-03-14 12:07:29 -0700146 $ sudo vppctl create interface vmxnet3 0000:0b:00.0 bind
147 $ sudo vppctl set interface state vmxnet3-0/b/0/0 up
jdenisco82b22f72018-12-17 15:45:21 -0500148
149Interface Deletion
150~~~~~~~~~~~~~~~~~~
151
152If the interface needs to be deleted:
153
154.. code-block:: console
155
Steven Luongee94ffa2019-03-14 12:07:29 -0700156 $ sudo vppctl delete interface vmxnet3 <if-name>
jdenisco82b22f72018-12-17 15:45:21 -0500157
158Show vmxnet3
159~~~~~~~~~~~~
160
161Interface and ring information can be obtained with the command
162**show vmxnet3 [if-name] [desc]**
163
164For example:
165
166.. code-block:: console
167
Steven Luongee94ffa2019-03-14 12:07:29 -0700168 $ sudo vppctl show vmxnet3
jdenisco82b22f72018-12-17 15:45:21 -0500169 Interface: vmxnet3-0/b/0/0 (ifindex 1)
170 Version: 1
171 PCI Address: 0000:0b:00.0
172 Mac Address: 00:50:56:88:63:be
173 hw if index: 1
174 Device instance: 0
175 Number of interrupts: 2
176 Queue 0 (RX)
177 RX completion next index 786
178 RX completion generation flag 0x80000000
179 ring 0 size 4096 fill 4094 consume 785 produce 784
180 ring 1 size 4096 fill 4096 consume 0 produce 0
181 Queue 0 (TX)
182 TX completion next index 216
183 TX completion generation flag 0x0
184 size 4096 consume 216 produce 245