xref: /linux/tools/testing/selftests/net/udpgso_bench.sh (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
112a2ea96SPaolo Abeni#!/bin/bash
23a687befSWillem de Bruijn# SPDX-License-Identifier: GPL-2.0
33a687befSWillem de Bruijn#
43a687befSWillem de Bruijn# Run a series of udpgso benchmarks
53a687befSWillem de Bruijn
622f1a38aSWillem de Bruijnreadonly GREEN='\033[0;92m'
722f1a38aSWillem de Bruijnreadonly YELLOW='\033[0;33m'
822f1a38aSWillem de Bruijnreadonly RED='\033[0;31m'
922f1a38aSWillem de Bruijnreadonly NC='\033[0m' # No Color
10*dafe93b9SAndrei Gherzanreadonly TESTPORT=8000
1122f1a38aSWillem de Bruijn
1222f1a38aSWillem de Bruijnreadonly KSFT_PASS=0
1322f1a38aSWillem de Bruijnreadonly KSFT_FAIL=1
1422f1a38aSWillem de Bruijnreadonly KSFT_SKIP=4
1522f1a38aSWillem de Bruijn
1622f1a38aSWillem de Bruijnnum_pass=0
1722f1a38aSWillem de Bruijnnum_err=0
1822f1a38aSWillem de Bruijnnum_skip=0
1922f1a38aSWillem de Bruijn
2022f1a38aSWillem de Bruijnkselftest_test_exitcode() {
2122f1a38aSWillem de Bruijn	local -r exitcode=$1
2222f1a38aSWillem de Bruijn
2322f1a38aSWillem de Bruijn	if [[ ${exitcode} -eq ${KSFT_PASS} ]]; then
2422f1a38aSWillem de Bruijn		num_pass=$(( $num_pass + 1 ))
2522f1a38aSWillem de Bruijn	elif [[ ${exitcode} -eq ${KSFT_SKIP} ]]; then
2622f1a38aSWillem de Bruijn		num_skip=$(( $num_skip + 1 ))
2722f1a38aSWillem de Bruijn	else
2822f1a38aSWillem de Bruijn		num_err=$(( $num_err + 1 ))
2922f1a38aSWillem de Bruijn	fi
3022f1a38aSWillem de Bruijn}
3122f1a38aSWillem de Bruijn
3222f1a38aSWillem de Bruijnkselftest_exit() {
3322f1a38aSWillem de Bruijn	echo -e "$(basename $0): PASS=${num_pass} SKIP=${num_skip} FAIL=${num_err}"
3422f1a38aSWillem de Bruijn
3522f1a38aSWillem de Bruijn	if [[ $num_err -ne 0 ]]; then
3622f1a38aSWillem de Bruijn		echo -e "$(basename $0): ${RED}FAIL${NC}"
3722f1a38aSWillem de Bruijn		exit ${KSFT_FAIL}
3822f1a38aSWillem de Bruijn	fi
3922f1a38aSWillem de Bruijn
4022f1a38aSWillem de Bruijn	if [[ $num_skip -ne 0 ]]; then
4122f1a38aSWillem de Bruijn		echo -e "$(basename $0): ${YELLOW}SKIP${NC}"
4222f1a38aSWillem de Bruijn		exit ${KSFT_SKIP}
4322f1a38aSWillem de Bruijn	fi
4422f1a38aSWillem de Bruijn
4522f1a38aSWillem de Bruijn	echo -e "$(basename $0): ${GREEN}PASS${NC}"
4622f1a38aSWillem de Bruijn	exit ${KSFT_PASS}
4722f1a38aSWillem de Bruijn}
484ffc37f5SFred Klassen
493a687befSWillem de Bruijnwake_children() {
503a687befSWillem de Bruijn	local -r jobs="$(jobs -p)"
513a687befSWillem de Bruijn
523a687befSWillem de Bruijn	if [[ "${jobs}" != "" ]]; then
533a687befSWillem de Bruijn		kill -1 ${jobs} 2>/dev/null
543a687befSWillem de Bruijn	fi
553a687befSWillem de Bruijn}
563a687befSWillem de Bruijntrap wake_children EXIT
573a687befSWillem de Bruijn
583a687befSWillem de Bruijnrun_one() {
593a687befSWillem de Bruijn	local -r args=$@
60*dafe93b9SAndrei Gherzan	local nr_socks=0
61*dafe93b9SAndrei Gherzan	local i=0
62*dafe93b9SAndrei Gherzan	local -r timeout=10
633a687befSWillem de Bruijn
64*dafe93b9SAndrei Gherzan	./udpgso_bench_rx -p "$TESTPORT" &
65*dafe93b9SAndrei Gherzan	./udpgso_bench_rx -p "$TESTPORT" -t &
663a687befSWillem de Bruijn
67*dafe93b9SAndrei Gherzan	# Wait for the above test program to get ready to receive connections.
68*dafe93b9SAndrei Gherzan	while [ "$i" -lt "$timeout" ]; do
69*dafe93b9SAndrei Gherzan		nr_socks="$(ss -lnHi | grep -c "\*:${TESTPORT}")"
70*dafe93b9SAndrei Gherzan		[ "$nr_socks" -eq 2 ] && break
71*dafe93b9SAndrei Gherzan		i=$((i + 1))
72*dafe93b9SAndrei Gherzan		sleep 1
73*dafe93b9SAndrei Gherzan	done
74*dafe93b9SAndrei Gherzan	if [ "$nr_socks" -ne 2 ]; then
75*dafe93b9SAndrei Gherzan		echo "timed out while waiting for udpgso_bench_rx"
76*dafe93b9SAndrei Gherzan		exit 1
77*dafe93b9SAndrei Gherzan	fi
78*dafe93b9SAndrei Gherzan
79*dafe93b9SAndrei Gherzan	./udpgso_bench_tx -p "$TESTPORT" ${args}
803a687befSWillem de Bruijn}
813a687befSWillem de Bruijn
823a687befSWillem de Bruijnrun_in_netns() {
833a687befSWillem de Bruijn	local -r args=$@
843a687befSWillem de Bruijn
853a687befSWillem de Bruijn	./in_netns.sh $0 __subprocess ${args}
8622f1a38aSWillem de Bruijn	kselftest_test_exitcode $?
873a687befSWillem de Bruijn}
883a687befSWillem de Bruijn
893a687befSWillem de Bruijnrun_udp() {
903a687befSWillem de Bruijn	local -r args=$@
913a687befSWillem de Bruijn
923a687befSWillem de Bruijn	echo "udp"
933a687befSWillem de Bruijn	run_in_netns ${args}
943a687befSWillem de Bruijn
953a687befSWillem de Bruijn	echo "udp gso"
963327a9c4SPaolo Abeni	run_in_netns ${args} -S 0
97db63e489SWillem de Bruijn
98db63e489SWillem de Bruijn	echo "udp gso zerocopy"
99db63e489SWillem de Bruijn	run_in_netns ${args} -S 0 -z
100ade90d69SFred Klassen
101ade90d69SFred Klassen	echo "udp gso timestamp"
102ade90d69SFred Klassen	run_in_netns ${args} -S 0 -T
103ade90d69SFred Klassen
104ade90d69SFred Klassen	echo "udp gso zerocopy audit"
105ade90d69SFred Klassen	run_in_netns ${args} -S 0 -z -a
106ade90d69SFred Klassen
107ade90d69SFred Klassen	echo "udp gso timestamp audit"
108ade90d69SFred Klassen	run_in_netns ${args} -S 0 -T -a
109ade90d69SFred Klassen
110ade90d69SFred Klassen	echo "udp gso zerocopy timestamp audit"
111ade90d69SFred Klassen	run_in_netns ${args} -S 0 -T -z -a
1123a687befSWillem de Bruijn}
1133a687befSWillem de Bruijn
1143a687befSWillem de Bruijnrun_tcp() {
1153a687befSWillem de Bruijn	local -r args=$@
1163a687befSWillem de Bruijn
1173a687befSWillem de Bruijn	echo "tcp"
1183a687befSWillem de Bruijn	run_in_netns ${args} -t
1193a687befSWillem de Bruijn
1203a687befSWillem de Bruijn	echo "tcp zerocopy"
1213a687befSWillem de Bruijn	run_in_netns ${args} -t -z
122ade90d69SFred Klassen
123ade90d69SFred Klassen	# excluding for now because test fails intermittently
124ade90d69SFred Klassen	# add -P option to include poll() to reduce possibility of lost messages
125ade90d69SFred Klassen	#echo "tcp zerocopy audit"
126ade90d69SFred Klassen	#run_in_netns ${args} -t -z -P -a
1273a687befSWillem de Bruijn}
1283a687befSWillem de Bruijn
1293a687befSWillem de Bruijnrun_all() {
130ade90d69SFred Klassen	local -r core_args="-l 3"
1313a687befSWillem de Bruijn	local -r ipv4_args="${core_args} -4 -D 127.0.0.1"
1323a687befSWillem de Bruijn	local -r ipv6_args="${core_args} -6 -D ::1"
1333a687befSWillem de Bruijn
1343a687befSWillem de Bruijn	echo "ipv4"
1353a687befSWillem de Bruijn	run_tcp "${ipv4_args}"
1363a687befSWillem de Bruijn	run_udp "${ipv4_args}"
1373a687befSWillem de Bruijn
1383a687befSWillem de Bruijn	echo "ipv6"
139b9680808SDimitris Michailidis	run_tcp "${ipv6_args}"
1403a687befSWillem de Bruijn	run_udp "${ipv6_args}"
1413a687befSWillem de Bruijn}
1423a687befSWillem de Bruijn
1433a687befSWillem de Bruijnif [[ $# -eq 0 ]]; then
1443a687befSWillem de Bruijn	run_all
14522f1a38aSWillem de Bruijn	kselftest_exit
1463a687befSWillem de Bruijnelif [[ $1 == "__subprocess" ]]; then
1473a687befSWillem de Bruijn	shift
1483a687befSWillem de Bruijn	run_one $@
1493a687befSWillem de Bruijnelse
1503a687befSWillem de Bruijn	run_in_netns $@
1513a687befSWillem de Bruijnfi
152