SCSI冗余路径软件的研究与实现
4.2 SCSI冗余路径在Windows NT的内部表示
在Windows NT中,每一个物理磁盘都被赋予一个SCSI地址,用(c,b,t,d)表示,c(channel)表示SCSI卡的编号,b(bus)表示SCSI卡上的通道编号(一般只有一个通道,b总为0),t(target)表示目标地址,d(disk)表示LUN号。磁盘驱动程序为这个磁盘创建一个设备“/Device/Harddisk(x)/Partition0”,x为该磁盘的唯一编号。若该磁盘上存在分区,则为每一个分区创建一个设备“/Device/Harddisk(x)/Partition(y)”,y为分区的编号。
当存在冗余路径时,由于每一个SCSI卡都连接到物理磁盘上,因此物理磁盘具有多个SCSI地址。对应于这个磁盘,系统内部也创建了多个“/Device/Harddisk(x)/Partition0”设备;对应于这个磁盘的每一个分区,也存在着多个多个“/Device/Harddisk(x)/Partition(y)”设备(所有设备的y(即分区号)相同。
为保证该物理磁盘对于上层只存在唯一的一个映象,对于某个磁盘的多个“/Device/Harddisk(x)/Partition0”, SPM驱动程序只允许一个设备,一般选取磁盘号最小的这个设备;同样,对于某个分区的多个“/Device/Harddisk(x)/Partition(y)”设备,SPM驱动程序也只允许一个设备。
4.3 故障路径切换
SPM驱动程序启动后,将挂接(Attach)原始磁盘设备“/Device/Harddisk(x)/Partition0”和分区设备“/Device/Harddisk(x)/Partition(y)”,对磁盘设备和分区设备的操作,NT系统构造一个IRP包,先调用SPM驱动程序,再由SPM将该操作转发给下层磁盘驱动程序。SPM将拒绝对冗余的磁盘设备和分区设备的操作,不进行转发。
SPM管理各个存储路径,决定采用哪个存储路径执行操作。正常情况下,SPM使用主路径执行操作,将IRP转发主路径对应的设备;如果主路径已经失效,SPM在备用路径中选择一条路径,将IRP转发至该路径对应的设备。
在转发IRP到下层磁盘驱动程序之前,SPM先设置IRP的完成例程(IoSetCompletionRoutine)。在IRP完成后,NT系统将调用这个例程。如果这个IRP正常完成,表示路径正确,SPM即完成对这个IRP的处理。如果这个IRP的操作未正常执行,表示选取的路径发生错误, SPM选取另外一个状态正常的路径,将这个IRP转发到该路径对应的设备重试这个IRP。若操作执行成功,则正常返回。如果所有的路径都不能成功地执行操作,SPM可对当前操作使用全部路径进行重试,直到达到规定的重试次数而超时返回,以防止应用程序无限等待而导致系统挂起。
为及时地更新各路径的状态,SPM创建一个系统线程,定时检查各个路径;另外,IRP的重试不能在IoCompletion例程中完成,SPM创建另一个系统线程执行重试操作。
因此,在I/O路径发生故障时,正在该路径执行的IRP在返回后,将由SPM转发至其他正确路径上;随后的IRP将由SPM直接转发到其他路径。从而实现了故障路径切换的目的。
4.4 负载均衡
对于负载均衡方式,SPM可采用不同的算法。最简单的算法是轮流顺序分配每个IRP到所有状态正确的存储路径。这种方法适用于以随机存取为主的应用场合,或者系统的存储瓶颈在于Hub和Switch的情况。对于以连续存取为主的场合,这种方法将把连续的IRP分配到不同的HBA上,分别启动独立的DMA操作来完成,降低系统的效率。改进的方法是将整个磁盘划分为若干个连续区域,每个区域对应于一条路径。转发IRP时,根据IRP操作的位置,确定其属于某一区域,选取该区域对应的路径。因此可保证对该区域内连续的数据读写请求总是分配到同一路径上。
为增加软件的灵活性,可提供参数供用户设置,根据实际环境决定采用何种方式达到负载均衡。
4.5 逻辑单元屏蔽
对于每一个物理磁盘,SPM为其保留一个排斥(exclude)属性。仅当exclude为0时,该磁盘的IRP操作才会被转发到下层驱动程序执行;当exclude属性为1时,该磁盘的IRP操作被直接返回,不会被执行。因此,对于分配给该主机的磁盘,可利用SPM软件设置其exclude属性为0;对于分配给其他主机的磁盘设置其exclude属性为1。
5.结论
SCSI冗余路径模块实现了负载均衡,故障路径切换,逻辑单元屏蔽的功能,提高计算机系统在存储方面的存取带宽,避免了存储体系中存在的单点故障,在多主机共享存储系统的环境中为存储空间提供了保护手段。
由于SPM工作运行于主机中,若希望其运行于Windows NT之外的其他操作系统,需进行移植。另外,SPM实现逻辑单元屏蔽功能由各主机独立进行,不能保证各主机设置exclude属性的一致性,理想的解决方案是将逻辑单元分配信息集中管理和设定,或通过存储系统的特殊机制进行设置和仲裁,以确保逻辑单元不会由多个主机同时访问。
参考文献
[1](美)Art Baker著,科欣翻译组译,Windows NT 设备驱动程序设计指南,机械工业出版社,1997.12
Tags:
作者:佚名评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论