xref: /linux/tools/testing/selftests/bpf/benchs/run_bench_xdp_lb.sh (revision 51312b6360a92e7bccd7b05b028ba2066b093305)
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4source ./benchs/run_common.sh
5
6set -eufo pipefail
7
8WARMUP=${WARMUP:-3}
9
10RUN="sudo ./bench -q -w${WARMUP} -a xdp-lb --machine-readable"
11
12SEP="  +----------------------------------+----------+---------+----------+"
13HDR="  | %-32s | %8s | %7s | %8s |\n"
14ROW="  | %-32s | %8s | %7s | %8s |\n"
15
16function group_header()
17{
18	printf "%s\n" "$SEP"
19	printf "$HDR" "$1" "p50" "stddev" "p99"
20	printf "%s\n" "$SEP"
21}
22
23function rval()
24{
25	echo "$1" | sed -nE "s/.*$2=([^ ]+).*/\1/p"
26}
27
28function run_scenario()
29{
30	local sc="$1"
31	shift
32	local output rline
33
34	output=$($RUN --scenario "$sc" "$@" 2>&1) || true
35	rline=$(echo "$output" | grep '^RESULT ' || true)
36
37	if [ -z "$rline" ]; then
38		printf "$ROW" "$sc" "ERR" "-" "-"
39		return
40	fi
41
42	printf "$ROW" "$sc" \
43		"$(rval "$rline" median)" \
44		"$(rval "$rline" stddev)" \
45		"$(rval "$rline" p99)"
46}
47
48header "XDP load-balancer benchmark"
49
50group_header "Single-flow baseline"
51for sc in tcp-v4-lru-hit tcp-v4-ch \
52	  tcp-v6-lru-hit tcp-v6-ch \
53	  udp-v4-lru-hit udp-v6-lru-hit \
54	  tcp-v4v6-lru-hit; do
55	run_scenario "$sc"
56done
57
58group_header "Diverse flows (4K src addrs)"
59for sc in tcp-v4-lru-diverse tcp-v4-ch-diverse \
60	  tcp-v6-lru-diverse tcp-v6-ch-diverse \
61	  udp-v4-lru-diverse; do
62	run_scenario "$sc"
63done
64
65group_header "TCP flags"
66run_scenario tcp-v4-syn
67run_scenario tcp-v4-rst-miss
68
69group_header "LRU stress"
70run_scenario tcp-v4-lru-miss
71run_scenario udp-v4-lru-miss
72run_scenario tcp-v4-lru-warmup
73
74group_header "Early exits"
75for sc in pass-v4-no-vip pass-v6-no-vip pass-v4-icmp pass-non-ip drop-v4-frag drop-v4-options \
76	  drop-v6-frag; do
77	run_scenario "$sc"
78done
79printf "%s\n" "$SEP"
80