用普通scsi磁盘代替存储光纤网络中光纤磁盘的方法

文档序号:6363624阅读:217来源:国知局
专利名称:用普通scsi磁盘代替存储光纤网络中光纤磁盘的方法
技术领域
用普通SCSI磁盘代替存储区域网络中光纤磁盘的方法属于存储区域网络领域,尤其涉及其中的存储技术领域。
传统存储区域网络(Storage Area Network,简称SAN)的架构系统需要使用光纤磁盘而且只能架构在光纤网络上,因此整个系统存在价格昂贵、灵活性差、存储容量不易扩充等不足。因此,我们在这样的背景和实际需求下,开发了利用普通SCSI磁盘代替光纤磁盘的技术。它既可以基于高速的光纤网络,也可以基于普通的以太网络,适合于不同的投资方案,以达到最优的性价比。完全利用软件模拟光纤磁盘的系统具有如下的特点灵活性完全利用软件模拟,具有很强的灵活性;架构方式多样可以架构在以太网或者光纤网络上,而且可以两套网络同时工作,具有可选择性;高性能设计的程序在核心态工作,可以很方便加入各种优化算法提高I/O性能,也可以获得很高的性能价格比。
本方法的核心是在光纤通道卡和SCSI磁盘的硬件基础上,利用软件控制网络上信息的传输,并模拟光纤磁盘的行为。程序的命令处理流程如

