blob: e556207158b3dee503a4e7848b04b58e123d6722 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
.. _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
- TSO/LRO mode
Does not support
----------------
This driver does yet support the following features.
- NUMA support
- RSS/multiple queues
- 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.0, release build
3620759.
- 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 e100 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 occurences 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
.. code-block:: console
# 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
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 the :ref:`configutil`. This will download
the dpdk_devbind.py script. It is located in */usr/vpp/vpp-config/scripts* with Centos
and */usr/local/vpp/vpp-config/scripts* with Ubuntu.
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:
.. code-block:: console
$ sudo vppctl create interface vmxnet3 0000:0b:00.0
$ sudo set int state vmxnet3-0/b/0/0 up
Interface Deletion
~~~~~~~~~~~~~~~~~~
If the interface needs to be deleted:
.. code-block:: console
$ sudo 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 vmxnet
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
|