Skip to content

Instantly share code, notes, and snippets.

@tabokie
Last active March 25, 2024 07:19
Show Gist options
  • Save tabokie/b66f6d9fd9d89a5507717b6fd2f48729 to your computer and use it in GitHub Desktop.
Save tabokie/b66f6d9fd9d89a5507717b6fd2f48729 to your computer and use it in GitHub Desktop.
#!/bin/bash
set -ueo pipefail
TEST_DIR=$1
echo "profiling disk mounted on" $TEST_DIR
# Different size, single thread.
max_chunk=4096
chunk=1
while (( chunk <= max_chunk )); do
echo "--> randwrite ${chunk}K"
sudo fio --name=disk_benchmark --directory=$TEST_DIR --numjobs=1 \
--size=10G --time_based --runtime=15s --ramp_time=2s --ioengine=psync \
--direct=1 --verify=0 --bs=${chunk}K --iodepth=1 --rw=randwrite \
--group_reporting=1
echo "--> randread ${chunk}K"
sudo fio --name=disk_benchmark --directory=$TEST_DIR --numjobs=1 \
--size=10G --time_based --runtime=15s --ramp_time=2s --ioengine=psync \
--direct=1 --verify=0 --bs=${chunk}K --iodepth=1 --rw=randread \
--group_reporting=1
if (( chunk > 512 )); then
chunk=$((chunk + 512))
else
chunk=$((chunk * 2))
fi
done
# Userspace parallelism vs hardware parallelism.
# careful, this requires at least 1TB space.
min_chunk=8 # 8K
max_chunk=16384 # 16M
jobs=$((max_chunk / min_chunk))
chunk=$min_chunk
while (( chunk <= max_chunk )); do
echo "--> randwrite ${chunk}K*${jobs}threads"
sudo fio --name=disk_benchmark --directory=$TEST_DIR --numjobs=$jobs \
--size=500M --time_based --runtime=30s --ramp_time=10s --ioengine=psync \
--direct=1 --verify=0 --bs=${chunk}K --iodepth=1 --rw=randwrite \
--group_reporting=1
echo "--> randread ${chunk}K*${jobs}threads"
sudo fio --name=disk_benchmark --directory=$TEST_DIR --numjobs=$jobs \
--size=500M --time_based --runtime=30s --ramp_time=10s --ioengine=psync \
--direct=1 --verify=0 --bs=${chunk}K --iodepth=1 --rw=randread \
--group_reporting=1
chunk=$((chunk * 2))
jobs=$((jobs / 2))
done
# Probe disk stripe.
chunk=256
samples=16
stripe=$((chunk / samples))
if ((chunk < samples)); then
samples=chunk
stripe=1
fi
for i in $(seq 1 $samples); do
offset=$((stripe * i - stripe))
echo "--> randread ${chunk}K offset ${offset}K"
sudo fio --name=disk_benchmark --directory=$TEST_DIR --numjobs=1 \
--size=10G --time_based --runtime=30s --ramp_time=2s --ioengine=psync \
--direct=1 --verify=0 --bs=${chunk}K --offset=${offset}K --iodepth=1 --rw=randread \
--group_reporting=1
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment