免费注册 查看新帖 |

Chinaunix

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

块设备驱动截获的写操作 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-07 14:58 |只看该作者 |倒序浏览
截获的块设备驱动有时1秒内对同一个块有多次写操作,我只保留了最后一次。这样会发生错误。
难道每次对同一个块的写的不一定是该块的所有数据,可能只是一部分数据吗?

新问题:
同一秒内,3个相同起始地址的bio,都是1024字节,数据不同,会被I/O调度程序合并为该地址一个更长的3072字节的写操作吗?

[ 本帖最后由 magics1020 于 2009-7-8 16:47 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-07-07 15:20 |只看该作者

回复 #1 magics1020 的帖子

你的错误时什么呢?能详细点吗?

论坛徽章:
5
3 [报告]
发表于 2009-07-07 15:25 |只看该作者

回复 #1 magics1020 的帖子

应该是以block为单位.

论坛徽章:
0
4 [报告]
发表于 2009-07-07 15:42 |只看该作者

回复 #2 xiegang112 的帖子

捕获写操作的盘是A,我在一个跟A有一样的数据的盘B(即经过数据同步后的盘)上,重做了在A上捕获的写操作的数据按偏移量写入B,如果全部重写,没有问题。如果只写每块最后一次写操作,就会破坏盘B的文件系统

论坛徽章:
0
5 [报告]
发表于 2009-07-07 15:47 |只看该作者
原帖由 yidou 于 2009-7-7 15:25 发表
应该是以block为单位.


我捕获的是每次的bio

论坛徽章:
0
6 [报告]
发表于 2009-07-07 16:01 |只看该作者

回复 #4 magics1020 的帖子

你怎么保证前面的写和最后一次写,使用的cache是相同的呢?我觉得,如果如果都是同一块cache,应该不会有问题。如果cache不同,你前面的写且不是丢失了?

论坛徽章:
0
7 [报告]
发表于 2009-07-07 16:10 |只看该作者
原帖由 xiegang112 于 2009-7-7 16:01 发表
你怎么保证前面的写和最后一次写,使用的cache是相同的呢?我觉得,如果如果都是同一块cache,应该不会有问题。如果cache不同,你前面的写且不是丢失了?


每次写的数据我也记录了的。重写时,使用的是记录的之前写的数据

我刚才查看了一下记录的数据,发现有的同1秒内对同一个起始地址处写了多次,每次都写1024字节数据,这每一次的1024都是不同的。我就是只取这最后一次,就会出错

论坛徽章:
0
8 [报告]
发表于 2009-07-07 16:23 |只看该作者

回复 #7 magics1020 的帖子

我有点怀疑是缓存的影响。我觉得你可以这样,你固定写入一定数据(可以对某些块重复写不同数据)。用两张一样的盘分别做一次这样的测试,第一次不要用你的驱动,测试后得到数据盘1。这张盘作为验证的基准。第二次,使用你的驱动来测试,获得数据盘2. 然后比较两张盘的数据。如果是一样,则说明是缓存问题。

论坛徽章:
0
9 [报告]
发表于 2009-07-08 16:48 |只看该作者
同一秒内,3个相同起始地址的bio,都是1024字节,数据不同,会被I/O调度程序合并为该地址一个更长的3072字节的写操作吗?

论坛徽章:
0
10 [报告]
发表于 2009-07-09 16:08 |只看该作者

回复 #9 magics1020 的帖子

如果bio的起始sector相同,字节数相同,说明是对同一数据区的三次i/o操作吧。在一次i/o操作完成之前,应该不会发送第二次i/o呀。而且,调度算法怎么会把三个相同的i/o合并呢?除非这三个bio的io_vec是首尾连接的。你能把你具体做的什么,以及观察到的现象描述下吗?
谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP