-
-
Save apfelchips/936113aec50cc655ed76a63e41b986ca to your computer and use it in GitHub Desktop.
Reproducing CrystalDiskMark tests with fio - fixes for https://unix.stackexchange.com/revisions/480191/9
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
## This script is based on https://unix.stackexchange.com/revisions/480191/9 and https://gist.github.com/snizovtsev/1e57da4bf1cdae16599d59619600ee07 | |
LOOPS=1 #How many times to run each test | |
SIZE=32 #Size of each test, multiples of 32 recommended for Q32 tests to give the most accurate results. | |
WRITEZERO=0 #Set whether to write zeroes or randoms to testfile (random is the default for both fio and crystaldiskmark); dd benchmarks typically only write zeroes which is why there can be a speed difference. | |
QSIZE=$(($SIZE / 32)) #Size of Q32Seq tests | |
SIZE+=m | |
QSIZE+=m | |
if [ -z "${1:-}" ]; then | |
TARGET=$PWD | |
echo "Using: $PWD for testing" | |
else | |
TARGET="$1" | |
echo "Testing in $TARGET" | |
fi | |
TESTFILE=$(realpath "${TARGET}/.fiomark.tmp") | |
touch "$TESTFILE" 2>/dev/null | |
if [ "$?" -ne 0 ]; then | |
echo "Couldn't write to $TESTFILE" | |
exit 1 | |
fi | |
echo -e " | |
Loops: ${LOOPS} | |
Size: ${SIZE} | |
QSize: ${QSIZE} | |
Running Benchmark, please wait... | |
" | |
fio --loops=$LOOPS --size=$SIZE --filename="$TESTFILE" --stonewall --ioengine=libaio --direct=1 --zero_buffers=$WRITEZERO --output-format=json \ | |
--name=Bufread --loops=1 --bs=$SIZE --iodepth=1 --numjobs=1 --rw=readwrite \ | |
--name=Seqread --bs=$SIZE --iodepth=1 --numjobs=1 --rw=read \ | |
--name=Seqwrite --bs=$SIZE --iodepth=1 --numjobs=1 --rw=write \ | |
--name=512kread --bs=512k --iodepth=1 --numjobs=1 --rw=read \ | |
--name=512kwrite --bs=512k --iodepth=1 --numjobs=1 --rw=write \ | |
--name=SeqQ32T1read --bs=$QSIZE --iodepth=32 --numjobs=1 --rw=read \ | |
--name=SeqQ32T1write --bs=$QSIZE --iodepth=32 --numjobs=1 --rw=write \ | |
--name=4kread --bs=4k --iodepth=1 --numjobs=1 --rw=randread \ | |
--name=4kwrite --bs=4k --iodepth=1 --numjobs=1 --rw=randwrite \ | |
--name=4kQ32T1read --bs=4k --iodepth=32 --numjobs=1 --rw=randread \ | |
--name=4kQ32T1write --bs=4k --iodepth=32 --numjobs=1 --rw=randwrite \ | |
--name=4kQ8T8read --bs=4k --iodepth=8 --numjobs=8 --rw=randread \ | |
--name=4kQ8T8write --bs=4k --iodepth=8 --numjobs=8 --rw=randwrite > "$TARGET/.fiomark.txt" | |
QUERY='def read_bw(name): [.jobs[] | select(.jobname==name+"read").read.bw] | add / 1024 | floor; | |
def read_iops(name): [.jobs[] | select(.jobname==name+"read").read.iops] | add | floor; | |
def write_bw(name): [.jobs[] | select(.jobname==name+"write").write.bw] | add / 1024 | floor; | |
def write_iops(name): [.jobs[] | select(.jobname==name+"write").write.iops] | add | floor; | |
def job_summary(name): read_bw(name), read_iops(name), write_bw(name), write_iops(name); | |
job_summary("Seq"), job_summary("512k"), job_summary("SeqQ32T1"), | |
job_summary("4k"), job_summary("4kQ32T1"), job_summary("4kQ8T8")' | |
read -d '\n' -ra V <<< "$(jq "$QUERY" "$TARGET/.fiomark.txt")" | |
echo -e " | |
Results: | |
\033[0;33m | |
Sequential Read: ${V[0]}MB/s IOPS=${V[1]} | |
Sequential Write: ${V[2]}MB/s IOPS=${V[3]} | |
\033[0;32m | |
512KB Read: ${V[4]}MB/s IOPS=${V[5]} | |
512KB Write: ${V[6]}MB/s IOPS=${V[7]} | |
\033[1;36m | |
Sequential Q32T1 Read: ${V[8]}MB/s IOPS=${V[9]} | |
Sequential Q32T1 Write: ${V[10]}MB/s IOPS=${V[11]} | |
\033[0;36m | |
4KB Read: ${V[12]}MB/s IOPS=${V[13]} | |
4KB Write: ${V[14]}MB/s IOPS=${V[15]} | |
\033[1;33m | |
4KB Q32T1 Read: ${V[16]}MB/s IOPS=${V[17]} | |
4KB Q32T1 Write: ${V[18]}MB/s IOPS=${V[19]} | |
\033[1;35m | |
4KB Q8T8 Read: ${V[20]}MB/s IOPS=${V[21]} | |
4KB Q8T8 Write: ${V[22]}MB/s IOPS=${V[23]} | |
\033[0m | |
" | |
rm "$TARGET/.fiomark.txt" | |
rm "$TESTFILE" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment