#!/bin/sh #load the device with these params #$ modprobe scsi_debug virtual_gb=32 delay=0 dev_size_mb=32 fake_rw=1 # go set some live params # $ cd /sys/bus/pseudo/drivers/scsi_debug # $ echo 1 > fake_rw # mess with sglist chaining # $ cd /sys/block/sdb/queue # $ echo 4096 > max_segments # $ cat max_hw_sectors_kb > max_sectors_kb # $ cat max_hw_sectors_kb if=/dev/zero of=/dev/sdb outputfile=$1.txt echo "Testing $1" # send 32G in $1 sectrors at once do_dd() { # blocks of one sector bs=512 #memory page in blocks page=8 #number of scatterlist elements in a transfer sgs=$1 #calculate the bpt param bpt=$(($sgs*$page)) #total blocks to transfer 32 Giga bytes count=64M echo $3: "bpt=$bpt" \time bash -c \ "sg_dd blk_sgio=1 dio=1 if=$if of=$of bpt=$bpt bs=$bs count=$count 2>/dev/null" \ 2>> $2 } echo "BEGIN RUN $1" >> $outputfile # warm run for i in {1..5}; do do_dd 2048 /dev/null $i; done # one page trasfers echo "one page transfers" echo "one page transfers" >> $outputfile for i in {1..20}; do do_dd 128 $outputfile $i; done # chained # 16K / 8 = 2K pages # 2K / 128 = 16 chained sglists echo "16 chained sglists" echo "16 chained sglists" >> $outputfile for i in {1..20}; do do_dd 2048 $outputfile $i; done echo "END RUN" >> $outputfile