solaris中fibre channel protocol 驱动的问题以及调试

来源:互联网 发布:网络教育大学生认证 编辑:程序博客网 时间:2024/06/07 00:24

Solaris中的光纤通道驱动结构很复杂,对于fc设备而言,所有的target都被抽象为一个光纤的HBA,fcp/fctl/fp/scsi_vhci等上层伪驱动来封装。

 

Solaris的fp性能非常好,基本可以达到线速。但是现在发现,在使用一般RAID的时候没有任何问题。但是使用XYRATEX的SBOD时,系统插入光纤盘也非常正常,但一旦插入SATA盘就会出现无法读取任何磁盘信息的问题,当然也没有办法操作读写。

 

这个问题比较严重,开始我认为是Solaris  qlc驱动的问题,因为加载qlogic的 qla驱动,就不在存在这个问题。所以可以用qla作为一个权宜的方法。单问题在于,qla不支持MPIO(或许是配置有误,按qlogic的官方说法,应该是支持的),所有的hba的信息都无法通过fcinfo的取得,性能也存在问题。所以这个问题一定得解决。

 

后来我发现,这可能并非qlc驱动的问题。因为disk实际上是加载到fp驱动设备树下,而qla却加载到sd设备树下,不是一条路径。所以有可能是fcp/fp的问题。

 

经过焦头烂额的一周的调试,终于发现确实是fcp的问题,由于此问题涉及fp协议,所以还参考了t11的fcp3r04文档(Fibre Channel Protocol for SCSI, Third Version),值得一提的是t11比较恶心,下载文档非得是他的会员才行。不然不给下。

 

这个问题实际上是fcp中在 report lun时有一个任务属性标记填错导致的,但是为什么FC磁盘不错误而SATA错误可能推测与TRAY的FC-SATA/SAS的emulex的桥片有关,具体原因不明。

 

现在,经过测试,性能如下:

         SATA FC
write   76.6 109.5
read     91.8 85.9

单位为MB/s,性能非常好。

 

经过调试,得到经验如下:

1.一定要抓住问题实质,如,调试中我开始认为驱动错误检查太严格导致report lun包不能上报,实际上不是,包本身就是错误的,应该检查发方向的设置,而非收方向的上报。

2.dtrace是个好工具,(如何在boot时执行脚本Dtrace -AFs your_script,After booting type: dtrace -a > log)。

3.一定要熟悉协议,t10/t11组织的各种协议需要找时间好好看看。