diff options
Diffstat (limited to 'autoconf/scripts/benchmark.sh')
-rwxr-xr-x | autoconf/scripts/benchmark.sh | 39 |
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 |