免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3813 | 回复: 2
打印 上一主题 下一主题

KAIO、RAW DEVICES、DIRECT I/O [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-27 22:15 |只看该作者 |倒序浏览
以下内容摘自:通过 Informix Dynamic Server 10.0 利用 Linux 的特性

Kernel Asynchronous I/O

Kernel Asynchronous I/O (KAIO) 允许应用程序将处理过程与 I/O 操作重叠,以提高 CPU 和设备的利用率。对于 KAIO,进程不需要等待 I/O 请求完成;当 I/O 操作完成时,进程就可以继续。

Kernel Asynchronous I/O 已经受到自 2.6.x 起的官方 Linux 内核的支持。IBM Informix Dynamic Server Version 10.0 支持字符设备(也叫裸设备)和块设备上的 Kernel Asynchronous I/O。Kernel Asynchronous I/O 在缺省情况下是开启的,在启动数据库服务器的进程所在的环境下,可以通过将环境变量 KAIOOFF 设为 1 来将其禁用。

操作系统需求

主流 2.6 内核中包括了对本地 Kernel AIO 的支持。

重要: 不管是什么级别的发行版或者内核,libaio.so 库都是必需的。在本文撰写之际,IBM Informix Dynamic Server Version 10.0 需要不低于 0.3.96-3 的 libaio。

如果安装在计算机上的 libaio 的版本不能满足这些最低要求,那么应下载来自 Red Hat 或 SUSE 的最新 RPM Package Manager (RPM)。

Kernel Asynchronous I/O 配置

Kernel Asynchronous I/O (KAIO) 在缺省情况下是开启的。在启动 Dynamic Server 进程的环境下,可以通过指定环境变量 AIOOFF=1 将其禁用。

如果启用了 KAIO,IBM Informix Dynamic Server Version 10.0 会尝试动态地装载 libaio。如果不能装载这个共享库,那么 KAIO 将被禁用,并且在数据库服务器的消息日志文件中会记下一条消息。

在使用 KAIO 时,建议在不同的虚拟处理器上运行 poll 线程。为此,可以在 NETTYPE 配置参数中将 NET 指定为 virtual processor (VP)。例如,您可以指定:

NETTYPE ipcshm,...,...,NET

或者

NETTYPE soctcp,...,...,NET

在 Linux 上,整个系统中并行 KAIO 请求有个最大数量的限制。/proc/sys/fs/aio-max-nr 文件包含了这个值。Linux 系统管理员可以增加这个值,例如使用以下命令:

# echo new_value > /proc/sys/fs/aio-max-nr

在 /proc/sys/fs/aio-nr 文件中可以看到所有操作系统进程已分配的请求数。

缺省情况下,IBM Informix Dynamic Version 10.0 分配最大请求数一半的请求,并将它们均等地指派给一定数量的 CPU 虚拟处理器。您可以使用环境变量 KAIOON 来控制分配给每个 CPU 虚拟处理器的请求数量。为此,可以在启动数据库服务器之前将 KAIOON 设置成要求的值。

KAIOON 的最小值是 100。如果 Linux 快要用完 KAIO 资源,例如在动态添加了很多 CPU 虚拟处理器的时候,在 online.log 文件中会打出警告。发生这种情况时,Linux 系统管理员应该像前面描述的那样添加 KAIO 资源。

性能优点

如果操作系统支持 KAIO,则 CPU 虚拟处理器(VP)直接向文件作出 I/O 请求,而无需通过操作系统缓冲区。在这种情况下,应该只配置一个 AIO VP,再加上两个附加的 AIO VP 用于每个缓冲的文件块。

如果某个系统将所有可用的物理内存都用于应用程序(最显著的是用于 IDS),那么 Linux 可用于文件系统缓存的内存就非常少,从而导致文件系统 I/O 变得非常慢。在这一点上,KAIO 可以带来最大的好处,并且这种好处通常是可以明显感觉到的。

直接 I/O

直接 I/O(Direct I/O, DIO)是另一种用于读写的可减少对 CPU 占用的缓存方法,它消除了从文件缓存传输到用户缓冲区的副本。对用 O_DIRECT 标志打开的文件的读/写将导致数据直接在用户缓冲区和磁盘之间传输。当启用 KAIO 并检测到 Linux 内核版本为 2.6.x 时,直接 I/O 将被开启。

当使用文件系统缓存策略(用于 cooked 文件的缺省策略)时,I/O 操作是以缓冲的方式执行的。虽然当缓存命中率较高时,这种缓存策略极为有效,但缓存策略有一定的开销,因为它需要额外地将缓冲区从磁盘复制到文件缓存(读的情况下),或者将缓冲区从文件缓存复制到磁盘(写的情况下)。由于缓冲区已经被缓存在 IDS 缓冲池层,因此,当文件系统缓存命中率较低,并且要执行很多 I/O 操作时,这种双重缓存是不必要的。

论坛徽章:
0
2 [报告]
发表于 2009-04-29 13:27 |只看该作者

回复 #1 MicroHard 的帖子

好文章。既然KAIO支持RAW和DIO,DIO和RAW相比是否需要等待I/O执行返回?RAW真象之前有位大侠说,将来会被淘汰吗?

[ 本帖最后由 3sane 于 2009-4-29 13:41 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-04-29 23:48 |只看该作者
RAW会不会被淘汰我不知道,至少现在还没有IO性能上超过RAW的文件系统。DIO也只是接近RAW的性能而已。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP