Adopt InnoDB AIO layer to io_uring interface

Description

Linux Kernel 5.1 introduced a new very promising IO interface called io_uring.
https://kernel.dk/io_uring.pdf
https://blogs.oracle.com/linux/post/an-introduction-to-the-io-uring-asynchronous-io-framework
InnoDB can potentially benefit a lot from utilizing this new interface in comparison to existing Native AIO.

Similar to LinuxAIOHandler a new UringAIOHandler class inside os0file.cc must be implemented.

Environment

None

Attachments

2

Smart Checklist

Activity

Show:

Julia Vural March 4, 2025 at 9:09 PM

It appears that this issue is no longer being worked on, so we are closing it for housekeeping purposes. If you believe the issue still exists, please open a new ticket after confirming it's present in the latest release.

Dmitry Lenev April 26, 2023 at 7:37 PM

And here are flamegraphs collected by perf during benchmarking:

 

AIO case (304 connections):

URING case (304 connections no SQPOLL, no ATTACHWQ):

Dmitry Lenev April 26, 2023 at 7:32 PM

Dmitry Lenev April 26, 2023 at 10:57 AM
Edited

Draft patch for this idea was implemented. See https://github.com/percona/percona-server/pull/5019

Benchmarks (Sysbench OLTP_RW and OLTP_RW-without-range-selects) were performed on a server-class machine with a fast SSD.

Unfortunately these changes have not shown any performance gains (greater than margin of error). Moreover using uring with certain non-default flags (creating SQ polling thread for each uring instance) resulted in worse performance.

Taking into account the above and the fact that uring is still has different level of support on different kernels we (so it can't fully replace AIO variant at the moment) we have decided to put this project on hold after discussion with .

Won't Do

Details

Assignee

Reporter

Time tracking

30m logged

Affects versions

Priority

Smart Checklist

Created May 5, 2020 at 4:56 PM
Updated March 4, 2025 at 9:09 PM
Resolved March 4, 2025 at 9:09 PM