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