X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=tools%2Fgenfio;h=c9bc2f764d68dd9f412c712b0a1dba5d0416a90e;hb=b3d5e3fd80e3834097578e92d1b788065b8346e1;hp=512313a7ab16cb22d764389df50fd37835f816d7;hpb=80139d2d3f91957854fb6872c34954d641af0e83;p=fio.git diff --git a/tools/genfio b/tools/genfio index 512313a7..c9bc2f76 100755 --- a/tools/genfio +++ b/tools/genfio @@ -17,14 +17,16 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. BLK_SIZE= BLOCK_SIZE=4k SEQ=-1 -TEMPLATE=/tmp/template.fio +TEMPLATE=$(mktemp "${TMPDIR:-${TEMP:-/tmp}}/template.fio.XXXXXX") || exit $? +trap 'rm -f "$TEMPLATE"' EXIT OUTFILE= DISKS= +PRINTABLE_DISKS= RUNTIME=300 ETA=0 MODES="write,randwrite,read,randread" @@ -47,13 +49,14 @@ show_help() { one test after another then one disk after another Disabled by default -p : Run parallel test - one test after anoter but all disks at the same time + one test after another but all disks at the same time Enabled by default -D iodepth : Run with the specified iodepth Default is $IODEPTH -d disk1[,disk2,disk3,..] : Run the tests on the selected disks Separated each disk with a comma - Disk name shall be "sdxx", /dev/ shall NOT be used here +-z filesize : Specify the working file size, if you are passing filepaths to -d + Disabled by default -r seconds : Time in seconds per benchmark 0 means till the end of the device Default is $RUNTIME seconds @@ -70,7 +73,7 @@ show_help() { Example: -$PROG -d sdb,sdc,sdd,sde -a -b 4k,128k,1m -r 100 -a -x dellr720-day2/ +$PROG -d /dev/sdb,/dev/sdc,/dev/sdd,/dev/sde -a -b 4k,128k,1m -r 100 -a -x dellr720-day2/ Will generate an fio file that will run - a sequential bench on /dev/sdb /dev/sdc /dev/sdd /dev/sde for block size = 4k with write,randwrite,read,randread tests @@ -104,6 +107,21 @@ if [ "$CACHED_IO" = "FALSE" ]; then fi } + +diskname_to_printable() { +COUNT=0 +for disk in $(echo $@ | tr "," " "); do + R=$(basename $disk | sed 's|/|_|g') + COUNT=$(($COUNT + 1)) + if [ $COUNT -eq 1 ]; then + P="$R" + else + P="$P,$R" + fi +done +echo $P +} + gen_template() { cat >$TEMPLATE << EOF [global] @@ -115,14 +133,16 @@ EOF gen_seq_suite() { TYPE=$1 +disk=$2 +PRINTABLE_DISK=$(diskname_to_printable $disk) cat >> $OUTFILE << EOF -[$TYPE-$disk-$BLK_SIZE-seq] +[$TYPE-$PRINTABLE_DISK-$BLK_SIZE-seq] stonewall bs=$BLK_SIZE -filename=/dev/$disk +filename=$disk rw=$TYPE -write_bw_log=${PREFIX_FILENAME}$SHORT_HOSTNAME-$BLK_SIZE-$disk-$TYPE-seq.results -write_iops_log=${PREFIX_FILENAME}$SHORT_HOSTNAME-$BLK_SIZE-$disk-$TYPE-seq.results +write_bw_log=${PREFIX_FILENAME}$SHORT_HOSTNAME-$BLK_SIZE-$PRINTABLE_DISK-$TYPE-seq.results +write_iops_log=${PREFIX_FILENAME}$SHORT_HOSTNAME-$BLK_SIZE-$PRINTABLE_DISK-$TYPE-seq.results EOF ETA=$(($ETA + $RUNTIME)) } @@ -130,7 +150,7 @@ ETA=$(($ETA + $RUNTIME)) gen_seq_fio() { for disk in $(echo $DISKS | tr "," " "); do for mode in $(echo $MODES | tr "," " "); do - gen_seq_suite "$mode" + gen_seq_suite "$mode" "$disk" done done } @@ -141,8 +161,9 @@ TYPE=$1 NEED_WALL=$2 D=0 for disk in $(echo $DISKS | tr "," " "); do + PRINTABLE_DISK=$(diskname_to_printable $disk) cat >> $OUTFILE << EOF -[$TYPE-$disk-$BLK_SIZE-para] +[$TYPE-$PRINTABLE_DISK-$BLK_SIZE-para] bs=$BLK_SIZE EOF @@ -152,10 +173,10 @@ if [ "$D" = 0 ]; then fi cat >> $OUTFILE << EOF -filename=/dev/$disk +filename=$disk rw=$TYPE -write_bw_log=${PREFIX_FILENAME}$SHORT_HOSTNAME-$BLK_SIZE-$disk-$TYPE-para.results -write_iops_log=${PREFIX_FILENAME}$SHORT_HOSTNAME-$BLK_SIZE-$disk-$TYPE-para.results +write_bw_log=${PREFIX_FILENAME}$SHORT_HOSTNAME-$BLK_SIZE-$PRINTABLE_DISK-$TYPE-para.results +write_iops_log=${PREFIX_FILENAME}$SHORT_HOSTNAME-$BLK_SIZE-$PRINTABLE_DISK-$TYPE-para.results EOF done @@ -185,7 +206,7 @@ esac } parse_cmdline() { -while getopts "hacpsd:b:r:m:x:D:A:B:" opt; do +while getopts "hacpsd:b:r:m:x:z:D:A:B:" opt; do case $opt in h) show_help @@ -228,6 +249,7 @@ while getopts "hacpsd:b:r:m:x:D:A:B:" opt; do ;; d) DISKS=$OPTARG + PRINTABLE_DISKS=$(diskname_to_printable "$DISKS") ;; D) IODEPTH=$OPTARG @@ -241,6 +263,10 @@ while getopts "hacpsd:b:r:m:x:D:A:B:" opt; do A) echo "exec_postrun=$OPTARG" >> $TEMPLATE ;; + z) + FSIZE=$OPTARG + echo "size=$FSIZE" >> $TEMPLATE + ;; \?) echo "Invalid option: -$OPTARG" >&2 ;; @@ -254,14 +280,14 @@ fi SHORT_HOSTNAME=$(hostname -s) case $SEQ in 2) - OUTFILE=${PREFIX}$SHORT_HOSTNAME-$BLOCK_SIZE-all-$MODES-$DISKS.fio + OUTFILE=${PREFIX}$SHORT_HOSTNAME-$BLOCK_SIZE-all-$MODES-$PRINTABLE_DISKS.fio ;; 1) - OUTFILE=${PREFIX}$SHORT_HOSTNAME-$BLOCK_SIZE-sequential-$MODES-$DISKS.fio + OUTFILE=${PREFIX}$SHORT_HOSTNAME-$BLOCK_SIZE-sequential-$MODES-$PRINTABLE_DISKS.fio ;; 0) - OUTFILE=${PREFIX}$SHORT_HOSTNAME-$BLOCK_SIZE-parallel-$MODES-$DISKS.fio + OUTFILE=${PREFIX}$SHORT_HOSTNAME-$BLOCK_SIZE-parallel-$MODES-$PRINTABLE_DISKS.fio ;; esac @@ -310,7 +336,7 @@ done ########## MAIN gen_template -parse_cmdline $@ +parse_cmdline "$@" finish_template check_mode_order