https://www.phoronix.com/scan.php?page=article&item=linux-50-59&num=6"First up was wondering why the IO_uring performance was so poor on the Linux 5.9 kernel compared to prior releases when using the same FIO build and the same FIO configuration throughout.
Thanks to the Phoronix Test Suite for making it easy to reproduce and layering on top of Git bisect for speeding up the kernel bisection and the kernel build speeds of the EPYC 7702, the commit was soon uncovered.
The commit leading to the lower random read performance with IO_uring was tracked down to this two-line patch over mm: allow read-ahead with IOCB_NOWAIT set.
When asking Jens Axboe about this patch that he authored and maintainer of the Linux block subsystem and IO_uring lead developer, he provided some interesting insight over the performance drop. And it's actually expected.
Jens explained that Linux 5.9 is indeed handling buffered I/O differently now with IO_uring. Prior to Linux 5.9, buffered reads would spawn extra threads while that is no longer the case with 5.9+. With the new behavior in Linux 5.9, the latency should improve while the throughput can be impacted if it previously benefited from spreading the load over the multiple threads. Basically there is now more efficient async buffered I/O but can cause a regression particularly on larger systems where previously were using more threads."