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