linux异步IO:io_uring

本文探讨io_uring如何改进POSIX AIO的不足,包括支持buffered IO、避免阻塞及减少系统调用。io_uring通过创建内核线程处理IO,共享SQring、CQring和sqearray内存,显著提升异步IO效率。

为了改善posix aio目前存在的问题,新的异步IO驱动:io_uring如何解决了posix aio的问题。围绕这个问题,本文首先介绍了异步IO的概念,然后介绍了posix aio存在的问题,最后根据io_uring的源码分析io_uring为什么比posix aio优异。

同步IO和异步IO

posix定义如下:

同步IO:导致请求进程阻塞,知道IO操作完成。
异步IO:不导致请求进程阻塞。

下图详细描绘了五种不同的I/O模型。I/O操作被看成两个部分:等待数据和拷贝数据到用户空间。

  • 阻塞式I/O:第一阶段和第二阶段均阻塞;
  • 非阻塞式I/O:第一阶段不阻塞,但是第二阶段拷贝数据阻塞;
  • I/O复用:可以同时等待多个IO事件;
  • 信号驱动式I/O:事件到来时通知用户程序,用户程序通过recv类似的系统调用读取数据;
  • 异步I/O:两个阶段均不阻塞用户进程;
    在这里插入图片描述

摘自:unix网络编程-卷1

native aio存在的问题

1.最大的问题就是只对O_DIRECT方式的IO支持异步,用户程序得自己实现I/O缓存;

  • O_DIRECT表示内核不会为I/O数据创建buffer,硬盘数据直接通过DMA传送到用户程序指定的地址。所以用户得自己管理内存和内存对齐。也就少了文件系统带的page cache。

2.Even if you satisfy all the constraints for IO to be async, it’s sometimes not. There are a number of way

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值