genfio revision ca14375039856a8cb189a19c3381d88fe046d13d
1afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#!/bin/bash
2afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#
3afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#  Copyright (C) 2013 eNovance SAS <licensing@enovance.com>
4afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#  Author: Erwan Velu  <erwan@enovance.com>
5afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#
6afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#  The license below covers all files distributed with fio unless otherwise
7afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#  noted in the file itself.
8afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#
9afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#  This program is free software; you can redistribute it and/or modify
10afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#  it under the terms of the GNU General Public License version 2 as
11afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#  published by the Free Software Foundation.
12afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#
13afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#  This program is distributed in the hope that it will be useful,
14afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#  but WITHOUT ANY WARRANTY; without even the implied warranty of
15afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#  GNU General Public License for more details.
17afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#
18afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#  You should have received a copy of the GNU General Public License
19afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#  along with this program; if not, write to the Free Software
20afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
22afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluBLK_SIZE=
23afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluBLOCK_SIZE=4k
24afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluSEQ=-1
25afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluTEMPLATE=/tmp/template.fio
26afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluOUTFILE=
27afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluDISKS=
28afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluRUNTIME=300
29afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluETA=0
3060238f0e7c8bb689f31e3871a661741f2c5fd583Erwan VeluMODES="write,randwrite,read,randread"
31afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluSHORT_HOSTNAME=
3276c7c63e131a5f0068932c78b57eef51bc691810Erwan VeluCACHED_IO="FALSE"
33a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan VeluPREFIX=""
34a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan VeluPREFIX_FILENAME=""
357d1ca6cfa8c1440ddc095faf7f4e6c8716629838Erwan VeluIODEPTH=1
36afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
37afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velushow_help() {
38afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	PROG=$(basename $0)
39afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	echo "usage of $PROG:"
40afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	cat << EOF
41afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu-h				: Show this help & exit
4276c7c63e131a5f0068932c78b57eef51bc691810Erwan Velu-c				: Enable cached-based IOs
43e1c6f2e1ed79734328949dc91aa7ce84281e8112Erwan Velu					Disabled by default
44afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu-a				: Run sequential test then parallel one
45e1c6f2e1ed79734328949dc91aa7ce84281e8112Erwan Velu					Disabled by default
46afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu-s				: Run sequential test (default value)
47afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu					one test after another then one disk after another
48e1c6f2e1ed79734328949dc91aa7ce84281e8112Erwan Velu					Disabled by default
49afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu-p				: Run parallel test
50afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu					one test after anoter but all disks at the same time
51e1c6f2e1ed79734328949dc91aa7ce84281e8112Erwan Velu					Enabled by default
527d1ca6cfa8c1440ddc095faf7f4e6c8716629838Erwan Velu-D iodepth			: Run with the specified iodepth
537d1ca6cfa8c1440ddc095faf7f4e6c8716629838Erwan Velu					Default is 32
54afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu-d disk1[,disk2,disk3,..]	: Run the tests on the selected disks
55afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu					Separated each disk with a comma
56afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu					Disk name shall be "sdxx", /dev/ shall NOT be used here
57e1c6f2e1ed79734328949dc91aa7ce84281e8112Erwan Velu-r seconds			: Time in seconds per benchmark
5872fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Velu					0 means till the end of the device
59e1c6f2e1ed79734328949dc91aa7ce84281e8112Erwan Velu					Default is 300 seconds
60afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu-b blocksize[,blocksize1, ...]  : The blocksizes to test under fio format (4k, 1m, ...)
61afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu					Separated each blocksize with a comma
62e1c6f2e1ed79734328949dc91aa7ce84281e8112Erwan Velu					Default is 4k
63afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu-m mode1,[mode2,mode3, ...]     : Define the fio IO profile to use like read, write, randread, randwrite
6460238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu					Default is "write,randwrite,read,randread"
65a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu-x prefix			: Add a prefix to the fio filename
66a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu					Useful to let a context associated with the file
67a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu					If the prefix features a / (slash), prefix will be considered as a directory
68ca14375039856a8cb189a19c3381d88fe046d13dErwan Velu-A cmd_to_run			: System command to run after each job (exec_postrun in fio)
69ca14375039856a8cb189a19c3381d88fe046d13dErwan Velu-B cmd_to_run			: System command to run before each job (exec_prerun in fio)
70afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
71afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluExample:
72afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
73a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu$PROG -d sdb,sdc,sdd,sde -a -b 4k,128k,1m -r 100 -a -x dellr720-day2/
74afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
75afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	Will generate an fio file that will run
7660238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu		- a sequential bench on /dev/sdb /dev/sdc /dev/sdd /dev/sde for block size = 4k with write,randwrite,read,randread tests
77afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu			ETA ~ 4 tests * 4 disks * 100 seconds
7860238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu		- a sequential bench on /dev/sdb /dev/sdc /dev/sdd /dev/sde for block size = 128k with write,randwrite,read,randread tests
79afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu			ETA ~ 4 tests * 4 disks * 100 seconds
8060238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu		- a sequential bench on /dev/sdb /dev/sdc /dev/sdd /dev/sde for block size = 1m with write,randwrite,read,randread tests
81afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu			ETA ~ 4 tests * 4 disks * 100 seconds
8260238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu		- a parallel bench on /dev/sdb /dev/sdc /dev/sdd /dev/sde for block size = 4k with write,randwrite,read,randread tests
83afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu			ETA ~ 4 tests * 100 seconds
8460238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu		- a parallel bench on /dev/sdb /dev/sdc /dev/sdd /dev/sde for block size = 128k with write,randwrite,read,randread tests
85afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu			ETA ~ 4 tests * 100 seconds
8660238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu		- a parallel bench on /dev/sdb /dev/sdc /dev/sdd /dev/sde for block size = 1m with write,randwrite,read,randread tests
87afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu			ETA ~ 4 tests * 100 seconds
88afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
8960238f0e7c8bb689f31e3871a661741f2c5fd583Erwan VeluGenerating dellr720-day2/localhost-4k,128k,1m-all-write,randwrite,read,randread-sdb,sdc,sdd,sde.fio
90afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluEstimated Time = 6000 seconds : 1 hour 40 minutes
91afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluEOF
92afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu}
93afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
94fdc0f3b646e417497849d4398029f780b0e5262fErwan Velufinish_template() {
95fdc0f3b646e417497849d4398029f780b0e5262fErwan Velucat >>$TEMPLATE <<EOF
967d1ca6cfa8c1440ddc095faf7f4e6c8716629838Erwan Veluiodepth=$IODEPTH
9772fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan VeluEOF
98afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
9972fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Veluif [ "$RUNTIME" != "0" ]; then
10072fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Velucat >>$TEMPLATE << EOF
10172fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Veluruntime=$RUNTIME
102d1415111eebe7a95d8de1af1ec61e80f9d534552Erwan Velutime_based
103afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluEOF
10472fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Velufi
10572fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Velu
10676c7c63e131a5f0068932c78b57eef51bc691810Erwan Veluif [ "$CACHED_IO" = "FALSE" ]; then
10776c7c63e131a5f0068932c78b57eef51bc691810Erwan Velucat >>$TEMPLATE << EOF
10876c7c63e131a5f0068932c78b57eef51bc691810Erwan Veludirect=1
10976c7c63e131a5f0068932c78b57eef51bc691810Erwan VeluEOF
11076c7c63e131a5f0068932c78b57eef51bc691810Erwan Velufi
111fdc0f3b646e417497849d4398029f780b0e5262fErwan Velu}
11276c7c63e131a5f0068932c78b57eef51bc691810Erwan Velu
113fdc0f3b646e417497849d4398029f780b0e5262fErwan Velugen_template() {
114fdc0f3b646e417497849d4398029f780b0e5262fErwan Velucat >$TEMPLATE << EOF
115fdc0f3b646e417497849d4398029f780b0e5262fErwan Velu[global]
116fdc0f3b646e417497849d4398029f780b0e5262fErwan Veluioengine=libaio
117fdc0f3b646e417497849d4398029f780b0e5262fErwan Veluinvalidate=1
118fdc0f3b646e417497849d4398029f780b0e5262fErwan Veluramp_time=5
119fdc0f3b646e417497849d4398029f780b0e5262fErwan VeluEOF
120afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu}
121afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
122afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velugen_seq_suite() {
123afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluTYPE=$1
124afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velucat >> $OUTFILE << EOF
125afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu[$TYPE-$disk-$BLK_SIZE-seq]
126afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velustonewall
127afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velubs=$BLK_SIZE
128afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velufilename=/dev/$disk
129afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velurw=$TYPE
130a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Veluwrite_bw_log=${PREFIX_FILENAME}$SHORT_HOSTNAME-$BLK_SIZE-$disk-$TYPE-seq.results
131a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Veluwrite_iops_log=${PREFIX_FILENAME}$SHORT_HOSTNAME-$BLK_SIZE-$disk-$TYPE-seq.results
132afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluEOF
133afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluETA=$(($ETA + $RUNTIME))
134afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu}
135afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
136afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velugen_seq_fio() {
137afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velufor disk in $(echo $DISKS | tr "," " "); do
138afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	for mode in $(echo $MODES | tr "," " "); do
139afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu		gen_seq_suite "$mode"
140afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	done
141afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veludone
142afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu}
143afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
144afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
145afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velugen_para_suite() {
146afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluTYPE=$1
147afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluNEED_WALL=$2
148afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluD=0
149afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velufor disk in $(echo $DISKS | tr "," " "); do
150afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu    cat >> $OUTFILE << EOF
151afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu[$TYPE-$disk-$BLK_SIZE-para]
152afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velubs=$BLK_SIZE
153afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluEOF
154afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
155afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluif [ "$D" = 0 ]; then
156afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu    echo "stonewall" >> $OUTFILE
157afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu    D=1
158afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velufi
159afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
160afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velucat >> $OUTFILE << EOF
161afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velufilename=/dev/$disk
162afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velurw=$TYPE
163a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Veluwrite_bw_log=${PREFIX_FILENAME}$SHORT_HOSTNAME-$BLK_SIZE-$disk-$TYPE-para.results
164a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Veluwrite_iops_log=${PREFIX_FILENAME}$SHORT_HOSTNAME-$BLK_SIZE-$disk-$TYPE-para.results
165afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluEOF
166afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veludone
167afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
168afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluETA=$(($ETA + $RUNTIME))
169afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluecho >> $OUTFILE
170afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu}
171afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
172afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velugen_para_fio() {
173afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velufor mode in $(echo $MODES | tr "," " "); do
174afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	gen_para_suite "$mode"
175afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veludone
176afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu}
177afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
178afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velugen_fio() {
179afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velucase $SEQ in
180afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	2)
181afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu		gen_seq_fio
182afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu		gen_para_fio
183afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	;;
184afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	1)
185afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu		gen_seq_fio
186afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	;;
187afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	0)
188afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu		gen_para_fio
189afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	;;
190afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluesac
191afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu}
192afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
193afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluparse_cmdline() {
194ca14375039856a8cb189a19c3381d88fe046d13dErwan Veluwhile getopts "hacpsd:b:r:m:x:D:A:B:" opt; do
195afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu  case $opt in
196afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu    h)
197afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	show_help
198afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	exit 0
199afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	;;
200afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu    b)
201afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	BLOCK_SIZE=$OPTARG
202afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	;;
20376c7c63e131a5f0068932c78b57eef51bc691810Erwan Velu    c)
20476c7c63e131a5f0068932c78b57eef51bc691810Erwan Velu	CACHED_IO="TRUE"
20576c7c63e131a5f0068932c78b57eef51bc691810Erwan Velu	;;
206afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu    s)
207afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	if [ "$SEQ" = "-1" ]; then
208afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu		SEQ=1
209afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	fi
210afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu      ;;
211a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu    x)
212a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu	PREFIX=$OPTARG
213a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu	echo "$PREFIX" | grep -q "/"
214a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu	if [ "$?" -eq 0 ]; then
215a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu		mkdir -p $PREFIX
216a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu		# No need to keep the prefix for the log files
217a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu		# we do have a directory for that
218a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu		PREFIX_FILENAME=""
219a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu	else
220a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu		# We need to keep the prefix for the log files
221a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu		PREFIX_FILENAME=$PREFIX
222a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu	fi
223a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu	;;
224afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu    r)
225afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	RUNTIME=$OPTARG
226afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu      ;;
227afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu    p)
228afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	if [ "$SEQ" = "-1" ]; then
229afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu		SEQ=0
230afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	fi
231afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu      ;;
232afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu    m)
233afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu        MODES=$OPTARG;
234afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu      ;;
235afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu    d)
236afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 	DISKS=$OPTARG
237afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu      ;;
2387d1ca6cfa8c1440ddc095faf7f4e6c8716629838Erwan Velu    D)
2397d1ca6cfa8c1440ddc095faf7f4e6c8716629838Erwan Velu	IODEPTH=$OPTARG
2407d1ca6cfa8c1440ddc095faf7f4e6c8716629838Erwan Velu      ;;
241afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu    a)
242afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	SEQ=2
243afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu      ;;
244ca14375039856a8cb189a19c3381d88fe046d13dErwan Velu    B)
245ca14375039856a8cb189a19c3381d88fe046d13dErwan Velu	echo "exec_prerun=$OPTARG" >> $TEMPLATE
246ca14375039856a8cb189a19c3381d88fe046d13dErwan Velu      ;;
247ca14375039856a8cb189a19c3381d88fe046d13dErwan Velu    A)
248ca14375039856a8cb189a19c3381d88fe046d13dErwan Velu	echo "exec_postrun=$OPTARG" >> $TEMPLATE
249ca14375039856a8cb189a19c3381d88fe046d13dErwan Velu      ;;
250afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu    \?)
251afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu      echo "Invalid option: -$OPTARG" >&2
252afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu      ;;
253afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu  esac
254afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veludone
255afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
256afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluif [ "$SEQ" = "-1" ]; then
257afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	SEQ=0
258afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velufi
259afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
260afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluSHORT_HOSTNAME=$(hostname -s)
261afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velucase $SEQ in
262afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	2)
263a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu		OUTFILE=${PREFIX}$SHORT_HOSTNAME-$BLOCK_SIZE-all-$MODES-$DISKS.fio
264afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	;;
265afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
266afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	1)
267a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu		OUTFILE=${PREFIX}$SHORT_HOSTNAME-$BLOCK_SIZE-sequential-$MODES-$DISKS.fio
268afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	;;
269afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	0)
270a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu		OUTFILE=${PREFIX}$SHORT_HOSTNAME-$BLOCK_SIZE-parallel-$MODES-$DISKS.fio
271afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	;;
272afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluesac
273afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
274afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluif [ -z "$DISKS" ]; then
275afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	echo "Missing DISKS !"
276e1c6f2e1ed79734328949dc91aa7ce84281e8112Erwan Velu	echo "Please read the help !"
277e1c6f2e1ed79734328949dc91aa7ce84281e8112Erwan Velu	show_help
278afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	exit 1
279afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velufi
280afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
281afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu}
282afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
28360238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velucheck_mode_order() {
28460238f0e7c8bb689f31e3871a661741f2c5fd583Erwan VeluFOUND_WRITE="NO"
28560238f0e7c8bb689f31e3871a661741f2c5fd583Erwan VeluCAUSE="You are reading data before writing them          "
28660238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu
28760238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu# If no write occurs, let's show a different message
28860238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Veluecho $MODES | grep -q "write"
28960238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Veluif [ "$?" -ne 0 ]; then
29060238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu	CAUSE="You are reading data while never wrote them before"
29160238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velufi
29260238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu
29360238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velufor mode in $(echo $MODES | tr "," " "); do
29460238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu	echo $mode | grep -q write
29560238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu	if [ "$?" -eq 0 ]; then
29660238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu		FOUND_WRITE="YES"
29760238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu	fi
29860238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu	echo $mode | grep -q "read"
29960238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu	if [ "$?" -eq 0 ]; then
30060238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu		if [ "$FOUND_WRITE" = "NO" ]; then
30160238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu			echo "###############################################################"
30260238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu			echo "# Warning : $CAUSE#"
30360238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu			echo "# On some storage devices, this could lead to invalid results #"
30460238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu			echo "#                                                             #"
30560238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu			echo "# Press Ctrl-C to adjust pattern order if you have doubts     #"
30660238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu			echo "# Or Wait 5 seconds before the file will be created           #"
30760238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu			echo "###############################################################"
30860238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu			sleep 5
30960238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu			# No need to try showing the message more than one time
31060238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu			return
31160238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu		fi
31260238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu	fi
31360238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Veludone
31460238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu}
31560238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu
316afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
317afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu########## MAIN
318fdc0f3b646e417497849d4398029f780b0e5262fErwan Velugen_template
319afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluparse_cmdline $@
320fdc0f3b646e417497849d4398029f780b0e5262fErwan Velufinish_template
32160238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velucheck_mode_order
322afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
323afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluecho "Generating $OUTFILE"
324afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velucp -f $TEMPLATE $OUTFILE
325afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluecho >> $OUTFILE
326afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu
327afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velufor BLK_SIZE in $(echo $BLOCK_SIZE | tr "," " "); do
328afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu	gen_fio
329afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veludone
330afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluETA_H=$(($ETA / 3600))
331afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluETA_M=$((($ETA - ($ETA_H*3600)) / 60))
332af360e392d3c9f6a299596adfcfef8de2f198ad2Erwan Veluif [ "$ETA" = "0" ]; then
33372fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Velu	echo "Cannot estimate ETA as RUNTIME=0"
33472fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Veluelse
33572fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Velu	echo "Estimated Time = $ETA seconds : $ETA_H hour $ETA_M minutes"
33672fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Velufi
337