linux/drivers/nvme/host
Jens Axboe 4f5022453a nvme: wire up completion batching for the IRQ path
Trivial to do now, just need our own io_comp_batch on the stack and pass
that in to the usual command completion handling.

I pondered making this dependent on how many entries we had to process,
but even for a single entry there's no discernable difference in
performance or latency. Running a sync workload over io_uring:

t/io_uring -b512 -d1 -s1 -c1 -p0 -F1 -B1 -n2 /dev/nvme1n1 /dev/nvme2n1

yields the below performance before the patch:

IOPS=254820, BW=124MiB/s, IOS/call=1/1, inflight=(1 1)
IOPS=251174, BW=122MiB/s, IOS/call=1/1, inflight=(1 1)
IOPS=250806, BW=122MiB/s, IOS/call=1/1, inflight=(1 1)

and the following after:

IOPS=255972, BW=124MiB/s, IOS/call=1/1, inflight=(1 1)
IOPS=251920, BW=123MiB/s, IOS/call=1/1, inflight=(1 1)
IOPS=251794, BW=122MiB/s, IOS/call=1/1, inflight=(1 1)

which definitely isn't slower, about the same if you factor in a bit of
variance. For peak performance workloads, benchmarking shows a 2%
improvement.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2021-10-18 14:40:47 -06:00
..
core.c nvme: add support for batched completion of polled IO 2021-10-18 14:40:45 -06:00
fabrics.c nvme-fabrics: remove superfluous nvmf_host_put in nvmf_parse_options 2021-08-16 14:42:23 +02:00
fabrics.h nvme: use blk_execute_rq() for passthrough commands 2021-06-30 15:35:38 -06:00
fault_inject.c
fc.c nvme-fc: remove freeze/unfreeze around update_nr_hw_queues 2021-09-21 09:17:12 +02:00
fc.h
hwmon.c nvme-hwmon: Return error code when registration fails 2021-03-05 13:41:03 +01:00
ioctl.c remove the lightnvm subsystem 2021-08-14 15:54:09 -06:00
Kconfig nvme: Have NVME_FABRICS select NVME_CORE instead of transport drivers 2021-08-16 21:03:18 +02:00
Makefile remove the lightnvm subsystem 2021-08-14 15:54:09 -06:00
multipath.c nvme-multipath: enable polled I/O 2021-10-18 06:17:36 -06:00
nvme.h nvme: add support for batched completion of polled IO 2021-10-18 14:40:45 -06:00
pci.c nvme: wire up completion batching for the IRQ path 2021-10-18 14:40:47 -06:00
rdma.c block: add a struct io_comp_batch argument to fops->iopoll() 2021-10-18 14:40:40 -06:00
tcp.c block: add a struct io_comp_batch argument to fops->iopoll() 2021-10-18 14:40:40 -06:00
trace.c nvme: add set feature tracing support 2021-08-16 14:42:23 +02:00
trace.h nvme: fix nvme_setup_command metadata trace event 2021-07-21 09:55:44 +02:00
zns.c nvme: split nvme_report_zones 2021-06-03 10:29:26 +03:00