aio、cio、dio无论关于操作系统还是数据库中都经常提到的概念,在IBM的官方网站可以查到相关详细的资料这里我只简单的介绍下,便于大家平时看资料时候更好理解相关概念
AIO CIO DIO
AIO CIO DIO
<$$$$$$$$$$$$$$$$$$>
AIO控制的是 读写是顺序的,还是异步的
Dio控制的是否跳过文件缓存
(即可能是顺序也可以是异步)
CIO是在DIO基础上跳过INODE锁(即可能是顺序也可以是异步)
<$$$$$$$$$$$$$$$$$$>
Asynchronous I/O,在 AIO
的工作模式下,应用程序向操作系统发起 I/O 请求(读 /
写)以后,不必等 I/O 完成,即可发起新的 I/O
请求。通过这种方法,可以提示提升 I/O 吞吐量和性能。从 AIX5L
起,AIX 支持两种 AIO:legacy AIO
和 POSIX AIO。AIO
既支持文件系统也支持裸设备。
AIO对文件系统的支持:APP/DB---AIO---AIOSERVER---storage
AIO对裸设备的支持:APP/DB---AIXKERNEL---storage
Fastpath 不需要 AIO Server
来处理 I/O 请求,它可以减少 CPU
上下文切换,降低 CPU 开销。
通过控制内核参数开启关闭AIO功能,AIO
在 AIX6.1 中默认是打开的,它既支持文件系统,也支持裸设备。
AIO 对于裸设备的支持与 CIO
对文件系统支持的方式类似,都是通过“FastPath”来实现。前者受内核参数 fastpath
控制,后者受内核参数 fsfastpath
控制。在 AIX6.1 中,这两个参数默认都是设置为 1。
#ioo -F -a |grep -i path
aio_fastpath = 1
aio_fsfastpath = 1
AIO 相关的内核参数。
#ioo -F -a |grep -i aio
aio_maxreqs = 131072
aio_maxservers = 30
aio_minservers = 3
配置可以使用可以使用 chdev
命令或者 smit fastpath 来修改参数
<$$$$$$$$$$$$$$$$$$>
DIO 的全称为 Direct I/O,即直接 I/O。在 DIO
的工作模式下,数据直接从磁盘传送到应用的缓存,而不经过文件的 buffer cache。
通过控制文件系统属性来开启关闭DIO功能。
#mount -o cio /weixinyu
chfs -a options=rw,cio /weixinyu
<$$$$$$$$$$$$$$$$$$>
CIO 的全称为 Concurrent I/O
即并发 I/O。CIO
的工作模式是建立在 DIO模式基础之上的。
从 AIX 5.2.10
开始,JFS2 支持 CIO
选项,并发 I/O 的实现允许多个线程并发地对同一个文件进行读写数据的操作。在DB2系统里建表空间的时候默认是关闭文件缓存的,就打开了cio功能。。
#mount -o dio /xx
chfs -a options=rw,dio /xx
在v95之后创建表空间的只要文件系统支持或者使用裸设备表空间默认是文件系统选项关闭的,是使用CIO/DIO的。
所以目前容器使用裸设备或者文件系统的在性能方面差别很小了,但是文件系统便于管理,但是还是点差别,文件系统会多一层AIOSERVER,在CPU使用上会更高点(只是一点点),另外在扩展表空间的时候使用裸设备要快些(因为格式化的原因)。