Richard W.M. Jones
2021-Mar-30 17:05 UTC
[Libguestfs] [libnbd] GSoC21: IO_uring optimization questions
[Adding Stefan: Have we retro-fitted io_uring into any other libraries?] Welcome Abhay, On Tue, Mar 30, 2021 at 09:33:17PM +0530, Abhay Raj Singh wrote:> Greetings everyone! I am Abhay a 3rd-year student at the > National Institute of Technology, Hamirpur, Bharat(India). > > I am interested in utilizing the recently introduced feature > io_uring of the Linux kernel to speed up libnbd async I/O. > > I have been in contact with Richard regarding this and > thanks to his guidance I have some ideas and approaches. > > The rough approaches I can think of are: > 1. Replacing the poll mechanism(nbd_poll) with the io_uring one.This would be nice and self-contained.> 2. A socket wrapper using io_uring > > The latter requires less work as far as I can see and is easily > reusable. Though I have only recently read about the socket > wrapper method so can't tell for sure. I will try making a > wrapper to check feasibility.Does "socket wrapper" mean adding another struct socket_ops defined in lib/internal.h and implemented so far in lib/socket.c (for plain sockets) and lib/crypto.c (for TLS sockets)? As an aside, libnbd only makes socket calls in a few places: $ git grep -- '->recv' generator/states-reply.c: r = h->sock->ops->recv (h, h->sock, h->rbuf, h->rlen); generator/states-reply.c: /* sock->ops->recv called set_error already. */ generator/states.c: r = h->sock->ops->recv (h, h->sock, rbuf, rlen); generator/states.c: /* sock->ops->recv called set_error already. */ $ git grep -- '->send' generator/states.c: r = h->sock->ops->send (h, h->sock, h->wbuf, h->wlen, h->wflags); generator/states.c: /* sock->ops->send called set_error already. */ (Also you'll want to look for '->pending', '->get_fd', '->shut_writes', '->close').> A general suggestion for io_uring is to not use it, directly:) > But use a convenient wrapper liburing instead. > > The doubts I have regarding this are: > 1. > Should I create a new API or replace the old aio API. > On one end I see no problem in doing so but I am > not familiar with usesIf there's a new API then that's going to require every existing user to opt in, which isn't nice for those users. They would need to choose io_uring (and risk not working on many platforms) or try to support both APIs. So the bar to doing this way must be very high - only if it's not possible any other way.> 2. > For testing wouldn't libnbd limited by nbdkit if try > to test on my pc and would be only marginally better > unless nbdkit is ported too.You could also test against qemu-nbd, although it is also not using io_uring AFAIK. Also you could test against a simple hand-written NBD server implemented using io_uring. Or maybe there will be enough of a performance difference against unmodified nbdkit.> As the task is not too difficult once I get my head around > the code base, I might be able to port nbdkit too(incase of socket wrapper) > and write some tests in the 180-200hr period of GSoC. > > Thanks! > Humble Regards, > Abhay > (rathod-sahaab)Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com libguestfs lets you edit virtual machines. Supports shell scripting, bindings from many languages. http://libguestfs.org
Stefan Hajnoczi
2021-Mar-31 16:55 UTC
[Libguestfs] [libnbd] GSoC21: IO_uring optimization questions
On Tue, Mar 30, 2021 at 06:05:57PM +0100, Richard W.M. Jones wrote:> [Adding Stefan: Have we retro-fitted io_uring into any other libraries?]Not that I'm aware of. You could check Fedora or another Linux distro's packages to find what depends on liburing and then investigate those packages. Stefan -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 488 bytes Desc: not available URL: <http://listman.redhat.com/archives/libguestfs/attachments/20210331/293cc54d/attachment.sig>