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> |
||
---|---|---|
.. | ||
ctrlr_bdev.c | ||
ctrlr_discovery.c | ||
ctrlr.c | ||
fc_ls.c | ||
fc.c | ||
Makefile | ||
nvmf_fc.h | ||
nvmf_internal.h | ||
nvmf_rpc.c | ||
nvmf.c | ||
rdma.c | ||
spdk_nvmf.map | ||
subsystem.c | ||
tcp.c | ||
transport.c | ||
transport.h | ||
vfio_user.c |