计算机在职研究生论文:SCSI冗余路径软件的研究与实现(2)

本站 中国在职研究生网/2010-04-04

4.2SCSI冗余路径在WindowsNT的内部表示在WindowsNT中,每一个物理磁盘都被赋予一个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工作运行于主机中,若希望其运行于WindowsNT之外的其他操作系统,需进行移植。另外,SPM实现逻辑单元屏蔽功能由各主机独立进行,不能保证各主机设置exclude属性的一致性,理想的解决方案是将逻辑单元分配信息集中治理和设定,或通过存储系统的非凡机制进行设置和仲裁,以确保逻辑单元不会由多个主机同时访问。

参考文献[1](美)ArtBaker著,科欣翻译组译,WindowsNT设备驱动程序设计指南,机械工业出版社,1997.12


相关话题/