Epoll vs. io_uring in Linux
- Infrastructure
- Programming
- Security
- Developer Tools
The post compares epoll and io_uring through the lens of a small reverse proxy project. It explains the old Linux model of waiting for readiness with epoll versus io_uring’s newer submission and completion rings, where user space and the kernel share queues to cut syscall overhead and support operation chaining. The comments mostly landed on a blunt conclusion: the API choice matters, but it is rarely the first bottleneck. Several people pointed out that a proxy can leave huge performance on the table through cross-core traffic, cache contention, allocator choices, and NIC queue layout long before epoll versus io_uring decides the outcome. That is why raw “CPU went up” or “req/s improved” anecdotes were treated with suspicion unless they also came with latency and max-load behavior.
If you run latency-sensitive or very high-throughput Linux services, treat io_uring as a targeted optimization, not an automatic upgrade. Benchmark end-to-end with your actual workload, and check early whether your kernels, containers, and security policies even allow it before you redesign around it.
- sibexi.co
- Discuss on HN