Skip to content

v0.2.10

Choose a tag to compare

@github-actions github-actions released this 03 Oct 23:02
· 163 commits to main since this release
v0.2.10

Changelog

Added

  • rawio::Queue::timeout() (and its rawio_timeout() C API counterpart): a standalone async timer op, co_await-able and cancellable exactly like every other rawio::Queue operation, resolving successfully once a given number of microseconds have elapsed.
  • -w/--workers N for rawstor-ost: runs N worker threads (default 12), each with its own I/O queue and client connections, all accepting on the same listening socket.
  • --num-queues N for rawstor-vhost (default 4): advertises N virtqueues over VIRTIO_BLK_F_MQ, each serviced by its own thread and its own connection to TARGET, so I/O on different queues now makes progress in parallel instead of funneling through one shared reactor.
  • Discard and write-zeroes support end to end: new rawstor_object_discard()/rawstor_object_write_zeroes() client API, a WRITE_ZEROES OST wire command (DISCARD already existed but was unimplemented), file://'s backend now actually punches holes/zeroes ranges via fallocate(), and rawstor-vhost/rawstor-vhost-qemu advertise VIRTIO_BLK_F_DISCARD/VIRTIO_BLK_F_WRITE_ZEROES to the guest.
  • rawstor-vduse: a new virtio-blk backend using the VDUSE (vDPA Device in Userspace) kernel protocol, alongside rawstor-vhost. Implements the protocol natively (no vendored third-party library, same approach as vhost/), in its own deb/rpm package with a rawstor-vduse@.service systemd template unit and udev rule. Advertises VIRTIO_BLK_F_MQ/VIRTIO_BLK_F_DISCARD/VIRTIO_BLK_F_WRITE_ZEROES and services _DISCARD/_WRITE_ZEROES requests, and (--num-queues, default 16) services that many virtqueues in parallel, each on its own thread and its own connection to TARGET. Linux-only. See the top-level README's "rawstor-vduse" section.
  • Connection::_with_retry() now waits out an exponential backoff with jitter (tunable via the new RAWSTOR_OPTS_IO_RETRY_BACKOFF_BASE/_MAX/_JITTER) instead of retrying immediately, and reconnects before every retry regardless of what failed, bounded by RAWSTOR_OPTS_IO_ATTEMPTS -- skipped entirely for a rejection retrying can never fix, e.g. ENOENT. See README.md's "Environment Variables" section.

Fixed

  • file://'s Session::create() only ftruncate()d a new object to its full size, leaving it sparse; a write into never-touched territory then depends on the filesystem's own delayed allocation, which under data=ordered journaling must land before the next journal commit -- on an ext4 mount with an unusually long commit= interval, many concurrent writes into a still-sparse object could each back up behind that interval, measured as tens of seconds of rawstor-vhost/OST session round-trip latency under sustained load. create() now preallocates the object's real blocks up front (fallocate() on Linux, fcntl(F_PREALLOCATE) on macOS), removing that dependency entirely.
  • rawstor-ost now reliably stops on the first SIGINT/SIGTERM instead of occasionally needing a second signal to unblock its I/O wait.

Assets

Source tarball

Debian/Ubuntu packages

RPM packages

Python package