184 lines
4.4 KiB
ReStructuredText
184 lines
4.4 KiB
ReStructuredText
|
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 attribute.
|
|||
|
|