Since VPP can be linked with any SPDK application which wants to leverage user space TCP/IP stack. Currently, both iSCSI target and NVMe-oF target(TCP transport) can use, so we need to create a separate page under general part, which will be much better instead of putting in iSCSI target user guide section. Change-Id: I3c80e935a230cb42c669f65e5bb12b54ecc9527a Signed-off-by: Ziye Yang <ziye.yang@intel.com> Reviewed-on: https://review.gerrithub.io/c/438372 Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-by: GangCao <gang.cao@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
4.4 KiB
Vector Packet Processing
VPP (part of Fast Data - Input/Output project) is an extensible userspace framework providing networking functionality. It is built around the concept of packet processing graph (see What is VPP?).
Detailed instructions for simplified steps 1-3 below, can be found on VPP Quick Start Guide.
SPDK supports VPP version 18.01.1.
1. Building VPP (optional)
Please skip this step if using already built packages.
Clone and checkout VPP
git clone https://gerrit.fd.io/r/vpp && cd vpp
git checkout v18.01.1
Install VPP build dependencies
make install-dep
Build and create .rpm packages
make pkg-rpm
Alternatively, build and create .deb packages
make pkg-deb
Packages can be found in vpp/build-root/
directory.
For more in depth instructions please see Building section in VPP documentation
Please note: VPP 18.01.1 does not support OpenSSL 1.1. It is suggested to install a compatibility package for compilation time.
sudo dnf install -y --allowerasing compat-openssl10-devel
Then reinstall latest OpenSSL devel package:
sudo dnf install -y --allowerasing openssl-devel
2. Installing VPP
Packages can be installed from a distribution repository or built in previous step.
Minimal set of packages consists of vpp
, vpp-lib
and vpp-devel
.
Note: Please remove or modify /etc/sysctl.d/80-vpp.conf file with appropriate values dependent on number of hugepages that will be used on system.
3. Running VPP
VPP takes over any network interfaces that were bound to userspace driver, for details please see DPDK guide on Binding and Unbinding Network Ports to/from the Kernel Modules.
VPP is installed as service and disabled by default. To start VPP with default config:
sudo systemctl start vpp
Alternatively, use vpp
binary directly
sudo vpp unix {cli-listen /run/vpp/cli.sock}
A usefull tool is vppctl
, that allows to control running VPP instance.
Either by entering VPP configuration prompt
sudo vppctl
Or, by sending single command directly. For example to display interfaces within VPP:
sudo vppctl show interface
Example: Tap interfaces on single host
For functional test purposes a virtual tap interface can be created, so no additional network hardware is required. This will allow network communication between SPDK iSCSI target using VPP end of tap and kernel iSCSI initiator using the kernel part of tap. A single host is used in this scenario.
Create tap interface via VPP
vppctl tap connect tap0
vppctl set interface state tapcli-0 up
vppctl set interface ip address tapcli-0 10.0.0.1/24
vppctl show int addr
Assign address on kernel interface
sudo ip addr add 10.0.0.2/24 dev tap0
sudo ip link set tap0 up
To verify connectivity
ping 10.0.0.1
4. Building SPDK with VPP
Support for VPP can be built into SPDK by using configuration option.
configure --with-vpp
Alternatively, directory with built libraries can be pointed at and will be used for compilation instead of installed packages.
configure --with-vpp=/path/to/vpp/repo/build-root/vpp
5. Running SPDK with VPP
VPP application has to be started before SPDK application, in order to enable usage of network interfaces. For example, if you use SPDK iSCSI target or NVMe-oF target, after the initialization finishes, interfaces configured within VPP will be available to be configured as portal addresses.
Moreover, you do not need to specifiy which TCP sock implementation (e.g., posix, VPP) to be used through configuration file or RPC call. Since SPDK program automatically determines the protocol according to the configured portal addresses info. For example, you can specify a Listen address in NVMe-oF subsystem configuration such as "Listen TCP 10.0.0.1:4420". SPDK programs automatically uses different implemenation to listen this provided portal info via posix or vpp implemenation(if compiled in SPDK program), and only one implementation can successfully listen on the provided portal.