#!/bin/bash C=hp #clustername G=group #groupname NG=1 #number of groups NV=32 #number of volumes per group RA="8M" #Read ahead VSIZE="10G" #volume size VTYPE="shared" L="rain1" #layout ROOTDIR="/root/results/" CONFDIR="$ROOTDIR/conf/$L/" #directory to store conf SU="16" GDIR="$CONFDIR/${SU}k/" BASENODENAME=o185i NODES="$BASENODENAME/192-195:197-224/" #DISKS="/dev/sda4 /dev/sdb" DISKS="/dev/sdb" USEDNODES=/tmp/usednodes ONE_VOL_PER_HOST=1 NODELIST=""; source /etc/profile.d/cluster.sh getNode() { grep "device node" $2 | cut -d "\"" -f 2 | head -n $1 | tail -1 } genKANodeList() { NODELIST=""; for i in `seq 1 $1`; do k=$((191 + $i)); #skipping node 196 if [ $k -gt 195 ]; then k=$(($k +1)); fi NODELIST="$NODELIST -m ${BASENODENAME}${k} "; done } genNodeList() { NODELIST=""; for i in `seq 1 $1`; do k=$((191 + $i)); #skipping node 196 if [ $k -gt 195 ]; then k=$(($k +1)); fi NODELIST="$NODELIST ${BASENODENAME}${k} "; done } #NODELIST=$(exa_unexpand $NODELIST) start() { for i in `seq 1 $NG`; do exa_dgcreate --by -g $GDIR/${NG}groupes$i.conf $C:$G$i -s --really-create && for j in `seq 1 $NV`; do exa_vlcreate --access="$VTYPE" $C:$G$i:v$j -s $VSIZE --readahead=$RA; NODE=$(getNode $j $GDIR/${NG}groupes$i.conf) if [ $ONE_VOL_PER_HOST -eq 1 ]; then cur_node=$j; while ( grep $NODE $USEDNODES ); do cur_node=$(( $cur_node + 1)); NODE=$(getNode $cur_node $GDIR/${NG}groupes$i.conf) done fi echo $NODE >> $USEDNODES exa_vlstart $C:$G$i:v$j -n $NODE done; done } stop() { for i in `seq 1 $NG`; do exa_dgstop -r $C:$G$i && exa_dgdelete -r --by --real $C:$G$i done } configure() { if [ $NG -eq 1 ]; then G="${G}1"; fi for i in `seq 1 $NG`; do mkdir -p $GDIR #export SU exa_makeconfig --cluster $C --node $NODES --realdevice "$DISKS" -g $G -G $i/$NG -y $L > $GDIR/${NG}groupes$i.conf && perl -pi -e 's/ork\">/ork\" su_size=\"$ENV{'SU'}k\">/g' $GDIR/${NG}groupes$i.conf done } cleanparaseq(){ ssh -l root $NKA -- killall -9 paraseq >/dev/null 2>&1 while [ $(pidof paraseq) ]; do killall -9 paraseq sleep 0 done } statparaseq(){ CLIENT=$1 TEXTMODE=$2 NBNODES=$(exa_expand $NODES | wc -w) NBDISKS=$(echo $DISKS | wc -w) NBDISKS=$(( $NBDISKS * $NBNODES )) OUTDIR=$ROOTDIR/volumes/${NBDISKS}disks/$L/${SU}k/ genKANodeList $CLIENT KALIST=$NODELIST SUM_PERF=$(grep "Global stats" $OUTDIR/$CLIENT-paraseq-$TEXTMODE | awk '{print $9}' | head -1 | sed 's/\./,/') MIN_PERF=$(grep "Global stats" $OUTDIR/$CLIENT-paraseq-$TEXTMODE | awk '{print $9}' | tail -1 | sed 's/\./,/') echo "$CLIENT $SUM_PERF $MIN_PERF" } doparaseq() { CLIENT=$1 MODE=$2 cleanparaseq if [ $MODE = "r" ]; then TEXTMODE="read" else TEXTMODE="write" fi echo " Read (sum) | Read" echo -n "Running $CLIENT instances of paraseq (mode $TEXTMODE) @ su=${SU}k: " NBNODES=$(exa_expand $NODES | wc -w) NBDISKS=$(echo $DISKS | wc -w) NBDISKS=$(( $NBDISKS * $NBNODES )) OUTDIR=$ROOTDIR/volumes/${NBDISKS}disks/$L/${SU}k/ mkdir -p $OUTDIR date > $OUTDIR/$CLIENT-paraseq-$TEXTMODE paraseq --mode server --number_client $1 -d 100 > $OUTDIR/$CLIENT-paraseq-$TEXTMODE & genKANodeList $CLIENT KALIST=$NODELIST rshp2 -c ssh -l root $KALIST -- paraseq --by --mode client --server_name $HOSTNAME -$MODE -s -b 1024 -i 1024 '/dev/exa/g*/v*' >/dev/null SUM_PERF=$(grep "Global stats" $OUTDIR/$CLIENT-paraseq-$TEXTMODE | awk '{print $9}' | head -1 | sed 's/\./,/') MIN_PERF=$(grep "Global stats" $OUTDIR/$CLIENT-paraseq-$TEXTMODE | awk '{print $9}' | tail -1 | sed 's/\./,/') echo "$SUM_PERF $MIN_PERF" date >> $OUTDIR/$CLIENT-paraseq-$TEXTMODE cleanparaseq } statfs3() { CLIENT=$1 NBNODES=$(exa_expand $NODES | wc -w) NBDISKS=$(echo $DISKS | wc -w) NBDISKS=$(( $NBDISKS * $NBNODES )) OUTDIR=$ROOTDIR/volumes/${NBDISKS}disks/$L/${SU}k/ WRITE_PERF=0; for i in `grep $BASENODENAME $OUTDIR/$CLIENT-bonnie | grep -v "," | awk '{print $3}' `; do WRITE_PERF=`echo "$WRITE_PERF + $i" |bc` ; done; READ_PERF=0; for i in `grep $BASENODENAME $OUTDIR/$CLIENT-bonnie | grep -v "," | awk '{print $5}'`; do READ_PERF=`echo "$READ_PERF + $i" |bc` ; done; WRITE_PERF=$( echo "scale=2; $WRITE_PERF / 1024" | bc | sed 's/\./,/') READ_PERF=$( echo "scale=2; $READ_PERF / 1024" | bc | sed 's/\./,/') echo "$CLIENT : $READ_PERF $WRITE_PERF" } dofs3test() { CLIENT=$1 echo " Read | Write" echo -n "Running $CLIENT instances of bonnie++ @ su=${SU}k: " NBNODES=$(exa_expand $NODES | wc -w) NBDISKS=$(echo $DISKS | wc -w) NBDISKS=$(( $NBDISKS * $NBNODES )) OUTDIR=$ROOTDIR/volumes/${NBDISKS}disks/$L/${SU}k/ mkdir -p $OUTDIR genKANodeList $CLIENT KALIST=$NODELIST date >$OUTDIR/$CLIENT-bonnie rshp2 -c ssh -l root $KALIST -- 'mkfs.ext3 /dev/exa/g*/v* ; mount /dev/exa/g*/v* /mnt/ext3' >/dev/null 2>&1 rshp2 -c ssh -l root $KALIST -- bonnie++ -u 0 -n 0 -f -w -d /mnt/ext3 >$OUTDIR/$CLIENT-bonnie 2>/dev/null rshp2 -c ssh -l root $KALIST -- 'umount /mnt/ext3'; date >>$OUTDIR/$CLIENT-bonnie WRITE_PERF=0; for i in `grep $BASENODENAME $OUTDIR/$CLIENT-bonnie | grep -v "," | awk '{print $3}' `; do WRITE_PERF=`echo "$WRITE_PERF + $i" |bc` ; done; READ_PERF=0; for i in `grep $BASENODENAME $OUTDIR/$CLIENT-bonnie | grep -v "," | awk '{print $5}'`; do READ_PERF=`echo "$READ_PERF + $i" |bc` ; done; WRITE_PERF=$( echo "scale=2; $WRITE_PERF / 1024" | bc | sed 's/\./,/') READ_PERF=$( echo "scale=2; $READ_PERF / 1024" | bc | sed 's/\./,/') echo "$READ_PERF $WRITE_PERF" } ############ MAIN rm -f $USEDNODES case $1 in su) shift; SU="$1" export SU shift ;; esac case $1 in start) start ;; stop) stop ;; configure) configure ;; paraseq) shift doparaseq $@ ;; fs) shift dofs3test $@ ;; bench) for mode in r w; do for i in 1 4 8 16 32; do paraseq $i $mode; done; done for i in 1 4 8 16 32; do fs $i done ;; statfs3) shift statfs3 $@ ;; statparaseq) for i in 1 4 8 16 32; do statparaseq $i read; done for i in 1 4 8 16 32; do statparaseq $i write; done; ;; *) echo "$0 {configure|start|stop|dofs3|stopfs3}" exit -1 ;; esac