On 8/26/21 11:45 AM, Jens Axboe wrote: > Just ran a quick test here, and I go from 3.55M IOPS to 1.23M switching > to deadline, of which 37% of the overhead is from dd_dispatch(). > > With the posted patch applied, it runs at 2.3M IOPS with mq-deadline, > which is a lot better. This is on my 3970X test box, so 32 cores, 64 > threads. Hi Jens, With the script below, queue depth >= 2 and an improved version of Zhen's patch I see 970 K IOPS with the mq-deadline scheduler in an 8 core VM (i7-4790 CPU). In other words, more IOPS than what Zhen reported with fewer CPU cores. Is that good enough? Thanks, Bart. #!/bin/bash if [ -e /sys/kernel/config/nullb ]; then for d in /sys/kernel/config/nullb/*; do [ -d "$d" ] && rmdir "$d" done fi numcpus=$(grep -c ^processor /proc/cpuinfo) modprobe -r null_blk [ -e /sys/module/null_blk ] && exit $? modprobe null_blk nr_devices=0 && udevadm settle && cd /sys/kernel/config/nullb && mkdir nullb0 && cd nullb0 && echo 0 > completion_nsec && echo 512 > blocksize && echo 0 > home_node && echo 0 > irqmode && echo 1024 > size && echo 0 > memory_backed && echo 2 > queue_mode && echo 1 > power || exit $? ( cd /sys/block/nullb0/queue && echo 2 > rq_affinity ) || exit $? iodepth=${1:-1} runtime=30 args=() if [ "$iodepth" = 1 ]; then args+=(--ioengine=psync) else args+=(--ioengine=io_uring --iodepth_batch=$((iodepth/2))) fi args+=(--iodepth=$iodepth --name=nullb0 --filename=/dev/nullb0\ --rw=read --bs=512 --loops=$((1<<20)) --direct=1 --numjobs=$numcpus \ --thread --runtime=$runtime --invalidate=1 --gtod_reduce=1 \ --group_reporting=1 --ioscheduler=mq-deadline) if numactl -m 0 -N 0 echo >&/dev/null; then numactl -m 0 -N 0 -- fio "${args[@]}" else fio "${args[@]}" fi