contrib: add benchmark scripts

This commit is contained in:
Noah Hellman 2023-05-31 19:30:16 +02:00
parent 0173db178a
commit 266b55a6f3
2 changed files with 71 additions and 0 deletions

31
contrib/bench_row.sh Executable file
View file

@ -0,0 +1,31 @@
# run one or more benchmarks, for use together with bench_table.sh
# usage: ./bench_row.sh [-i] [-c crit_bench]..
{
git log --oneline | head -n1
while getopts i:c: flag; do
case "$flag" in
i)
cargo bench -p bench-iai 2>|/dev/null \
| awk -v b="$OPTARG" '
$0 == b {inside=1}
$0 == "" {inside=0}
inside && $1 == "Estimated" {print $3, $4, $5}
'
;;
c)
# try to reduce noise by selecting max throughput of multiple runs
for _ in $(seq 100); do
cargo bench -p bench-crit -- --quick "$OPTARG" 2>|/dev/null \
| awk 'NR == 2 {print $4}'
done | sort -rV | head -n1
;;
*)
exit 1
;;
esac
done
} | tr "\n" "\t"
echo

40
contrib/bench_table.sh Executable file
View file

@ -0,0 +1,40 @@
# run benchmarks over a range of commits and assemble a table
# usage: ./contrib/bench_table.sh [-r RANGE] -- BENCHMARKS
range="master.."
while getopts r: flag; do
case "$flag" in
r) range=$OPTARG;;
*) exit 1;;
esac
done
shift $((OPTIND-1))
[ -z "$*" ] && exit 1
make bench || exit 1
current="$(git rev-parse --abbrev-ref HEAD)"
trap "git checkout $current" EXIT
< /proc/cpuinfo grep "model name" | head -n1
{
{
echo "commit"
OPTIND=1
while getopts i:c: flag "$@"; do
case "$flag" in
i) echo "iai:$OPTARG [cycles]";;
c) echo "criterion:$OPTARG [MB/s]";;
*) exit 1
esac
done
} | tr "\n" "\t"
echo
set -x
for commit in $(git rev-list --reverse --topo-order "$range"); do
git checkout "$commit" >/dev/null
./contrib/bench_row.sh "$@" | tee /proc/self/fd/2
done
} | column -t -s"$(printf "\t")"