github.com/hxx258456/ccgo@v0.0.5-0.20230213014102-48b35f46f66f/grpc/benchmark/run_bench.sh (about) 1 #!/bin/bash 2 3 rpcs=(1) 4 conns=(1) 5 warmup=10 6 dur=10 7 reqs=(1) 8 resps=(1) 9 rpc_types=(unary) 10 11 # idx[0] = idx value for rpcs 12 # idx[1] = idx value for conns 13 # idx[2] = idx value for reqs 14 # idx[3] = idx value for resps 15 # idx[4] = idx value for rpc_types 16 idx=(0 0 0 0 0) 17 idx_max=(1 1 1 1 1) 18 19 inc() 20 { 21 for i in $(seq $((${#idx[@]}-1)) -1 0); do 22 idx[${i}]=$((${idx[${i}]}+1)) 23 if [ ${idx[${i}]} == ${idx_max[${i}]} ]; then 24 idx[${i}]=0 25 else 26 break 27 fi 28 done 29 local fin 30 fin=1 31 # Check to see if we have looped back to the beginning. 32 for v in ${idx[@]}; do 33 if [ ${v} != 0 ]; then 34 fin=0 35 break 36 fi 37 done 38 if [ ${fin} == 1 ]; then 39 rm -Rf ${out_dir} 40 clean_and_die 0 41 fi 42 } 43 44 clean_and_die() { 45 rm -Rf ${out_dir} 46 exit $1 47 } 48 49 run(){ 50 local nr 51 nr=${rpcs[${idx[0]}]} 52 local nc 53 nc=${conns[${idx[1]}]} 54 req_sz=${reqs[${idx[2]}]} 55 resp_sz=${resps[${idx[3]}]} 56 r_type=${rpc_types[${idx[4]}]} 57 # Following runs one benchmark 58 base_port=50051 59 delta=0 60 test_name="r_"${nr}"_c_"${nc}"_req_"${req_sz}"_resp_"${resp_sz}"_"${r_type}"_"$(date +%s) 61 echo "================================================================================" 62 echo ${test_name} 63 while : 64 do 65 port=$((${base_port}+${delta})) 66 67 # Launch the server in background 68 ${out_dir}/server --port=${port} --test_name="Server_"${test_name}& 69 server_pid=$(echo $!) 70 71 # Launch the client 72 ${out_dir}/client --port=${port} --d=${dur} --w=${warmup} --r=${nr} --c=${nc} --req=${req_sz} --resp=${resp_sz} --rpc_type=${r_type} --test_name="client_"${test_name} 73 client_status=$(echo $?) 74 75 kill -INT ${server_pid} 76 wait ${server_pid} 77 78 if [ ${client_status} == 0 ]; then 79 break 80 fi 81 82 delta=$((${delta}+1)) 83 if [ ${delta} == 10 ]; then 84 echo "Continuous 10 failed runs. Exiting now." 85 rm -Rf ${out_dir} 86 clean_and_die 1 87 fi 88 done 89 90 } 91 92 set_param(){ 93 local argname=$1 94 shift 95 local idx=$1 96 shift 97 if [ $# -eq 0 ]; then 98 echo "${argname} not specified" 99 exit 1 100 fi 101 PARAM=($(echo $1 | sed 's/,/ /g')) 102 if [ ${idx} -lt 0 ]; then 103 return 104 fi 105 idx_max[${idx}]=${#PARAM[@]} 106 } 107 108 while [ $# -gt 0 ]; do 109 case "$1" in 110 -r) 111 shift 112 set_param "number of rpcs" 0 $1 113 rpcs=(${PARAM[@]}) 114 shift 115 ;; 116 -c) 117 shift 118 set_param "number of connections" 1 $1 119 conns=(${PARAM[@]}) 120 shift 121 ;; 122 -w) 123 shift 124 set_param "warm-up period" -1 $1 125 warmup=${PARAM} 126 shift 127 ;; 128 -d) 129 shift 130 set_param "duration" -1 $1 131 dur=${PARAM} 132 shift 133 ;; 134 -req) 135 shift 136 set_param "request size" 2 $1 137 reqs=(${PARAM[@]}) 138 shift 139 ;; 140 -resp) 141 shift 142 set_param "response size" 3 $1 143 resps=(${PARAM[@]}) 144 shift 145 ;; 146 -rpc_type) 147 shift 148 set_param "rpc type" 4 $1 149 rpc_types=(${PARAM[@]}) 150 shift 151 ;; 152 -h|--help) 153 echo "Following are valid options:" 154 echo 155 echo "-h, --help show brief help" 156 echo "-w warm-up duration in seconds, default value is 10" 157 echo "-d benchmark duration in seconds, default value is 60" 158 echo "" 159 echo "Each of the following can have multiple comma separated values." 160 echo "" 161 echo "-r number of RPCs, default value is 1" 162 echo "-c number of Connections, default value is 1" 163 echo "-req req size in bytes, default value is 1" 164 echo "-resp resp size in bytes, default value is 1" 165 echo "-rpc_type valid values are unary|streaming, default is unary" 166 exit 0 167 ;; 168 *) 169 echo "Incorrect option $1" 170 exit 1 171 ;; 172 esac 173 done 174 175 # Build server and client 176 out_dir=$(mktemp -d oss_benchXXX) 177 178 go build -o ${out_dir}/server $GOPATH/src/google.golang.org/grpc/benchmark/server/main.go && go build -o ${out_dir}/client $GOPATH/src/google.golang.org/grpc/benchmark/client/main.go 179 if [ $? != 0 ]; then 180 clean_and_die 1 181 fi 182 183 184 while : 185 do 186 run 187 inc 188 done