1c60587f663d2b800bdae254e86da84b4cfd070e8Bruce Cran#!/usr/bin/env 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= 28bed59bab819823dffe270435b65ed8feafb52148Erwan VeluPRINTABLE_DISKS= 29afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluRUNTIME=300 30afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluETA=0 3160238f0e7c8bb689f31e3871a661741f2c5fd583Erwan VeluMODES="write,randwrite,read,randread" 32afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluSHORT_HOSTNAME= 3376c7c63e131a5f0068932c78b57eef51bc691810Erwan VeluCACHED_IO="FALSE" 34a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan VeluPREFIX="" 35a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan VeluPREFIX_FILENAME="" 367d1ca6cfa8c1440ddc095faf7f4e6c8716629838Erwan VeluIODEPTH=1 37afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 38afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velushow_help() { 39afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu PROG=$(basename $0) 40afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu echo "usage of $PROG:" 41afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu cat << EOF 42afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu-h : Show this help & exit 4376c7c63e131a5f0068932c78b57eef51bc691810Erwan Velu-c : Enable cached-based IOs 44e1c6f2e1ed79734328949dc91aa7ce84281e8112Erwan Velu Disabled by default 45afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu-a : Run sequential test then parallel one 46e1c6f2e1ed79734328949dc91aa7ce84281e8112Erwan Velu Disabled by default 47afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu-s : Run sequential test (default value) 48afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu one test after another then one disk after another 49e1c6f2e1ed79734328949dc91aa7ce84281e8112Erwan Velu Disabled by default 50afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu-p : Run parallel test 51afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu one test after anoter but all disks at the same time 52e1c6f2e1ed79734328949dc91aa7ce84281e8112Erwan Velu Enabled by default 537d1ca6cfa8c1440ddc095faf7f4e6c8716629838Erwan Velu-D iodepth : Run with the specified iodepth 5480139d2d3f91957854fb6872c34954d641af0e83Erwan Velu Default is $IODEPTH 55afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu-d disk1[,disk2,disk3,..] : Run the tests on the selected disks 56afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu Separated each disk with a comma 57e1c6f2e1ed79734328949dc91aa7ce84281e8112Erwan Velu-r seconds : Time in seconds per benchmark 5872fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Velu 0 means till the end of the device 5980139d2d3f91957854fb6872c34954d641af0e83Erwan Velu Default is $RUNTIME seconds 60afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu-b blocksize[,blocksize1, ...] : The blocksizes to test under fio format (4k, 1m, ...) 61afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu Separated each blocksize with a comma 6280139d2d3f91957854fb6872c34954d641af0e83Erwan Velu Default is $BLOCK_SIZE 63afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu-m mode1,[mode2,mode3, ...] : Define the fio IO profile to use like read, write, randread, randwrite 6480139d2d3f91957854fb6872c34954d641af0e83Erwan Velu Default is "$MODES" 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 73bed59bab819823dffe270435b65ed8feafb52148Erwan Velu$PROG -d /dev/sdb,/dev/sdc,/dev/sdd,/dev/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() { 95ea0542d939342be73ac2b7f42c68f37273f98412Erwan Veluecho "iodepth=$IODEPTH" >> $TEMPLATE 96afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 9772fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Veluif [ "$RUNTIME" != "0" ]; then 98ea0542d939342be73ac2b7f42c68f37273f98412Erwan Velu echo "runtime=$RUNTIME" >> $TEMPLATE 99ea0542d939342be73ac2b7f42c68f37273f98412Erwan Velu echo "time_based" >> $TEMPLATE 10072fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Velufi 10172fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Velu 10276c7c63e131a5f0068932c78b57eef51bc691810Erwan Veluif [ "$CACHED_IO" = "FALSE" ]; then 103ea0542d939342be73ac2b7f42c68f37273f98412Erwan Velu echo "direct=1" >> $TEMPLATE 10476c7c63e131a5f0068932c78b57eef51bc691810Erwan Velufi 105fdc0f3b646e417497849d4398029f780b0e5262fErwan Velu} 10676c7c63e131a5f0068932c78b57eef51bc691810Erwan Velu 107bed59bab819823dffe270435b65ed8feafb52148Erwan Velu 108bed59bab819823dffe270435b65ed8feafb52148Erwan Veludiskname_to_printable() { 109bed59bab819823dffe270435b65ed8feafb52148Erwan VeluCOUNT=0 110bed59bab819823dffe270435b65ed8feafb52148Erwan Velufor disk in $(echo $@ | tr "," " "); do 111bed59bab819823dffe270435b65ed8feafb52148Erwan Velu R=$(basename $disk | sed 's|/|_|g') 112bed59bab819823dffe270435b65ed8feafb52148Erwan Velu COUNT=$(($COUNT + 1)) 113bed59bab819823dffe270435b65ed8feafb52148Erwan Velu if [ $COUNT -eq 1 ]; then 114bed59bab819823dffe270435b65ed8feafb52148Erwan Velu P="$R" 115bed59bab819823dffe270435b65ed8feafb52148Erwan Velu else 116bed59bab819823dffe270435b65ed8feafb52148Erwan Velu P="$P,$R" 117bed59bab819823dffe270435b65ed8feafb52148Erwan Velu fi 118bed59bab819823dffe270435b65ed8feafb52148Erwan Veludone 119bed59bab819823dffe270435b65ed8feafb52148Erwan Veluecho $P 120bed59bab819823dffe270435b65ed8feafb52148Erwan Velu} 121bed59bab819823dffe270435b65ed8feafb52148Erwan Velu 122fdc0f3b646e417497849d4398029f780b0e5262fErwan Velugen_template() { 123fdc0f3b646e417497849d4398029f780b0e5262fErwan Velucat >$TEMPLATE << EOF 124fdc0f3b646e417497849d4398029f780b0e5262fErwan Velu[global] 125fdc0f3b646e417497849d4398029f780b0e5262fErwan Veluioengine=libaio 126fdc0f3b646e417497849d4398029f780b0e5262fErwan Veluinvalidate=1 127fdc0f3b646e417497849d4398029f780b0e5262fErwan Veluramp_time=5 128fdc0f3b646e417497849d4398029f780b0e5262fErwan VeluEOF 129afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu} 130afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 131afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velugen_seq_suite() { 132afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluTYPE=$1 133bed59bab819823dffe270435b65ed8feafb52148Erwan Veludisk=$2 134bed59bab819823dffe270435b65ed8feafb52148Erwan VeluPRINTABLE_DISK=$(diskname_to_printable $disk) 135afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velucat >> $OUTFILE << EOF 136bed59bab819823dffe270435b65ed8feafb52148Erwan Velu[$TYPE-$PRINTABLE_DISK-$BLK_SIZE-seq] 137afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velustonewall 138afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velubs=$BLK_SIZE 139bed59bab819823dffe270435b65ed8feafb52148Erwan Velufilename=$disk 140afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velurw=$TYPE 141bed59bab819823dffe270435b65ed8feafb52148Erwan Veluwrite_bw_log=${PREFIX_FILENAME}$SHORT_HOSTNAME-$BLK_SIZE-$PRINTABLE_DISK-$TYPE-seq.results 142bed59bab819823dffe270435b65ed8feafb52148Erwan Veluwrite_iops_log=${PREFIX_FILENAME}$SHORT_HOSTNAME-$BLK_SIZE-$PRINTABLE_DISK-$TYPE-seq.results 143afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluEOF 144afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluETA=$(($ETA + $RUNTIME)) 145afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu} 146afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 147afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velugen_seq_fio() { 148afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velufor disk in $(echo $DISKS | tr "," " "); do 149afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu for mode in $(echo $MODES | tr "," " "); do 150bed59bab819823dffe270435b65ed8feafb52148Erwan Velu gen_seq_suite "$mode" "$disk" 151afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu done 152afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veludone 153afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu} 154afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 155afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 156afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velugen_para_suite() { 157afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluTYPE=$1 158afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluNEED_WALL=$2 159afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluD=0 160afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velufor disk in $(echo $DISKS | tr "," " "); do 161bed59bab819823dffe270435b65ed8feafb52148Erwan Velu PRINTABLE_DISK=$(diskname_to_printable $disk) 162afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu cat >> $OUTFILE << EOF 163bed59bab819823dffe270435b65ed8feafb52148Erwan Velu[$TYPE-$PRINTABLE_DISK-$BLK_SIZE-para] 164afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velubs=$BLK_SIZE 165afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluEOF 166afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 167afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluif [ "$D" = 0 ]; then 168afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu echo "stonewall" >> $OUTFILE 169afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu D=1 170afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velufi 171afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 172afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velucat >> $OUTFILE << EOF 173bed59bab819823dffe270435b65ed8feafb52148Erwan Velufilename=$disk 174afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velurw=$TYPE 175bed59bab819823dffe270435b65ed8feafb52148Erwan Veluwrite_bw_log=${PREFIX_FILENAME}$SHORT_HOSTNAME-$BLK_SIZE-$PRINTABLE_DISK-$TYPE-para.results 176bed59bab819823dffe270435b65ed8feafb52148Erwan Veluwrite_iops_log=${PREFIX_FILENAME}$SHORT_HOSTNAME-$BLK_SIZE-$PRINTABLE_DISK-$TYPE-para.results 177afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluEOF 178afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veludone 179afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 180afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluETA=$(($ETA + $RUNTIME)) 181afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluecho >> $OUTFILE 182afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu} 183afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 184afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velugen_para_fio() { 185afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velufor mode in $(echo $MODES | tr "," " "); do 186afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu gen_para_suite "$mode" 187afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veludone 188afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu} 189afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 190afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velugen_fio() { 191afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velucase $SEQ in 192afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 2) 193afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu gen_seq_fio 194afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu gen_para_fio 195afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu ;; 196afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 1) 197afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu gen_seq_fio 198afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu ;; 199afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 0) 200afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu gen_para_fio 201afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu ;; 202afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluesac 203afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu} 204afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 205afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluparse_cmdline() { 206ca14375039856a8cb189a19c3381d88fe046d13dErwan Veluwhile getopts "hacpsd:b:r:m:x:D:A:B:" opt; do 207afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu case $opt in 208afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu h) 209afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu show_help 210afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu exit 0 211afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu ;; 212afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu b) 213afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu BLOCK_SIZE=$OPTARG 214afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu ;; 21576c7c63e131a5f0068932c78b57eef51bc691810Erwan Velu c) 21676c7c63e131a5f0068932c78b57eef51bc691810Erwan Velu CACHED_IO="TRUE" 21776c7c63e131a5f0068932c78b57eef51bc691810Erwan Velu ;; 218afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu s) 219afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu if [ "$SEQ" = "-1" ]; then 220afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu SEQ=1 221afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu fi 222afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu ;; 223a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu x) 224a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu PREFIX=$OPTARG 225a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu echo "$PREFIX" | grep -q "/" 226a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu if [ "$?" -eq 0 ]; then 227a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu mkdir -p $PREFIX 228a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu # No need to keep the prefix for the log files 229a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu # we do have a directory for that 230a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu PREFIX_FILENAME="" 231a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu else 232a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu # We need to keep the prefix for the log files 233a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu PREFIX_FILENAME=$PREFIX 234a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu fi 235a74198375fe2120fa670e2164cc5b92a06c7dbf0Erwan Velu ;; 236afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu r) 237afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu RUNTIME=$OPTARG 238afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu ;; 239afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu p) 240afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu if [ "$SEQ" = "-1" ]; then 241afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu SEQ=0 242afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu fi 243afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu ;; 244afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu m) 245afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu MODES=$OPTARG; 246afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu ;; 247afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu d) 248afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu DISKS=$OPTARG 249bed59bab819823dffe270435b65ed8feafb52148Erwan Velu PRINTABLE_DISKS=$(diskname_to_printable "$DISKS") 250afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu ;; 2517d1ca6cfa8c1440ddc095faf7f4e6c8716629838Erwan Velu D) 2527d1ca6cfa8c1440ddc095faf7f4e6c8716629838Erwan Velu IODEPTH=$OPTARG 2537d1ca6cfa8c1440ddc095faf7f4e6c8716629838Erwan Velu ;; 254afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu a) 255afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu SEQ=2 256afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu ;; 257ca14375039856a8cb189a19c3381d88fe046d13dErwan Velu B) 258ca14375039856a8cb189a19c3381d88fe046d13dErwan Velu echo "exec_prerun=$OPTARG" >> $TEMPLATE 259ca14375039856a8cb189a19c3381d88fe046d13dErwan Velu ;; 260ca14375039856a8cb189a19c3381d88fe046d13dErwan Velu A) 261ca14375039856a8cb189a19c3381d88fe046d13dErwan Velu echo "exec_postrun=$OPTARG" >> $TEMPLATE 262ca14375039856a8cb189a19c3381d88fe046d13dErwan Velu ;; 263afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu \?) 264afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu echo "Invalid option: -$OPTARG" >&2 265afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu ;; 266afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu esac 267afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veludone 268afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 269afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluif [ "$SEQ" = "-1" ]; then 270afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu SEQ=0 271afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velufi 272afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 273afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluSHORT_HOSTNAME=$(hostname -s) 274afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velucase $SEQ in 275afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 2) 276bed59bab819823dffe270435b65ed8feafb52148Erwan Velu OUTFILE=${PREFIX}$SHORT_HOSTNAME-$BLOCK_SIZE-all-$MODES-$PRINTABLE_DISKS.fio 277afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu ;; 278afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 279afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 1) 280bed59bab819823dffe270435b65ed8feafb52148Erwan Velu OUTFILE=${PREFIX}$SHORT_HOSTNAME-$BLOCK_SIZE-sequential-$MODES-$PRINTABLE_DISKS.fio 281afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu ;; 282afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 0) 283bed59bab819823dffe270435b65ed8feafb52148Erwan Velu OUTFILE=${PREFIX}$SHORT_HOSTNAME-$BLOCK_SIZE-parallel-$MODES-$PRINTABLE_DISKS.fio 284afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu ;; 285afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluesac 286afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 287afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluif [ -z "$DISKS" ]; then 288afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu echo "Missing DISKS !" 289e1c6f2e1ed79734328949dc91aa7ce84281e8112Erwan Velu echo "Please read the help !" 290e1c6f2e1ed79734328949dc91aa7ce84281e8112Erwan Velu show_help 291afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu exit 1 292afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velufi 293afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 294afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu} 295afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 29660238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velucheck_mode_order() { 29760238f0e7c8bb689f31e3871a661741f2c5fd583Erwan VeluFOUND_WRITE="NO" 29860238f0e7c8bb689f31e3871a661741f2c5fd583Erwan VeluCAUSE="You are reading data before writing them " 29960238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu 30060238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu# If no write occurs, let's show a different message 30160238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Veluecho $MODES | grep -q "write" 30260238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Veluif [ "$?" -ne 0 ]; then 30360238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu CAUSE="You are reading data while never wrote them before" 30460238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velufi 30560238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu 30660238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velufor mode in $(echo $MODES | tr "," " "); do 30760238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu echo $mode | grep -q write 30860238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu if [ "$?" -eq 0 ]; then 30960238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu FOUND_WRITE="YES" 31060238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu fi 31160238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu echo $mode | grep -q "read" 31260238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu if [ "$?" -eq 0 ]; then 31360238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu if [ "$FOUND_WRITE" = "NO" ]; then 31460238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu echo "###############################################################" 31560238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu echo "# Warning : $CAUSE#" 31660238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu echo "# On some storage devices, this could lead to invalid results #" 31760238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu echo "# #" 31860238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu echo "# Press Ctrl-C to adjust pattern order if you have doubts #" 31960238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu echo "# Or Wait 5 seconds before the file will be created #" 32060238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu echo "###############################################################" 32160238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu sleep 5 32260238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu # No need to try showing the message more than one time 32360238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu return 32460238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu fi 32560238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu fi 32660238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Veludone 32760238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu} 32860238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velu 329afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 330afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu########## MAIN 331fdc0f3b646e417497849d4398029f780b0e5262fErwan Velugen_template 3323b73c537d03dd981ab1fa0aaae7892b8ff125114Erwan Veluparse_cmdline "$@" 333fdc0f3b646e417497849d4398029f780b0e5262fErwan Velufinish_template 33460238f0e7c8bb689f31e3871a661741f2c5fd583Erwan Velucheck_mode_order 335afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 336afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluecho "Generating $OUTFILE" 337afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velucp -f $TEMPLATE $OUTFILE 338afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veluecho >> $OUTFILE 339afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu 340afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velufor BLK_SIZE in $(echo $BLOCK_SIZE | tr "," " "); do 341afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Velu gen_fio 342afbbd646716a9e046bd6805f17214689d15a6ba6Erwan Veludone 343afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluETA_H=$(($ETA / 3600)) 344afbbd646716a9e046bd6805f17214689d15a6ba6Erwan VeluETA_M=$((($ETA - ($ETA_H*3600)) / 60)) 345af360e392d3c9f6a299596adfcfef8de2f198ad2Erwan Veluif [ "$ETA" = "0" ]; then 34672fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Velu echo "Cannot estimate ETA as RUNTIME=0" 34772fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Veluelse 34872fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Velu echo "Estimated Time = $ETA seconds : $ETA_H hour $ETA_M minutes" 34972fe3ef10c1911b6f9ec84af99ba6f97112e216bErwan Velufi 350