-
-
Save snizovtsev/1e57da4bf1cdae16599d59619600ee07 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
#!/bin/bash | |
# This script is based on https://unix.stackexchange.com/revisions/480191/9 . | |
# The following changes proved to be necessary to make it work on CentOS 7: | |
# * removed disk info (model, size) - not very useful, might not work in many cases. | |
# * using "bw" instead of "bw_bytes" to support fio version 3.1 (those availible through yum @base) | |
# * escaping exclamation mark in sed command | |
# * the ".fiomark.txt" is not auto-removed | |
LOOPS=5 #How many times to run each test | |
#SIZE=1024 #Size of each test, multiples of 32 recommended for Q32 tests to give the most accurate results. | |
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=$HOME | |
echo "Defaulting to $TARGET for testing" | |
else | |
TARGET="$1" | |
echo "Testing in $TARGET" | |
fi | |
echo "Configuration: Size:$SIZE Loops:$LOOPS Write Only Zeroes:$WRITEZERO | |
Running Benchmark, please wait... | |
" | |
fio --loops=$LOOPS --size=$SIZE --filename="$TARGET/.fiomark.tmp" --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]} | |
" | |
# rm "$TARGET/.fiomark.txt" | |
rm "$TARGET/.fiomark.tmp" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment