tiamo
VIP专家组
VIP专家组
  • 注册日期2002-02-26
  • 最后登录2018-01-09
  • 粉丝17
  • 关注4
  • 积分50分
  • 威望142点
  • 贡献值1点
  • 好评度40点
  • 原创分2分
  • 专家分15分
  • 原创先锋奖
  • 社区居民
阅读:2874回复:12

新鲜出炉小玩意儿第三弹

楼主#
更多 发布于:2007-10-31 22:23
这次这个是个raid卡驱动
LSI MegaRaid SCSI 320-2e
这是一个硬件raid5卡.他拥有2个scsi 320M通道.实际能在每个通道上提供250MB/s的传输速度
他使用pcie 8x接口与主机链接.向下兼容4x规范.兼容开口4x接口(封住的不行.插不进去)
卡上面的处理芯片是intel的iop333好像.
卡上带有128M DDR reg内存.并带后备电池.电池能提供72个小时的持续供电能力.
卡的介绍就到这里...知道他是一个pcie接口的raid卡就行了

LSI为这个卡准备了windows平台下的scsiport的驱动
同时还有linux下的open source的驱动
但是没有datasheet也没有programming guide

这次我弄的这个是windows平台下的storport的驱动
本来是准备开发一个mac osx下面的驱动的..
但是mac下面的调试环境太麻烦.kernel的调试器竟然是这开中断的环境下运行的
彻底无语.更底层的调试器要求使用com口.可我的电脑没有com口.
所以先得要给osx提供1394的kernel debugger支持才行
好在osx的内核是开源的.到也是件非常容易的事情..

这次这个小玩意儿大家也看看就好.
虽然微软反复的强调这个storport能带来多大多大的效率提升
但是在我现在的配置下面测试差距并不明显
因为我现在是4个1万5千转的scsi硬盘做的raid5
读取速度600M写入速度400M左右.
这个速度以及超过了硬盘的读写上限了.当然这个速度是在缓存的帮助下达到的
所以即使换了storport也并没有太明显的速度提升.毕竟瓶颈已经不在windows这边了

storport跟scsiport比起来就是有几个部分的变化
1.把原来的startio处理分成了两部分.把一些可以在非同步的情况下执行的代码提到了一个新的函数里面.而原来的startio里面只是处理一些必须要这同步的情况下执行的代码
2.将原来的同步模型做了更细.并把部分同步的功能交给了miniport来处理
3.放开了许多的硬性限制.比如放开了限制到一个adapter上的srb数目限制.不过这个有些无聊.raid卡嘛.又不是scsi卡.硬件的限制还是基于adapter的.而不是基于每个device的.就好比我手头这个卡.最多能同时运行126个srb.scsiport的253个数目限制够了已经.这个数目限制倒是对别的卡可能有好处.这个下面再讨论
4.为miniport提供了queue管理函数.miniport可以自己控制queue

这个东西其实很无聊的.又没有datasheet.也就是做个逆向然后做个翻译.其实有datasheet也会很无聊.无外乎就是照着datasheet读读寄存器写写寄存器.
所以我也不在这里多说什么了.都在代码里面

第一次为一个硬件写驱动.感触最大的就是做硬件也需要跟软件结合
要是硬件能为软件设计一下.驱动这边能省下不少的事情

举个例子.
我的这个raid卡.当驱动把一个srb提交给硬件的时候需要设置一个字节大小的数据来唯一的标识这个srb.
当硬件完成这个srb的时候他返回给驱动这个srb的标记
问题来了..驱动需要为每个srb生成不同的这一个字节大小的数据.生成的过程这startio里面
而硬件完成的时候驱动需要根据这个一个字节大小的数据找到那个对应的srb.这个过程在interrupt里面
这里首先需要的是同步.startio必须要获取interrupt的spin lock.然后驱动要用某种方式保证每个srb的那一个字节数据是唯一的.
如果换一种方式实现...硬件需要的不是一个字节.而是4个字节.那么我们就可以直接把srb的地址作为数据传递给硬件.这样既省掉一个生成过程又省掉一个同步.一举两得...
当然这样直接把硬件返回的数据作为一个指针使用是非常危险的.但是有办法解决的.比如这直接使用这个指针之前做一下signature一类的检查.毕竟这样做以后换来的别的东西我觉得还是值得的.

这个小玩意儿请小心使用..毕竟是我手工打造的东西.没有datasheet没有programming guide
逆向出来的东西.我自己都不是很放心
再说这东西也并不比LSI的驱动好什么
我阉割掉了很多LSI里面用的代码..主要是跟ring3部分交流用的代码
也就是说这个东西不支持LSI的那些应用程序.你不能在windows下调整你的raid配置.
所以,...windows平台就老老实实用LSI的驱动吧
2k,xp,2003的驱动都是通过windows签名的.而且还提供64位版本的
而vista就直接在安装盘里面就带得有这家伙的驱动...

源代码放上来
一样的..vs2008+wdk 6001编译
附件名称/大小 下载次数 最后更新
source.rar (1464KB)  172 2007-10-31 22:23
游客

返回顶部