SCSI代码分析(0)SCSI层框架
SCSI代码分析(1)SCSI HOST的管理
SCSI代码分析(2)SCSI设备的管理1
SCSI代码分析(3)SCSI设备的管理2
SCSI代码分析(4)SCSI层IO下发和完成
SCSI代码分析(5)SCSI驱动编程模式
SCSI代码分析(6)错误处理
SCSI代码分析(7)错误处理(续)
SCSI即Small Computer System Interface,是一种存储的传输/控制协议。SCSI不是单个协议,而是一组协议,包括SAM-5/SPC/SBC等。这里跳过对协议的介绍,当涉及到时再介绍。
1. SCSI层框架
内核SCSI层(主要代码在drivers/scsi/目录下)负责对接BLOCK层,将上层的IO转化为SCSI命令,完成IO下发和完成;负责SCSI设备的管理;负责HBA的管理;负责错误的处理与恢复;负责与下层的对接等。
其中:
- SCSI Upper Layer:对不同类型设备的扫描(包括disk/tape/CDROM等);
- SCSI Middle Layer:负责IO下发和完成,设备的管理,以及错误处理等;
- SCSI Low Level Layer:不同的SCSI驱动;
HBA:Host Bus Adapter主机适配器,一般指控制器,如SAS控制器,SATA控制器
2. HBA与硬盘之间的连接
HBA与硬盘之间有两种连接:直接连接和通过expander扩展连接。直接连接是硬盘直接与HBA相连,没有中间介质,一般HBA可外接的接口有限,因此能够连接的硬盘有限;expander扩展连接时HBA与硬盘之间通过expander扩展连接,有些可以多级扩展,这样大大增加了外接硬盘的数量。
相比直接连接,expander扩展连接的设备拓扑相对复杂,因此需要软件能够识别负责的设备拓扑。目前SCSI层不包含对复杂设备拓扑的识别,一般交给底层驱动来做。如libsas负责识别设备拓扑。
后续章节准备从以下几个方面对SCSI层代码做介绍:
- SCSI HOST的识别和管理
- SCSI设备的识别和管理
- SCSI层IO下发和完成
- SCSI命令的执行
- SCSI错误处理
- SCSI驱动编程模式