注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

LInux AIO相关知识  

2012-03-02 18:00:54|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

       昨天看到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有什么区别,可以去看一下代码。
  评论这张
 
阅读(682)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017