13个版本 (破坏性更改)

0.11.0 2024年3月15日
0.9.0 2023年11月7日
0.8.1 2023年7月17日
0.6.0 2022年11月30日
0.2.0 2021年9月23日

#32 in Unix APIs

Download history 14316/week @ 2024-04-03 9063/week @ 2024-04-10 12140/week @ 2024-04-17 11476/week @ 2024-04-24 10002/week @ 2024-05-01 11000/week @ 2024-05-08 9677/week @ 2024-05-15 9572/week @ 2024-05-22 11072/week @ 2024-05-29 14269/week @ 2024-06-05 13458/week @ 2024-06-12 7806/week @ 2024-06-19 6611/week @ 2024-06-26 8256/week @ 2024-07-03 8248/week @ 2024-07-10 7507/week @ 2024-07-17

31,950 monthly downloads
用于 15 个crate(14个直接使用)

Apache-2.0 OR BSD-3-Clause

335KB
6.5K SLoC

vHost

一个针对vDPA、vhost和vhost-user的纯Rust库。

vhost crate旨在帮助实现virtio后端驱动程序的data plane。它支持三种不同类型的data plane驱动程序

  • vhost:data plane由Linux内核实现
  • vhost-user:data plane由专门的vhost-user服务器实现
  • vDPA(vhost DataPath Accelerator):data plane由硬件实现

vhost crate导出的Traits和Struct之间主要关系如下

vhost Architecture

基于内核的vHost后端驱动程序

Linux中的vhost驱动程序提供了内核级的virtio设备仿真。通常虚拟机管理程序用户空间进程仿真来自虚拟机的I/O访问。vhost将virtio仿真代码放入内核,将虚拟机管理程序用户空间排除在外。这使得设备仿真代码可以直接调用内核子系统,而不是从用户空间执行系统调用。虚拟机管理程序依赖于基于ioctl的接口来控制这些内核中的vhost驱动程序,如vhost-net、vhost-scsi和vhost-vsock等。

vHost-user后端驱动程序

vhost-user协议旨在在用户空间实现vhost后端驱动程序,这补充了用于控制Linux内核中vhost实现的ioctl接口。它实现了与同一主机上的用户空间进程建立virtqueue共享所需的控制平面。它通过Unix域套接字进行通信,在消息的辅助数据中共享文件描述符。

该协议定义了通信的双方:前端和后端。前端是共享其virtqueues的应用程序,后端是virtqueues的消费者。在前端和后端的socket通信中,它们可以是客户端(即连接)或服务器(监听)。

Postcopy支持

要启用POSTCOPY_*消息支持,有一个postcopy功能。由于Xen处理内存映射的方式,postcopy功能与xen功能不兼容。同时启用这两个功能会导致编译错误。

Xen支持

支持Xen需要在映射虚拟机内存时进行特殊处理。vm-memory存储库通过一个单独的功能xen实现了Xen内存映射支持,并且此存储库使用相同的功能名称来启用Xen支持。

此外,对于xen映射,前端传递的内存区域包含一些额外的字段,如vhost-user协议文档所述。

rust-vmm维护者决定,保持接口简单,为标准Unix内存映射或Xen构建存储库,而不是两者都构建。

依赖关系

~1–1.7MB
~33K SLoC