原创 Linux块设备驱动设计需要注意的一个问题

2009-2-2 13:18 4404 6 10 分类: 软件与OS

       2008年底我所在的团队设计和实现了一个块设备驱动,简单正确性测试与稳定性测试都能顺利通过,但是在高并发正确性测试过程中,却遇到了一个非常令人费解的问题:在高并发运行一段时间之后,出现了正确性问题,数据diff出错!


       遇到这样的问题,我首先想到了驱动的实现出了问题,因此,对驱动中的关键模块进行了大量的code review,并且局部算法进行了重新编写以及采用单元测试用例进行单元测试。这样的分析、测试持续进行了两个星期,可以说是毫无进展。由于是正确性问题,所以,当正确性出现问题时,kernel的日志中没有提示任何信息,根本就无法跟踪故障的现场,无法知道到底哪个地方出现了问题。在这样的情况下,我甚至怀疑Linux系统中的某些模块是否出了问题,在这样的猜疑之下,用相同的用例对其它的模块进行了测试,测试结果推翻了我的猜想。


       在过年前的一个礼拜,可恶的BUG依然缠绕着我,到最后我甚至将整个系统用另一种思路重新写了一遍,问题依然存在,这就说明根本就不是实现的问题。后来与一个同事争论一个问题:Linux块设备层是否可以保证对同一个扇区的读写请求次序?我的观点是可以,他持有相反的意见。在争论无果的情况下,我决定由我的驱动保证对同一扇区的读写请求次序,假设Linux块设备层不能保证对同一扇区的读写请求次序。在这样的想法驱动下,我做了测试用例。元月29日下班前测试用例实现完毕,利用春节假期采用新的用例对系统进行测试


       春节的测试是我抱有希望的测试,在折腾了三个星期的分析、测试过程中,我实在想不出系统中还存在何种问题?初七上班之后终于有了牛年第一个好消息,测试顺利通过了,这就说明正确性问题的根源在于“同一扇区的读写请求乱序了”。块设备层根本无法保证同一扇区的读写请求顺序,我以前的想法与实际偏离了,这也是导致问题的根本。


       为什么块设备层无法保证同一扇区的读写请求次序呢?这不是块设备层应该所承担的责任吗?仔细想想,这种读写次序的保证一方面可以由文件系统实现;另一方面可以由块设备层实现。如果由块设备层来实现,其处于文件系统的下方,那么实现复杂度相对较高;如果由文件系统来保证,由于处于系统的最顶层,实现复杂度相对较低。Linux的发展思路是这样的责任由文件系统来承担,块设备层无需提供相应的机制保证读写请求的次序,这样块设备层可以对请求做相应的优化,无需考虑其他正确性因素。现在想想Linux这样的处理是合情合理的。


       这个BUG的解决过程可以说是艰辛的,这个BUG纠正了我对块设备层的一个不正确假设。在此,我也提醒大家在块设备设计过程中应该注意这个问题,IBMdm-cache驱动同样忽略了这个问题。

文章评论4条评论)

登录后参与讨论

用户377235 2012-1-29 15:46

你好!请问上层的应用应该如何保证对同一扇区的读写请求的提交顺序?

用户377235 2012-1-29 15:45

你好,请问上层的应用应该如何保证同一扇区的读写请求的提交顺序?

用户411565 2009-6-18 10:37

这句话的意思是说:linux块设备层无法保证对同一扇区的读写请求的提交顺序,也就是说块设备层根本不关心请求之间的关系,这种关系需要更加上层的应用去保证,例如文件系统。

用户193005 2009-6-17 11:51

"Linux块设备层是否可以保证对同一个扇区的读写请求次序" tiloog大侠能否再详细讲下这个是什么意思?
相关推荐阅读
用户411565 2012-12-18 12:58
我的存储之道博客
大家好,最近一直在做存储方面的工作,所以我在51CTO上专门开辟了一个空间讨论存储相关的问题,喜欢存储的朋友可以可以访问我的存储博客: 存储之道 (http://alanwu.blog.51cto...
用户411565 2012-04-06 21:39
SAS Cable可以有多长?
SAS接口是高端硬盘的主流接口,是存储系统的理想选择。我们知道高速信号的传输距离和传输线相关的,那么SAS作为外部通信接口,其Cable线具体可以有多长呢? 我在网上找到上图所示的眼图测...
用户411565 2012-04-06 21:38
对TRIM SCSI命令的一些分析
前一段时间做了一些对SSD方面进行优化的工作,SSD最大的问题在于长时间使用之后,IO性能会急剧下降。其主要问题在于为了防止“写放大”问题的产生,SSD的firmware采用了类似于log方式的算...
用户411565 2012-04-06 21:35
惊叹!我们的跨洋网络
  每次地质自然灾害的时候,总会伴随着网络的问题,这是由于我们的越洋光纤网络出了故障,受到自然力的破坏而导致断裂。越洋光纤,听起来的确是件非常不可思议的事情,工程量非常的巨大,但正是如此伟大的...
用户411565 2012-04-06 21:33
科学仪器网络模型
科学仪器概述     科学仪器发展趋势 科学是从测量开始的,科学仪器是信息技术的源头,是信息产业的重要组成部分,是现代科学与工业的基石。科学仪器产业的发展关系到国家科学研究实力、生...
用户411565 2012-04-06 21:16
谈谈RAID产品与技术
说起RAID,学计算机的同学马上会说RAID技术简单啊,就是将数据条带化,然后计算一些冗余数据,一并写入磁盘。通过RAID技术一方面提高系统的IO性能;另一方面提高系统的可靠性。单纯从RAID的原...
我要评论
4
6
关闭 站长推荐上一条 /2 下一条