edit: I ran a quick test with various IO batch sizes and it didn't make a difference - I guess because thanks to using io_uring, my bottleneck is not in IO submission, but deeper in the block IO stack...
edit: I ran a quick test with various IO batch sizes and it didn't make a difference - I guess because thanks to using io_uring, my bottleneck is not in IO submission, but deeper in the block IO stack...
root@awork3:~# echo 4 > /sys/module/nvme/parameters/poll_queues
root@awork3:~# echo 1 > /sys/block/nvme1n1/device/reset_controller
root@awork3:~# dmesg -c
[749717.253101] nvme nvme1: 12/0/4 default/read/poll queues
root@awork3:~# echo 8 > /sys/module/nvme/parameters/poll_queues
root@awork3:~# dmesg -c
root@awork3:~# echo 1 > /sys/block/nvme1n1/device/reset_controller
root@awork3:~# dmesg -c
[749736.513102] nvme nvme1: 8/0/8 default/read/poll queuesI think that should be independent.
> edit: I ran a quick test with various IO batch sizes and it didn't make a difference - I guess because thanks to using io_uring, my bottleneck is not in IO submission, but deeper in the block IO stack...
It probably won't get you drastically higher speeds in an isolated test - but it should help reduce CPU overhead. E.g. on one of my SSDs fio --ioengine io_uring --rw randread --filesize 50GB --invalidate=0 --name=test --direct=1 --bs=4k --numjobs=1 --registerfiles --fixedbufs --gtod_reduce=1 --iodepth 48 uses about 25% more CPU than when I add --iodepth_batch_submit=0 --iodepth_batch_complete_max=0. But the resulting iops are nearly the same as long as there are enough cycles available.
This is via filesystem, so ymmv, but the mechanism should be mostly independent.