图1所示,分下面六个步骤1.接收模块从网络接口接收到SCSI命令,与实际的物理地址进行映射;2.接收模块将命令交给处理线程;
3.处理线程依据命令的类型(读数据或者写数据),将命令将要处理的数据存入适当的存储区;4.处理线程执行命令,完成和磁盘之间的数据传输;5.将命令处理后的状态交给完成模块;6.处理结果数据传输给网络接口,命令执行完毕。
本发明的特征在于它是一种在光纤通道的基础上利用客户端的存储节点控制主机中的存储控制软件即模拟目标器模块来控制网络上信息的传输并模拟光纤磁盘行为的一种存储控制方法,所述的模拟目标器含有下述模块SCSI命令处理模块、SCSI消息处理模块、命令/数据接收模块、命令/数据发送模块、SCSI命令队列控制模块、SCSI消息队列控制模块以及存储磁盘信息队列模块;所述的存储控制方法依次含有以下步骤(1)存储节点控制主机的接收模块,从网络接口接收SCSI命令并映射好实际的物理地址,在把命令交给模拟目标器的命令处理线程;(2)存储节点控制主机,通过命令处理线程判别SCSI命令是读命令还是写命令。若是读命令依次按照下述步骤进行(2.1)HBA的驱动接收到新的SCSI读命令,调用模拟目标器函数rx_cmnd()产生读命令,状态为new_cmnd(产生状态);(2.2)模拟目标器的命令处理线程处理该读命令,根据命令数据块(CDB)信息从内存池分配内存空间给读出的数据,并且调用SCSI中间层模块的scsi_do_request函数去执行,命令状态改为processing(命令处理状态);(2.3)SCSI中间层执行完该命令,调用模拟目标器的处理函数进行正确性检查,且将该读命令的状态改为done(处理完毕状态);(2.4)模拟目标器处理完该读命令的数据后,通知HBA的驱动该读命令执行完毕,并且将读出的数据传输给HBA的驱动,更改该读命令的状态为handed(交给底层网络状态);(2.5)HBA处理完该读命令之后,该读命令状态改为dequeue,模拟目标器的命令处理线程将回收该读命令占用的资源,该读命令结束。
若是SCSI写命令,则依次按照下面的步骤执行(2.1)HBA驱动接收到新的SCSI命令,调用模拟目标器函数rx_cmnd()产生写命令,状态为new_cmnd(产生状态);(2.2)模拟目标器的命令处理线程处理该写命令,根据CDB信息从内存池分配好内存空间给写入磁盘的数据,将命令状态改为pending(未决状态);(2.3)模拟目标器通知HBA驱动内存空间已经分配好,将该写命令状态改为xfered(数据空间准备完毕状态);(2.4)HBA的驱动将要写入的数据写入分配的内存空间,将该写命令状态改为to_process(准备处理状态);
(2.5)模拟目标器命令处理线程处理该写命令,调用SCSI中间层模块的scsi_do_request()函数执行该写命令,命令状态改为processing(命令处理状态);(2.6)SCSI中间层执行完该写命令,调用模拟目标器的处理函数进行正确性检查,将该写命令的状态改为done(处理完毕状态);(2.7)模拟目标器处理完该写命令之后,通知HBA的驱动该写命令执行完毕,正确返回,并且更改该写命令的状态为handed(交给底层网络状态);(2.8)HBA处理完该写命令之后,该写命令状态改为dequeue(删除状态),模拟目标器的命令处理线程将回收该写命令占用的资源,该写命令结束。
(3)命令处理线程执行命令,完成和磁盘之间的数据传输;(4)把命令处理后的状态交给命令/数据发送模块;(5)把处理结果数据传输给网络结构,命令执行完毕;其中,所述的命令处理线程含有SCSI命令处理模块、SCSI消息处理模块、SCSI命令队列模块、SCSI消息队列模块以及存储磁盘信息队列模块。
采用本方法可以较大程度降低光纤网络的架构成本,得到良好的性能价格比。经过应用测试,说明本方法切实可行,能够满足网络存储的性能要求,而且具有可扩展性,高兼容性等特点,非常适于推广。
本发明中采用命令和消息分治的策略,分别进行处理。由于需要模拟光纤磁盘的行为,因此需要对光纤磁盘的处理方式进行研究,对于光纤磁盘所能处理的SCSI命令都要进行处理。
处理SCSI命令的时候,SCSI命令的状态集和处理流程按照图3所示的状态转换机制进行。一般的命令需要经历五个转换状态,而写类型的命令需要经历所有八个转换状态才能完成。图中箭头上文字说明了状态转换的条件。
存储控制节点机通过HBA卡连接到SAN系统中,接收到启动器发送过来的SCSI命令和数据,转发给模拟目标器模块。模拟目标器模块和目标器方式工作下的HBA驱动之间定义一个统一的接口,该接口同时适用于基于光纤网络和IP网络的SAN实现。接口定义如下模拟目标器提供给HBA驱动的主要接口函数Target_Scsi_Cmnd*rx_cmnd(Scsi_Target_Device*,__u64,__u64,unsigned char*,int);int scsi_rx_data(Target_Scsi_Cmnd*);intscsi_target_done(Target_Scsi_Cmnd*);int rx_task_mgmt_fn(__u64,__u64);其中HBA驱动接收到新命令的时候,调用rx_cmnd函数交给模拟目标器执行,当执行和传输完毕之后HBA驱动调用scsi_target_done来通知目标模拟器,而scsi_rx_data则设计用于数据的传输。rx_task_mgmt_fn则是给消息数据留出的通道,用于处理各类消息的处理。
HBA驱动提供给模拟目标器的主要接口函数int(*detect)(struct STT*);int(*release)(struct STT*);int(*xmit_response)(struct SC*);int(*rdy_to_xfer)(struct SC*);其中模拟目标器执行完一个命令后通过xmit_response函数通知底层驱动,而rdy_to_xfer函数则是模拟目标器通知底层驱动数据缓冲区准备完毕,同步数据传输。
模拟目标器接收到SCSI命令之后,必须控制连接在目标器节点机上面的磁盘设备执行。这可以通过SCSI系统的sg接口实现,也可以直接通过SCSI系统的中间层实现。如果采用sg接口实现,由于sg编程接口是内核提供给用户空间的一个直接执行SCSI命令的接口,便于用户调试开发,但是会增加sg模块对于SCSI命令的处理,势必会影响整体的性能。因此我们采用scsi_mod的接口去实现模拟目标器,主要调用的执行SCSI命令的接口函数是scsi_do_request。
综上,程序的命令处理流程分下面六个步骤1)接收模块从网络接口接收到SCSI命令,与实际的物理地址进行映射;2)接收模块将命令交给处理线程;3)处理线程依据命令的类型(读数据或者写数据),将命令将要处理的数据存入适当的存储区;4)处理线程执行命令,完成和磁盘之间的数据传输;5)将命令处理后的状态交给完成模块;
6)处理结果数据传输给网络接口,命令执行完毕。
由于所有的读写命令都需要一定的内存空间存储数据,模拟目标器设计一个内存的存储池,存储空间的大小可以配置,工作时根据需要也可以动态的调整。新的SCSI命令需要内存的时候直接向存储池申请,命令执行完毕后直接释放资源返还给存储池。这样可以减少很多内存申请和释放带来的延时和复杂度。
因此,模拟目标器可以按照功能模块划分为SCSI命令处理模块,SCSI消息处理模块,命令/数据接收模块,命令/数据发送模块。需要维护SCSI命令队列,SCSI消息队列,维护存储磁盘信息队列,内存存储池等。由SAN系统发送过来的SCSI命令和数据都需要经过模拟目标器的处理,模拟目标器则可以根据系统时间对数据流量的大小进行监测,即给出了性能测试的接口。
程序模块设计采用SCSI命令流和SCSI消息流分别进行处理的方式。其中SCSI命令的处理又是模块中最重要的部分。程序模块中利用SCSI驱动的中间层(scsi_mod)的接口来执行命令。
SCSI命令在模拟目标器中共有8个状态,它们分别为new_cmnd,processing,pending,xferred,to_process,done,handed和dequeue。下面用图4和图5分别以读命令和写命令来介绍SCSI命令在模拟目标器中的执行的过程。
由上面的读命令和写命令的执行过程可以看出,存储系统所有的IO请求数据都经过目标器存储节点控制主机进行处理,因此在模拟目标器中增加计时的机制,则可以精确监测实际的数据带宽,可方便测试系统的性能和优化系统的负载平衡。
由于所有读写命令都需要利用模拟目标器的内存作为数据缓冲区,因此为了加快数据的处理,模拟目标器中数据传输都使用的是DMA技术。同时,模拟目标器维护了一个存储池,某个新的读或者写命令需要申请内存时直接请求存储池的内存资源,使用完毕释放后让存储池回收。由实际目标器的负载,存储池资源的大小可以动态调整。这样可以完全避免单个SCSI命令申请内存,从而导致系统效率降低。
根据上述的模型设计的软件的一个框架图如6。
根据以上的设计,我们已经开发出了一个实用的海量存储网络系统THMS(Mass StorageNetwork SystemMSNS)系统应用在清华的网格存储系统中,获得良好的性能价格比。
本发明分别基于IP协议的IP网络和基于FCP协议的光纤网络通过了测试,测试结果如下。
基于IP协议的测试结果存储网络协议采用TCP/IP(100M网)时,类似IP-SAN,典型的测试数据如图7。
由图7可以看出,存储节点的IO写性能超过了网络带宽100Mbps,读性能很接近于带宽100Mbps。写性能超过网络带宽是由于启动器的缓存性能导致的,而由于协议的开销的存在,读性能稍微比网络带宽少。能够充分说明了该方法的设计是成功的,开销几乎可以忽略不计。
基于FCP协议的测试结果在性能测试中,采用2Gbps的光纤网络,单个存储节点,存储节点带有一个含14×73GB希捷SCSI硬盘(10Krpm)的磁盘阵列,磁盘和存储节点之间采用SCSI单通道连接。服务器节点7个,为至强4CPU 700MHz,1G内存。配置见表1。测试软件采用IOZONE。测试时,磁盘阵列中的7个磁盘分别通过存储网络映射到前端的7个服务器,即每个服务器对其中的一个磁盘性能进行测试操作。测试时采用7台服务器并行测试的方式。测得通过存储节点数据流量如图8。存储节点在15G高负载的情况下数据吞吐量是148MB/s,即为1.48Gbps(网络传输中每8个数据位需要2个校验位),占光纤网络带宽的74%。由于测试设备的存储节点和磁盘阵列之间采用的是一条SCSI总线连接,数据带宽具有160MB/s的理论上限,因此实际测得的带宽已经达到SCSI总线带宽的92.5%。
表1.测试系统配置列表

