Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2574116
  • 博文数量: 323
  • 博客积分: 10211
  • 博客等级: 上将
  • 技术积分: 4934
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-27 14:56
文章分类

全部博文(323)

文章存档

2012年(5)

2011年(3)

2010年(6)

2009年(140)

2008年(169)

分类: 系统运维

2008-05-30 11:26:47

平台:pSeries
软件版本: AIX 5L

本文简要描述了Concurrent IO(CIO) 和Direct IO(DIO)的含义和用途。

AIX JFS2的Concurrent IO(CIO)是指在进行文件IO操作时不需要给文件的i节点加锁,只有在需要对i节点本身进行修改时(如改变 文件的大小)时才锁定i节点。启用CIO有两种方法,一是应用程序可以通过使用系统调用open()的O_CIO选项以 CIO方式打开文件,或者在安装文件系统时以 CIO的模式安装。

Direct IO(DIO)屏蔽了AIX虚拟内存管理程序(VMM)对文件的内存缓冲功能,它不但减少了CPU的负载,同时也避免了由于缓存文件页面所造成的内存空间紧张,进而引发内存页面替换操作。Direct IO在读入或写出的文件页面不会马上再次使用的情况下是一种非常有效的IO方式。Direct IO虽屏蔽了对IO性能有好处的JFS2预读算法,但我们可以使用异步IO或加大单次IO的数据量来提高性能。

并发I/O(Concurrent I/O)介绍
   
function _toChangeTable(){ var _oTable=document.getElementById("faqtable"); if(!_oTable) return; if(_oTable.rows.length<0) return; var _oRow=_oTable.rows[0]; if(_oRow) _oRow.parentElement.removeChild(_oRow);}function _toSetImgWidth(){ var _oList=document.getElementsByName("faq"); for(var i=0;i<_oList.length;i++){ _oList[i].width=428; }}window.onload=function(){ _toSetImgWidth(); _toChangeTable()}
本文适用平台为pSeries系列服务器,分四个部分描述:
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的更详细的信息请参考相关的手册。

阅读(3599) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~