Created
December 13, 2023 03:09
-
-
Save mcgrof/180a06f76cd3dbc05f27001df382a069 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 -e | |
set_sched() | |
{ | |
TARGET_DEV=$1 | |
TARGET_SCHED=$2 | |
echo $TARGET_SCHED > /sys/block/$TARGET_DEV/queue/scheduler | |
} | |
if [[ $# -ne 7 ]]; then | |
echo "Usage: <$0> <fs-blocksize> <file-size> <data-blocksize> <io-sched>" | |
echo "Examples:" | |
echo "$0 4k 1GiB 4MiB /dev/nvme0n1 /dev/nvme1n1 /mnt-nvme kyber" | |
echo "$0 4k 1GiB 4MiB /dev/nvme0n1 /dev/nvme1n1 /mnt-nvme mq-deadline" | |
echo "$0 4k 1GiB 4MiB /dev/nvme0n1 /dev/nvme1n1 /mnt-nvme none" | |
echo "$0 4k 1GiB 4MiB /dev/nvme0n1 /dev/nvme1n1 /mnt-nvme bfq" | |
exit | |
fi | |
BS=$1 | |
FILE_SIZE=$2 | |
DATA_BS=$3 | |
DATA_DEV=$4 | |
DDEV=$(basename $DATA_DEV) | |
LOGDEV=$5 | |
LDEV=$(basename $LOGDEV) | |
MNT_PATH=$6 | |
SCHED=$7 | |
mkdir -p $MNT_PATH | |
if grep -q $MNT_PATH /proc/mounts; then | |
umount $MNT_PATH | |
fi | |
nvme format --lbaf=1 --force $DATA_DEV | |
nvme format --lbaf=1 --force $LOGDEV | |
#mkfs.xfs -f -b size=$BS -d agcount=32,sectsize=4k $DATA_DEV -i size=2048 -m reflink=0 -l logdev=$LOGDEV,size=2020m,sectsize=4k | |
#mkfs.xfs -f -b size=$BS -d agcount=32,sectsize=4k $DATA_DEV -m reflink=0 -i nrext64=1 -l logdev=$LOGDEV,size=2020m,sectsize=4k | |
mkfs.xfs -f -b size=$BS -d agcount=32,sectsize=4k $DATA_DEV -m reflink=0 -l logdev=$LOGDEV,size=2020m,sectsize=4k | |
mount $DATA_DEV -o logdev=$LOGDEV,noatime $MNT_PATH | |
case $SCHED in | |
# https://docs.kernel.org/block/kyber-iosched.html | |
kyber) | |
set_sched $DDEV kyber | |
set_sched $LDEV kyber | |
# default is 2000000 in nanoseconds | |
#echo 2000000 > /sys/block/$DDEV/queue/iosched/read_lat_nsec | |
# default is 10000000 in nanoseconds | |
#echo 10000000 > /sys/block/$DDEV/queue/iosched/write_lat_nsec | |
;; | |
# https://docs.kernel.org/block/bfq-iosched.html | |
bfq) | |
set_sched $DDEV bfq | |
set_sched $LDEV bfq | |
# Disable low latency, its enabled by default | |
echo "Disabling low latency for bqf" | |
echo 0 > /sys/block/$DDEV/queue/iosched/low_latency | |
echo 1 > /sys/block/$LDEV/queue/iosched/low_latency | |
# default is 124, milliseconds | |
#echo 10000 > /sys/block/$DDEV/queue/iosched/timeout_sync | |
# default is 0, so disabled. Max sectors to service | |
#echo 16384 > /sys/block/$DDEV/queue/iosched/max_budget | |
# | |
# 4 MiB | |
#echo 4194304 > /sys/block/$DDEV/queue/iosched/max_budget | |
# | |
# 2 MiB | |
#echo 2097152 > /sys/block/$DDEV/queue/iosched/max_budget | |
# | |
# 64k | |
#echo 65536 > /sys/block/$DDEV/queue/iosched/max_budget | |
;; | |
# https://docs.kernel.org/block/deadline-iosched.html | |
mq-deadline) | |
set_sched $DDEV mq-deadline | |
set_sched $LDEV mq-deadline | |
#async_depth fifo_batch front_merges prio_aging_expire read_expire write_expire writes_starved | |
echo 0 > /sys/block/$DDEV/queue/iosched/front_merges | |
# Default is 16. | |
# 2 MiB? | |
echo 512 > /sys/block/$DDEV/queue/iosched/fifo_batch | |
# Default is 5000 in ms | |
#echo 25000 > /sys/block/$DDEV/queue/iosched/writes_starved | |
;; | |
*) | |
# Note, none is the default for NVMe and is known to be | |
# the best for NVMe. There are no tunables for it as well. | |
set_sched $DDEV $SCHED | |
set_sched $LDEV $SCHED | |
;; | |
esac | |
./go/bin/dperf -f $FILE_SIZE -b $DATA_BS -i 128 $MNT_PATH |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment