mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2025-02-06 18:38:01 +00:00
Move rust-vmm/vhost code from chromiumos's third_party directory to crosvm's one. Note that we have crrev.com/c/3269863 for license files in Chrome OS ebuild. Changes: * Copied vmm_vhost files at "7c95b4a2 rust-vmm/vhost: switch to upstream tempfile", whose latest upstream commit is "488b3adc fix warning: unaligned_references". * Remove [patch.crates-io] section from its Cargo.toml. * Add attributes to skip `clippy::bool_assert_comparison` and `clippy::needless_borrow`, which will be fixed in following CLs. * Update crosvm's Cargo.toml and tools/chromeos/setup_cargo BUG=b:205511695 TEST=tools/chromeos/setup_cargo && cargo build Change-Id: Icee201b39ff1d352df59469a6c8668fc7cb92ab9 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3267912 Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org> Reviewed-by: Dennis Kempin <denniskempin@google.com>
32 lines
1.8 KiB
Markdown
32 lines
1.8 KiB
Markdown
# vHost
|
|
A pure rust library for vDPA, vhost and vhost-user.
|
|
|
|
The `vhost` crate aims to help implementing dataplane for virtio backend drivers. It supports three different types of dataplane drivers:
|
|
- vhost: the dataplane is implemented by linux kernel
|
|
- vhost-user: the dataplane is implemented by dedicated vhost-user servers
|
|
- vDPA(vhost DataPath Accelerator): the dataplane is implemented by hardwares
|
|
|
|
The main relationship among Traits and Structs exported by the `vhost` crate is as below:
|
|
|
|
![vhost Architecture](/docs/vhost_architecture.png)
|
|
## Kernel-based vHost Backend Drivers
|
|
The vhost drivers in Linux provide in-kernel virtio device emulation. Normally
|
|
the hypervisor userspace process emulates I/O accesses from the guest.
|
|
Vhost puts virtio emulation code into the kernel, taking hypervisor userspace
|
|
out of the picture. This allows device emulation code to directly call into
|
|
kernel subsystems instead of performing system calls from userspace.
|
|
The hypervisor relies on ioctl based interfaces to control those in-kernel
|
|
vhost drivers, such as vhost-net, vhost-scsi and vhost-vsock etc.
|
|
|
|
## vHost-user Backend Drivers
|
|
The [vhost-user protocol](https://qemu.readthedocs.io/en/latest/interop/vhost-user.html#communication) aims to implement vhost backend drivers in
|
|
userspace, which complements the ioctl interface used to control the vhost
|
|
implementation in the Linux kernel. It implements the control plane needed
|
|
to establish virtqueue sharing with a user space process on the same host.
|
|
It uses communication over a Unix domain socket to share file descriptors in
|
|
the ancillary data of the message.
|
|
|
|
The protocol defines two sides of the communication, master and slave.
|
|
Master is the application that shares its virtqueues, slave is the consumer
|
|
of the virtqueues. Master and slave can be either a client (i.e. connecting)
|
|
or server (listening) in the socket communication.
|