qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[ANNOUNCE] libblkio v0.1.0 preview release


From: Stefan Hajnoczi
Subject: [ANNOUNCE] libblkio v0.1.0 preview release
Date: Thu, 29 Apr 2021 15:05:50 +0100

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

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]