154 lines
4.0 KiB
Markdown
154 lines
4.0 KiB
Markdown
|
## Creating VPP Startup Configuration
|
||
|
This document describes how to create the VPP startup configuration
|
||
|
file located at `/etc/vpp/contiv-vswitch.conf`.
|
||
|
|
||
|
### Hardware Interface Configuration
|
||
|
#### Single-NIC Configuration
|
||
|
You need to configure hardware interfaces for use by VPP. First, find out the PCI address of the host's network interface. On
|
||
|
Debian-based distributions, you can use `lshw`:
|
||
|
|
||
|
```
|
||
|
sudo lshw -class network -businfo
|
||
|
Bus info Device Class Description
|
||
|
========================================================
|
||
|
pci@0000:03:00.0 ens160 network VMXNET3 Ethernet Controller
|
||
|
```
|
||
|
|
||
|
In our case, it would be the `ens3` interface with the PCI address
|
||
|
`0000:00:03.0`
|
||
|
|
||
|
Now, add or modify the VPP startup config file (`/etc/vpp/contiv-vswitch.conf`)
|
||
|
to contain the proper PCI address:
|
||
|
```
|
||
|
unix {
|
||
|
nodaemon
|
||
|
cli-listen /run/vpp/cli.sock
|
||
|
cli-no-pager
|
||
|
coredump-size unlimited
|
||
|
full-coredump
|
||
|
poll-sleep-usec 100
|
||
|
}
|
||
|
nat {
|
||
|
endpoint-dependent
|
||
|
}
|
||
|
dpdk {
|
||
|
dev 0000:00:03.0
|
||
|
}
|
||
|
api-trace {
|
||
|
on
|
||
|
nitems 500
|
||
|
}
|
||
|
```
|
||
|
#### Multi-NIC Configuration
|
||
|
Similar to the single-NIC configuration, use command *lshw* to find the PCI
|
||
|
addresses of all the NICs in the system, for example:
|
||
|
|
||
|
```
|
||
|
$ sudo lshw -class network -businfo
|
||
|
Bus info Device Class Description
|
||
|
====================================================
|
||
|
pci@0000:00:03.0 ens3 network Virtio network device
|
||
|
pci@0000:00:04.0 ens4 network Virtio network device
|
||
|
```
|
||
|
|
||
|
In the example above, `ens3` would be the primary interface and `ens4` would
|
||
|
be the interface that would be used by VPP. The PCI address of the `ens4`
|
||
|
interface would be `0000:00:04.0`.
|
||
|
|
||
|
Make sure the selected interface is *shut down*, otherwise VPP
|
||
|
will not grab it:
|
||
|
```
|
||
|
sudo ip link set ens4 down
|
||
|
```
|
||
|
|
||
|
Now, add or modify the VPP startup config file in `/etc/vpp/contiv-vswitch.conf`
|
||
|
to contain the proper PCI address:
|
||
|
```
|
||
|
unix {
|
||
|
nodaemon
|
||
|
cli-listen /run/vpp/cli.sock
|
||
|
cli-no-pager
|
||
|
coredump-size unlimited
|
||
|
full-coredump
|
||
|
poll-sleep-usec 100
|
||
|
}
|
||
|
nat {
|
||
|
endpoint-dependent
|
||
|
}
|
||
|
dpdk {
|
||
|
dev 0000:00:04.0
|
||
|
}
|
||
|
api-trace {
|
||
|
on
|
||
|
nitems 500
|
||
|
}
|
||
|
```
|
||
|
If assigning multiple NICs to VPP you will need to include each NIC's PCI address
|
||
|
in the dpdk stanza in `/etc/vpp/contiv-vswitch.conf`.
|
||
|
|
||
|
##### Assigning all NICs to VPP
|
||
|
On a multi-NIC node, it is also possible to assign all NICs from the kernel for
|
||
|
use by VPP. First, you need to install the STN daemon, as described [here][1],
|
||
|
since you will want the NICs to revert to the kernel if VPP crashes.
|
||
|
|
||
|
You also need to configure the NICs in the VPP startup config file
|
||
|
in `/etc/vpp/contiv-vswitch.conf`. For example, to use both the primary and
|
||
|
secondary NIC, in a two-NIC node, your VPP startup config file would look
|
||
|
something like this:
|
||
|
|
||
|
```
|
||
|
unix {
|
||
|
nodaemon
|
||
|
cli-listen /run/vpp/cli.sock
|
||
|
cli-no-pager
|
||
|
coredump-size unlimited
|
||
|
full-coredump
|
||
|
poll-sleep-usec 100
|
||
|
}
|
||
|
nat {
|
||
|
endpoint-dependent
|
||
|
}
|
||
|
dpdk {
|
||
|
dev 0000:00:03.0
|
||
|
dev 0000:00:04.0
|
||
|
}
|
||
|
api-trace {
|
||
|
on
|
||
|
nitems 500
|
||
|
}
|
||
|
```
|
||
|
|
||
|
#### Installing `lshw` on CentOS/RedHat/Fedora
|
||
|
Note: On CentOS/RedHat/Fedora distributions, `lshw` may not be available
|
||
|
by default, install it by
|
||
|
```
|
||
|
sudo yum -y install lshw
|
||
|
```
|
||
|
|
||
|
### Power-saving Mode
|
||
|
In regular operation, VPP takes 100% of one CPU core at all times (poll loop).
|
||
|
If high performance and low latency is not required you can "slow-down"
|
||
|
the poll-loop and drastically reduce CPU utilization by adding the following
|
||
|
stanza to the `unix` section of the VPP startup config file:
|
||
|
```
|
||
|
unix {
|
||
|
...
|
||
|
poll-sleep-usec 100
|
||
|
...
|
||
|
}
|
||
|
```
|
||
|
The power-saving mode is especially useful in VM-based development environments
|
||
|
running on laptops or less powerful servers.
|
||
|
|
||
|
### VPP API Trace
|
||
|
To troubleshoot VPP configuration issues in production environments, it is
|
||
|
strongly recommended to configure VPP API trace. This is done by adding the
|
||
|
following stanza to the VPP startup config file:
|
||
|
```
|
||
|
api-trace {
|
||
|
on
|
||
|
nitems 500
|
||
|
}
|
||
|
```
|
||
|
You can set the size of the trace buffer with the <nitems> attribute.
|