免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: blake326

[文件系统] 文件写入过程 [复制链接]

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
发表于 2012-12-03 17:47 |显示全部楼层
blake326 发表于 2012-12-03 17:34
回复 29# embeddedlwp


1.你的意思是不是说即使是read page,page在磁盘上连续,仍然会被搞成buffer page,只是用一个bio罢了?
2.仍然没搞明白为什么write page,并且page的各个block在磁盘上连续要多个bio.

论坛徽章:
0
发表于 2012-12-04 09:29 |显示全部楼层
本帖最后由 blake326 于 2012-12-04 09:30 编辑

回复 31# embeddedlwp


    假设block=1024B

    读文件的时候,比如读4个page,如果这四个page都是连续的话,那么产生一个bio。bi_io_vec数量是4个,每个biiovec表示一个page,大小4096B

   写文件的时候,写4个page,每个page一次处理,如果page不再内存,那么分配一个page,然后用为page分配4个buffer head,每个bufferhead 产生一个bio,大小1024B。所以写4个page共产生了16个bio,每个bio有一个bi_io_vec,大小是1024B。但是,有可能这16个bio会被合并到同一个request中。


write 用buffer head原因:
   为什么写文件直接用buffer head来读取,这里看到写page顶多一次读取一个page(而读取一次可能读取多个page),可能这也是写文件直接用bufferhead的一个原因吧。

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
发表于 2012-12-04 10:00 |显示全部楼层
回复 32# blake326



可否感兴趣把你的
todo:
1. 忽略了cache相关。
2. page各种状态转换
也总结总结,然后我们讨论讨论,呵呵!


   

论坛徽章:
0
发表于 2012-12-04 11:53 |显示全部楼层
忘了差不多了,要重看。即把的比了几天寄存器了,但疼垃圾的事。不想干外包了。fuck,有兄弟好工作推荐马?

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
发表于 2012-12-04 13:10 |显示全部楼层
回复 34# blake326


貌似最近360在招人,有内核方面的,你网上搜搜看。


   

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
发表于 2012-12-04 21:05 |显示全部楼层
Screenshot at 2012-12-04 21:03:12.png 回复 34# blake326


wu fengguang slides中这个图,b_io链表上什么时候会有non-expired的呢?


   

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
发表于 2012-12-05 11:18 |显示全部楼层
本帖最后由 embeddedlwp 于 2012-12-05 11:25 编辑

还有,你有没有发现一个问题,如果调用wb_check_background_flush发现超过了background flush threshold,那么会wirteback,但是这里是per-bdi的writeback,并没有writeback其他bdi,如果并不是当前这个bdi造成大量diry pages,并且当前bdi对应的pages都是频繁访问,那么错误的将本bdi进行writeback,不但降低了performance,还没解决问题。

看到community里曾经一个人的patch
writeback: add dirty_background_centisecs per bdi variable
貌似经过讨论author想设置一个类似bdi->dirty_background_bytes的东西,如果真的有这样一个东西,可以把bdi_thresh设置过来,这样在wb_check_background_flush里加个判断,如果不是本bdi造成的over threshold,那么就不要乱flush了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP