On Thu, Jun 19, 2025 at 08:08:28PM -0400, Stefan Hajnoczi wrote: > The io_uring_prep_readv2/writev2() man pages recommend using the > non-vectored read/write operations when possible for performance > reasons. > > I didn't measure a significant difference but it doesn't hurt to have > this optimization in place. > > Suggested-by: Eric Blake <ebl...@redhat.com> > Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> > --- > block/io_uring.c | 29 ++++++++++++++++++++++++----- > 1 file changed, 24 insertions(+), 5 deletions(-) > > diff --git a/block/io_uring.c b/block/io_uring.c > index dd930ee57e..bbefbddcc0 100644 > --- a/block/io_uring.c > +++ b/block/io_uring.c > @@ -49,12 +49,24 @@ static void luring_prep_sqe(struct io_uring_sqe *sqe, > void *opaque) > #ifdef HAVE_IO_URING_PREP_WRITEV2 > { > int luring_flags = (flags & BDRV_REQ_FUA) ? RWF_DSYNC : 0; > - io_uring_prep_writev2(sqe, fd, qiov->iov, > - qiov->niov, offset, luring_flags); > + if (luring_flags != 0 || qiov->niov > 1) { > + io_uring_prep_writev2(sqe, fd, qiov->iov, > + qiov->niov, offset, luring_flags); > + } else { > + /* The man page says non-vectored is faster than vectored */ > + struct iovec *iov = qiov->iov; > + io_uring_prep_write(sqe, fd, iov->iov_base, iov->iov_len, > offset); > + }
Reviewed-by: Eric Blake <ebl...@redhat.com> -- Eric Blake, Principal Software Engineer Red Hat, Inc. Virtualization: qemu.org | libguestfs.org