#!/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