#!/usr/bin/env bash #Requirements: #.wrk descriptor file for wrk #.body (even if you don't need it) #Configuration variables functions=(isprime-kubeless-go-sc) connections=(45) times=(30s) kuberhost="node1:31299" maxthreads=40 #Wave mode configuration wave_connection=40 wave_max_conn=160 wave_min_conn=40 wave_time="30s" wave_loop_max=2 #Climb mode configuration climb_max=300 climb_connection=30 kubeless=true #Loadtest specific fonguration loadtest_rps=1000 HEY_INSTALLED=$(command -v hey) if [[ $HEY_INSTALLED = "" ]] then apt update apt install -y golang go get -u github.com/rakyll/hey cp "$HOME"/go/bin/hey /usr/local/bin fi LOADTEST_INSTALLED=$(command -v loadtest) if [[ LOADTEST_INSTALLED = "" ]] then apt update apt install -y nodejs npm npm i -g loadtest fi echo -e "Benchmarking functions\n" for function in "${functions[@]}" do function_friendly=$(echo $function | cut - -d'-' -f1) echo -e "Benchmarking $function\n" echo -e "Output of $function is:\n" perl -pi -e 'chomp if eof' "$function_friendly".body if $kubeless; then curl --data-binary @"$function_friendly".body --header "Host: $function.kubeless" --header "Content-Type:application/json" http://$kuberhost/"$function" else curl --header "Host: $function.default.example.com" http://$kuberhost/ fi echo -e "\n" if [[ $* = *"--wave"* ]] then wave_loop=1 wave_dir_up=true wave_num=1 while [[ $wave_loop -lt $wave_loop_max ]]; do now=$(date '+%Y-%m-%d-%H-%M') echo -e "Connections: $wave_connection" echo -e "Running" if $kubeless; then hey -c $wave_connection -z $wave_time -m POST -o csv -host "$function.kubeless" -D "$function_friendly".body -T "application/json" http://$kuberhost/"$function" > ./data/"$function"."$wave_num".wave.csv else hey -c $wave_connection -z $wave_time -m POST -o csv -host "$function.default.example.com" http://$kuberhost/ > ./data/"$function"."$wave_num".wave.csv fi wave_num=$((wave_num + 1)) if $wave_dir_up then if [[ $wave_connection -lt $wave_max_conn ]] then echo -e "Stepping up" wave_connection=$((wave_connection * 5)) else echo -e "Not stepping" wave_dir_up=false fi else if [[ $wave_connection -gt $wave_min_conn ]] then echo -e "Stepping down" wave_connection=$((wave_connection / 5)) else echo -e "Not stepping" wave_dir_up=true wave_loop=$((wave_loop + 1)) fi fi done else for connection in "${connections[@]}" do if [[ $connection -lt $((maxthreads + 1)) ]] then threads=$((connection-1)) else threads=$maxthreads fi echo -e "Threads: $threads Connections $connection\n" for time in "${times[@]}" do datetime=$(date '+%Y-%m-%d-%H-%M-%S') echo -e "Time: $time\n" if [[ $* = *"--fire"* ]] then echo -e "hey-summary $datetime\n" if $kubeless; then if [[ $* = *"--loadtest"* ]] then loadtest -H "Host: $function.kubeless" --rps $leadtest_rps -c $connection -t $time -p "$function_firendly".body http://$kuberhost/"$function" > ./data/"$function"."$connection"."$time"."$datetime".txt else hey -c "$connection" -z "$time" -m POST -host "$function.kubeless" -D "$function_firendly".body -T "application/json" http://$kuberhost/"$function" > ./data/"$function"."$connection"."$time"."$datetime".txt fi else if [[ $* = *"--loadtest"* ]] then loadtest -H "Host: $function.default.example.com" --rps $leadtest_rps -c $connection -t $time http://$kuberhost/ > ./data/"$function"."$connection"."$time"."$datetime".txt else hey -c "$connection" -z "$time" -m POST -host "$function.default.example.com" http://$kuberhost/ > ./data/"$function"."$connection"."$time"."$datetime".txt fi fi fi if [[ $* = *"--csv"* ]] then echo -e "hey-csv $datetime\n" if $kubeless; then hey -c "$connection" -z "$time" -m POST -host "$function.kubeless" -D "$function_firendly".body -T "application/json" http://$kuberhost/"$function" > ./data/"$function"."$connection"."$time"."$datetime".csv else hey -c "$connection" -z "$time" -m POST -host "$function.default.example.com" http://$kuberhost/ > ./data/"$function"."$connection"."$time"."$datetime".csv fi fi if [[ $* = *"--for"* ]] then for num in 1 2 3 4 5 6 7 8 9 10 do echo -e "hey-for $num\n" if $kubeless; then hey -c "$connection" -z "$time" -m POST -o csv -host "$function.kubeless" -D "$function_friendly".body -T "application/json" http://$kuberhost/"$function" > ./data/"$function"."$num".csv else hey -c "$connection" -z "$time" -m POST -o csv -host "$function.default.example.com" http://$kuberhost/ > ./data/"$function"."$num".for.csv fi done fi done done fi if [[ $* = *"--climb"* ]] then while [[ $climb_connection -lt $climb_max ]]; do echo -e "Connections: $climb_connection" if $kubeless; then hey -c $climb_connection -z $time -m POST -o csv -host "$function.kubeless" -D "$function_friendly".body -T "application/json" http://$kuberhost/"$function" > ./data/"$function"."$climb_connection".climb.csv else hey -c $climb_connection -z $time -m POST -o csv -host "$function.default.example.com" http://$kuberhost/ > ./data/"$function"."$climb_connection".climb.csv fi climb_connection=$((climb_connection + 10)) done fi echo -e "Finished at $datetime" done