diff --git a/tools/run-readtest.sh b/tools/run-readtest.sh new file mode 100755 index 0000000000..952804c72c --- /dev/null +++ b/tools/run-readtest.sh @@ -0,0 +1,80 @@ +#!/bin/sh + +dir=/tmp +filesize=100 # megabytes +numfiles=128 +nocache= +interleave= +blocksize=262144 +needfiles=1 + + +while [ $# -gt 1 ] ; do + case $1 in + -d) dir=$2; shift; shift ;; + -f) filesize=$2; shift; shift ;; + -n) numfiles=$2; shift; shift ;; + -N) nocache="-s"; shift; shift ;; + -b) blocksize=$2; shift; shift ;; + esac +done + +if [ -d $dir -a -f $dir/testfile_1 ] ; then + # dir exists and has a testfile within it - reuse to avoid + # recreating files + echo "Re-using files in $dir" + needfiles= +else + dir=$dir/readtest_$$ + mkdir $dir + + if [ $? != 0 ] ; then + echo "Cannot create testfile directory $dir" + exit 1 + fi +fi + +if [ x$needfiles != x ] ; then + if [ x$interleave = x ] ; then + + # + # Create all files sequentially + # + + for i in `seq 1 $numfiles` ; do + dd of=$dir/testfile_$i if=/dev/zero bs=1M count=$filesize + echo $i + done + else + + # + # Create files interleaved, adding $blocksize to each + # file in turn. + # + + size=0 + limit=`expr $filesize * 1048576` + while [ $size -lt $limit ] ; do + for i in `seq 1 $numfiles` ; do + dd if=/dev/zero bs=$blocksize count=1 >> $dir/testfile_$i + done + size=`expr $size + $blocksize` + echo "Files now @ $size bytes" + done + fi +fi + +if uname -a | grep -s arwin ; then + # clears cache on OS X + sudo purge +elif [ -f /proc/sys/vm/drop_cache ] ; then + # Linux cache clearing + echo 3 | sudo tee /proc/sys/vm/drop/cache >/dev/null +else + # need an alternative for other operating systems + : +fi + +echo "Ready to run ..." + +./readtest $nocache -b $blocksize -q $dir/testfile_%d