3.2. How to Use

3.2.1. SPP Controller

Go to the SPP’s directory first.

$ cd /path/to/spp

Launch spp-ctl before launching SPP primary and secondary processes. You also need to launch spp.py if you use spp_vf from CLI. -b option is for binding IP address to communicate other SPP processes, but no need to give it explicitly if 127.0.0.1 or localhost although doing explicitly in this example to be more understandable.

# Launch spp-ctl and spp.py
$ python3 ./src/spp-ctl/spp-ctl -b 127.0.0.1
$ python ./src/spp.py -b 127.0.0.1

3.2.2. SPP Primary

SPP primary allocates and manages resources for secondary processes. You need to run SPP primary before secondary processes.

SPP primary has two kinds of options for DPDK and spp. Before -- are for DPDK is, and after it are for spp.

See Running a Sample Application in DPDK documentation for options.

Options of spp primary are:

  • -p : port mask
  • -n : number of rings
  • -s : IPv4 address and port for spp primary

Then, spp primary can be launched like this.

$ sudo ./src/primary/x86_64-native-linuxapp-gcc/spp_primary \
  -l 1 -n 4 --socket-mem 512,512 \
  --huge-dir=/run/hugepages/kvm \
  --proc-type=primary \
  -- \
  -p 0x03 -n 9 -s 127.0.0.1:5555

3.2.3. spp_vf

spp_vf can be launched with two kinds of options, like primary process.

Like primary process, spp_vf has two kinds of options. One is for DPDK, the other is spp_vf.

spp_vf specific options are:

  • –client-id: client id which can be seen as secondary ID from spp.py
  • -s: IPv4 address and port for spp secondary
  • –vhost-client: vhost-user client enable setting

spp_vf can be launched like this.

$ sudo ./src/vf/x86_64-native-linuxapp-gcc/spp_vf \
-l 0,2-13 -n 4 --proc-type=secondary \
-- \
--client-id 1 -s 127.0.0.1:6666 --vhost-client

If --vhost-client option is specified, then vhost-user act as the client, otherwise the server. For reconnect feature from SPP to VM, --vhost-client option can be used. This reconnect features requires QEMU 2.7 (or later). See also Vhost Sample Application.

3.2.4. spp_mirror

spp_mirror takes the same options as spp_vf. Here is an example.

$ sudo ./src/mirror/x86_64-native-linuxapp-gcc/spp_mirror \
-l 2 -n 4 --proc-type=secondary \
-- \
--client-id 1 -s 127.0.0.1:6666 --vhost-client

3.2.5. VM

VM is launched with virsh command.

$ virsh start [VM]

It is required to add network configuration for processes running on the VMs. If this configuration is skipped, processes cannot communicate with others via SPP.

On the VMs, add an interface and disable offload.

# Add interface
$ sudo ifconfig [IF_NAME] inet [IP_ADDR] netmask [NETMASK] up

# Disable offload
$ sudo ethtool -K [IF_NAME] tx off

On host machine, it is also required to disable offload.

# Disable offload for VM
$ sudo ethtool -K [IF_NAME] tx off