#! /bin/bash

do_fio() {
    for w in readwrite randrw randwrite randread write read ; do
        echo -n $w-$2 > $1/res/$w-$2
    done
    
    for r in 1 2 3 4 5 ; do
        for w in readwrite randrw randwrite randread write read ; do
           ./fio --minimal $1/job/$w-$2 > $1/res/fio/$w-$2-$r 2>&1
           echo -n " " $? >> $1/res/$w-$2
        done
    done
    
    for w in readwrite randrw randwrite randread write read ; do
        echo "" >> $1/res/$w-$2
    done
}

if [ -z "$1" ]; then
    echo "specify path. (To use ssd or hdd)"
    exit 1
fi

path=$1
rm -rf $1/job
rm -rf $1/res
rm -rf $1/fio
mkdir -p $1/job
mkdir -p $1/res/fio
mkdir -p $1/fio


for l in 1 2 3 ; do
    for d in 0 1 ; do
        for q in 1 4 32 ; do
            for i in sync libaio ; do
                for b in 0 1 ; do
                    for s in 0 1 ; do
                        for v in md5 crc64 sha256 sha1 meta ; do
                            j="$v-$i-$q-$d-$b-$s-$l"
                            for w in readwrite randrw randwrite randread write read ; do
                               cat > $1/job/$w-$j << EOF
[$j]
filename=$1/fio/$j
loops=$l
direct=$d
iodepth=$q
ioengine=$i
verify=$v
size=1m
bs=4k
rw=$w
verifysort=$s
verify_backlog=$b
EOF
                            done
                            while [ $(ps -A | grep fio -c) -gt 32 ]; do
                                sleep 1
                            done
                            do_fio $1 $j &
                        done
                    done
                done
            done
        done
    done
done
wait
cat $1/res/* | sort | awk '{print $2 " " $3" " $4 " " $5 " " $6 " " $1}'| tee $1/res/result

