Networking & APIs
Linux Async I/O: io_uring vs epoll TCP Server Throughput
Benchmarking Linux Async I/O by comparing io_uring and epoll for extreme network throughput on high-speed TCP servers.
Test Environment
CPUAMD EPYC 7763
RAM256GB
OSUbuntu 22.04 LTS (Kernel 6.2)
Tooltcpkali
Metrics Comparison
Syscalls per second
Unit: K/secio_uring
5★
epoll
850
Detailed Analysis
io_uring removes the need for costly syscall context switches, significantly outperforming epoll in high-IOPS scenarios.
io_uring uses shared ring buffers between user space and kernel space, allowing batched submission of IO ops without context switches.
Syscall Context Switch
Switching CPU to kernel mode
Bottleneck: epoll requires syscalls for every read/write.
Architectural Recommendations
- Adopt io_uring for custom proxies, databases, and heavy network daemons
Frequently Asked Questions
Does Node.js use io_uring?
Node is actively working on replacing libuvs epoll with io_uring.