• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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![vhost Architecture](/vhost/docs/vhost_architecture.png)
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