#!/bin/bash

set -ue

FILENAME=${1}
BENCHMARK_SIZE=${BENCHMARK_SIZE:-1000m}

if [ -f ${FILENAME} ] ; then
  echo "File ${FILENAME} already exists!" >/dev/stderr
  exit 1
fi

trap "test -f ${FILENAME} && rm -f ${FILENAME}" EXIT

IOENGINE="libaio"
DIRECT=1
if [ "$(uname)" = "Darwin" ]; then
  IOENGINE="posixaio"
  # macOS doesn't support O_DIRECT in the same way, but fio's direct=1 
  # handles it via F_NOCACHE if supported.
  DIRECT=1
fi

fio --loops=5 --size=${BENCHMARK_SIZE} --filename=${FILENAME} \
  --stonewall --ioengine=${IOENGINE} --direct=${DIRECT} \
  --name=Seqread --bs=1m --rw=read \
  --name=Seqwrite --bs=1m --rw=write \
  --name=512Kread --bs=512k --rw=randread \
  --name=512Kwrite --bs=512k --rw=randwrite \
  --name=4kQD32read --bs=4k --iodepth=32 --rw=randread \
  --name=4kQD32write --bs=4k --iodepth=32 --rw=randwrite
