xref: /linux/tools/testing/selftests/net/udpgso_bench.sh (revision b968080808f7f28b89aa495b7402ba48eb17ee93)
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
1022f1a38aSWillem de Bruijn
1122f1a38aSWillem de Bruijnreadonly KSFT_PASS=0
1222f1a38aSWillem de Bruijnreadonly KSFT_FAIL=1
1322f1a38aSWillem de Bruijnreadonly KSFT_SKIP=4
1422f1a38aSWillem de Bruijn
1522f1a38aSWillem de Bruijnnum_pass=0
1622f1a38aSWillem de Bruijnnum_err=0
1722f1a38aSWillem de Bruijnnum_skip=0
1822f1a38aSWillem de Bruijn
1922f1a38aSWillem de Bruijnkselftest_test_exitcode() {
2022f1a38aSWillem de Bruijn	local -r exitcode=$1
2122f1a38aSWillem de Bruijn
2222f1a38aSWillem de Bruijn	if [[ ${exitcode} -eq ${KSFT_PASS} ]]; then
2322f1a38aSWillem de Bruijn		num_pass=$(( $num_pass + 1 ))
2422f1a38aSWillem de Bruijn	elif [[ ${exitcode} -eq ${KSFT_SKIP} ]]; then
2522f1a38aSWillem de Bruijn		num_skip=$(( $num_skip + 1 ))
2622f1a38aSWillem de Bruijn	else
2722f1a38aSWillem de Bruijn		num_err=$(( $num_err + 1 ))
2822f1a38aSWillem de Bruijn	fi
2922f1a38aSWillem de Bruijn}
3022f1a38aSWillem de Bruijn
3122f1a38aSWillem de Bruijnkselftest_exit() {
3222f1a38aSWillem de Bruijn	echo -e "$(basename $0): PASS=${num_pass} SKIP=${num_skip} FAIL=${num_err}"
3322f1a38aSWillem de Bruijn
3422f1a38aSWillem de Bruijn	if [[ $num_err -ne 0 ]]; then
3522f1a38aSWillem de Bruijn		echo -e "$(basename $0): ${RED}FAIL${NC}"
3622f1a38aSWillem de Bruijn		exit ${KSFT_FAIL}
3722f1a38aSWillem de Bruijn	fi
3822f1a38aSWillem de Bruijn
3922f1a38aSWillem de Bruijn	if [[ $num_skip -ne 0 ]]; then
4022f1a38aSWillem de Bruijn		echo -e "$(basename $0): ${YELLOW}SKIP${NC}"
4122f1a38aSWillem de Bruijn		exit ${KSFT_SKIP}
4222f1a38aSWillem de Bruijn	fi
4322f1a38aSWillem de Bruijn
4422f1a38aSWillem de Bruijn	echo -e "$(basename $0): ${GREEN}PASS${NC}"
4522f1a38aSWillem de Bruijn	exit ${KSFT_PASS}
4622f1a38aSWillem de Bruijn}
474ffc37f5SFred Klassen
483a687befSWillem de Bruijnwake_children() {
493a687befSWillem de Bruijn	local -r jobs="$(jobs -p)"
503a687befSWillem de Bruijn
513a687befSWillem de Bruijn	if [[ "${jobs}" != "" ]]; then
523a687befSWillem de Bruijn		kill -1 ${jobs} 2>/dev/null
533a687befSWillem de Bruijn	fi
543a687befSWillem de Bruijn}
553a687befSWillem de Bruijntrap wake_children EXIT
563a687befSWillem de Bruijn
573a687befSWillem de Bruijnrun_one() {
583a687befSWillem de Bruijn	local -r args=$@
593a687befSWillem de Bruijn
603a687befSWillem de Bruijn	./udpgso_bench_rx &
613a687befSWillem de Bruijn	./udpgso_bench_rx -t &
623a687befSWillem de Bruijn
633a687befSWillem de Bruijn	./udpgso_bench_tx ${args}
643a687befSWillem de Bruijn}
653a687befSWillem de Bruijn
663a687befSWillem de Bruijnrun_in_netns() {
673a687befSWillem de Bruijn	local -r args=$@
683a687befSWillem de Bruijn
693a687befSWillem de Bruijn	./in_netns.sh $0 __subprocess ${args}
7022f1a38aSWillem de Bruijn	kselftest_test_exitcode $?
713a687befSWillem de Bruijn}
723a687befSWillem de Bruijn
733a687befSWillem de Bruijnrun_udp() {
743a687befSWillem de Bruijn	local -r args=$@
753a687befSWillem de Bruijn
763a687befSWillem de Bruijn	echo "udp"
773a687befSWillem de Bruijn	run_in_netns ${args}
783a687befSWillem de Bruijn
793a687befSWillem de Bruijn	echo "udp gso"
803327a9c4SPaolo Abeni	run_in_netns ${args} -S 0
81db63e489SWillem de Bruijn
82db63e489SWillem de Bruijn	echo "udp gso zerocopy"
83db63e489SWillem de Bruijn	run_in_netns ${args} -S 0 -z
84ade90d69SFred Klassen
85ade90d69SFred Klassen	echo "udp gso timestamp"
86ade90d69SFred Klassen	run_in_netns ${args} -S 0 -T
87ade90d69SFred Klassen
88ade90d69SFred Klassen	echo "udp gso zerocopy audit"
89ade90d69SFred Klassen	run_in_netns ${args} -S 0 -z -a
90ade90d69SFred Klassen
91ade90d69SFred Klassen	echo "udp gso timestamp audit"
92ade90d69SFred Klassen	run_in_netns ${args} -S 0 -T -a
93ade90d69SFred Klassen
94ade90d69SFred Klassen	echo "udp gso zerocopy timestamp audit"
95ade90d69SFred Klassen	run_in_netns ${args} -S 0 -T -z -a
963a687befSWillem de Bruijn}
973a687befSWillem de Bruijn
983a687befSWillem de Bruijnrun_tcp() {
993a687befSWillem de Bruijn	local -r args=$@
1003a687befSWillem de Bruijn
1013a687befSWillem de Bruijn	echo "tcp"
1023a687befSWillem de Bruijn	run_in_netns ${args} -t
1033a687befSWillem de Bruijn
1043a687befSWillem de Bruijn	echo "tcp zerocopy"
1053a687befSWillem de Bruijn	run_in_netns ${args} -t -z
106ade90d69SFred Klassen
107ade90d69SFred Klassen	# excluding for now because test fails intermittently
108ade90d69SFred Klassen	# add -P option to include poll() to reduce possibility of lost messages
109ade90d69SFred Klassen	#echo "tcp zerocopy audit"
110ade90d69SFred Klassen	#run_in_netns ${args} -t -z -P -a
1113a687befSWillem de Bruijn}
1123a687befSWillem de Bruijn
1133a687befSWillem de Bruijnrun_all() {
114ade90d69SFred Klassen	local -r core_args="-l 3"
1153a687befSWillem de Bruijn	local -r ipv4_args="${core_args} -4 -D 127.0.0.1"
1163a687befSWillem de Bruijn	local -r ipv6_args="${core_args} -6 -D ::1"
1173a687befSWillem de Bruijn
1183a687befSWillem de Bruijn	echo "ipv4"
1193a687befSWillem de Bruijn	run_tcp "${ipv4_args}"
1203a687befSWillem de Bruijn	run_udp "${ipv4_args}"
1213a687befSWillem de Bruijn
1223a687befSWillem de Bruijn	echo "ipv6"
123*b9680808SDimitris Michailidis	run_tcp "${ipv6_args}"
1243a687befSWillem de Bruijn	run_udp "${ipv6_args}"
1253a687befSWillem de Bruijn}
1263a687befSWillem de Bruijn
1273a687befSWillem de Bruijnif [[ $# -eq 0 ]]; then
1283a687befSWillem de Bruijn	run_all
12922f1a38aSWillem de Bruijn	kselftest_exit
1303a687befSWillem de Bruijnelif [[ $1 == "__subprocess" ]]; then
1313a687befSWillem de Bruijn	shift
1323a687befSWillem de Bruijn	run_one $@
1333a687befSWillem de Bruijnelse
1343a687befSWillem de Bruijn	run_in_netns $@
1353a687befSWillem de Bruijnfi
136