本发明是构筑网络存储系统的核心模块,通过专用的存储网络,可以为前端的服务集群提供统一的存储。通过此发明,可以在网络驱动后挂接不同数量的磁盘或SCSI-RAID磁盘阵列以满足不同网络存储规模的需要,并且为容灾、无服务器的备份方式提供了可能。
本发明的软件模拟的特性具有灵活性好的优点,可以在不同的底层通信网络上应用此发明。对于实际的应用来说,可以通过以太网架设相对价格较低的网络存储系统。也可以在高速但相对昂贵的光纤网上架设网络存储系统,以获得高速的存储速度。本发明已经在以上两种不同的网络上成功架设出网络存储系统。
本发明已经在由清华大学自行研究开发的千亿次并行计算机上通过测试,提供了多个主机的统一存储,并在此基础上运行了视频点播系统、三维地震数据处理系统和Oracle9i并行数据库应用等。
权利要求
1.用普通SCSI磁盘代替存储区域网络中光纤磁盘的方法,其特征在于它是一种在光纤通道的基础上利用客户端的存储节点控制主机中的存储控制软件即模拟目标器模块来控制网络上信息的传输并模拟光纤磁盘行为的一种存储控制方法,所述的模拟目标器含有下述模块SCSI命令处理模块、SCSI消息处理模块、命令/数据接收模块、命令/数据发送模块、SCSI命令队列控制模块、SCSI消息队列控制模块以及存储磁盘信息队列模块;所述的存储控制方法依次含有以下步骤(1)存储节点控制主机的接收模块,从网络接口接收SCSI命令并映射好实际的物理地址,在把命令交给模拟目标器的命令处理线程;(2)存储节点控制主机,通过命令处理线程判别SCSI命令是读命令还是写命令。若是读命令依次按照下述步骤进行(2.1)HBA的驱动接收到新的SCSI读命令,调用模拟目标器函数rx_cmnd()产生读命令,状态为new_cmnd(产生状态);(2.2)模拟目标器的命令处理线程处理该读命令,根据命令数据块(CDB)信息从内存池分配内存空间给读出的数据,并且调用SCSI中间层模块的scsi_do_request函数去执行,命令状态改为processing(命令处理状态);(2.3)SCSI中间层执行完该命令,调用模拟目标器的处理函数进行正确性检查,且将该读命令的状态改为done(处理完毕状态);(2.4)模拟目标器处理完该读命令的数据后,通知HBA的驱动该读命令执行完毕,并且将读出的数据传输给HBA的驱动,更改该读命令的状态为handed(交给底层网络状态);(2.5)HBA处理完该读命令之后,该读命令状态改为dequeue,模拟目标器的命令处理线程将回收该读命令占用的资源,该读命令结束。若是SCSI写命令,则依次按照下面的步骤执行(2.1)HBA驱动接收到新的SCSI命令,调用模拟目标器函数rx_cmnd()产生写命令,状态为new_cmnd(产生状态);(2.2)模拟目标器的命令处理线程处理该写命令,根据CDB信息从内存池分配好内存空间给写入磁盘的数据,将命令状态改为pending(未决状态);(2.3)模拟目标器通知HBA驱动内存空间已经分配好,将该写命令状态改为xfered(数据空间准备完毕状态);(2.4)HBA的驱动将要写入的数据写入分配的内存空间,将该写命令状态改为to_process(准备处理状态);(2.5)模拟目标器命令处理线程处理该写命令,调用SCSI中间层模块的scsi_do_request()函数执行该写命令,命令状态改为processing(命令处理状态);(2.6)SCSI中间层执行完该写命令,调用模拟目标器的处理函数进行正确性检查,将该写命令的状态改为done(处理完毕状态);(2.7)模拟目标器处理完该写命令之后,通知HBA的驱动该写命令执行完毕,正确返回,并且更改该写命令的状态为handed(交给底层网络状态);(2.8)HBA处理完该写命令之后,该写命令状态改为dequeue(删除状态),模拟目标器的命令处理线程将回收该写命令占用的资源,该写命令结束。(3)命令处理线程执行命令,完成和磁盘之间的数据传输;(4)把命令处理后的状态交给命令/数据发送模块;(5)把处理结果数据传输给网络结构,命令执行完毕;其中,所述的命令处理线程含有SCSI命令处理模块、SCSI消息处理模块、SCSI命令队列模块、SCSI消息队列模块以及存储磁盘信息队列模块。
全文摘要
用普通的SCSI磁盘代替存储区域网络中光纤磁盘的方法属于存储区域网络技术领域,其特征在于它是一种在光纤通道卡HBA和SCSI磁盘的基础上,利用目标器端的存储节点控制主机中存储模拟目标器模块来控制网络上信息的传输并模拟光纤磁盘行为的一种存储控制方法,所述的模拟目标器含有下述模块SCSI命令处理、SCSI消息处理、命令/数据接收、命令/数据发送、SCSI命令队列控制、SCSI消息队列控制以及存储磁盘信息队列模块。该方法具有灵活性强、架构方式多样,可以构架在以太网或光纤网络上,而且可以两套网络同时工作,具有可选择性以及具有较高性能价格比的优点。
文档编号G06F12/06GK1455334SQ0313618
公开日2003年11月12日 申请日期2003年5月19日 优先权日2003年5月19日
发明者舒继武, 郑纬民, 李必刚, 付长冬 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1