AIO, DIO, CIO

31 篇文章 1 订阅

复杂度3/5
机密度3/5

这些名词都用于数据(文件)访问的模式,既应用程序用什么方案实现对文件的读写。

AIO
AIO 的全称为 Asynchronous I/O,既异步 I/O。在 AIO 的工作模式下,应用程序发起(call)I/O请求(读 / 写)系统调用以后,内核不必等 I/O 完成,即可返回(此时数据区不能释放或修改,需要等访问确认完成),应用程序可以发起新的 I/O 请求。通过这种方法,可以提示提升 I/O 吞吐量和性能。从 AIX5L 起,AIX 支持两种 AIO:legacy AIO 和 POSIX AIO。AIO 既支持文件系统也支持裸设备。

DIO
AIO 的全称为 Direct I/O,即直接 I/O。在 DIO 的工作模式下,数据直接从磁盘传送到应用的数据区,而不经过文件的 VMM映射。DIO 是 JFS/JFS2文件系统的一个选项,对于一些应用,如 Oracle 数据库,它本身有自己的缓存管理机制,如果再使用文件系统缓存,不但多占用了一倍的物理内存,而且多了一次数据移动。在这种情况下,使用 DIO 会提升一些性能。但是,当应用有大量的顺序读 I/O 的时候,可能由于AIX的lv预读机制也由于DIO而被关闭,导致性能稍稍下降。

CIO
CIO 的全称为 Concurrent I/O 既并发 I/O。CIO 的工作模式是建立在 DIO 模式基础之上的。在 JFS2 的环境下,如果应用需要绕过文件系统缓存,经常会使用 CIO 模式来替代 DIO 模式。在 CIO 的工作模式下,首先,数据会从磁盘直接传递到应用的缓存,这一点和DIO相同。除此之外,由于在文件系统中,为了保证并行访问时,多线程、进程之间数据更新的一致性,需要使用 inode lock。Inode lock 保证一个文件在某一时刻,只有一个写 I/O,并且为了避免读到 stale 的数据,写的时候也是不允许并发读。而在 CIO 的工作模式下,JFS2 会绕过 inode lock,从而实现多个线程可以同时读写一个共享文件。而在这种情况下,数据的一致性就需要应用或数据库自己来保证。

AIO、DIO、CIO 的区别
AIO,使得应用的单一线程就可以同时发起多个IO请求,否则在一个指令流中,前一个IO没有完成返回,就会挂在这里,无法继续执行,更不能发起下一个IO请求。AIO模式则解决了这个问题,由AIO server(由kernel提供)管理请求队列,即刻可以返回IO,当然,应用程序需要自己准备好回调函数,以应对IO失败处理、IO完成后释放数据区等工作;

简单地说,DIO就是减少了AIX内核对文件进行内存映射过程,也就不存在kernel管理的文件缓存,由应用直接管理。由此可以降低内存消耗和kernel管理该内存的CPU的处理需求。前提条件是应用能管理好文件IO,不需要AIX内核对此文件的缓存进行管理。

CIO=DIO+inode lock free,应用不但不需要AIX管理文件cache,而且连并行锁都自行管理。

以上三种IO模式,AIO多全操作系统生效,开启后只要应用打开文件时设置aio参数即可;CIO和DIO则是对一个完整文件系统生效,需要在mount某个文件系统的时候增加mount参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ensighine

如需特定专题,踢我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值