152 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03#4# Run a series of udpgso benchmarks5 6readonly GREEN='\033[0;92m'7readonly YELLOW='\033[0;33m'8readonly RED='\033[0;31m'9readonly NC='\033[0m' # No Color10readonly TESTPORT=800011 12readonly KSFT_PASS=013readonly KSFT_FAIL=114readonly KSFT_SKIP=415 16num_pass=017num_err=018num_skip=019 20kselftest_test_exitcode() {21 local -r exitcode=$122 23 if [[ ${exitcode} -eq ${KSFT_PASS} ]]; then24 num_pass=$(( $num_pass + 1 ))25 elif [[ ${exitcode} -eq ${KSFT_SKIP} ]]; then26 num_skip=$(( $num_skip + 1 ))27 else28 num_err=$(( $num_err + 1 ))29 fi30}31 32kselftest_exit() {33 echo -e "$(basename $0): PASS=${num_pass} SKIP=${num_skip} FAIL=${num_err}"34 35 if [[ $num_err -ne 0 ]]; then36 echo -e "$(basename $0): ${RED}FAIL${NC}"37 exit ${KSFT_FAIL}38 fi39 40 if [[ $num_skip -ne 0 ]]; then41 echo -e "$(basename $0): ${YELLOW}SKIP${NC}"42 exit ${KSFT_SKIP}43 fi44 45 echo -e "$(basename $0): ${GREEN}PASS${NC}"46 exit ${KSFT_PASS}47}48 49wake_children() {50 local -r jobs="$(jobs -p)"51 52 if [[ "${jobs}" != "" ]]; then53 kill -1 ${jobs} 2>/dev/null54 fi55}56trap wake_children EXIT57 58run_one() {59 local -r args=$@60 local nr_socks=061 local i=062 local -r timeout=1063 64 ./udpgso_bench_rx -p "$TESTPORT" &65 ./udpgso_bench_rx -p "$TESTPORT" -t &66 67 # Wait for the above test program to get ready to receive connections.68 while [ "$i" -lt "$timeout" ]; do69 nr_socks="$(ss -lnHi | grep -c "\*:${TESTPORT}")"70 [ "$nr_socks" -eq 2 ] && break71 i=$((i + 1))72 sleep 173 done74 if [ "$nr_socks" -ne 2 ]; then75 echo "timed out while waiting for udpgso_bench_rx"76 exit 177 fi78 79 ./udpgso_bench_tx -p "$TESTPORT" ${args}80}81 82run_in_netns() {83 local -r args=$@84 85 ./in_netns.sh $0 __subprocess ${args}86 kselftest_test_exitcode $?87}88 89run_udp() {90 local -r args=$@91 92 echo "udp"93 run_in_netns ${args}94 95 echo "udp gso"96 run_in_netns ${args} -S 097 98 echo "udp gso zerocopy"99 run_in_netns ${args} -S 0 -z100 101 echo "udp gso timestamp"102 run_in_netns ${args} -S 0 -T103 104 echo "udp gso zerocopy audit"105 run_in_netns ${args} -S 0 -z -a106 107 echo "udp gso timestamp audit"108 run_in_netns ${args} -S 0 -T -a109 110 echo "udp gso zerocopy timestamp audit"111 run_in_netns ${args} -S 0 -T -z -a112}113 114run_tcp() {115 local -r args=$@116 117 echo "tcp"118 run_in_netns ${args} -t119 120 echo "tcp zerocopy"121 run_in_netns ${args} -t -z122 123 # excluding for now because test fails intermittently124 # add -P option to include poll() to reduce possibility of lost messages125 #echo "tcp zerocopy audit"126 #run_in_netns ${args} -t -z -P -a127}128 129run_all() {130 local -r core_args="-l 3"131 local -r ipv4_args="${core_args} -4 -D 127.0.0.1"132 local -r ipv6_args="${core_args} -6 -D ::1"133 134 echo "ipv4"135 run_tcp "${ipv4_args}"136 run_udp "${ipv4_args}"137 138 echo "ipv6"139 run_tcp "${ipv6_args}"140 run_udp "${ipv6_args}"141}142 143if [[ $# -eq 0 ]]; then144 run_all145 kselftest_exit146elif [[ $1 == "__subprocess" ]]; then147 shift148 run_one $@149else150 run_in_netns $@151fi152