github.com/amarpal/go-tools@v0.0.0-20240422043104-40142f59f616/_benchmarks/bench.sh (about)

     1  #!/usr/bin/env bash
     2  set -e
     3  
     4  declare -A PKGS=(
     5  	["strconv"]="strconv"
     6  	["net/http"]="net/http"
     7  	["image/color"]="image/color"
     8  	["std"]="std"
     9  	["k8s"]="k8s.io/kubernetes/pkg/..."
    10  )
    11  
    12  MIN_CORES=32
    13  MAX_CORES=32
    14  INCR_CORES=2
    15  MIN_GOGC=100
    16  MAX_GOGC=100
    17  SAMPLES=10
    18  WIPE_CACHE=1
    19  FORMAT=bench
    20  BIN=$(realpath ./silent-staticcheck.sh)
    21  
    22  runBenchmark() {
    23  	local pkg="$1"
    24  	local label="$2"
    25  	local gc="$3"
    26  	local cores="$4"
    27  	local wipe="$5"
    28  
    29  	if [ $wipe -ne 0 ]; then
    30  		rm -rf ~/.cache/staticcheck
    31  	fi
    32  
    33  	local out=$(GOGC=$gc GOMAXPROCS=$cores env time -f "%e %M" $BIN $pkg 2>&1)
    34  	local t=$(echo "$out" | cut -f1 -d" ")
    35  	local m=$(echo "$out" | cut -f2 -d" ")
    36  	local ns=$(printf "%s 1000000000 * p" $t | dc)
    37  	local b=$((m * 1024))
    38  
    39  	case $FORMAT in
    40  		bench)
    41  			printf "BenchmarkStaticcheck-%s-GOGC%d-wiped%d-%d  1   %.0f ns/op  %.0f B/op\n" "$label" "$gc" "$wipe" "$cores" "$ns" "$b"
    42  			;;
    43  		csv)
    44  			printf "%s,%d,%d,%d,%.0f,%.0f\n" "$label" "$gc" "$cores" "$wipe" "$ns" "$b"
    45  			;;
    46  	esac
    47  }
    48  
    49  export GO111MODULE=off
    50  
    51  if [ "$FORMAT" = "csv" ]; then
    52  	printf "packages,gogc,gomaxprocs,wipe-cache,time,memory\n"
    53  fi
    54  
    55  for label in "${!PKGS[@]}"; do
    56  	pkg=${PKGS[$label]}
    57  	for gc in $(seq $MIN_GOGC 10 $MAX_GOGC); do
    58  		for cores in $(seq $MIN_CORES $INCR_CORES $MAX_CORES); do
    59  			for i in $(seq 1 $SAMPLES); do
    60  				runBenchmark "$pkg" "$label" "$gc" "$cores" 1
    61  				runBenchmark "$pkg" "$label" "$gc" "$cores" 0
    62  			done
    63  		done
    64  	done
    65  done