Last active
March 25, 2024 07:19
-
-
Save tabokie/b66f6d9fd9d89a5507717b6fd2f48729 to your computer and use it in GitHub Desktop.
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 | |
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