Spdk/lib/nvmf
Andreas Economides 3b047a6162 nvmf/vfio-user: support shadow doorbells
As per the NVMe specification, a host can identify two areas of guest
memory: one of which is used for the host-written doorbells, and one of
which contains event indexes. The host writes to the shadow doorbell
area, but also writes to the controller's BAR0 doorbell area if the
corresponding event index is crossed by the update. This avoids many
mmio exits in interrupt mode, where BAR0 doorbells are not directly
mapped into the guest VM, with greatly improved performance.

This isn't a useful feature in BAR0 doorbells are mapped into the VM, so
we explicitly disable support in that case.

NB: the Windows NVMe driver doesn't yet support this feature.

Although the specification says that the admin queues should also engage
in this behaviour, in practice, no VM does, so have to include some
hacks to account for this.

Co-authored-by: John Levon <john.levon@nutanix.com>
Signed-off-by: John Levon <john.levon@nutanix.com>
Change-Id: I0646b234d31fbbf9a6b85572042c6cdaf8366659
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11492
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
2022-04-21 08:12:29 +00:00
..
ctrlr_bdev.c nvmf: make zcopy_end void 2022-01-06 18:53:42 +00:00
ctrlr_discovery.c nvmf: fix trid comparison for discovery subsystem entries 2022-03-14 08:44:21 +00:00
ctrlr.c lib/nvmf: add a comment on max admin queue size 2022-04-20 08:21:02 +00:00
fc_ls.c spelling: lib 2021-12-03 08:12:55 +00:00
fc.c nvmf/fc: call free() to the object allocated by calloc() 2022-02-28 11:08:16 +00:00
Makefile so_ver: increase all major versions 2022-01-31 15:29:56 +00:00
nvmf_fc.h spelling: lib 2021-12-03 08:12:55 +00:00
nvmf_internal.h nvmf: add internal set Controller Fatal Status API 2022-03-08 02:35:05 +00:00
nvmf_rpc.c nvmf: remove deprecated max_qpairs_per_ctrlr parameter 2022-02-15 14:38:37 +00:00
nvmf.c nvmf: pass poll group to transport during create 2022-02-23 10:05:15 +00:00
rdma.c nvmf/rdma: Use spdk allocation scheme for RDMA requests and receives 2022-04-15 07:48:23 +00:00
spdk_nvmf.map lib/nvmf : Added support for ZCOPY 2021-07-23 08:34:43 +00:00
subsystem.c nvmf: deprecate automatic discovery listener 2022-02-28 11:06:16 +00:00
tcp.c nvmf/tcp: delay completion for zcopy reqs w/ in-progress writes 2022-04-19 11:15:45 +00:00
transport.c nvmf/rdma: Improve read performance in DIF strip mode 2022-04-01 11:19:18 +00:00
transport.h nvmf/rdma: Improve read performance in DIF strip mode 2022-04-01 11:19:18 +00:00
vfio_user.c nvmf/vfio-user: support shadow doorbells 2022-04-21 08:12:29 +00:00