免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: gqbfree
打印 上一主题 下一主题

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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
11 [报告]
发表于 2014-10-25 16:59 |只看该作者
gqbfree 发表于 2014-10-25 13:55
回复 9# csumck
但是对于AIO,内核空间拷贝到用户空间,虽然是由OS完成,但是本质上也是需要消耗CPU。    ...


拷贝消耗的CPU当然都要消耗,不会被节省。  AIO省掉的CPU时间不是拷贝的耗时,而是等待拷贝的耗时。 CPU是多核的,内核会用其他CPU核心去完成操作,而你的程序没必要在自己工作的CPU也陪着一起消耗CPU。

论坛徽章:
0
12 [报告]
发表于 2014-10-25 23:07 |只看该作者
用别的CPU去完成拷贝,不也是消耗了总性能么?  假设所有的CPU都在高速的运行中。

我觉得单从理论上讲,AIO在总的CPU处理上并没有优势,但是实际情况中,各个CPU都有可能存在空闲阶段,所以AIO优势在于:OS会根据当前的任务繁忙程度进行拷贝,合理的利用CPU资源。          (比如应用程序发起读请求后可以继续后续操作,一旦空闲OS可以进行数据拷贝,避免了NIO中你说的忙等)
我对AIO的本质了解不是很深,所以想确认一下。

回复 11# csumck


   

论坛徽章:
0
13 [报告]
发表于 2014-10-27 15:23 |只看该作者
周 一 上 班 都 在 睡 觉 吗,人 都 跑 哪 里 去 了!!!!

论坛徽章:
0
14 [报告]
发表于 2014-10-29 10:10 |只看该作者
@yulihua49   @zylthinking   @linux_c_py_php   炸出来

论坛徽章:
0
15 [报告]
发表于 2014-11-03 12:42 |只看该作者
再顶一次!

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
16 [报告]
发表于 2014-11-05 20:47 |只看该作者
本帖最后由 yulihua49 于 2014-11-05 20:52 编辑
csumck 发表于 2014-10-25 16:59
拷贝消耗的CPU当然都要消耗,不会被节省。  AIO省掉的CPU时间不是拷贝的耗时,而是等待拷贝的耗时。 CP ...

我对这个问题不是太理解。
epoll处理io事件,就已经是异步io了,那个AIO是干啥的?就是磁盘IO吗?
如果是磁盘IO,那么linux已经做的很好了,基本上已经是异步的了,没必要自己整吧?
实测写日志,LINUX比solaris快5、6倍,貌似提交即返回,就是异步的。

论坛徽章:
0
17 [报告]
发表于 2014-11-05 22:39 |只看该作者
回复 16# yulihua49
关于AIO,请参考一下网上流传比较广的一篇 http://www.ibm.com/developerworks/cn/linux/l-async/
另外, Proactor模型应该就是指使用AIO。        只不过从细节上剖析,我不明白AIO的性能在哪里提高上去的(相对于EPOLL+NIO)。   

   

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
18 [报告]
发表于 2014-11-05 23:03 |只看该作者
本帖最后由 yulihua49 于 2014-11-06 10:52 编辑
gqbfree 发表于 2014-11-05 22:39
回复 16# yulihua49
关于AIO,请参考一下网上流传比较广的一篇 http://www.ibm.com/developerworks/cn/li ...

这种AIO没什么实际意义。

A出去后,再循环等待,轮询。。。。。吃饱了撑的。。。。

真正的异步,是发射后不管,后续任务由别的线程完成。这必须通过诸如epoll之类的事件器来触发后续线程处理。

对异步操作的需求:
1.任务发射后不管,可以注册一个“完成事件”,不一定由哪个线程执行。
2.不管前述任务是否完成,可以继续发射后续任务。
3.所有任务后台并行执行,完成的先后次序无关紧要。
4.无需查询任务是否完成。可设置超时条件,届时没有“完成事件”视作异常。

AIO显然不能满足需求。

论坛徽章:
0
19
发表于 2014-11-06 23:57
回复 18# yulihua49
AIO应该就是你说的那种目的吧。      
假设AIO是你说的这种情况,能说明一下它在性能上有什么优势吗?  根据我之前的分析,没感觉比 EPOLL+NIO 有什么优势。

再参考 http://www.wzxue.com/linux-kerne ... %E5%A5%87%E8%91%A9/  这篇文章,里面提到:
“如Kernel关于AIO的文档中所说,AIO可以一次性发出大量的read/write调用并且通过通用块层的IO调度来获得更好的性能,用户程序也可以减少过多的同步负载,还可以在业务逻辑中更灵活的进行并发控制和负载均衡。
另外相对于其他实现如用户多线程后台同步,Glibc等实现也减少了线程的负载和上下文切换。”

给我的感觉是:单纯一个AIO从细节上分析并没什么性能优势,但是由OS来操作大量的AIO,会体现出优势。

   

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
20 [报告]
发表于 2014-11-07 06:17 来自手机 |只看该作者
中断控制器的中断就是AIO。中断可是现代电脑体系结构的基础。如果硬件都是AIO实现的,当然使用AIO会有最小的转换损失。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP