织梦CMS - 轻松建站从此开始!

罗索

LInux AIO相关知识

落鹤生 发布于 2012-03-19 14:06 点击:次 
昨天看到taobao的人在微博上提到Linux aio,觉得这个可以学习一下。最近做asio的应用也是异步调用很多,自己设计的队列感觉有点乱,周末看看Linux aio的代码,看看能不能得到什么灵感。
TAG:

昨天看到taobao的人在微博上提到Linux aio,觉得这个可以学习一下。最近做asio的应用也是异步调用很多,自己设计的队列感觉有点乱,周末看看Linux aio的代码,看看能不能得到什么灵感。

这里提供的测试信息比较多

Kernel Asynchronous I/O (AIO) Support for Linux

http://lse.sourceforge.net/io/aio.html

上面那个主页提到支持在“Buffered filesystem AIO” 的aio补丁可以这里找的到,淘宝的人他们搞了一个可以在pagecache上面用的aio,不知道和这个有什么分别。谁去检查一下效果怎么样。

The filesystem AIO patchset

http://www.kernel.org/pub/linux/kernel/people/suparna/aio/README

 根 据http://kernel.org/doc/ols/2003/ols2003-pages-351-366.pdf 上面给出的测试结果,这个The filesystem AIO 的实现,性能是要比同步IO要差的,这难道是内核不把这种部分代码收入内核的原因? 现在linux 内核aio只支持O_DIRECT 的直接访问的模式。

这测试应该启动很多线程然后比较总的throughput。但根据http://blog.yufeng.info/archives/tag/libaio 这 篇文章说到的,同步io因为每次只能执行一个request,所以要很多个线程才能跑满这个系统的throughput,而异步io ,可以一个线程连续或者批量提交多个aio request给系统底层。就会出现多个同步io线程才能抵得上一个异步io线程的吞吐能力的情况。好像有点道理,记得以前看到一篇好像是百度的 blog,确实说的多个线程的io总的吞吐量比当线程要好,估计就是这样原因吧,可能他们用的就是同步io? 

下面两个是设计文档。

Asynchronous I/O Support in Linux 2.5

http://kernel.org/doc/ols/2003/ols2003-pages-351-366.pdf

Design Notes on Asynchronous I/O (aio) for Linux

http://lse.sourceforge.net/io/aionotes.txt

根据lighttpd  的测试,aio 和sendfile的模式,cpu利用率可以下降很多啊。

http://blog.lighttpd.net/articles/2006/11/09/async-io-on-linux

另外这篇文章 http://cnodejs.org/topic/4f16442ccae1f4aa2700113b   提到了,一个在用户态用线程池模拟的aio的实现  libaio   http://software.schmorp.de/pkg/libeio.html   

不知道和 同样是用户态+ 线程池实现的Posix  AIO有什么区别,可以去看一下代码。
(widebright)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201203/15844.html]
本文出处:百度博客 作者:widebright 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容