scripts/read_plus.zsh

87 lines
2.1 KiB
Bash
Executable File

#!/bin/zsh -e
source common.zsh
SIZE=(2048)
ITERATIONS=(1)
zparseopts -D -F -K \
c:=CLIENT -client:=CLIENT \
d=DIRECT -direct=DIRECT \
-dmesg=DMESG -srvdmesg=SRVDMESG \
-no-server-vmtouch=NO_VMTOUCH \
f:=FILE -file:=FILE \
i:=ITERATIONS -iterations:=ITERATIONS \
p:=MOUNTPOINT -mountpoint:=MOUNTPOINT \
s:=SERVER -server:=SERVER \
x:=EXPORT -export:=EXPORT \
z:=SIZE -size:=SIZE
COLOR="python -u $COLORS/read_plus.py ${SIZE[-1]} ${FILE[-1]}"
IFLAG=
SRV_DIR=${EXPORT[-1]}/$USER/read_plus
TEST_DIR=${MOUNTPOINT[-1]}/read_plus
TEST_DEV=${SERVER[-1]}:$SRV_DIR
TEST_FILES=(${SIZE[-1]}M-{data,hole,mixed-{1,2,3,4,5,6,7,8,16}{d,h}})
CACHE_STATUS=(uncached cached)
TIME_CMD="sudo /usr/bin/time -f \"%Ss kern, %P cpu\""
if [ "$#" -gt 0 ]; then
TEST_FILES=($*)
fi
#
# Prepare to test
#
function setup_client_func()
{
client_setup read_plus.zsh ${SERVER[-1]} ${EXPORT[-1]} \
${MOUNTPOINT[-1]} $USER ${SIZE[-1]} \
1,2,3,4,5,6,7,8,16 | eval ${COLOR}
}
if [ ${#FILE} -gt 1 ]; then
mkdir -p $(dirname ${FILE[-1]})
[[ -f ${FILE[-1]} ]] && rm -fv ${FILE[-1]}
touch ${FILE[-1]}
fi
if [ ${#DIRECT} -gt 0 ]; then
IFLAG="iflag=direct"
fi
if [ ${#NO_VMTOUCH} -gt 0 ]; then
CACHE_STATUS=unknown
fi
prepare_to_test
function dd_file() {
echo "Reading: $1 ($2 on ${SERVER[-1]})"
case $2 in
"uncached") args="eq" ;;
"cached") args="tq" ;;
"unknown") args= ;;
esac
if [ ! -z $args ]; then
ssh ${SERVER[-1]} "sudo vmtouch -$args $SRV_DIR/$1"
fi
ssh ${CLIENT[-1]} "sudo vmtouch -eq $TEST_DIR/$1"
ssh ${CLIENT[-1]} "$TIME_CMD dd if=$TEST_DIR/$1 $IFLAG of=/dev/null bs=$3"
}
for i in $(seq ${ITERATIONS[-1]}); do
[[ $i -gt 1 ]] && echo
[[ ${#FILE} -gt 1 ]] && echo >> ${FILE[-1]}
ssh ${CLIENT[-1]} "sudo mount -o sec=sys,v4.2 $TEST_DEV $TEST_DIR"
bsize=$(ssh ${CLIENT[-1]} "mount | grep $TEST_DEV" | awk -F rsize= '{print $2}' | awk -F, '{print $1}')
if [[ ${ITERATIONS[-1]} -gt 1 ]]; then
echo "Iteration $i / ${ITERATIONS[-1]}" | eval ${COLOR}
fi
for f in $TEST_FILES; do
for cache in $CACHE_STATUS; do
dd_file $f $cache $bsize 2>&1 | eval ${COLOR}
done
done
ssh ${CLIENT[-1]} "sudo umount $TEST_DIR"
done