qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: "Fam Zheng" <fam@euphon.net>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	"Thomas Huth" <thuth@redhat.com>,
	"Vladimir Sementsov-Ogievskiy" <v.sementsov-og@mail.ru>,
	qemu-block@nongnu.org, "Michael S. Tsirkin" <mst@redhat.com>,
	"Laurent Vivier" <lvivier@redhat.com>,
	"Eric Blake" <eblake@redhat.com>,
	qemu-devel@nongnu.org, "Alberto Faria" <afaria@redhat.com>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
	"Yanan Wang" <wangyanan55@huawei.com>,
	"Hanna Reitz" <hreitz@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"John Snow" <jsnow@redhat.com>,
	"Markus Armbruster" <armbru@redhat.com>,
	sgarzare@redhat.com
Subject: Re: [RFC v2 1/8] blkio: add io_uring block driver using libblkio
Date: Wed, 6 Apr 2022 19:32:04 +0200	[thread overview]
Message-ID: <Yk3OlNBaEifS9bZD@redhat.com> (raw)
In-Reply-To: <20220405153323.2082242-2-stefanha@redhat.com>

Am 05.04.2022 um 17:33 hat Stefan Hajnoczi geschrieben:
> libblkio (https://gitlab.com/libblkio/libblkio/) is a library for
> high-performance disk I/O. It currently supports io_uring with
> additional drivers planned.
> 
> One of the reasons for developing libblkio is that other applications
> besides QEMU can use it. This will be particularly useful for
> vhost-user-blk which applications may wish to use for connecting to
> qemu-storage-daemon.
> 
> libblkio also gives us an opportunity to develop in Rust behind a C API
> that is easy to consume from QEMU.
> 
> This commit adds an io_uring BlockDriver to QEMU using libblkio. For now
> I/O buffers are copied through bounce buffers if the libblkio driver
> requires it. Later commits add an optimization for pre-registering guest
> RAM to avoid bounce buffers. It will be easy to add other libblkio
> drivers since they will share the majority of code.
> 
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>

> +static BlockDriver bdrv_io_uring = {
> +    .format_name                = "io_uring",
> +    .protocol_name              = "io_uring",
> +    .instance_size              = sizeof(BDRVBlkioState),
> +    .bdrv_needs_filename        = true,
> +    .bdrv_parse_filename        = blkio_parse_filename_io_uring,
> +    .bdrv_file_open             = blkio_file_open,
> +    .bdrv_close                 = blkio_close,
> +    .bdrv_getlength             = blkio_getlength,
> +    .has_variable_length        = true,

This one is a bad idea. It means that every request will call
blkio_getlength() first, which looks up the "capacity" property in
libblkio and then calls lseek() for the io_uring backend.

For other backends like the vhost_user one (where I just copied your
definition and then noticed this behaviour), it involve a message over
the vhost socket, which is even worse.

.has_variable_length was only meant for the host_floppy/cdrom drivers
that have to deal with media change. Everything else just requires an
explicit block_resize monitor command to be resized.

Kevin



  reply	other threads:[~2022-04-06 17:33 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-05 15:33 [RFC v2 0/8] blkio: add libblkio BlockDriver Stefan Hajnoczi
2022-04-05 15:33 ` [RFC v2 1/8] blkio: add io_uring block driver using libblkio Stefan Hajnoczi
2022-04-06 17:32   ` Kevin Wolf [this message]
2022-04-07  7:22     ` Stefan Hajnoczi
2022-04-07  8:25       ` Kevin Wolf
2022-04-07  8:34         ` Kevin Wolf
2022-04-12  8:43           ` Stefan Hajnoczi
2022-04-05 15:33 ` [RFC v2 2/8] numa: call ->ram_block_removed() in ram_block_notifer_remove() Stefan Hajnoczi
2022-04-05 15:33 ` [RFC v2 3/8] block: pass size to bdrv_unregister_buf() Stefan Hajnoczi
2022-04-05 15:33 ` [RFC v2 4/8] block: add BDRV_REQ_REGISTERED_BUF request flag Stefan Hajnoczi
2022-04-05 15:33 ` [RFC v2 5/8] block: add BlockRAMRegistrar Stefan Hajnoczi
2022-04-05 15:33 ` [RFC v2 6/8] stubs: add memory_region_from_host() and memory_region_get_fd() Stefan Hajnoczi
2022-04-05 15:33 ` [RFC v2 7/8] blkio: implement BDRV_REQ_REGISTERED_BUF optimization Stefan Hajnoczi
2022-04-05 15:33 ` [RFC v2 8/8] virtio-blk: use BDRV_REQ_REGISTERED_BUF optimization hint Stefan Hajnoczi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Yk3OlNBaEifS9bZD@redhat.com \
    --to=kwolf@redhat.com \
    --cc=afaria@redhat.com \
    --cc=armbru@redhat.com \
    --cc=eblake@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=f4bug@amsat.org \
    --cc=fam@euphon.net \
    --cc=hreitz@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=sgarzare@redhat.com \
    --cc=stefanha@redhat.com \
    --cc=thuth@redhat.com \
    --cc=v.sementsov-og@mail.ru \
    --cc=wangyanan55@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).