News for hackers. Stuff that matters.
Re:Epoll vs. Io_uring in Linux by mrlonglong on Saturday June 20, 2026 @07:34PM (#48614117)
Boost asio if you love C++ and asynchronous networking.
Re:Epoll vs. Io_uring in Linux by MathMonkeyMan on Saturday June 20, 2026 @08:03PM (#48614328)
I switched out asio's epoll backend for its io_uring in a database server and CPU utilization shot up. Probably depends on usage and the specifics of how it's integrated into the event code.
Re:Epoll vs. Io_uring in Linux by vlovich123 on Saturday June 20, 2026 @08:17PM (#48614413)
That’s paradoxically what you can expect on a busy server - your CPU can spend time doing work that would have been previously IO wait time. Of course, it could be a bug in the implementation where you’re spinning doing no work erroneously, but depends on the details.
Re:Epoll vs. Io_uring in Linux by saghm on Saturday June 20, 2026 @08:51PM (#48614607)
Yeah, the explanation that I've usually heard for this sort of thing is that it's intended to get back CPU time that's lost when too many system threads are blocking to keep something on every core even during I/O (or pay for it in terms of the context switching overhead if you compensate for this with an extremely large number of system threads). The theory is that you'll avoid idle CPU compared to the common "one thread per core" way of doing things due to some of them being idle during I/O, at the cost of using some extra CPU to handle more things in user space. Obviously how much this helps can vary between use cases, but the measure of how much it's helping (or if it's maybe not helping at all!) is throughput, not CPU utilization.
Re:Epoll vs. Io_uring in Linux by vlovich123 on Saturday June 20, 2026 @10:06PM (#48615001)
That is an imprecise explanation being conveyed to you - thread per core is still valuable in an io_uring world. The reason for that is how computers are built - its inherent in the kinds of operations that are cheap and what happens otherwise, the I/O model doesn’t matter.

Specifically, not thread per core code has the following issues:

* you have to use atomics/locks to synchronize data access. This involves expensive HW operations to implement the semantics of what an atomic operation is

* you have to deal with lock contention and cache contention

* when an OS migrates the core that is executing your code, you’ve suddenly got cold caches all over the place (icache, dcache, and TLB).

There’s also a bunch of related things that pop up - even if you do thread per core, the processor interrupts for events probably land on a different CPU resulting in extra overhead within the OS to deliver the event to you.

Io_uring doesn’t “handle more things in user space”. It specifically avoids a bunch of overheads; you’re context switching less (other cores can execute the OS code to process your request) and you can pipeline I/O (you can tell the OS “do IO A, then B, then C and tell me when that’s all done”) and you get fewer memory copies (the kernel reads into your buffer directly without needing to create another copy although this is more nuanced).

Anyway, the better mental model is specifically io_uring is more efficient and thus CPUs spend less time standing around waiting for things to happen at the hardware level (context switching, waiting for locks, etc). If the CPUs weren’t actually spending much time waiting, then you don’t get much benefit. This is the same phenomenon as Jevons paradox in economics; IO gets cheaper so you can do more of it within a given time unit and thus your CPUs end up more often having real work to do.

Re:Epoll vs. Io_uring in Linux by saghm on Sunday June 21, 2026 @01:06AM (#48615855)
To clarify, I'm not talking specifically about io_uring but (multithreaded) async concurrency models in general. The explanation needs to be imprecise because not all of them work the same way, so it's impossible to say anything correct about all of them without intentionally leaving out some specifics.
Re:Epoll vs. Io_uring in Linux by FooBarWidget on Sunday June 21, 2026 @04:15AM (#48616771)
This makes no sense. Epoll is already non-blocking, you never waste time waiting for I/O as long as there is work to do. Io_uring only boosts CPU efficiency (batching of syscalls, for example), it does not reduce blocking.
Re:Epoll vs. Io_uring in Linux by vlovich123 on Sunday June 21, 2026 @01:16PM (#48620671)
Your right, I was imprecise with my wording. You waste time doing context switches + mapping/unmapping CPU buffers meaning for a given unit of time you can churn through more I/O meaning your user space CPU time goes up and system time goes down.
Re:Epoll vs. Io_uring in Linux by toast0 on Saturday June 20, 2026 @11:39PM (#48615454)
In addition to the other discussion. It's important to measure outcomes and not just look at the cpu meter...

At the same load, how did latency look for A vs B.

What was throughput and latency at maximum load like for A vs B. For whichever one had the smaller max throughput, what did latency look like for the other option.

For bonus points while testing: is there another observable metric to indicate available capacity, if cpu % free is less useful.

Re:Epoll vs. Io_uring in Linux by Asmod4n on Sunday June 21, 2026 @01:04AM (#48615847)
No async io framework exists which utilizes everything io_uring can, they are all build around the poll model. As such io_uring will always be worse than the poll like abstractions.

The two things that make io_uring fast are chaining of operations and zero syscall mode, the former would require that all async io frameworks/libs would need to be rewritten to make use of that and then all user facing apps would also need to be rewritten since all you’d get now are completions to operations instead of waiting if you can run a operation.

Re:Epoll vs. Io_uring in Linux by topspin on Sunday June 21, 2026 @02:32PM (#48621357)
Classic.

Know that the increase in CPU utilization may mean you've improved the performance of your "database server," because now your CPU cores are waiting less on IO. It also may not mean this, but just looking at htop won't tell you either way.

Re:Epoll vs. Io_uring in Linux by LoganDark on Saturday June 20, 2026 @10:47PM (#48615196)
Boost is so inconvenient, they're huge dynamic libraries that are a pain to build and use. Even when I was already using CMake, getting Boost installed in a way where it could be discovered was super annoying. (I was on Mac, though)
Re:Epoll vs. Io_uring in Linux by Chaosvex on Sunday June 21, 2026 @02:59AM (#48616352)
Asio also comes in standalone form and both versions are header-only. Not necessarily directly related to your comment but adding it on, anyway.
Re:Epoll vs. Io_uring in Linux by cherryteastain on Sunday June 21, 2026 @03:03AM (#48616374)
You can statically link boost
Re:Epoll vs. Io_uring in Linux by wavemode on Sunday June 21, 2026 @10:39AM (#48619364)
Some (most?) Boost libraries are header-only. Including Boost.Asio nowadays.
Re:Epoll vs. Io_uring in Linux by DmitryOlshansky on Sunday June 21, 2026 @02:29PM (#48621325)
I’ve replaced Asio recently with stright epoll event loop and got about 16% RPS better. That is for resonably sized SQL server, so be careful with nice precanned libraries.
Re:Epoll vs. Io_uring in Linux by Uptrenda on Saturday June 20, 2026 @07:59PM (#48614302)
Yes, io_uring is significantly faster than epoll (I think I had like 20% faster req/s with io_uring.) The catch is that its kernel opt-in and disabled just about everywhere for security reasons. I think that it has direct memory sharing between the kernel and user-land which is kind of yikes. There's been multiple exploits that hit io_uring in recent times. It's because of this that even engineering projects that try to reach the highest performance possible (like Go) don't really bake io_uring in as a sane default. Though if you want to take the risk you can always run it yourself for your favourite language. It is faster but the cost is possible exploits.
Re:Epoll vs. Io_uring in Linux by happyPersonR on Saturday June 20, 2026 @08:31PM (#48614480)
Any kind of poll mode networking:

Rdma, dpdk, io_uring it’s really kind of up to the user to do the memory isolation

In io_urings case tho, you can’t do much because the rings are in the kernel.

I’m hopeful though that with Llm things will get better.

But it’s just hard problem to solve . Very difficult to do in the kernel itself, and folks don’t really even understand tuning for it.

Re:Epoll vs. Io_uring in Linux by kshri24 on Saturday June 20, 2026 @09:21PM (#48614766)
The ring buffers are in shared memory not kernel private. The ring buffers (submission and completion) are shared between kernel space and user space. User publishes requests via submission queue entries (updates tail of buffer while kernel reads head of the buffer), kernel shifts the submission queue buffer on its end and returns a completion queue event by publishing to completion buffer. User pulls from this buffer (specifically the head, kernel updates tail of buffer) in user space.
Re:Epoll vs. Io_uring in Linux by omcnoe on Saturday June 20, 2026 @09:11PM (#48614711)
For a project like Go, wouldn't it be an option to do one-time iouring feature detection in the runtime startup? Exploits are an issue for the entire OS, not the program choosing to use iouring, yeah?
Re:Epoll vs. Io_uring in Linux by csdreamer7 on Saturday June 20, 2026 @09:23PM (#48614774)
RHEL 9 and 10 now fully support io_uring by default. It is very recent, but this covers a lot of corporate Linux installs. Gemini 'said' Ubuntu and SuSE support it as well, but did not provide any links to prove it.

https://access.redhat.com/solutions/4723221

Go should reconsider support. They should have a 'go' at it.

Re:Epoll vs. Io_uring in Linux by insanitybit on Saturday June 20, 2026 @10:16PM (#48615060)
It's still seccomp'd off in most environments because io-uring is still a seccomp bypass that doesn't play well with kernel security systems (audit subsystem), even if it weren't also like the #1 or #2 exploit vector for privesc.
Re:Epoll vs. Io_uring in Linux by Asmod4n on Sunday June 21, 2026 @01:17AM (#48615894)
That’s solved as of last week, you can use cBPF now to disable functionality.
Re:Epoll vs. Io_uring in Linux by insanitybit on Sunday June 21, 2026 @06:27AM (#48617491)
How solved? AFAIK it's not meaningfully shipped but happy to hear otherwise.
Re:Epoll vs. Io_uring in Linux by Asmod4n on Sunday June 21, 2026 @09:29AM (#48618813)
you can now disable opertions with cBPF, like you would be able to with seccomp for normal syscalls.
Re:Epoll vs. Io_uring in Linux by cyphar on Sunday June 21, 2026 @05:50PM (#48622948)
Their point is that that functionality is not available on older kernels (such as those in RHEL 9 and 10) and so most sandboxes will continue to block it outright for a while, though eventually one would expect Red Hat to backport it.

(We haven't even added support for the new cBPF io_uring stuff to low-level container runtimes like runc yet, though I did review the patchset on LKML earlier this year and planned to get working on it when I have time. But as it requires spec changes, expect it to take 6-12 months at best...)

Re:Epoll vs. Io_uring in Linux by Asmod4n on Monday June 22, 2026 @04:42AM (#48627500)
Thanks for that! Hope 2027 will then be the year we get the speed back all those spectre etc mitgitations ate for those syscalls io_uring can replace.
Re:Epoll vs. Io_uring in Linux by Cloudef on Saturday June 20, 2026 @11:02PM (#48615285)
Quite depends, I had times when my posix emulation of io_uring (with poll, not epoll) was faster than io_uring. For large zero-copy buffers, io_uring is king however. Also io_uring is useful even for non asynchronous IO as it can implement chain of operations as single atomic operation (mkdir + open it for example).

For something like networking, if you are maximizing packets per second, you'll hit kernel limits[1] very quickly and instead have to start leveraging features like GSO/GRO or completely bypass the network stack.

1: https://github.com/axboe/liburing/discussions/1346

Re:Epoll vs. Io_uring in Linux by lukeh on Sunday June 21, 2026 @12:30AM (#48615696)
Also it’s nice for things like SPI which have no user space non-blocking API.
Re:Epoll vs. Io_uring in Linux by nottorp on Sunday June 21, 2026 @03:39PM (#48621914)
SPI the bus?
Re:Epoll vs. Io_uring in Linux by Asmod4n on Sunday June 21, 2026 @01:15AM (#48615893)
The main reason why it gets disabled is fixed now, the latest RC got cBPF support and as such you can restrict what OPs can be run now instead of just fully disabling it.
Re:Epoll vs. Io_uring in Linux by mort96 on Sunday June 21, 2026 @06:15AM (#48617436)
Well the reason it's disabled now is the recent history of pretty bad vulnerabilities. It probably needs to go a while without new vulnerabilities before it makes sense to enable by default. It's pretty complex completely unsafe C code, after all.
Re:Epoll vs. Io_uring in Linux by tempaccount420 on Sunday June 21, 2026 @08:49AM (#48618490)
It's not complex actually, but it is C...
Re:Epoll vs. Io_uring in Linux by Asmod4n on Sunday June 21, 2026 @04:25PM (#48622288)
Then just disable that singular function which causes the issue instead of a whole kernel subsystem. The current release can do that.
Re:Epoll vs. Io_uring in Linux by mort96 on Sunday June 21, 2026 @04:31PM (#48622336)
What's the singular function that has a chance of turning out to be exploitable in the future?
Re:Epoll vs. Io_uring in Linux by Asmod4n on Monday June 22, 2026 @06:00AM (#48628079)
With seccomp you can disable a single syscall which might be exploitable since you didn’t get around to patch your kernel, with cBPF you can now do the same for io_uring
Re:Epoll vs. Io_uring in Linux by mort96 on Monday June 22, 2026 @06:03AM (#48628110)
And which single syscall might be exploitable? I don't wanna wait until after an exploit to disable it
Re:Epoll vs. Io_uring in Linux by Asmod4n on Monday June 22, 2026 @07:50AM (#48628911)
Nothing stops you from disabling everything you don’t need and now io_uring offers that per OP too.
Re:Epoll vs. Io_uring in Linux by mort96 on Monday June 22, 2026 @08:05AM (#48629028)
Yes, but what parts of io_uring are safe to not disable?
Re:Epoll vs. Io_uring in Linux by Asmod4n on Monday June 22, 2026 @08:21AM (#48629200)
I don’t get what you mean, in the past it was all or nothing, now you can disable every single operation selectively.

Gotta read the usual sources to find out what you gotta disable on your machines, like you have to for every single syscall since forever.

Re:Epoll vs. Io_uring in Linux by mort96 on Monday June 22, 2026 @09:19AM (#48629748)
I mean exactly what I said. How do I know which parts of io_uring won't have security vulnerabilities discovered in the future?
Re:Epoll vs. Io_uring in Linux by spliffedr on Saturday June 20, 2026 @08:28PM (#48614466)
Take a look at https://github.com/concurrencykit/ck and https://github.com/microsoft/mimalloc, it will fit well for a zero-copy and mem aligned reverse proxy. Also, if you want to add a DDoS protection and more advanced L4 stuff check out https://docs.ebpf.io/ebpf-library/libxdp/libxdp/
Re:Epoll vs. Io_uring in Linux by Sibexico on Saturday June 20, 2026 @10:02PM (#48614987)
Yeah, the plan was to apply optimizations at the other levels, then we will go to allocators. Studying the allocators rn with my students, the previous post in the blog was about custom allocator on the Zig lang.
Re:Epoll vs. Io_uring in Linux by up2isomorphism on Saturday June 20, 2026 @09:03PM (#48614656)
The author takes a very benchmark focus on this topic which only says part of the story particularly for complex systems. Noticed that there are a number of very similar interface that exist on other platform like windows long before io_uring, but that does make Linux’s I/O system worse or slow than these platforms. A fast server is likely fast in either multiplexing or async API if implemented correctly in almost all cases.
Re:Epoll vs. Io_uring in Linux by Sibexico on Saturday June 20, 2026 @09:57PM (#48614955)
I'm now a Windows developer, mostly working with Linux and FreeBSD. Thx for the point, I'll look how it works in Windows systems.
Re:Epoll vs. Io_uring in Linux by muststopmyths on Sunday June 21, 2026 @09:24AM (#48618771)
Equivalent in Windows is Registered I/O (RIO) for sockets.

Windows network development is really, really different from Unixy stuff. But you might have fun :)

Re:Epoll vs. Io_uring in Linux by RossBencina on Saturday June 20, 2026 @09:27PM (#48614793)
There is no benchmark in the post. There is analysis, discussion and code examples for epoll and io_uring usage.
Re:Epoll vs. Io_uring in Linux by toast0 on Saturday June 20, 2026 @09:18PM (#48614757)
> But my students weren’t as happy as I was - they wanted to build something genuinely useful, and they were really disappointed that our “product” had strong architectural limits and couldn’t outperform titans like nginx and haproxy.

I took a (very brief) look at the github repo [1], it doesn't look like you're doing anything with cpu pinning.

You can probably eke (thanks) out a bit more performance if you cpu pin your threads and cpu pin your listen sockets (sockopt SO_INCOMING_CPU).

If you also cpu align your outgoing sockets, you should get a significant boost, but afaik, there's no great api for that. Linux does have an api for compatible NICs (traffic steering/flow steering) which can work, but if you know what hash your NIC uses (it's probably toeplitz) and you manage source port selection to your backend, you can pick ports that will hash properly.

The goal is for your proxy to be able to handle packets without any cross cpu communication.

[1] https://github.com/sibexico/TinyGate

Re:Epoll vs. Io_uring in Linux by Sibexico on Saturday June 20, 2026 @10:00PM (#48614973)
Basically, v0 and v1 of the repo is completely different implementations, written almost from scratch. Now working on the 3rd one implementation, I believe the last one. :) Completely different architectural choices was made.
Re:Epoll vs. Io_uring in Linux by toast0 on Sunday June 21, 2026 @01:02AM (#48615840)
If it's still running on more than a single core, and your students want it to go faster, aligning the work to cpus will almost certainly be useful.

I saw you mentioned windows development elsewhere. You might be interested to know that Microsoft pionered Receive Side Scaling and Send Side Scaling. If you try your proxy out on Windows, be sure to hook into those systems there.

The less work your proxy does, the more important avoiding cross core communication is.

Re:Epoll vs. Io_uring in Linux by camkego on Sunday June 21, 2026 @01:33AM (#48615966)
Pin threads to cores, and make sure threads different cores aren’t writing to the same 64 or 128 byte block. Lookup “false sharing”
Re:Epoll vs. Io_uring in Linux by iamcreasy on Sunday June 21, 2026 @12:10PM (#48620113)
Thanks for the write up. So the first version was synchronous, second version was using epoll and third one will be use io_uring?
Re:Epoll vs. Io_uring in Linux by jibal on Saturday June 20, 2026 @09:45PM (#48614893)
eke
Re:Epoll vs. Io_uring in Linux by ahepp on Sunday June 21, 2026 @02:40AM (#48616262)
I would be interested to see benchmarks for that patch
Re:Epoll vs. Io_uring in Linux by toast0 on Sunday June 21, 2026 @02:31PM (#48621345)
I don't have the right setup to make good benchmarks for this right now, but when I had the chance to put it into practice, the improvement between no cpu alignment and full alignment was quite large. That was on a 28 core machines (with 16 nic queues); many years ago, but IIRC, I got at least 10x the connections/sec out of the boxes after tuning and after tuning 12 cores were idle ... the machines were repurposed, if they were ordered for this, they should have had one core per nic queue in a single socket. The difference is likely smaller on a 4 core machine as described in the article.

The hardest part is going to be generating enough load. I had production load, which has the benefit that you don't need to generate it. Otoh, it was a transitional need, and I couldn't reasonably test above 50% of peak traffic on a single machine ... I hit that mark around the time traffic started dropping, and then it wasn't fun anymore.

Re:Epoll vs. Io_uring in Linux by GalaxyNova on Sunday June 21, 2026 @12:28AM (#48615677)
The year is 2050; there are 20 different ways to poll a socket on Linux.
Re:Epoll vs. Io_uring in Linux by Uptrenda on Sunday June 21, 2026 @02:05AM (#48616087)
Yes, even for io_uring. io_uring singshot and then multishot to go even faster.
Re:Epoll vs. Io_uring in Linux by thomashabets2 on Sunday June 21, 2026 @02:36AM (#48616237)
I've not yet tested the shared buffers for my io uring based web server, but that's because instead of reading from a file and writing, i send directly from a mmaped region.

But really, I want to sendfile with io_uring, but that's not supported yet.

My writeup, with extra buzzwords like Rust and kTLS: https://blog.habets.se/2025/04/io-uring-ktls-and-rust-for-ze...

It was on HN too: https://news.ycombinator.com/item?id=44980865

Re:Epoll vs. Io_uring in Linux by Ne02ptzero on Sunday June 21, 2026 @03:33AM (#48616532)
FYI you can use sendfile ish with uring, since splice(2) is implemented. Not as user friendly as sendfile, but should work fairly similarly.
Re:Epoll vs. Io_uring in Linux by luke5441 on Sunday June 21, 2026 @06:07AM (#48617393)
On the Linux side sendfile is implemented via splice. So it is a more generic API that covers the sendfile case.
Re:Epoll vs. Io_uring in Linux by thomashabets2 on Sunday June 21, 2026 @07:05AM (#48617774)
Yes, my understanding is that I should be able to emulate sendfile via splice. The problem with that is that splice requires one end to be a pipe.

So I think this means two extra file descriptors per connection (one per side of the pipe). And per connection this adds 5 slots in the submit/completion queue, with a LINK dependency. Maybe the trade off is worth it. I've not done concrete experiments with it, but I'm guessing it would be if the saved copy_from_user is large enough.

So for optimal performance this may mean using write() for short files, and a pipe(), a pair of splice() calls, and a pair of close() calls, for larger files.

Edit: I guess I could save some ops by reusing pipes, but then I'd have to make sure to flush them. Would add some complexity.

Re:Epoll vs. Io_uring in Linux by thomashabets2 on Sunday June 21, 2026 @07:14AM (#48617841)
Oops, I actually replied to the wrong comment. I replied here: https://news.ycombinator.com/item?id=48617774

But it's a relevant reply to both comments, so copied here:

Yes, my understanding is that I should be able to emulate sendfile via splice. The problem with that is that splice requires one end to be a pipe. So I think this means two extra file descriptors per connection (one per side of the pipe). And per connection this adds 5 slots in the submit/completion queue, with a LINK dependency. Maybe the trade off is worth it. I've not done concrete experiments with it, but I'm guessing it would be if the saved copy_from_user is large enough.

So for optimal performance this may mean using write() for short files, and a pipe(), a pair of splice() calls, and a pair of close() calls, for larger files.

Re:Epoll vs. Io_uring in Linux by witx on Sunday June 21, 2026 @06:10AM (#48617414)
Such a great article!

This sent me through a rabbit hole of uring, kernel development and C. I've been a rust and c++ dev for quite a few years now, but there's such a simplicity and even artistic feel to small(ish) C programs.

Re:Epoll vs. Io_uring in Linux by srigi on Tuesday June 23, 2026 @05:58AM (#48642657)
This article is very brief and not deep enough. There is one I’m finding a much more “to the bone” and explaining io_uring concepts in much deeper details:

https://unixism.net/loti/index.html

Feel free to reverse-search the related HN thread too.

Re:Epoll vs. Io_uring in Linux by witx on Friday June 26, 2026 @04:17AM (#48683867)
Thank you
Re:Epoll vs. Io_uring in Linux by inigyou on Sunday June 21, 2026 @06:25AM (#48617485)
If you write one with DPDK, it'll be infinitely more complex but you'll have the opportunity to blow away nginx in performance.

If you make one run on an FPGA you it'll be even more complex.

The lesson is that cutting through abstraction like a hot knife through butter is a necessary mindset for performance but also makes things more difficult. Sockets and thread-per-connection were good approaches when networks were very slow relative to CPUs, and they're still often the simplest approach today.

Re:Epoll vs. Io_uring in Linux by eatonphil on Sunday June 21, 2026 @07:24AM (#48617908)
I was also always curious about this and recently wrote a few implementations of an http file server to teach myself the key differences.

https://theconsensus.dev/p/2026/05/18/serving-files-three-wa...

Re:Epoll vs. Io_uring in Linux by buybackoff on Sunday June 21, 2026 @08:16AM (#48618267)
In the context of a proxy one should mention epoll_wait busy poll. I've recently dived into this when reviewing low-latency options, and found that it's almost possible to do user space busy polling just for simple sockets, no DPDK/VMA/io_uring needed, and Fastly contributed to this and uses it.

It's too low level, I cannot even tell that I understand everything, only the concept, so I will just share some links. It works only per NAPI epoll context, and one cannot easily control NAPI ID, but if an entire machine is dedicated for a proxy one can do a simple trick of assinging sockets by NAPI ID to dedicated pollers.

In my use case, it was not a proxy, but N socket polling on a machine that then processes received data. It does not look feasible for such case, maybe round-robin polling of NAPI contexts from a single thread may work. What I would really want to have one day from the kernel is that I can easily tell it: trust me, I will poll this single socket eventually, never ever use IRQ path for it.

Previous HN discussion of the kernel feature: https://news.ycombinator.com/item?id=43749271 Nice presentation by the Fastly contributor, with nice diagrams making the big picture much easier to understand: https://netdevconf.info/0x18/docs/netdev-0x18-paper10-talk-s... LWN articles: https://lwn.net/Articles/1008399/, https://lwn.net/Articles/997491/, https://lwn.net/Articles/959462/ Kernel docs: https://docs.kernel.org/networking/napi.html#irq-mitigation

Re:Epoll vs. Io_uring in Linux by gafferongames on Sunday June 21, 2026 @09:18AM (#48618736)
Just use AF_XDP
Re:Epoll vs. Io_uring in Linux by topspin on Monday June 22, 2026 @01:10PM (#48632901)
That only applies for network sockets, and requires taking responsibility for the entire network protocol stack. Not something that should be done without a very compelling reason, and not applicable at all in this case, where storage devices are involved.
Re:Epoll vs. Io_uring in Linux by gafferongames on Monday June 22, 2026 @09:49PM (#48639143)
You are correct and I misread the article while skimming it.