Generic Segmentation Offload

Generic Segmentation Offload #

Overview #

Generic Segmentation Offload (GSO) reduces per-packet processing overhead by enabling applications to pass a multi-packet buffer to (v)NIC and process a smaller number of large packets (e.g. frame size of 64 KB), instead of processing higher numbers of small packets (e.g. frame size of 1500 B), thus reducing per-packet overhead.

GSO tests for VPP vhostuser and tapv2 interfaces. All tests cases use iPerf3 client and server applications running TCP/IP as a traffic generator. For performance comparison the same tests are run without GSO enabled.

GSO Test Topologies #

Two VPP GSO test topologies are implemented:

  1. iPerfC_GSOvirtio_LinuxVM — GSOvhost_VPP_GSOvhost — iPerfS_GSOvirtio_LinuxVM
    • Tests VPP GSO on vhostuser interfaces and interaction with Linux virtio with GSO enabled.
  2. iPerfC_GSOtap_LinuxNspace — GSOtapv2_VPP_GSOtapv2 — iPerfS_GSOtap_LinuxNspace
    • Tests VPP GSO on tapv2 interfaces and interaction with Linux tap with GSO enabled.

Common configuration:

  • iPerfC (client) and iPerfS (server) run in TCP/IP mode without upper bandwidth limit.
  • Trial duration is set to 30 sec.
  • iPerfC, iPerfS and VPP run in the single SUT node.

VPP GSOtap Topology #

VPP Configuration #

VPP GSOtap tests are executed without using hyperthreading. VPP worker runs on a single core. Multi-core tests are not executed. Each interface belongs to separate namespace. Following core pinning scheme is used:

  • 1t1c (rxq=1, rx_qsz=4096, tx_qsz=4096)
    • system isolated: 0,28,56,84
    • vpp mt: 1
    • vpp wt: 2
    • vhost: 3-5
    • iperf-s: 6
    • iperf-c: 7

iPerf3 Server Configuration #

iPerf3 version used 3.7

$ sudo -E -S ip netns exec tap1_namespace iperf3 \
    --server --daemon --pidfile /tmp/iperf3_server.pid \
    --logfile /tmp/iperf3.log --port 5201 --affinity <X>

For the full iPerf3 reference please see iPerf3 docs.

iPerf3 Client Configuration #

iPerf3 version used 3.7

$ sudo -E -S ip netns exec tap1_namespace iperf3 \
    --client 2.2.2.2 --bind 1.1.1.1 --port 5201 --parallel <Y> \
    --time 30.0 --affinity <X> --zerocopy

For the full iPerf3 reference please see iPerf3 docs.

VPP GSOvhost Topology #

VPP Configuration #

VPP GSOvhost tests are executed without using hyperthreading. VPP worker runs on a single core. Multi-core tests are not executed. Following core pinning scheme is used:

  • 1t1c (rxq=1, rx_qsz=1024, tx_qsz=1024)
    • system isolated: 0,28,56,84
    • vpp mt: 1
    • vpp wt: 2
    • vm-iperf-s: 3,4,5,6,7
    • vm-iperf-c: 8,9,10,11,12
    • iperf-s: 1
    • iperf-c: 1

iPerf3 Server Configuration #

iPerf3 version used 3.7

$ sudo iperf3 \
    --server --daemon --pidfile /tmp/iperf3_server.pid \
    --logfile /tmp/iperf3.log --port 5201 --affinity X

For the full iPerf3 reference please see iPerf3 docs.

iPerf3 Client Configuration #

iPerf3 version used 3.7

$ sudo iperf3 \
    --client 2.2.2.2 --bind 1.1.1.1 --port 5201 --parallel <Y> \
    --time 30.0 --affinity X --zerocopy

For the full iPerf3 reference please see iPerf3 docs.