QUICK START:PatternsErrors & FixesSecurityBenchmarksDevOps RecipesCheatsheetsInterviewCompareTopicsHTMLCSSJavaScriptTypeScriptPythonSQLReactNext.jsNode.jsLinux & UbuntuKotlinSwiftC# / .NETJavaGoRustC++DSASystem DesignDevOpsCybersecurityAI / ML
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/sec
io_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.