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
31,950 monthly downloads
用于 15 个crate(14个直接使用)
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后端驱动程序
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