1个不稳定版本
0.1.0 | 2023年7月24日 |
---|
#752 在 硬件支持
155KB
3.5K SLoC
vhost-device-scsi
这是一个vhost-device-scsi守护进程的Rust实现。
用法
运行vhost-device-scsi守护进程
vhost-device-scsi -r --socket-path /tmp/vhost-user-scsi.sock /path/to/image.raw /path/to/second-image.raw ...
运行QEMU
qemu-system-x86_64 ... \
-device vhost-user-scsi-pci,num_queues=1,param_change=off,chardev=vus \
-chardev socket,id=vus,path=/tmp/vhost-user-scsi.sock \
# must match total guest meory
-object memory-backend-memfd,id=mem,size=384M,share=on \
-numa node,memdev=mem
限制
我们目前仅支持单个请求队列,并且不支持LUN参数(VIRTIO_SCSI_F_CHANGE)的动态重新配置。
功能
此包仍在开发中。目前,可以挂载并读取最多256个只读原始磁盘镜像。我们可能在某个时候添加以下功能,按时间顺序大致排序:
- 写入支持。这仅仅是实现WRITE命令的问题,但在写入回写缓存方面有一些复杂性,我们需要确保我们做得正确。
- 支持更多LUN。virtio-scsi支持每个目标最多16384个LUN。超过256后,LUN编码格式不同;这并不复杂,但我还没有着手实现它。
- 并发。目前,我们一次处理一个SCSI命令。最终,使用线程或一些复杂的async/io_uring功能来并发处理多个命令将是一个好主意。virtio-scsi还允许使用多个请求队列,允许虚拟机从多个核心并行提交请求;我们应该支持这一点。
- iSCSI透传。这不应该太难,但在我们花太多时间在这里之前,决定一个并发模型(线程或异步)可能是一个好主意。
依赖
~6–8MB
~138K SLoC