Hi, A preview release of libblkio, a library for high-performance block I/O, is now available: https://gitlab.com/libblkio/libblkio/-/tree/v0.1.0 Applications are increasingly integrating high-performance I/O interfaces such as Linux io_uring, userspace device drivers, and vhost-user device support. The effort required to add each of these low-level interfaces into an application is relatively high. libblkio provides a single API for efficiently accessing block devices and eliminates the need to write custom code for each one. The library is not yet ready to use and currently lacks many features. In fact, I hope this news doesn't spread too far yet because libblkio is at a very early stage, but feedback from the QEMU community is necessary at this time. The purpose of this preview release is to discuss both the API design and general direction of the project. API documentation is available here: https://gitlab.com/libblkio/libblkio/-/blob/v0.1.0/docs/blkio.rst Examples are available here: https://gitlab.com/libblkio/libblkio/-/tree/v0.1.0/examples The goal is to eventually include the following drivers: - Linux io_uring - NVMe (VFIO and vfio-user) - virtio-blk (VFIO, vfio-user, vhost-user-blk, and vhost-vdpa-blk) There are a few reasons why libblkio is needed: 1. QEMU, Ceph, GlusterFS, MariaDB, and other programs have been adding more low-level block I/O code, most of it duplicated. Usually only one or two of Linux AIO, io_uring, userspace drivers, vhost-user drivers, etc are implemented. This makes it difficult to benefit from the latest advances in high-performance block I/O. 2. Coding to a standard API makes it possible to introduce new optimizations or hardware interfaces without costly changes to the software stack. 3. A client library is needed so applications can take advantage of qemu-storage-daemon's vhost-user-blk exports. 4. Implementing block I/O as a library allows QEMU to use Rust for new code without messy QEMU internal API bindings. Note that libblkio currently does not provide a Rust crate, it only offers a C API. For QEMU integration the next step is a libblkio BlockDriver. This new BlockDriver will provide libblkio functionality to QEMU. Eventually libblkio will provide block/file-posix.c, block/nvme.c, and the upcoming vhost-vdpa-blk functionality and the QEMU code can be simplified or removed. libblkio does not contain an event loop implementation or disk image format drivers and that functionality will not be part of libblkio. How to participate: 1. Share your thoughts on the direction and your requirements. 2. Review the API docs and give feedback. 3. Write a libblkio driver for NVMe VFIO/vfio-user, virtio-blk VFIO/vfio-user, vhost-user-blk. Or just a null driver for benchmarking/testing :). 4. Integrate libblkio into Ceph, GlusterFS, MariaDB, etc. I am now beginning QEMU and fio integration. Stefano Garzarella is looking at adding a vhost-vdpa-blk driver to libblkio. Stefan