• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..--

.cargo/23-Nov-2023-65

docs/23-Nov-2023-171171

src/23-Nov-2023-6,8894,937

.gitignoreD23-Nov-202355 76

.gitmodulesD23-Nov-202397 43

Android.bpD23-Nov-20231.9 KiB6056

CODEOWNERSD23-Nov-2023123 32

Cargo.tomlD23-Nov-2023883 3126

LICENSED23-Nov-202311.1 KiB203169

LICENSE-BSD-3-ClauseD23-Nov-20231.5 KiB2827

LICENSE-BSD-ChromiumD23-Nov-20231.5 KiB2827

METADATAD23-Nov-2023428 1816

MODULE_LICENSE_APACHE2D23-Nov-20230

OWNERSD23-Nov-202360 43

PRESUBMIT.cfgD23-Nov-2023102 75

README.mdD23-Nov-20231.8 KiB3327

coverage_config_aarch64.jsonD23-Nov-2023123 11

coverage_config_x86_64.jsonD23-Nov-2023116 21

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