File: compare_benchmarks.sh

package info (click to toggle)
golang-github-coreos-bbolt 1.4.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,300 kB
  • sloc: makefile: 87; sh: 57
file content (70 lines) | stat: -rwxr-xr-x 2,229 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/env bash
# https://github.com/kubernetes/kube-state-metrics/blob/main/tests/compare_benchmarks.sh (originally written by mxinden)

# exit immediately when a command fails
set -e
# only exit with zero if all commands of the pipeline exit successfully
set -o pipefail
# error on unset variables
set -u

[[ "$#" -eq 1 ]] || echo "One argument required, $# provided."

REF_CURRENT="$(git rev-parse --abbrev-ref HEAD)"
BASE_TO_COMPARE=$1

RESULT_CURRENT="$(mktemp)-${REF_CURRENT}"
RESULT_TO_COMPARE="$(mktemp)-${BASE_TO_COMPARE}"

BENCH_COUNT=${BENCH_COUNT:-10}
BENCHSTAT_CONFIDENCE_LEVEL=${BENCHSTAT_CONFIDENCE_LEVEL:-0.9}
BENCHSTAT_FORMAT=${BENCHSTAT_FORMAT:-"text"}
BENCH_PARAMETERS=${BENCH_PARAMETERS:-"-count 2000000 -batch-size 10000"}

if [[ "${BENCHSTAT_FORMAT}" == "csv" ]] && [[ -z "${BENCHSTAT_OUTPUT_FILE}" ]]; then
  echo "BENCHSTAT_FORMAT is set to csv, but BENCHSTAT_OUTPUT_FILE is not set."
  exit 1
fi

function bench() {
  local output_file
  output_file="$1"
  make build

  for _ in $(seq "$BENCH_COUNT"); do
    echo ./bin/bbolt bench -gobench-output -profile-mode n ${BENCH_PARAMETERS}
    # shellcheck disable=SC2086
    ./bin/bbolt bench -gobench-output -profile-mode n ${BENCH_PARAMETERS} >> "${output_file}"
  done
}

function main() {
  echo "### Benchmarking PR ${REF_CURRENT}"
  bench "${RESULT_CURRENT}"
  echo ""
  echo "### Done benchmarking ${REF_CURRENT}"

  echo "### Benchmarking base ${BASE_TO_COMPARE}"
  git checkout "${BASE_TO_COMPARE}"
  bench "${RESULT_TO_COMPARE}"
  echo ""
  echo "### Done benchmarking ${BASE_TO_COMPARE}"

  git checkout -

  echo ""
  echo "### Result"
  echo "BASE=${BASE_TO_COMPARE} HEAD=${REF_CURRENT}"

  if [[ "${BENCHSTAT_FORMAT}" == "csv" ]]; then
    benchstat -format=csv -confidence="${BENCHSTAT_CONFIDENCE_LEVEL}" BASE="${RESULT_TO_COMPARE}" HEAD="${RESULT_CURRENT}" 2>/dev/null 1>"${BENCHSTAT_OUTPUT_FILE}"
  else
    if [[ -z "${BENCHSTAT_OUTPUT_FILE}" ]]; then
      benchstat -confidence="${BENCHSTAT_CONFIDENCE_LEVEL}" BASE="${RESULT_TO_COMPARE}" HEAD="${RESULT_CURRENT}"
    else
      benchstat -confidence="${BENCHSTAT_CONFIDENCE_LEVEL}" BASE="${RESULT_TO_COMPARE}" HEAD="${RESULT_CURRENT}" 1>"${BENCHSTAT_OUTPUT_FILE}"
    fi
  fi
}

main