1*c688cc16SJohn Levon.. SPDX-License-Identifier: GPL-2.0-or-later 2*c688cc16SJohn Levon 3*c688cc16SJohn Levon========= 4*c688cc16SJohn Levonvfio-user 5*c688cc16SJohn Levon========= 6*c688cc16SJohn Levon 7*c688cc16SJohn LevonQEMU includes a ``vfio-user`` client. The ``vfio-user`` specification allows for 8*c688cc16SJohn Levonimplementing (PCI) devices in userspace outside of QEMU; it is similar to 9*c688cc16SJohn Levon``vhost-user`` in this respect (see :doc:`vhost-user`), but can emulate arbitrary 10*c688cc16SJohn LevonPCI devices, not just ``virtio``. Whereas ``vfio`` is handled by the host 11*c688cc16SJohn Levonkernel, ``vfio-user``, while similar in implementation, is handled entirely in 12*c688cc16SJohn Levonuserspace. 13*c688cc16SJohn Levon 14*c688cc16SJohn LevonFor example, SPDK includes a virtual PCI NVMe controller implementation; by 15*c688cc16SJohn Levonsetting up a ``vfio-user`` UNIX socket between QEMU and SPDK, a VM can send NVMe 16*c688cc16SJohn LevonI/O to the SPDK process. 17*c688cc16SJohn Levon 18*c688cc16SJohn LevonPresuming a suitable ``vfio-user`` server has opened a socket at 19*c688cc16SJohn Levon``/tmp/vfio-user.sock``, a device can be configured with for example: 20*c688cc16SJohn Levon 21*c688cc16SJohn Levon.. code-block:: console 22*c688cc16SJohn Levon 23*c688cc16SJohn Levon-device '{"driver": "vfio-user-pci","socket": {"path": "/tmp/vfio-user.sock", "type": "unix"}}' 24*c688cc16SJohn Levon 25*c688cc16SJohn LevonSee `libvfio-user <https://github.com/nutanix/libvfio-user/>`_ for further 26*c688cc16SJohn Levoninformation. 27