[PATCH for-next 0/4] nvme-multipathing for uring-passthrough
Kanchan Joshi
joshi.k at samsung.com
Mon Jul 11 04:01:51 PDT 2022
nvme passthrough lacks multipathing capability and some of us have
already expressed interest to see this plumbed. Most recently during LSFMM,
around 2 months back.
This series wires up multipathing for uring-passthrough commands.
Attempt is not to affect the common path (i.e. when
requeue/failover does not trigger) with allocation or deferral. The
most important design bit is to treat "struct io_uring_cmd" in the same
way as "struct bio" is treated by the block-based nvme multipath.
Uring-commands are queued when path is not available, and resubmitted on
discovery of new path. Also if passthrough command on multipath-node is
failed, it is resubmitted on a different path.
Testing:
Using the upstream fio that support uring-passthrough:
fio -iodepth=16 -rw=randread -ioengine=io_uring_cmd -bs=4k -numjobs=4
-size=1G -iodepth_batch_submit=16 -group_reporting -cmd_type=nvme
-filename=/dev/ng0n1 -name=uring-pt
1. Multiple failover - every command is retried 1-5 times before completion
2. Fail nvme_find_path() - this tests completion post requeue
3. Combine above two
4. Repeat above but for passthrough commands which do not generate bio
(e.g. flush command)
Anuj Gupta (2):
nvme: compact nvme_uring_cmd_pdu struct
nvme-multipath: add multipathing for uring-passthrough commands
Kanchan Joshi (2):
io_uring, nvme: rename a function
io_uring: grow a field in struct io_uring_cmd
drivers/nvme/host/ioctl.c | 157 +++++++++++++++++++++++++++++-----
drivers/nvme/host/multipath.c | 36 +++++++-
drivers/nvme/host/nvme.h | 26 ++++++
include/linux/io_uring.h | 44 +++++++++-
io_uring/uring_cmd.c | 4 +-
5 files changed, 237 insertions(+), 30 deletions(-)
--
2.25.1
More information about the Linux-nvme
mailing list