You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.