Spdk/lib/nvmf
Changpeng Liu f4fd07c68c NVMf: Add a custom(VFIOUSER) transport target support
VFIO is a framework that allows a physical device to be securely passed through
to a user space process. Typically, the user space process is a VM and the device
is passed through to it in order to achieve high performance. VFIO provides an API
and the required functionality in the kernel.

vfio-user is a framework that allows implementing PCI devices in userspace.

SPDK NVMf library provides the emulation of a NVMe device, combined with vfio-user
protocol, we can provide the emulated NVMe device to VM or client application, such
as SPDK NVMe perf.

This patch has dependency on libvfio-user library, users can start NVMe identify/perf
examples.

Usage:
1. Start nvmf_target.
2. Use RPC to create a subsystem with namespace bdev.

    mkdir -p /var/run/muser
    mkdir -p /var/run/muser/iommu_group
    mkdir -p /var/run/muser/domain/muser0/8
    mkdir -p /dev/shm/muser/muser0

    scripts/rpc.py nvmf_create_transport -t VFIOUSER
    scripts/rpc.py nvmf_create_subsystem -a nqn.2019-07.io.spdk.muser:/var/run/muser/domain/muser0/8
    scripts/rpc.py bdev_malloc_create -b muser0 $((512)) 512
    scripts/rpc.py nvmf_subsystem_add_ns -n 1 nqn.2019-07.io.spdk.muser:/var/run/muser/domain/muser0/8 muser0
    scripts/rpc.py nvmf_subsystem_add_listener -t VFIOUSER -a "/var/run/muser/domain/muser0/8" -s 0 nqn.2019-07.io.spdk.muser:/var/run/muser/domain/muser0/8

    ln -s /var/run/muser/domain/muser0/8 /var/run/muser/domain/muser0/8/iommu_group
    ln -s /var/run/muser/domain/muser0/8 /var/run/muser/iommu_group/8
    ln -s /var/run/muser/domain/muser0/8/bar0  /dev/shm/muser/muser0/bar0

Currently, file /var/run/muser/domain/muser0/8/ctrlr is the socket file which is used
to transfer socket messages between target and client.

[1] https://www.mail-archive.com/qemu-devel@nongnu.org/msg723794.html

Co-authored-by: Ben Walker <benjamin.walker@intel.com>
Co-authored-by: Changpeng Liu <changpeng.liu@intel.com>
Co-authored-by: Thanos Makatos <thanos.makatos@nutanix.com>

Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com>
Signed-off-by: Jim Harris <james.r.harris@intel.com>
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
Signed-off-by: Changpeng Liu <changpeng.liu@intel.com>
Change-Id: I5f2a8e77314a6a13aa6366dd4a6dc77b13434e7b
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3838
Community-CI: Broadcom CI
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
2021-01-21 05:00:18 +00:00
..
ctrlr_bdev.c log: remove internal log.h header 2020-10-15 08:23:39 +00:00
ctrlr_discovery.c nvmf: Async event support for discovery log change 2020-11-11 00:53:57 +00:00
ctrlr.c nvmf: revert 'commit ae207216fb ("nvmf: remove request exec backdoor")' 2021-01-11 23:18:07 +00:00
fc_ls.c nvmf/fc: Handle out of order fused commands. 2021-01-14 16:18:25 +00:00
fc.c nvmf/fc: free g_nvmf_ftransport after nvmf_fc_lld_fini is complete. 2021-01-19 21:05:19 +00:00
Makefile NVMf: Add a custom(VFIOUSER) transport target support 2021-01-21 05:00:18 +00:00
nvmf_fc.h nvmf/fc: Add flag to differentiate LS queue and non LS queue. 2021-01-14 16:18:25 +00:00
nvmf_internal.h lib/nvmf: mask pending AENs 2020-12-18 09:48:07 +00:00
nvmf_rpc.c nvmf: make transport service id optional 2020-12-28 14:04:39 +00:00
nvmf.c nvmf: introduce function to init listen opts 2020-12-28 13:37:07 +00:00
rdma.c nvmf/rdma: Remove handling of buffers split over MR 2021-01-18 13:02:20 +00:00
spdk_nvmf.map nvmf: revert 'commit ae207216fb ("nvmf: remove request exec backdoor")' 2021-01-11 23:18:07 +00:00
subsystem.c nvmf: add notifications about ns to the transport 2020-12-28 13:52:45 +00:00
tcp.c Revert "nvmf/tcp: Remove the await_req list." 2021-01-19 21:44:50 +00:00
transport.c nvmf: introduce listener opts 2020-12-28 13:37:07 +00:00
transport.h nvmf: Allow nvmf_transport_qpair_fini to complete asynchronously. 2020-11-18 11:28:02 +00:00
vfio_user.c NVMf: Add a custom(VFIOUSER) transport target support 2021-01-21 05:00:18 +00:00