86 lines
1.7 KiB
Bash
Executable File
86 lines
1.7 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
dir=/tmp
|
|
filesize=100 # megabytes
|
|
numfiles=128
|
|
nocache=
|
|
interleave=
|
|
needfiles=1
|
|
write_blocksize=262144
|
|
|
|
if uname -a | grep --silent arwin ; then
|
|
ddmega=m
|
|
else
|
|
ddmega=M
|
|
fi
|
|
|
|
while [ $# -gt 1 ] ; do
|
|
case $1 in
|
|
-d) dir=$2; shift; shift ;;
|
|
-f) filesize=$2; shift; shift ;;
|
|
-n) numfiles=$2; shift; shift ;;
|
|
*) break ;;
|
|
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
|
|
echo "# Building files for test..."
|
|
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=1$ddmega count=$filesize >/dev/null 2>&1
|
|
done
|
|
else
|
|
|
|
#
|
|
# Create files interleaved, adding $write_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=$write_blocksize count=1 >> $dir/testfile_$i 2>/dev/null
|
|
done
|
|
size=`expr $size + $write_blocksize`
|
|
done
|
|
fi
|
|
fi
|
|
|
|
for bs in $@ ; do
|
|
|
|
if uname -a | grep --silent arwin ; then
|
|
# clears cache on OS X
|
|
sudo purge
|
|
elif [ -f /proc/sys/vm/drop_caches ] ; then
|
|
# Linux cache clearing
|
|
echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null
|
|
else
|
|
# need an alternative for other operating systems
|
|
:
|
|
fi
|
|
|
|
echo "# Blocksize $bs"
|
|
./readtest -b $bs -q $dir/testfile_%d
|
|
done
|