X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre-iokit%2Fsgpdd-survey%2Fsgpdd-survey;h=e6878af22ad6299c1170b9e0dc3d715bfd9d33f8;hb=4a0a4f7c0af79491aa25e29d20d675f12b984e3c;hp=0b1fdc6858fb2dbb17c0beee904b810975468633;hpb=c4d3d5017e04c13562e148e1fb74202c3b318ffa;p=fs%2Flustre-release.git diff --git a/lustre-iokit/sgpdd-survey/sgpdd-survey b/lustre-iokit/sgpdd-survey/sgpdd-survey index 0b1fdc6..e6878af 100755 --- a/lustre-iokit/sgpdd-survey/sgpdd-survey +++ b/lustre-iokit/sgpdd-survey/sgpdd-survey @@ -3,59 +3,87 @@ ###################################################################### # customize per survey -# the SCSI devices to measure -scsidevs="/dev/sde /dev/sdh" +# CHOOSE EITHER scsidevs or rawdevs +# the SCSI devices to measure - WARNING: will be erased. +# The raw devices to use +# rawdevs=${rawdevs:-"/dev/raw/raw1"} +# scsidevs=`ls /dev/sd[a-z] /dev/sd[a-z][a-z]` # all devices, if you use udev -# result file prefix +# result file prefix. date/time+hostname makes unique # NB ensure the path exists if it includes subdirs -rslt=/tmp/sg_dd_rslt +rslt=${rslt:-"/tmp/sgpdd_survey_`date +%F@%R`_`uname -n`"} # what to do (read or write) -actions="write read" +actions=${actions:-"write read"} # total size per device (MBytes) # NB bigger than device cache is good -size=8192 +size=${size:-8192} # record size (KBytes) -rszlo=1024 -rszhi=1024 +rszlo=${rszlo:-1024} +rszhi=${rszhi:-1024} # Concurrent regions per device -crglo=1 -crghi=256 +crglo=${crglo:-1} +crghi=${crghi:-256} # threads to share between concurrent regions per device -# NB survey skips over #thr < #regions and #thr > SG_MAX_QUEUE -thrlo=1 -thrhi=8192 +# multiple threads per region simulates a deeper request queue +# NB survey skips over #thr < #regions and #thr/#regions > SG_MAX_QUEUE +thrlo=${thrlo:-1} +thrhi=${thrhi:-4096} ##################################################################### +# leave the rest of this alone unless you know what you're doing... -# disk block size (Bytes) +# sgp_dd's idea of disk sector size (Bytes) bs=512 - -# max # threads per individual sgp_dd instance +# and max # threads one instance will spawn SG_MAX_QUEUE=16 +# map given device names into SG device names i=0 devs=() -for d in $scsidevs; do - devs[$i]=`sg_map | awk "{if ($ 2 == \"$d\") print $ 1}"` - if [ -z "$devs[$i]" ]; then - echo "Can't find SG device for $d" - exit 1 - fi - i=$((i+1)) -done +if [ "$scsidevs" ]; then + # we will test for a LUN, the test for a partition + # if the partition number is > 9 this will fail + for d in $scsidevs; do + devs[$i]=`sg_map | awk "{if ($ 2 == \"$d\") print $ 1}"` + if [ -z "${devs[i]}" ]; then + echo "Can't find SG device for $d, testing for partition" + pt=`echo $d | sed 's/[0-9]$//'` + # Try again + devs[$i]=`sg_map | awk "{if ($ 2 == \"$pt\") print $ 1}"` + if [ -z "${devs[i]}" ]; then + echo "Can't find SG device $pt" + exit 1 + fi + fi + i=$((i+1)) + done +elif [ "$rawdevs" ]; then + for r in $rawdevs; do + RES=`raw -q $r` + if [ $? -eq 0 ];then + devs[$i]=$r + i=$((i+1)) + else + echo "Raw device $r not set up" + exit 1 + fi + done +else + echo "Must specify scsidevs or rawdevs" + exit 1 +fi + ndevs=${#devs[@]} -start=`date +%F@%R` -rsltf=${rslt}_${start}.summary +rsltf=${rslt}.summary +workf=${rslt}.detail echo -n > $rsltf -workf=${rslt}_${start}.detail echo -n > $workf -tmpf=${rslt}_${start}.tmp print_summary () { if [ "$1" = "-n" ]; then @@ -67,6 +95,8 @@ print_summary () { echo $minusn "$*" } +print_summary "$(date) sgpdd-survey on $rawdevs$scsidevs from $(hostname)" + for ((rsz=$rszlo;rsz<=$rszhi;rsz*=2)); do for ((crg=$crglo;crg<=$crghi;crg*=2)); do for ((thr=$thrlo;thr<=$thrhi;thr*=2)); do @@ -80,7 +110,7 @@ for ((rsz=$rszlo;rsz<=$rszhi;rsz*=2)); do # show computed parameters actual_rsz=$((bpt*bs/1024)) actual_size=$((bs*count*crg/1024)) - str=`printf 'total_size %8dK rsz %4d crg %5d thr %3d ' \ + str=`printf 'total_size %8dK rsz %4d crg %5d thr %5d ' \ $((actual_size*ndevs)) $actual_rsz $((crg*ndevs)) $((thr*ndevs))` echo "==============> $str" >> $workf print_summary -n "$str" @@ -89,9 +119,11 @@ for ((rsz=$rszlo;rsz<=$rszhi;rsz*=2)); do print_summary "ENOMEM" continue fi + # run tests for action in $actions; do print_summary -n "$action " echo "=====> $action" >> $workf + tmpf=${workf}_tmp # start test t0=`date +%s.%N` for ((i=0;i $tmpf ok=0 for ((i=0;i