diff --git a/dist/benchmark/benchcmp.sh b/dist/benchmark/benchcmp.sh new file mode 100755 index 000000000..d0e688c1f --- /dev/null +++ b/dist/benchmark/benchcmp.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +# usage: ./benchcmp.sh +# Exit on any non zero return value on execution of a command. +set -e + +# path of benchcmp. +benchcmp=${GOPATH}/bin/benchcmp + +# function which runs the benchmark comparison. +RunBenchCmp () { + # Path for storing output of benchmark at commit 1. + commit1Bench=/tmp/minio-$1.bench + # Path for storing output of benchmark at commit 2. + commit2Bench=/tmp/minio-$2.bench + # switch to commit $1. + git checkout $1 + # Check if the benchmark results for given commit 1 already exists. + # Benchmarks are time/resource consuming operations, run only if the the results doesn't exist. + if [[ ! -f $commit1Bench ]] + then + + echo "Running benchmarks at $1" + go test -run=NONE -bench=. | tee $commit1Bench + fi + # get back to the commit from which it was started. + git checkout - + echo "Checking into commit $2" + # switch to commit $2 + git checkout $2 + # Check if the benchmark results for given commit 2 already exists. + # Benchmarks are time/resource consuming operations, run only if the the results doesn't exist. + if [[ ! -f $commit2Bench ]] + then + # Running benchmarks at $2. + echo "Running benchmarks at $2" + go test -run=NONE -bench=. | tee $commit2Bench + fi + + # get back to the commit from which it was started. + git checkout - + # Comparing the benchmarks. + echo "Running benchmark comparison between $1 and $2 ..." + $benchcmp $commit1Bench $commit2Bench + echo "Done." +} + +# check if 2 commit SHA's of snapshots of code for which benchmp has to be done is provided. +if [ ! $# -eq 2 ] +then + # exit if commit SHA's are not provided. + echo $# + echo "Need Commit SHA's of 2 snapshots to be supplied to run benchmark comparision." + exit 1 +fi + +# check if benchcmp exists. +if [[ -x "$benchcmp" ]] +then + RunBenchCmp $1 $2 +else + # install benchcmp if doesnt't exist. + echo "fetching Benchcmp..." + go get -u golang.org/x/tools/cmd/benchcmp + echo "Done." + RunBenchCmp $1 $2 +fi