Re: [PATCH v2] md: add support for REQ_NOWAIT
flat view
From: Jens Axboe <axboe@kernel.dk>
Date: 2021-11-02 15:31:55
On 11/2/21 8:40 AM, Vishal Verma wrote:
commit 021a24460dc2 ("block: add QUEUE_FLAG_NOWAIT") added support
for checking whether a given bdev supports handling of REQ_NOWAIT or not.
Since then commit 6abc49468eea ("dm: add support for REQ_NOWAIT and enable
it for linear target") added support for REQ_NOWAIT for dm. This uses
a similar approach to incorporate REQ_NOWAIT for md based bios.
This patch was tested using t/io_uring tool within FIO. A nvme drive
was partitioned into 2 partitions and a simple raid 0 configuration
/dev/md0 was created.
md0 : active raid0 nvme4n1p1[1] nvme4n1p2[0]
937423872 blocks super 1.2 512k chunks
Before patch:
$ ./t/io_uring /dev/md0 -p 0 -a 0 -d 1 -r 100
Running top while the above runs:
$ ps -eL | grep $(pidof io_uring)
38396 38396 pts/2 00:00:00 io_uring
38396 38397 pts/2 00:00:15 io_uring
38396 38398 pts/2 00:00:13 iou-wrk-38397
We can see iou-wrk-38397 io worker thread created which gets created
when io_uring sees that the underlying device (/dev/md0 in this case)
doesn't support nowait.
After patch:
$ ./t/io_uring /dev/md0 -p 0 -a 0 -d 1 -r 100
Running top while the above runs:
$ ps -eL | grep $(pidof io_uring)
38341 38341 pts/2 00:10:22 io_uring
38341 38342 pts/2 00:10:37 io_uring
After running this patch, we don't see any io worker thread
being created which indicated that io_uring saw that the
underlying device does support nowait. This is the exact behaviour
noticed on a dm device which also supports nowait.
I also successfully tested this patch on various other
raid personalities (1, 6 and 10).This seems incomplete. It looks like it's propagating the nowait flag based on constituent devices, which is correct, but surely there are cases off the the make_request path that now need to check for NOWAIT and return -EAGAIN if they need to block. From a quick look, raid0 looks fine as-is. raid1 would need checking for waiting on a read barrier, for example. If we just add nowait and don't _actually_ fix the driver, then the nowait exercise is pointless as it would then just mean that io_uring would block attempting to submit. That's the broken aio behavior, and that's certainly not the desired outcome here. -- Jens Axboe