diff --git a/.maintainer-scripts/benchmark.sh b/.maintainer-scripts/benchmark.sh new file mode 100755 index 00000000..7eff3ee5 --- /dev/null +++ b/.maintainer-scripts/benchmark.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +set -e + +BENCHMARKS=$1 +if [ -z "$BENCHMARKS" ]; then + BENCHMARKS="extract,mkdwarfs" +fi + +HF=hyperfine +NPROC=$(nproc) + +NWARM=2 +NFAST=10 +NSLOW=5 + +ARCH=$(ls -d1 dwarfs-*-Linux-*/ | head -n1) +HASH=$ARCH +ARCH=${ARCH/*-Linux-/} +ARCH=${ARCH/-*/} +HASH=${HASH/-Linux-*/} +HASH=${HASH/*-/} + +OUT=reports-$HASH + +mkdir -p $OUT + +for i in dwarfs-*-Linux-*/; do + t=${i/*-Linux-/} + t=${t/\//} + + for n in mkdwarfs dwarfs dwarfsck dwarfsextract; do + ln -sf ${i}*bin/$n $n-$t + done +done + +DATASETS='audio disk perl video' + +MKDWARFS=$(ls -1 ./mkdwarfs-$ARCH-* | paste -sd "," -) +# DWARFSCK=$(ls -1 ./dwarfsck-$ARCH-* | paste -sd "," -) +DWARFSEXTRACT=$(ls -1 ./dwarfsextract-$ARCH-* | paste -sd "," -) +# DWARFS=$(ls -1 ./dwarfs-$ARCH-* | paste -sd "," -) + +############################################# +# extract all datasets as TAR archive +############################################# + +if [[ ",$BENCHMARKS," == *,extract,* ]]; then + for ds in $DATASETS; do + $HF --export-json=$OUT/extract-$ds.json --export-markdown $OUT/extract-$ds.md -w $NWARM -m $NFAST \ + -L bin "$DWARFSEXTRACT" "{bin} -n $NPROC -s 2g -i datasets/$ds.dwarfs -o /dev/null -f gnutar" + done +fi + +############################################# +# build filesystem images +############################################# + +declare -A MKDWARFS_ARGS +MKDWARFS_ARGS[audio]="-C zstd:level=5 --categorize -C pcmaudio/waveform::flac:level=1" +MKDWARFS_ARGS[disk]="-C zstd:level=5 --categorize=incompressible --incompressible-fragments --incompressible-block-size=512k --order=revpath -B16 -C incompressible::null" +MKDWARFS_ARGS[perl]="-C zstd:level=5" +MKDWARFS_ARGS[video]="-C null -S 28 -B 3 -W 8 -w 0 --order=revpath" + +if [[ ",$BENCHMARKS," == *,mkdwarfs,* ]]; then + for ds in $DATASETS; do + if [ ! -d tmp/$ds ]; then + mkdir -p tmp/$ds + echo "Extracting $ds dataset..." + ./dwarfsextract-*-clang -n $NPROC -s 2g -i datasets/$ds.dwarfs -o tmp/$ds + fi + + $HF --export-json=$OUT/mkdwarfs-$ds.json --export-markdown $OUT/mkdwarfs-$ds.md -w $NWARM -m $NSLOW \ + -L bin "$MKDWARFS" "{bin} -i tmp/$ds -o /dev/null --force --no-progress --log-level=warn ${MKDWARFS_ARGS[$ds]}" + done +fi + +# remove symlinks + +for n in mkdwarfs dwarfs dwarfsck dwarfsextract; do + for l in $n-$ARCH-*; do + if [ -L $l ]; then + rm -f $l + fi + done +done