免费注册 查看新帖 |

Chinaunix

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

[内核模块] 关于linux Direct IO的几个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-05 09:21 |只看该作者 |倒序浏览

hello, 大家好

我最近在看linux direct IO 的实现,现有几个问题不大明白。望各位好心人士能帮忙解惑,本人感激不尽。

对于异步直接IO读 (asynchronous direct read),在提交相应的BIO前,BIO中的page被设为脏(函数dio_bio_submit)。当该操作完成后,BIO回调函数会检查其page的脏标记被清除(如被写回磁盘),如果被清除,那么再次将该page标记为脏。令我不解的是,刚从磁盘读入的数据应该是干净的才对,为何此处要标记为脏呢?用意是什么?

此外,我也想问下在direct IO中,不同进程访问同一个文件引发的冲突是如何处理的,比如读写冲突,写写冲突?是和page cache一样通过page lock和writeback标志来避免的么?但在direct IO处理流程中我并没有找到。

论坛徽章:
0
2 [报告]
发表于 2013-10-05 11:56 |只看该作者
貌似page写时是page lock保证,写完标脏后,就释放page lock了,一致性是由具体的bh lock保证。

论坛徽章:
0
3 [报告]
发表于 2013-10-05 12:45 |只看该作者
鬼鬼一哈 发表于 2013-10-05 11:56
貌似page写时是page lock保证,写完标脏后,就释放page lock了,一致性是由具体的bh lock保证。


在直接IO中,不同进程提交的BIO中所包含的page应该是在他们各自的地址空间吧(函数get_user_pages)?如果是的话,那么这些page都是不同的,page lock 和 bh lock 起不了作用吧?

论坛徽章:
0
4 [报告]
发表于 2013-10-05 18:10 |只看该作者
不同进程提交的BIO,首先不是分配page,而是查找对应的page是否有映射,有的话,可能会直接使用,没有才会分配一个新的page

论坛徽章:
0
5 [报告]
发表于 2013-10-07 15:52 |只看该作者
回复 4# 鬼鬼一哈


    能麻烦告知下相应的函数是哪个么
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP