-### The -t argument is needed to specify the type of task that you want to benchmark.
-### Supported values are CPU_INTENSIVE
+#!/usr/bin/env bash
-taskType='CPU_INTENSIVE'
-while getopts t: flag
+usage() {
+ echo "Usage: $0 [-s <pool size> -i <number of iterations> -t <CPU_INTENSIVE|IO_INTENSIVE>] [-n <number of tasks>]" 1>&2
+ exit 1
+}
+
+while getopts "s:i:t:n:h" option
do
- case "${flag}" in
- t) taskType=${OPTARG};;
- esac
+ case "${option}" in
+ s)
+ poolSize=${OPTARG}
+ ;;
+ i)
+ iterations=${OPTARG}
+ ;;
+ t)
+ taskType=${OPTARG}
+ ;;
+ n)
+ taskSize=${OPTARG}
+ ;;
+ :)
+ echo "Error: Missing option argument for '-${OPTARG}'" >&2;
+ usage
+ ;;
+ \?)
+ # Invalid option
+ echo "Error: Unknown or invalid option for '-${OPTARG}'" >&2;
+ usage
+ ;;
+ *|h)
+ usage
+ ;;
+ esac
done
-echo 'Running bench for task type:' $taskType
-export TASK_TYPE=$taskType
-# Execute bench
+taskType=${taskType:-'CPU_INTENSIVE'}
+taskSize=${taskSize:-5000}
+poolSize=${poolSize:-$(nproc --all)}
+iterations=${iterations:-100000}
+
+echo 'Running benchmarks with pool size:' ${poolSize}', number of iterations:' ${iterations}', task type:' ${taskType} 'and task size:' ${taskSize}
export NODE_ENV=production
-export POOL_SIZE=10
-export NUM_ITERATIONS=100000
-hyperfine --export-markdown BENCH-100000.md --min-runs 10 \
- --prepare 'sleep 15' \
- 'node dynamic-piscina.js' \
- 'node fixed-piscina.js' \
- 'node dynamic-poolifier.js' \
- 'node fixed-poolifier.js' \
- 'node static-suchmokuo-node-worker-threads-pool.js' \
- 'node dynamic-suchmokuo-node-worker-threads-pool.js' \
- 'node threadjs.js'
+export TASK_TYPE=${taskType}
+export TASK_SIZE=${taskSize}
+export POOL_SIZE=${poolSize}
+export NUM_ITERATIONS=${iterations}
+case "$OSTYPE" in
+ darwin*)
+ caffeinate ./hyperfine_benchmarks.sh
+ ;;
+ linux*)
+ systemd-inhibit ./hyperfine_benchmarks.sh
+ ;;
+ *)
+ echo "Unsupported $OSTYPE"
+ ;;
+esac