vhost-device/vhost-device-scsi
dependabot[bot] 1b779e1c08 build(deps): bump the vhost-device group with 11 updates
Bumps the vhost-device group with 11 updates:

| Package | From | To |
| --- | --- | --- |
| [clap](https://github.com/clap-rs/clap) | `4.5.2` | `4.5.3` |
| [thiserror](https://github.com/dtolnay/thiserror) | `1.0.57` | `1.0.58` |
| [vhost](https://github.com/rust-vmm/vhost) | `0.10.0` | `0.11.0` |
| [vhost-user-backend](https://github.com/rust-vmm/vhost) | `0.13.1` | `0.14.0` |
| [vm-memory](https://github.com/rust-vmm/vm-memory) | `0.14.0` | `0.14.1` |
| [serde_yaml](https://github.com/dtolnay/serde-yaml) | `0.9.32` | `0.9.33` |
| [anyhow](https://github.com/dtolnay/anyhow) | `1.0.80` | `1.0.81` |
| [clap_derive](https://github.com/clap-rs/clap) | `4.5.0` | `4.5.3` |
| [proc-macro2](https://github.com/dtolnay/proc-macro2) | `1.0.78` | `1.0.79` |
| [thiserror-impl](https://github.com/dtolnay/thiserror) | `1.0.57` | `1.0.58` |
| [unsafe-libyaml](https://github.com/dtolnay/unsafe-libyaml) | `0.2.10` | `0.2.11` |


Updates `clap` from 4.5.2 to 4.5.3
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/v4.5.2...v4.5.3)

Updates `thiserror` from 1.0.57 to 1.0.58
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](https://github.com/dtolnay/thiserror/compare/1.0.57...1.0.58)

Updates `vhost` from 0.10.0 to 0.11.0
- [Release notes](https://github.com/rust-vmm/vhost/releases)
- [Commits](https://github.com/rust-vmm/vhost/compare/vhost-v0.10.0...vhost-v0.11.0)

Updates `vhost-user-backend` from 0.13.1 to 0.14.0
- [Release notes](https://github.com/rust-vmm/vhost/releases)
- [Commits](https://github.com/rust-vmm/vhost/compare/vhost-user-backend-v0.13.1...vhost-user-backend-v0.14.0)

Updates `vm-memory` from 0.14.0 to 0.14.1
- [Release notes](https://github.com/rust-vmm/vm-memory/releases)
- [Changelog](https://github.com/rust-vmm/vm-memory/blob/v0.14.1/CHANGELOG.md)
- [Commits](https://github.com/rust-vmm/vm-memory/compare/v0.14.0...v0.14.1)

Updates `serde_yaml` from 0.9.32 to 0.9.33
- [Release notes](https://github.com/dtolnay/serde-yaml/releases)
- [Commits](https://github.com/dtolnay/serde-yaml/compare/0.9.32...0.9.33)

Updates `anyhow` from 1.0.80 to 1.0.81
- [Release notes](https://github.com/dtolnay/anyhow/releases)
- [Commits](https://github.com/dtolnay/anyhow/compare/1.0.80...1.0.81)

Updates `clap_derive` from 4.5.0 to 4.5.3
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/v4.5.0...v4.5.3)

Updates `proc-macro2` from 1.0.78 to 1.0.79
- [Release notes](https://github.com/dtolnay/proc-macro2/releases)
- [Commits](https://github.com/dtolnay/proc-macro2/compare/1.0.78...1.0.79)

Updates `thiserror-impl` from 1.0.57 to 1.0.58
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](https://github.com/dtolnay/thiserror/compare/1.0.57...1.0.58)

Updates `unsafe-libyaml` from 0.2.10 to 0.2.11
- [Release notes](https://github.com/dtolnay/unsafe-libyaml/releases)
- [Commits](https://github.com/dtolnay/unsafe-libyaml/compare/0.2.10...0.2.11)

---
updated-dependencies:
- dependency-name: clap
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: vhost-device
- dependency-name: thiserror
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: vhost-device
- dependency-name: vhost
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: vhost-device
- dependency-name: vhost-user-backend
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: vhost-device
- dependency-name: vm-memory
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: vhost-device
- dependency-name: serde_yaml
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: vhost-device
- dependency-name: anyhow
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: vhost-device
- dependency-name: clap_derive
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: vhost-device
- dependency-name: proc-macro2
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: vhost-device
- dependency-name: thiserror-impl
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: vhost-device
- dependency-name: unsafe-libyaml
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: vhost-device
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-18 10:31:58 +05:30
..
src tree-wide: use new serve convenience function 2023-11-20 13:05:48 +05:30
test Move all crates to workspace root 2023-10-16 12:03:57 +05:30
ARCHITECTURE.md Move all crates to workspace root 2023-10-16 12:03:57 +05:30
Cargo.toml build(deps): bump the vhost-device group with 11 updates 2024-03-18 10:31:58 +05:30
CHANGELOG.md Move all crates to workspace root 2023-10-16 12:03:57 +05:30
LICENSE-APACHE Move all crates to workspace root 2023-10-16 12:03:57 +05:30
LICENSE-BSD-3-Clause Move all crates to workspace root 2023-10-16 12:03:57 +05:30
README.md Move all crates to workspace root 2023-10-16 12:03:57 +05:30

vhost-device-scsi

This is a Rust implementation of a vhost-device-scsi daemon.

Usage

Run the vhost-device-scsi daemon:

vhost-device-scsi -r --socket-path /tmp/vhost-user-scsi.sock /path/to/image.raw /path/to/second-image.raw ...

Run 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

Limitations

We are currently only supporting a single request queue and do not support dynamic reconfiguration of LUN parameters (VIRTIO_SCSI_F_CHANGE).

Features

This crate is a work-in-progress. Currently, it's possible to mount and read up to 256 read-only raw disk images. Some features we might like to add at some point, roughly ordered from sooner to later:

  • Write support. This should just be a matter of implementing the WRITE command, but there's a bit of complexity around writeback caching we need to make sure we get right.
  • Support more LUNs. virtio-scsi supports up to 16384 LUNs per target. After 256, the LUN encoding format is different; it's nothing too complicated, but I haven't gotten around to implementing it.
  • Concurrency. Currently, we process SCSI commands one at a time. Eventually, it'd be a good idea to use threads or some fancy async/io_uring stuff to concurrently handle multiple commands. virtio-scsi also allows for multiple request queues, allowing the guest to submit requests from multiple cores in parallel; we should support that.
  • iSCSI passthrough. This shouldn't be too bad, but it might be a good idea to decide on a concurrency model (threads or async) before we spend too much time here.