feat(docs): Add Methodology
[csit.git] / docs / content / methodology / generic_segmentation_offload.md
1 ---
2 bookToc: false
3 title: "Generic Segmentation Offload"
4 weight: 15
5 ---
6
7 # Generic Segmentation Offload
8
9 ## Overview
10
11 Generic Segmentation Offload (GSO) reduces per-packet processing
12 overhead by enabling applications  to pass a multi-packet buffer to
13 (v)NIC and process a smaller number of large packets (e.g. frame size of
14 64 KB), instead of processing higher numbers of small packets (e.g.
15 frame size of 1500 B), thus reducing per-packet overhead.
16
17 GSO tests for VPP vhostuser and tapv2 interfaces. All tests cases use iPerf3
18 client and server applications running TCP/IP as a traffic generator. For
19 performance comparison the same tests are run without GSO enabled.
20
21 ## GSO Test Topologies
22
23 Two VPP GSO test topologies are implemented:
24
25 1. iPerfC_GSOvirtio_LinuxVM --- GSOvhost_VPP_GSOvhost --- iPerfS_GSOvirtio_LinuxVM
26
27    - Tests VPP GSO on vhostuser interfaces and interaction with Linux
28      virtio with GSO enabled.
29
30 2. iPerfC_GSOtap_LinuxNspace --- GSOtapv2_VPP_GSOtapv2 --- iPerfS_GSOtap_LinuxNspace
31
32    - Tests VPP GSO on tapv2 interfaces and interaction with Linux tap
33      with GSO enabled.
34
35 Common configuration:
36
37 - iPerfC (client) and iPerfS (server) run in TCP/IP mode without upper
38   bandwidth limit.
39 - Trial duration is set to 30 sec.
40 - iPerfC, iPerfS and VPP run in the single SUT node.
41
42
43 ## VPP GSOtap Topology
44
45 ### VPP Configuration
46
47 VPP GSOtap tests are executed without using hyperthreading. VPP worker runs on
48 a single core. Multi-core tests are not executed. Each interface belongs to
49 separate namespace. Following core pinning scheme is used:
50
51 - 1t1c (rxq=1, rx_qsz=4096, tx_qsz=4096)
52   - system isolated: 0,28,56,84
53   - vpp mt:  1
54   - vpp wt:  2
55   - vhost:   3-5
56   - iperf-s: 6
57   - iperf-c: 7
58
59 ### iPerf3 Server Configuration
60
61 iPerf3 version used 3.7
62
63     $ sudo -E -S ip netns exec tap1_namespace iperf3 \
64         --server --daemon --pidfile /tmp/iperf3_server.pid --logfile /tmp/iperf3.log --port 5201 --affinity <X>
65
66 For the full iPerf3 reference please see:
67 [iPerf3 docs](https://github.com/esnet/iperf/blob/master/docs/invoking.rst).
68
69
70 ### iPerf3 Client Configuration
71
72 iPerf3 version used 3.7
73
74     $ sudo -E -S ip netns exec tap1_namespace iperf3 \
75         --client 2.2.2.2 --bind 1.1.1.1 --port 5201 --parallel <Y> --time 30.0 --affinity <X> --zerocopy
76
77 For the full iPerf3 reference please see:
78 [iPerf3 docs](https://github.com/esnet/iperf/blob/master/docs/invoking.rst).
79
80
81 ## VPP GSOvhost Topology
82
83 ### VPP Configuration
84
85 VPP GSOvhost tests are executed without using hyperthreading. VPP worker runs
86 on a single core. Multi-core tests are not executed. Following core pinning
87 scheme is used:
88
89 - 1t1c (rxq=1, rx_qsz=1024, tx_qsz=1024)
90   - system isolated: 0,28,56,84
91   - vpp mt:  1
92   - vpp wt:  2
93   - vm-iperf-s: 3,4,5,6,7
94   - vm-iperf-c: 8,9,10,11,12
95   - iperf-s: 1
96   - iperf-c: 1
97
98 ###  iPerf3 Server Configuration
99
100 iPerf3 version used 3.7
101
102     $ sudo iperf3 \
103         --server --daemon --pidfile /tmp/iperf3_server.pid --logfile /tmp/iperf3.log --port 5201 --affinity X
104
105 For the full iPerf3 reference please see:
106 [iPerf3 docs](https://github.com/esnet/iperf/blob/master/docs/invoking.rst).
107
108
109 ### iPerf3 Client Configuration
110
111 iPerf3 version used 3.7
112
113     $ sudo iperf3 \
114         --client 2.2.2.2 --bind 1.1.1.1 --port 5201 --parallel <Y> --time 30.0 --affinity X --zerocopy
115
116 For the full iPerf3 reference please see:
117 [iPerf3 docs](https://github.com/esnet/iperf/blob/master/docs/invoking.rst).