vhost-user 后端
vhost-user 让 VirtIO 请求在 QEMU 之外处理,需要以下组成部分。
vhost-user 设备
这些简单的桩设备让客户机能看到 VirtIO,代码大多为样板。各设备通过 chardev 选项引用 --chardev 的 ID,由其套接字连接 vhost-user 守护进程。
各设备都有 virtio-mmio 和 virtio-pci 变体,按平台选择总线。
设备 |
类型 |
说明 |
|---|---|---|
vhost-user-blk |
块存储 |
|
vhost-user-fs |
文件存储驱动 |
|
vhost-user-gpio |
将 GPIO 引脚代理到主机 |
|
vhost-user-gpu |
GPU 驱动 |
|
vhost-user-i2c |
将 I2C 设备代理到主机 |
|
vhost-user-input |
通用输入驱动 |
|
vhost-user-rng |
熵驱动 |
|
vhost-user-scmi |
系统控制和管理接口 |
|
vhost-user-snd |
音频设备 |
|
vhost-user-scsi |
SCSI 存储 |
|
vhost-user-vsock |
套接字通信 |
|
vhost-user-spi |
将 SPI 设备代理到主机 |
|
vhost-user-rtc |
实时时钟 |
列表并不穷尽,任何实现对应设备且符合协议的后端都应可用。
vhost-user-test-device
这是供专家开发新后端的通用设备,用户需指定全部参数,包括:
设备 virtio-id
所需 num_vqs 和 vq_size
如需配置空间,指定 config_size
备注
适合开发,但不推荐生产使用。
vhost-user 守护进程
独立进程通过套接字按 Vhost-user 协议 与 QEMU 连接。项目可按配置 构建若干守护进程,也可使用任何满足对应设备规范的实现。
示例
先启动守护进程。
$ virtio-foo --socket-path=/var/run/foo.sock $OTHER_ARGS
再启动 QEMU,指定设备、chardev 和内存对象。
$ qemu-system-x86_64 \
-m 4096 \
-chardev socket,id=ba1,path=/var/run/foo.sock \
-device vhost-user-foo,chardev=ba1,$OTHER_ARGS \
-object memory-backend-memfd,id=mem,size=4G,share=on \
-numa node,memdev=mem \
...