14/08/2020 21:16, Chenbo Xia: > Background & Motivation > ----------------------- > In order to reduce the attack surface, QEMU community is disaggregating QEMU > by > removing part of device emulation from it. The disaggregated/multi-process > QEMU > is using VFIO-over-socket/vfio-user as the main transport mechanism to > disaggregate > I/O services from QEMU[2]. Vfio-user essentially implements the VFIO device > model > presented to the user process by a set of messages over a unix-domain socket. > The > main difference between application using vfio-user and application using vfio > kernel module is that device manipulation is based on socket messages for > vfio-user > but system calls for vfio kernel module. The vfio-user devices consist of a > generic > VFIO device type, living in QEMU, which is called the client[3], and the core > device > implementation (emulated device), living outside of QEMU, which is called the > server. > > With the introduction and support of vfio-user in QEMU, QEMU is explicitly > adding > support for external emulated device and data path. We are trying to leverage > that > and introducing vfio-user support in DPDK. By doing so, DPDK is enabled to be > an > alternative I/O device emulation library of building virtualized devices > along with > high-performance data path in separate processes outside QEMU. It will be > easy for > hardware vendors to provide virtualized solutions of their hardware devices by > implementing emulated device in DPDK. > > Except for vfio-user introduced in DPDK, this series also introduces the first > emulated device implementation. That is emulated AVF device (avf_emudev) > implemented > by AVF emulation driver (avf_emudev driver). Emulated AVF device demos how > emulated > device could be implemented in DPDK. SPDK is also investigating to implement > use case > for NVMe.
I am completely unaware of this change in QEMU. I've found this presentation about Multi-process QEMU by Oracle: https://static.sched.com/hosted_files/kvmforum2019/d2/kvm-mpqemu.pdf and there is the wiki page you already referenced: https://wiki.qemu.org/Features/MultiProcessQEMU I guess virtio stays inside QEMU? What is really moving out? e1000, ne2000 and vmxnet3? Why emulated AVF is needed, compared to a simple VFIO passthrough?