rendered paste body#!/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