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