3 ms·
There's currently a lot of talk about io_uring, but most articles around it and usages still seem more in the exploration, research and toy project state. I'm
by Matthias247 6y ago
There's currently a lot of talk about io_uring, but most articles around it and usages still seem more in the exploration, research and toy project state.
I'm however wondering what the actual quality level is, whether people used it successfully in production and whether there is an overview with which kernel level which feature works without any [known] bugs.
When looking at the mailing list at https://lore.kernel.org/io-uring/ https://lore.kernel.org/io-uring/ it seems like it is still a very fast moving project, with a fair amount bugfixes. Given that, is it realistic to think about using any kernel in with a kernel version between 5.5 and 5.7 in production where any bug would incur an availability impact, or should this still rather be a considered an ongoing implementation effort and revisited at some 5.xy version?
An extensive set of unit-tests would make it a bit easier to gain trust into that everything works reliably and stays working, but unfortunately those are still not a thing in most low-level projects.
- junon 6y agoDon't use io_uring until at least 5.10 rc3, if not 5.11. SQPOLL is still to be properly added and fixed and there are some security concerns (e.g. CAP_SYS_ADMIN being replaced by CAP_SYS_NICE to start a kernel submission queue polling thread). io_uring has many tests in the companion user space library liburing, maintained by the same person that made the kernel patches (Jens Axboe). They test both the library as well as expected functionality in the kernel. io_uring is not going to give you speed ups if you use it in the same way as you would epoll or kqueue. Thus, simply sticking it into e.g. libuv without changing how the applications are built probably won't give you a lot of benefit (speculating). It comes down to how you work with the ring buffers and how much you take advantage of the highly out-of-order, memory-barrier-based shared memory approach as opposed to more "discrete" (maybe not the right word) syscalls. As of yet, I haven't personally come across a published example of a production framework that utilizes these features adequately. We have some internal IP that does, but probably won't be open sourced.
- pure_simplicity 6y agoThis article recently featured on HN may be of interest to answer your question: https://itnext.io/modern-storage-is-plenty-fast-it-is-the-apis-that-are-bad-6a68319fbc1a https://itnext.io/modern-storage-is-plenty-fast-it-is-the-ap... io_uring allows for better utilization of fast storage.