一、io_uring 诞生的背景
在 Linux 内核 5.1 之前,异步 I/O 编程长期被 aio 和 epoll 的局限性所困扰。POSIX AIO 实现效率低下,不支持 buffered I/O,且在处理网络 I/O 时几乎无用武之地。Linux 原生 AIO 虽然解决了部分磁盘 I/O 的问题,但 API 设计晦涩、使用门槛高,在实际生产环境中使用甚少。
2019 年,Jens Axboe(Linux 块设备层维护者,io_uring 作者)正式将 io_uring 合入 Linux 5.1 内核。io_uring 彻底重新设计了内核与用户空间之间的异步 I/O 通信机制,以一对共享环形队列(Submission Queue / Completion Queue)为核心,实现了真正的零系统调用异步 I/O 提交和收割,成为 Linux 高性能 I/O 编程的新标杆。
截至 2026 年,io_uring 已在云原生基础设施、数据库引擎(PostgreSQL 16+、RocksDB)、存储系统、CDN 边缘节点等场景大规模落地,是构建百万级 QPS 服务的关键技术之一。
二、io_uring 核心架构解析
2.1 SQ / CQ / SQE / CQE 核心抽象
io_uring 的数据结构核心由三部分组成:
- Submit Queue (SQ):提交队列,用户空间通过写入 SQE(Submission Queue Entry)来提交 I/O 请求。由一个头指针(sq.head)和一个尾指针(sq.tail)控制。
- Complete Queue (CQ):完成队列,内核在完成请求后写入 CQE(Completion Queue Entry),用户空间从 CQ 收割已完成的请求。
- Submission Queue Entries (SQE):SQE 数组,所有请求的参数(opcode、flags、fd、addr、len、user_dat

发表评论 取消回复