xref: /OK3568_Linux_fs/kernel/tools/testing/selftests/net/udpgso_bench.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
3*4882a593Smuzhiyun#
4*4882a593Smuzhiyun# Run a series of udpgso benchmarks
5*4882a593Smuzhiyun
6*4882a593Smuzhiyunreadonly GREEN='\033[0;92m'
7*4882a593Smuzhiyunreadonly YELLOW='\033[0;33m'
8*4882a593Smuzhiyunreadonly RED='\033[0;31m'
9*4882a593Smuzhiyunreadonly NC='\033[0m' # No Color
10*4882a593Smuzhiyun
11*4882a593Smuzhiyunreadonly KSFT_PASS=0
12*4882a593Smuzhiyunreadonly KSFT_FAIL=1
13*4882a593Smuzhiyunreadonly KSFT_SKIP=4
14*4882a593Smuzhiyun
15*4882a593Smuzhiyunnum_pass=0
16*4882a593Smuzhiyunnum_err=0
17*4882a593Smuzhiyunnum_skip=0
18*4882a593Smuzhiyun
19*4882a593Smuzhiyunkselftest_test_exitcode() {
20*4882a593Smuzhiyun	local -r exitcode=$1
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun	if [[ ${exitcode} -eq ${KSFT_PASS} ]]; then
23*4882a593Smuzhiyun		num_pass=$(( $num_pass + 1 ))
24*4882a593Smuzhiyun	elif [[ ${exitcode} -eq ${KSFT_SKIP} ]]; then
25*4882a593Smuzhiyun		num_skip=$(( $num_skip + 1 ))
26*4882a593Smuzhiyun	else
27*4882a593Smuzhiyun		num_err=$(( $num_err + 1 ))
28*4882a593Smuzhiyun	fi
29*4882a593Smuzhiyun}
30*4882a593Smuzhiyun
31*4882a593Smuzhiyunkselftest_exit() {
32*4882a593Smuzhiyun	echo -e "$(basename $0): PASS=${num_pass} SKIP=${num_skip} FAIL=${num_err}"
33*4882a593Smuzhiyun
34*4882a593Smuzhiyun	if [[ $num_err -ne 0 ]]; then
35*4882a593Smuzhiyun		echo -e "$(basename $0): ${RED}FAIL${NC}"
36*4882a593Smuzhiyun		exit ${KSFT_FAIL}
37*4882a593Smuzhiyun	fi
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun	if [[ $num_skip -ne 0 ]]; then
40*4882a593Smuzhiyun		echo -e "$(basename $0): ${YELLOW}SKIP${NC}"
41*4882a593Smuzhiyun		exit ${KSFT_SKIP}
42*4882a593Smuzhiyun	fi
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun	echo -e "$(basename $0): ${GREEN}PASS${NC}"
45*4882a593Smuzhiyun	exit ${KSFT_PASS}
46*4882a593Smuzhiyun}
47*4882a593Smuzhiyun
48*4882a593Smuzhiyunwake_children() {
49*4882a593Smuzhiyun	local -r jobs="$(jobs -p)"
50*4882a593Smuzhiyun
51*4882a593Smuzhiyun	if [[ "${jobs}" != "" ]]; then
52*4882a593Smuzhiyun		kill -1 ${jobs} 2>/dev/null
53*4882a593Smuzhiyun	fi
54*4882a593Smuzhiyun}
55*4882a593Smuzhiyuntrap wake_children EXIT
56*4882a593Smuzhiyun
57*4882a593Smuzhiyunrun_one() {
58*4882a593Smuzhiyun	local -r args=$@
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun	./udpgso_bench_rx &
61*4882a593Smuzhiyun	./udpgso_bench_rx -t &
62*4882a593Smuzhiyun
63*4882a593Smuzhiyun	./udpgso_bench_tx ${args}
64*4882a593Smuzhiyun}
65*4882a593Smuzhiyun
66*4882a593Smuzhiyunrun_in_netns() {
67*4882a593Smuzhiyun	local -r args=$@
68*4882a593Smuzhiyun
69*4882a593Smuzhiyun	./in_netns.sh $0 __subprocess ${args}
70*4882a593Smuzhiyun	kselftest_test_exitcode $?
71*4882a593Smuzhiyun}
72*4882a593Smuzhiyun
73*4882a593Smuzhiyunrun_udp() {
74*4882a593Smuzhiyun	local -r args=$@
75*4882a593Smuzhiyun
76*4882a593Smuzhiyun	echo "udp"
77*4882a593Smuzhiyun	run_in_netns ${args}
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun	echo "udp gso"
80*4882a593Smuzhiyun	run_in_netns ${args} -S 0
81*4882a593Smuzhiyun
82*4882a593Smuzhiyun	echo "udp gso zerocopy"
83*4882a593Smuzhiyun	run_in_netns ${args} -S 0 -z
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun	echo "udp gso timestamp"
86*4882a593Smuzhiyun	run_in_netns ${args} -S 0 -T
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun	echo "udp gso zerocopy audit"
89*4882a593Smuzhiyun	run_in_netns ${args} -S 0 -z -a
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun	echo "udp gso timestamp audit"
92*4882a593Smuzhiyun	run_in_netns ${args} -S 0 -T -a
93*4882a593Smuzhiyun
94*4882a593Smuzhiyun	echo "udp gso zerocopy timestamp audit"
95*4882a593Smuzhiyun	run_in_netns ${args} -S 0 -T -z -a
96*4882a593Smuzhiyun}
97*4882a593Smuzhiyun
98*4882a593Smuzhiyunrun_tcp() {
99*4882a593Smuzhiyun	local -r args=$@
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun	echo "tcp"
102*4882a593Smuzhiyun	run_in_netns ${args} -t
103*4882a593Smuzhiyun
104*4882a593Smuzhiyun	echo "tcp zerocopy"
105*4882a593Smuzhiyun	run_in_netns ${args} -t -z
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun	# excluding for now because test fails intermittently
108*4882a593Smuzhiyun	# add -P option to include poll() to reduce possibility of lost messages
109*4882a593Smuzhiyun	#echo "tcp zerocopy audit"
110*4882a593Smuzhiyun	#run_in_netns ${args} -t -z -P -a
111*4882a593Smuzhiyun}
112*4882a593Smuzhiyun
113*4882a593Smuzhiyunrun_all() {
114*4882a593Smuzhiyun	local -r core_args="-l 3"
115*4882a593Smuzhiyun	local -r ipv4_args="${core_args} -4 -D 127.0.0.1"
116*4882a593Smuzhiyun	local -r ipv6_args="${core_args} -6 -D ::1"
117*4882a593Smuzhiyun
118*4882a593Smuzhiyun	echo "ipv4"
119*4882a593Smuzhiyun	run_tcp "${ipv4_args}"
120*4882a593Smuzhiyun	run_udp "${ipv4_args}"
121*4882a593Smuzhiyun
122*4882a593Smuzhiyun	echo "ipv6"
123*4882a593Smuzhiyun	run_tcp "${ipv6_args}"
124*4882a593Smuzhiyun	run_udp "${ipv6_args}"
125*4882a593Smuzhiyun}
126*4882a593Smuzhiyun
127*4882a593Smuzhiyunif [[ $# -eq 0 ]]; then
128*4882a593Smuzhiyun	run_all
129*4882a593Smuzhiyun	kselftest_exit
130*4882a593Smuzhiyunelif [[ $1 == "__subprocess" ]]; then
131*4882a593Smuzhiyun	shift
132*4882a593Smuzhiyun	run_one $@
133*4882a593Smuzhiyunelse
134*4882a593Smuzhiyun	run_in_netns $@
135*4882a593Smuzhiyunfi
136