io_uring: 高性能异步框架
https://zhuanlan.zhihu.com/p/608787533
原理及核心数据结构:SQ/CQ/SQE/CQE
Io_uring 利用 mmap 开辟出一块空间,让用户态和内核态的程序都可以共享的一块区域
- 提交队列:submission queue (SQ)
- 完成队列:completion queue (CQ)
这两个队列:
- 都是单生产者、单消费者,size 是 2 的幂次;
- 提供无锁接口(lock-less access interface),内部使用 内存屏障做同步(coordinated with memory barriers)。
使用方式:
- 请求
- 应用创建 SQ entries (SQE),更新 SQ tail;
- 内核消费 SQE,更新 SQ head。
- 完成
- 内核为完成的一个或多个请求创建 CQ entries (CQE),更新 CQ tail;
- 应用消费 CQE,更新 CQ head。
- 完成事件(completion events)可能以任意顺序到达,到总是与特定的 SQE 相关联的。
- 消费 CQE 过程无需切换到内核态。