summaryrefslogtreecommitdiff
path: root/autoconf/scripts/benchmark.sh
diff options
context:
space:
mode:
Diffstat (limited to 'autoconf/scripts/benchmark.sh')
-rwxr-xr-xautoconf/scripts/benchmark.sh39
1 files changed, 39 insertions, 0 deletions
diff --git a/autoconf/scripts/benchmark.sh b/autoconf/scripts/benchmark.sh
new file mode 100755
index 0000000..37ef35d
--- /dev/null
+++ b/autoconf/scripts/benchmark.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+#
+# Benchmark the read/write performance of pv by looking at the number of
+# read() and write() calls and the average amount of data transferred each
+# time, as suggested by Ville Herva <Ville.Herva@iki.fi>.
+#
+
+test_input=`mktemp /tmp/pvbench1XXXXXX`
+strace_output=`mktemp /tmp/pvbench2XXXXXX`
+
+trap "rm -f ${test_input} ${strace_output}" 0
+
+pv=${pv:-./pv}
+test -x ${pv} || pv=pv
+
+dd if=/dev/zero of=${test_input} bs=1k count=1k >/dev/null 2>&1
+
+echo -e "Buf(k)\tRate(k)\tReads\tRsize\tWrites\tWsize"
+
+for ((buffer=100; buffer<=1000; buffer+=100)); do
+ for ((rate=0; rate<=1000; rate+=100)); do
+ rateparm="-L ${rate}k"
+ test ${rate} -eq 0 && rateparm=""
+ strace -tt -o ${strace_output} \
+ ${pv} ${rateparm} -B ${buffer}k \
+ -f < ${test_input} > /dev/null 2>&1
+ rdata=$(
+ awk '$2~/^read\(0,/{c++;t+=$NF}END{print c "\t" t/c}' \
+ ${strace_output}
+ )
+ wdata=$(
+ awk '$2~/^write\(1,/{c++;t+=$NF}END{print c "\t" t/c}' \
+ ${strace_output}
+ )
+ echo -e "${buffer}\t${rate}\t${rdata}\t${wdata}"
+ done
+done
+
+# EOF