1,概述
2,为什么使用并发I/O
3,如何使用并发I/O
4,注意事项
1,概述
基于JFS文件系统,AIX提供了缓冲读写(cache I/O)和直接读写(direct I/O)两种文件操作方式。
从AIX 5.2 ML01开始,对JFS2(Enhanced Journal Filesystem)文件系统,系统提供并发的I/O读写方式(concurrent I/O),本文将介绍并发I/O的使用。
2,为什么使用并发I/O
许多情况下,并发I/O的使用可提高系统的性能,尤其是关系数据库的应用系统。在很多基于数据库系统的测试项目中,并发I/O的使用,其性能表现完全可以同使用裸设备相对比。大多数情况下,并发I/O是同数据库配合使用的,借助于并发I/O功能,在数据库的性能没有降低的情况下,用户可以充分利用文件系统的特点。
数据库系统的应用中,使用文件系统存储数据,对比与使用裸设备,主要关注文件系统的以下几个特点:
1) 文件缓存
2) 文件的读写锁,或者是inode的锁
3) 后台同步进程(sync)
文件系统的这些特点,可以保证数据的一致性,提供数据的冗余,而且实际上,很多使用文件系统的应用,可以提高其性能。但是对数据库系统的应用,这反而会影响到系统的性能,所以数据库的存储系统,用户会选择裸设备存储数据,而不是文件系统,JFS2的文件系统提供的并
发I/O的功能,可以很好的解决这一问题。
3,如何使用I/O
文件使用并发I/O可以有两种不同的方式,分别为:
1) 使用mount命令加载需要并发I/O的文件系统,参数为cio,命令使用如下 mount -o cio /filesystem_name
2) 使用open()系统调用打开相应文件,参数为O_CIO
这两种使用方式,对文件的作用域是不同的,当文件系统使用-o cio参数加载时,文件系统下的所有文件的缺省读写方式为并发I/O,而第二种使用方式,则是只有打开的文件使用并发 I/O的操作方式。另外,并发I/O也可以限定在文件系统的一组文件上,具体的方法是将需要并发I/O 方式操作的文件集中存放在单独的子目录下,使用namefs参数加载到文件系统的子目录下。例如,如果一个文件系统test包含部分文件使用并发I/O操作,而另一些则不需要,可以在文件系统/test下创建subtest子目录,将所有需要并发I/O操作的文件放于此目录下,而加载test文件系统时不需指定-o
cio参数,但是加载subtest时需指定-o cio参数,相应的操作命令如下:
1)在/etc/vfs文件中增加文件类型namefs,如已有namefs文件类型,则跳过此步,内容如下: namefs 1 none none
2)以普通方式加载test文件系统
mount /test
3)指定cio参数,加载/test/subtest,命令如下:
mount -v namefs -o cio /test/subtest /test
直接I/O遵从并发I/O的使用,使用并发I/O的文件自动使用直接I/O的通路,因而,并发I/O也满足直接I/O的限制:固定的对齐(alignment)方式和长度限制。
4,注意事项
并发I/O的使用可以提高文件系统的读写性能,这对数据库应用系统比较明显,对其他的应用系统,用户应根据实际情况选择,是使用直接I/O、并发I/O还是普通的文件系统。有关并发I/O的更详细的信息请参考相关的手册。