This script put the CPU in 'performance' mode to avoid distortion in the
results because of CPU frequency changes. It also gives the process
maximum CPU time and I/O priority using nice and ionice respectively.
Finally, it only uses the number of CPUs specifiend in the CPUS
environment variable to run the program.
The scripts is used like this:
CPUS=2 ./bench.sh some_prog --some-args
This runs "some_prog" passing "--some-args" as arguments, using 2 CPUs.
--- /dev/null
+#!/bin/sh
+set -e
+
+export CPUS="$1"
+shift
+
+cpu_list=`seq 0 $(($CPUS-1))`
+
+bye() {
+ for n in $cpu_list
+ do
+ cpufreq-set -c $n -g ondemand
+ done
+}
+
+trap bye EXIT
+trap bye INT
+
+for n in $cpu_list
+do
+ cpufreq-set -c $n -g performance
+done
+
+nice -n-19 ionice -c 1 taskset -c `echo $cpu_list | tr ' ' ,` "$@"
+