免费注册 查看新帖 |

Chinaunix

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

文件I/O的疑惑? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-29 17:11 |只看该作者 |倒序浏览
直接io、同步io以及异步io的区别在哪里?
直接io,就是直接跳过page cahe这一层,从用户态直接到磁盘吗?
同步io,就是将用户态的数据写入到address_space,然后马上同步到磁盘?
异步io,就是将用户态的数据写入到address_space,然后让pdflush线程将这些page写入磁盘?

望指点指点

论坛徽章:
0
2 [报告]
发表于 2011-08-29 20:13 |只看该作者
本帖最后由 omycle 于 2011-08-29 20:14 编辑

回复 1# chengmao2010


   
直接io、同步io以及异步io的区别在哪里?
直接io,就是直接跳过page cahe这一层,从用户态直接到磁盘吗?
direct_io,会直接跳过page cache,但不会从用户态直接到磁盘。最少要经过驱动,
同步io,就是将用户态的数据写入到address_space,然后马上同步到磁盘?
这个,我在Linux中,还没有看到过。你说的是裸奔了吧。
异步io,就是将用户态的数据写入到address_space,然后让pdflush线程将这些page写入磁盘?
恩。对。准确来说,是写到page cache里。然后pdflush异步写入到磁盘。

论坛徽章:
0
3 [报告]
发表于 2011-08-29 20:36 |只看该作者
本帖最后由 chengmao2010 于 2011-08-30 16:34 编辑

回复 2# omycle


谢谢,谢谢!
    那为了保证写文件时数据不会丢失,要求马上写到磁盘才能返回,是不是就用直接I/O呢?
    另外lazy_io是什么意思?在什么场合用到啊?

论坛徽章:
0
4 [报告]
发表于 2011-08-30 21:18 |只看该作者
回复 3# chengmao2010


    直接IO只是不用page cache 而已,它是为了方便某些公司使用专用的告诉缓存机制,比如ULK3上列举的高性能数据库服务器。

其他的,我还不清楚。对于lazy_io,貌似是IO调度算法的一个策略吧。

论坛徽章:
0
5 [报告]
发表于 2011-08-31 08:37 |只看该作者
回复 3# chengmao2010

可以显式使用flush系统调用刷入。但是需要注意的是,这个系统调用只能将脏数据输入磁盘的缓存,如果此时掉电,亦可能造成数据丢失。
其他的方法可以在open标志位里标识SYNC

论坛徽章:
0
6 [报告]
发表于 2011-08-31 09:07 |只看该作者
回复 4# omycle


    谢谢!直接i/o一般确实应用程序会用自己设计的缓存机制,而不去用page cache。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP