go.ligato.io/vpp-agent/v3@v3.5.0/scripts/cmpbench.sh (about) 1 #!/bin/bash 2 3 ##################################################### 4 # cmpbench - script for comparing benchmark results 5 # 6 # args: 7 # - $1: path to package that will be benchmarked, 8 # optional, defaults to: plugins/kvscheduler 9 ##################################################### 10 11 set -euo pipefail 12 13 SCRIPT_DIR="$(dirname $(readlink -e "${BASH_SOURCE[0]}"))" 14 15 BENCH_PKG_DIR=${1:-${SCRIPT_DIR}/../plugins/kvscheduler} 16 17 [ -z ${OUTPUT_DIR-} ] && OUTPUT_DIR=/tmp/bench 18 mkdir -p "$OUTPUT_DIR" 19 20 OLD_BENCH="${OUTPUT_DIR}/old.txt" 21 NEW_BENCH="${OUTPUT_DIR}/new.txt" 22 CMP_BENCH="${OUTPUT_DIR}/cmp.txt" 23 CMP_BENCH_IMG="${OUTPUT_DIR}/cmp.svg" 24 25 function benchtest() { 26 cd "$BENCH_PKG_DIR" 27 go test -run=NONE -bench=. -benchmem -benchtime=3s 28 } 29 30 BENCH_PKG=$(go list $BENCH_PKG_DIR) 31 32 echo "-> running cmpbench for package: $BENCH_PKG" 33 34 [ -f "${OLD_BENCH}" ] && grep -q "pkg: $BENCH_PKG" $OLD_BENCH || { 35 rm -f $OLD_BENCH $NEW_BENCH $CMP_BENCH $CMP_BENCH_IMG 36 echo "-> creating old bench.." 37 echo "--------------------------------------------------------------" 38 benchtest | tee $OLD_BENCH 39 echo "--------------------------------------------------------------" 40 echo "old bench at: $OLD_BENCH" 41 echo "run this script again for comparing with new benchmark" 42 exit 0 43 } 44 45 echo "-> found old bench at: $OLD_BENCH" 46 echo "--------------------------------------------------------------" 47 cat $OLD_BENCH 48 echo "--------------------------------------------------------------" 49 50 echo "-> creating new bench.." 51 echo "--------------------------------------------------------------" 52 benchtest | tee $NEW_BENCH 53 echo "--------------------------------------------------------------" 54 echo "-> new bench at: $OLD_BENCH" 55 56 echo "-> comparing benchmarks.." 57 58 if ! which benchcmp >/dev/null; then 59 echo "-> downloading benchcmp.." 60 go get golang.org/x/tools/cmd/benchcmp 61 fi 62 63 if ! which benchviz >/dev/null; then 64 echo "-> downloading benchviz.." 65 go get github.com/ajstarks/svgo/benchviz 66 fi 67 68 echo "--------------------------------------------------------------" 69 benchcmp $OLD_BENCH $NEW_BENCH | tee $CMP_BENCH 70 echo "--------------------------------------------------------------" 71 72 cat $CMP_BENCH | benchviz -title="$BENCH_PKG" > $CMP_BENCH_IMG 73 echo "-> bench comparison image at: $CMP_BENCH_IMG" 74 75 if [ -t 1 ]; then exo-open $CMP_BENCH_IMG; fi 76