免费注册 查看新帖 |

Chinaunix

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

[技术动态] 关于AIO的一个疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-10-24 12:18 |只看该作者 |倒序浏览
纯理论讨论,AIO的效率高在哪个部分,以下理解不正确的地方请指出:
IO处理分为2个部分,IO请求+IO处理(IO处理又分为磁盘拷贝数据+内核用户空间拷贝),  AIO指应用程序发IO请求,后续工作全部由操作系统完成,那么看下面的2种模型:
1. epoll + AIO
2. epoll + NIO
AIO的优势在哪里呢?在以上IO处理过程中,只有磁盘拷贝不占用CPU,但是在epoll+NIO模型中,epoll返回可读时,fd的buffer应该是已经有数据存在了,实际上也没有浪费CPU资源;
感觉2种模型仅仅是数据拷贝一个是内核在做,一个是应用程序在做,但是都占用CPU,这样说来AIO没什么优势啊。

希望说清楚了我的疑问,望指教。

论坛徽章:
0
2 [报告]
发表于 2014-10-24 13:23 |只看该作者
本帖最后由 sxcong 于 2014-10-24 13:24 编辑

没看懂

论坛徽章:
0
3 [报告]
发表于 2014-10-24 13:49 |只看该作者
  那先说一下AIO的优势在哪里吧。。。。。回复 2# sxcong


   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2014-10-24 15:02 |只看该作者
之前我了解到的信息,现在的linux内核,网络IO是没办法用AIO的,只有磁盘IO可以。
磁盘IO用同步读写很慢的,AIO绝对可以省掉各种干等的CPU时间。

论坛徽章:
0
5 [报告]
发表于 2014-10-24 15:13 |只看该作者
举个例子来看看AIO节省了哪部分性能吧:
比如读操作,假设分2部分操作,
1. 磁盘读
2. 内核用户内存拷贝

对于AIO都是交给OS来处理,但是第二步内存拷贝也是要占CPU的,即使OS来操作;
对于epoll+NIO, 磁盘运数据的时候epoll应该认为该fd未准备好,所以该步也不占用CPU;epoll返回时代表内核空间有数据了,应用程序可以read。 虽然第二步拷贝部分由应用程序完成,但是和OS完成区别在哪里呢?都是需要占用CPU的。

不知道说明白没。。。。。。

回复 4# csumck


   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2014-10-24 15:45 |只看该作者
回复 5# gqbfree


    你说的1\2两点这些CPU的占用都没办法省掉。 磁盘读写、内存拷贝都是内核和C库完成的。
    但是同步的阻塞式的IO还有另外一项CPU消耗,就是调用read\write操作是,当前进程CPU会进入忙等的状态,也就是在top时可以看到cpu在wa状态占用的CPU。 使用异步io可以把这部分CPU占用节省掉。

论坛徽章:
0
7 [报告]
发表于 2014-10-24 22:32 |只看该作者
回复 6# csumck
我指的是非阻塞式IO(NIO),  如果是epoll+NIO, 应该不会忙等。 epoll返回代表该fd数据已经准备好,即应用程序可以直接读取。
所以我就不清楚AIO相比较NIO,CPU消耗在哪里节省了?

   

论坛徽章:
0
8 [报告]
发表于 2014-10-24 22:38 |只看该作者
回复 6# csumck
还有,我觉得磁盘搬运数据时不需要CPU参与(磁盘控制器貌似),单纯比较AIO和同步IO(阻塞/非阻塞)时,这部分消耗应该是AIO的优势;
但是epoll+NIO时,磁盘搬运数据时fd应该是准备数据阶段,不会返回可读,所以epoll+NIO这方面也不存在消耗。
按照这样的逻辑,epoll+NIO和epoll+AIO的消耗貌似相同啊。


   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2014-10-25 08:06 |只看该作者
gqbfree 发表于 2014-10-24 22:32
回复 6# csumck
我指的是非阻塞式IO(NIO),  如果是epoll+NIO, 应该不会忙等。 epoll返回代表该fd数据已 ...


会忙等,数据从内核拷贝到用户空间的这段时间里,调用者都会忙等,你会发现IO很重的应用在wa状态消耗的cpu很多。

论坛徽章:
0
10 [报告]
发表于 2014-10-25 13:55 |只看该作者
回复 9# csumck
但是对于AIO,内核空间拷贝到用户空间,虽然是由OS完成,但是本质上也是需要消耗CPU。     所以我没理解两者有什么区别。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP