README.md
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](/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, 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