1个不稳定版本

0.1.0 2023年7月24日

#752硬件支持

Apache-2.0 OR BSD-3-Clause

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