1# vHost 2A pure rust library for vDPA, vhost and vhost-user. 3 4The `vhost` crate aims to help implementing dataplane for virtio backend drivers. It supports three different types of dataplane drivers: 5- vhost: the dataplane is implemented by linux kernel 6- vhost-user: the dataplane is implemented by dedicated vhost-user servers 7- vDPA(vhost DataPath Accelerator): the dataplane is implemented by hardwares 8 9The main relationship among Traits and Structs exported by the `vhost` crate is as below: 10 11 12## Kernel-based vHost Backend Drivers 13The vhost drivers in Linux provide in-kernel virtio device emulation. Normally 14the hypervisor userspace process emulates I/O accesses from the guest. 15Vhost puts virtio emulation code into the kernel, taking hypervisor userspace 16out of the picture. This allows device emulation code to directly call into 17kernel subsystems instead of performing system calls from userspace. 18The hypervisor relies on ioctl based interfaces to control those in-kernel 19vhost drivers, such as vhost-net, vhost-scsi and vhost-vsock etc. 20 21## vHost-user Backend Drivers 22The [vhost-user protocol](https://qemu.readthedocs.io/en/latest/interop/vhost-user.html#communication) aims to implement vhost backend drivers in 23userspace, which complements the ioctl interface used to control the vhost 24implementation in the Linux kernel. It implements the control plane needed 25to establish virtqueue sharing with a user space process on the same host. 26It uses communication over a Unix domain socket to share file descriptors in 27the ancillary data of the message. 28 29The protocol defines two sides of the communication, frontend and backend. 30Frontend is the application that shares its virtqueues, backend is the consumer 31of the virtqueues. Frontend and backend can be either a client (i.e. connecting) 32or server (listening) in the socket communication. 33 34## Postcopy support 35 36To enabled POSTCOPY_* messages support there is a `postcopy` feature. 37Due to how Xen handles memory mappings the `postcopy` feature is not compatible 38with `xen` feature. Enabling both at the same time will result in a compilation error. 39 40## Xen support 41 42Supporting Xen requires special handling while mapping the guest memory. The 43`vm-memory` crate implements xen memory mapping support via a separate feature 44`xen`, and this crate uses the same feature name to enable Xen support. 45 46Also, for xen mappings, the memory regions passed by the frontend contains few 47extra fields as described in the vhost-user protocol documentation. 48 49It was decided by the `rust-vmm` maintainers to keep the interface simple and 50build the crate for either standard Unix memory mapping or Xen, and not both. 51