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, master and slave. 30Master is the application that shares its virtqueues, slave is the consumer 31of the virtqueues. Master and slave can be either a client (i.e. connecting) 32or server (listening) in the socket communication. 33 34## Xen support 35 36Supporting Xen requires special handling while mapping the guest memory. The 37`vm-memory` crate implements xen memory mapping support via a separate feature 38`xen`, and this crate uses the same feature name to enable Xen support. 39 40Also, for xen mappings, the memory regions passed by the frontend contains few 41extra fields as described in the vhost-user protocol documentation. 42 43It was decided by the `rust-vmm` maintainers to keep the interface simple and 44build the crate for either standard Unix memory mapping or Xen, and not both. 45