专利名称:San环境中基于网络的海量存储资源管理方法
技术领域:
SAN环境中基于网络的海量存储资源管理方法属于存储区域网络领域,尤其涉及其中的虚拟化技术领域。
背景技术:
随着信息技术的飞速发展,人们要处理的数据量不断增加,造成了对存储系统容量和性能的巨大需求,并使得传统的存储方式已经无法满足用户的需要。一般情况下,每台主机都带有自己的存储设备,这使得信息分散在各个主机上,形成信息孤岛,不利于信息整合。而网络存储可以提供共享的信息存取服务,并具有超大容量和优秀的性能,因此成为存储系统发展的趋势。存储区域网络(Storage Area Network,SAN)是一种专门的存储网络,它可以把各种存储设备连接在一起,组成统一管理的存储资源,而主机可以通过光纤或IP网络来访问这些资源。SAN系统具有良好的性能和高度的可扩展性。在这种存储体系结构中,资源的配置是不断变化的,新的设备可以不断地加入到系统中,以满足用户对存储容量或性能的需求。
但是随着存储网络规模的不断增加,如何分配每台主机所用的设备成为一个严重的问题。此时,前端的各主机可能使用各种不同的操作系统,而网络中的存储设备也会有不同的规格和类型。存储虚拟化工作就是为了解决这些问题。传统的虚拟化技术有两种主要的解决方案,第一是在各主机上通过代理软件实现,比较常见的包括Linux系统中的LVM,这种方法不适用于多机环境,也不适用于不同的操作系统;第二种方案是在存储设备端实现,很多厂商的阵列设备也提供了虚拟化功能,但是这种方法一般都是面向特定设备的,不能管理多种类型的设备。这两种方案都无法满足海量异构存储网络环境。
为了解决海量异构存储网络环境中的资源管理问题,我们提出了SAN环境中基于网络的海量存储资源管理方法。它在存储网络中一个专门的处理节点上实现存储虚拟化功能,并具有以下的特点1.高度的兼容性与前端主机的操作系统完全无关,并且能够管理各种类型的存储设备。
2.简洁的资源信息组织方式只需要在节点机上占用少量的空间来保存海量规模的存储设备信息。
3.高度的灵活性由于该方法实现层次比较低,所以可以灵活地选择网络中性能好的设备来优先使用,从而保证设备负载均衡,改善存储系统的整体性能。
发明内容
本发明的目的是实现一种虚拟化方法来管理海量存储网络中各种类型的存储设备,并把虚拟存储空间提供给前端主机使用。本项发明主要针对海量存储网络环境的需求,设计并实现了一套切实可行的存储资源管理方法。通过本方法,可以有效减少设备信息的资源需求,并提供对用户透明的空间分配方式,降低资源管理的复杂度,同时提高存储系统的整体性能。
本发明的核心是通过专用处理节点机来维护一套存储资源配置信息,来集中管理存储网络中各种不同的存储设备资源,并通过SCSI(小型计算机系统接口Small Computer SystemsInterface)中间层进行命令分析处理,从而对前端主机提供完全透明的虚拟化存储服务。具体的实现架构包括以下两个主要部分1.节点机上维护全部存储设备(包括物理设备和虚拟设备)的配置信息列表对网络中每个存储设备产生一个结构,记录它的各种属性以及可用的空间;管理员创建虚拟盘后,也对每个虚拟盘创建一个结构,记录各种属性以及逻辑空间分配方式。
2.节点机上实现一个支持虚拟化功能的SCSI软件目标器STML(SCSI Target Mid-levelLayer),它的工作是把前端主机对虚拟盘逻辑空间的访问转化为对实际物理设备的访问,并把物理设备的数据处理结果反馈给前端主机。逻辑命令到物理命令的转化是根据上面提到的存储资源组织信息为基础进行的。
本发明是一种基于网络的(在网络节点VIC上实现),在数据通路上实现的存储虚拟化解决方案,称为AXUM系统。这种实现方法使得它的兼容性很强,完全不受限于不同的主机操作系统和设备类型。同时,我们通过对海量存储环境中存储资源信息的考察,确定了独特的资源信息组织方式。这种组织方式不但空间分配灵活,而且占用空间小,适用于海量规模的存储资源管理。其次,通过对不同存储设备的评价,可以自动优先选择性能好的设备来分配逻辑空间,有效降低管理难度。另外,通过STML对每个命令处理过程的控制,我们可以方便地加入各种优化措施,改善系统整体性能。
基于网络的海量存储资源管理方法的操作步骤大致为(见图1)1.加载模块 海量资源配置管理模块(axum.o)探查网络中所有的存储设备,把每个要管理的物理设备抽象为一个Physical Disk(PD)结构;同时从元数据盘中获取已配置的虚拟盘信息,把每个虚拟盘抽象为一个Virtual Disk(VD)结构,组织好VD的空间布局,并根据VD的物理空间布局调整相应PD的空间使用情况; SCSI软件目标器STML模块(mid_target.o)根据axum.o的配置信息,组织scsi设备队列,同时建立命令处理线程,用来处理发来的I/O请求。
管理软件代理程序和界面程序,用于在管理主机上通过界面管理VIC节点的虚拟化配置工作。
2.资源配置管理员可以通过节点机提供的配置工具对海量存储资源进行虚拟化配置,如PD的添加、去除,VD的创建、删除、扩容和主机指定等。用户进行资源配置后,axum.o模块在内核中修改相应的信息组织结构和内容。
3.元数据保存系统在节点机上维护一套完整的存储资源配置信息,如果用户对资源配置进行修改,造成配置信息变化,那么需要把相应的内容保存到元数据盘中,以便在系统重新加载时能够恢复原有的配置。
4.主机使用前端主机通过加载光纤卡驱动,能够发现并使用节点机提供的虚拟盘,而实际的物理设备对前端主机透明。
5.数据访问前端主机对虚拟盘空间的访问,转化为SCSI命令通过光纤通道发送到节点机。在节点机的mid_target.o模块中,按照axum.o的空间组织信息进行地址转换,把对逻辑空间的访问转化为对实际物理设备的访问,并根据逻辑空间的组织方式对存取的数据进行拆分或合并,最后把实际物理命令的处理结果通过光纤驱动反馈回前端主机。
本发明是基于网络设备实现的,除了管理软件界面外,其它全部程序都在节点机VIC上实现。AXUM虚拟化系统的软件架构如图2所示。
本发明的特征在于它是在下述存储区域网络,即SAN中实现的,所述的网络含有 主机,即前端服务器,有1个以上,其中一台作为管理主机,安装管理程序界面; 光纤交换机,它与各主机、节点机和光纤存储设备互连; 节点机,用VIC表示,只有一个,插有一块启动器模式的以及目标器模式的光纤驱动卡即FC-HBA各一块,它与所述光纤交换机相连,安装有资源配置模块、软件目标器模块和管理软件代理程序; 后端存储设备,包括直接与所述光纤交换机相连的光纤磁盘以及经过普通I/O节点与光纤交换机相连的SCSI即小型计算机接口系统磁盘阵列;在所述磁盘中,有两块元数据磁盘,用于保存所有的元数据信息,所述元数据是指在用户使用过程中,发生的包括物理磁盘、虚拟存盘的创建、删除、扩展在内的操作时形成的每次更改后的磁盘信息,所述元数据包含以下内容 PD基本元数据位置,包括所存放的物理设备的全局统一标识符,用UUID表示,以及类型信息在内; SC基本元数据,SC是指各种存储设备组成的统一存储空间,SC基本元数据即系统中SC信息结构的数据; SC所有PD的元数据,即SC中所有实际的存储设备,即所有PD的UUID信息; SC所有的VD的元数据,即不仅包括所有的VD即虚拟磁盘信息结构的数据,还包括每个VD在实际磁盘中所占用的位置、大小在内的信息;
除元数据盘外,系统的其余磁盘只保存各自的PD基本元数据;本发明所述的方法在上述存储区域网络中实施时,它依次含有以下步骤第1步在所述I/O节点机即VIC节点中加载以下模块资源配置模块,用axum.o表示;它确定要创建的虚拟盘参数,包括虚拟盘的名称、大小、是否条带组织以及数据分片数,同时提供内核符号、内核信息接口以及注册特殊的字符型设备,以便所述模块能接收用户的虚拟化配置指令,并修改它维护的相应资源配置信息,同时把变化的信息保存到元数据盘;SCSI目标器模块,用mid_target.o表示,它根据axum.o的配置信息,组织SCSI设备队列,同时建立命令处理线程,用以处理发来的I/O请求;为此,它分别建立虚拟命令和物理命令的线程来处理针对虚拟磁盘的SCSI命令即虚拟命令,以及把虚拟命令分解后的对于实际物理磁盘的SCSI命令即物理命令的链表型队列;在处理上述I/O请求时,根据axum.o的配置信息进行地址映射和数据的拆分或合并处理,返回处理结果;第2步资源配置;管理员通过节点机提供的配置工具对海量存储资源进行虚拟化配置,它依次含有以下步骤第2.1步用户通过资源配置管理软件确定要创建的虚拟盘参数;第2.2步axum.o模块通过ioctl机制发现用户空间传来的通知内核进行虚拟盘创建的命令标识,把用户空间要传递给内核的参数取出,包括虚拟盘即VD的名称、大小、组织方式和条带数据分片数,进行虚拟盘创建;第2.3步创建虚拟盘结构即ax_vd_t的变量,填入参数信息,并记录新的虚拟盘配置数据;第2.4步判断参数中的组织方式,进行相应的空间分配处理第2.4.1步当为连续组织方式时首先确定参数中的虚拟磁盘是否为新创建的磁盘,若不是,则优先选择该磁盘的最后一段物理空间所属的物理设备进行空间扩展;否则,优先使用最好的物理磁盘进行空间分配;其次,确定剩余要分配的空间大小,选择新的磁盘进行空间分配;空间分配成功,返回;第2.4.2步当为条带组织方式时,假设条带数量为s首先,确定是否为新的虚拟盘,若是,则对所有的物理设备排序,选择s个物理磁盘进行空间分配;否则,选择原有虚拟盘中最后s块存储空间所对应的物理磁盘进行空间分配;确定剩余要分配的空间大小;更新虚拟盘的容量和剩余空间的大小;对物理设备重新排序,选择新的s个设备;
空间分配成功,返回;第2.5步填充新的虚拟盘结构,并把该结构插入全局变量中,通知用户虚拟盘创建完成;第3步元数据保存,它依次含有以下步骤当操作针对物理磁盘时,首先在被操作的物理磁盘PD基本元数据位置写入PD基本元数据;向元数据盘内保存SC基本元数据的位置写入SC的信息数据;向元数据盘内保存SC所有VD元数据的位置写入VD的基本元数据以及VD的占用信息;第3步数据访问第3.1步mid_target.o经接口函数收到前端服务器发来的对虚拟盘逻辑空间的SCSI读写命令,并生成相应的指令结构,设置命令状态后,把该命令结构插入虚拟命令的处理队列;第3.2步mid_target.o唤醒虚拟命令线程,调用虚拟分析指令,判断并针对不同的命令执行不同的操作;第3.3步读命令处理,依次包含以下步骤根据axum.o模块维护的虚拟化配置信息,通过资源配置用的映射函数把虚拟命令映射成几个物理SCSI命令;对每个物理命令,构建相应的指令结构,同时,设置虚拟命令的状态以及各物理命令的状态;把这些物理命令插入物理命令处理队列,唤醒物理命令处理线程进行处理,并设置虚拟命令的相应处理状态;在物理命令处理完毕后,虚拟命令处理线程收集所有物理命令的响应,形成虚拟命令的响应,同时把各物理命令返回的数据合并,然后把该虚拟命令的响应发送给光纤驱动卡,并修改个命令状态;虚拟命令处理线程把对应的物理命令从相应队列中删除,再把该虚拟命令从虚拟命令处理队列中删除;第3.4步写命令处理,依次包含以下步骤根据axum.o模块维护的虚拟化配置信息,通过资源配置用的映射函数把虚拟命令映射成几个物理命令;对于每个物理命令,构建相应的指令结构,同时,设置虚拟命令的状态以及各物理命令的状态;把这些物理命令插入物理命令处理队列;虚拟命令处理线程根据虚拟命令的状态调用接口函数通知光纤卡驱动从前端服务器传来数据,重新设置虚拟命令及相应各物理命令的状态;光纤卡驱动通过接口函数把数据交给虚拟命令处理队列,并把虚拟命令及各物理命令设成正在处理的状态;虚拟命令处理线程通过接口函数把数据分片并发到相应的物理命令中,重新设置虚拟命令及各物理命令的状态;物理命令处理线程进行处理;在处理完毕后,通过光纤卡驱动通知前端主机,并改变虚拟命令及对应的各物理命令的状态,虚拟命令处理线程把对应的物理命令从相应队列中删除,再把该虚拟命令从虚拟命令处理队列中删除。
本发明是为了自主管理海量存储网络中的各种存储资源,降低管理开销而设计并开发的。它通过在存储网络中加入专门的处理节点来实现。采用本发明,只要在存储网络中加入一台处理节点机,就可以方便地管理各种类型的存储设备,并对各种平台的前端主机提供服务,因此能够完全适应海量存储系统中各种异构的操作平台和存储设备。本发明通过独特的资源信息组织方式、设备选择方式和命令控制方式,提供完善的存储资源管理服务,并提高系统的读写性能。同时,本发明所需维护的信息空间需求小,空间分配灵活合理,适用于海量存储网络环境。本发明已经在由清华大学自行研究开发的海量存储网络TH-MSNS中实现并测试。并在此基础上对不同操作平台的前端主机(Windows,Linux等)提供虚拟盘进行文件存取和各种应用服务。
图1.海量存储资源管理与命令处理流程。
图2.网络处理节点VIC上的软件模块架构。
图3.海量存储网络的硬件配置与组织。
图4.海量存储网络的资源信息组织结构。
图5.虚拟盘的逻辑空间分配。
图6.创建虚拟盘工作的程序流程。
图7.元数据保存时的组织方式。
图8.支持虚拟化功能的SCSI目标器中间层STML。
图9.读写请求时,逻辑命令与物理命令的状态转换。
图10.VIC节点提供的虚拟磁盘读写性能。
图11.VIC虚拟化处理带来的软件延迟。
图12.VIC节点的数据处理能力。
具体实施例方式
1.硬件设备的配置与组织我们把这套自主开发的,面向海量存储网络的虚拟化系统命名为AXUM,而网络中运行AXUM系统的处理机称为VIC节点。作为AXUM运行环境的存储网络组织结构如图3所示。所有的硬件设备,包括前端主机、VIC节点、普通I/O处理节点和光纤磁盘设备,都通过光纤线连接到一台或多台光纤交换机上。前端主机有一台或多台,安装有启动器模式的光纤通道卡(FC-HBA),用于查询访问和访问光纤网络中可用的存储设备;其中一台前端主机作为管理主机,需要安装管理界面。普通I/O处理节点装有目标器模式的光纤通道卡,下面连接IDE或SCSI类型的磁盘或磁盘阵列,使它们能够被启动器模式的光纤通道卡访问。VIC节点是加入海量存储资源管理模块(axum.o)和SCSI软件目标器模块(mid_target.o)的管理节点,并通过管理软件代理程序与管理主机交流。VIC上插有两块FC-HBA卡,一块用于启动器模式,另一块用于目标器模式。VIC既能作为单独的处理节点,也可以自己挂载IDE或SCSI磁盘设备作为网络存储资源。
利用交换机的分区功能把整个存储网络环境分为两个区Zone 1包括所有的前端服务器和VIC,VIC通过目标器FC-HBA响应前端主机的请求,而前端主机只能看到VIC提供的设备;Zone 2包括VIC和其他所有的后端存储设备,包括FC磁盘设备和SCSI磁盘阵列等。VIC利用启动器FC-HBA,能够检测到所有的设备并进行统一管理。由于整个存储网络分为两个区,前端的主机将不会发现网络中的物理设备,而只能检测到VIC提供给前端的虚拟盘。同时,利用逻辑单元屏蔽(LUN masking)功能,使不同的主机能够发现并访问不同的虚拟盘。
2.海量存储资源的信息组织结构AXUM系统把所有的物理存储空间(包括物理磁盘和LU设备)组织成一个统一的存储池。管理员可以根据用户的需要,从存储池中划分空间分配给虚拟盘,并提供给不同的前端主机使用。AXUM的资源配置信息组织结构如图4所示,其中主要的信息结构包括 SC各种存储设备组成的统一存储空间。
PD后端实际的物理存储设备,记录容量大小和设备标识等信息。
FS记录PD中的每段未分配给虚拟盘的存储空间起始位置与大小。
VD提供给前端使用的虚拟盘,包括容量,空间映射方式等信息。
PS记录VD中每块存储空间所对应的实际物理位置与大小。
其中FS与PS的最小空间单元(称为一个SG)大小可变,SG默认大小为64KB。
在AXUM的信息组织结构中,每个PD结构的大小为100字节左右,而一个PD的信息量主要取决于其FS数量的多少,其中一个FS结构的大小为12字节。由于只有当删除某个VD空间时才会在PD上产生一段新的未分配空间,所以对应PD的FS链表中的项目不会很多。假设每个设备有10段未分配区域,那么只需要100+10*12=220字节左右的信息空间。这样即使管理上万块磁盘,也只会占用VIC很少的系统资源(10000*220B=2.2MB)。同样地,VD的信息量主要取决于其PS数量的多少。VD结构的大小为300字节左右,而每个PS结构的大小为16字节。在海量存储网络环境中,用户可能会创建很多VD,而每个VD也可能会包含比较多的PS。假设在系统中创建了1000个虚拟盘,每个VD大小都是100GB。这样即使每个VD都包含1000个PS,所有VD的元数据也只需占用16MB左右的存储空间。因此,AXUM保存海量存储资源配置信息的总共空间需求小于20MB。
相对地,如果我们使用最常用的LVM系统进行虚拟化配置,上面的环境至少需要180MB的空间用于资源配置信息的保存。同时,LVM需要在每台前端服务器上都要保存信息,而AXUM系统只要在VIC节点机上维护一套元数据信息即可。可见,AXUM的信息组织方式更适合于海量存储环境。
3.系统加载VIC节点机其实就是一台普通的服务器,运行Linux操作系统(2.4.18以上内核),AXUM虚拟化系统的两部分(配置信息结构和STML)分别做成内核模块并进行加载,同时还要启动管理软件的代理程序1)加载资源配置模块(axum.o)。这个模块加载后,将依次完成以下的步骤 在内核中注册一个特殊的字符型设备,以便通过ioctl机制响应并处理用户的不同配置工作; 变量值进行初始化,提供一个内核符号axum_SC,记录资源配置情况,使STML能够利用它查询相应信息; 提供”/proc”目录下的内核信息接口,以便用户或管理软件对已有资源配置信息进行查询; 导入原先保存的元数据,生成完整的资源配置信息结构(物理盘,虚拟盘的空间组织和使用情况),并获得各物理设备的规格参数;该模块接收用户的虚拟化配置指令,并修改它维护的相应资源配置信息,同时把变化的信息保存到元数据盘。
2)加载STML模块(mid_target.o)。这个模块加载后,将依次完成以下的步骤 自动搜索系统中的虚拟磁盘(VD),并将搜索到的虚拟磁盘以stml_device的形式组成一个链表,供前端使用。
变量值进行初始化,使用一个内核全局变量target_data,记录了资源的配置情况,并且维护了两个命令链表。一个链表是前端发过来的针对于虚拟磁盘的SCSI命令(虚拟命令)链表,另一个链表是将虚拟命令分解后的针对于实际物理磁盘的SCSI命令(物理命令)链表。
在内核中启动两个线程。一个线程(VCPT线程)负责处理虚拟命令的执行,另一个线程(PCPT)负责处理物理命令的执行。
前端发来的SCSI命令会自动加入到虚拟命令队列中。VCPT循环遍历虚拟命令队列,并进行相应的处理(见数据访问部分)该模块接收SCSI命令,根据axum.o的配置信息进行地址转换和数据的拆分或合并处理,最后返回命令处理的结果。
3)VIC节点机上的管理软件代理程序 在目录/root下的配置文件hostwwn保存前端机IP与其WWN映射表,而文件lunmask记录各前端主机对虚拟盘的配置关系。
运行程序sagent,产生代理守护进程,并自动在制定目录下生成文件info和fmid,分别保存命令执行结果及lunmask配置的中间结果。
代理通过Socket机制与管理主机上的管理软件进行交互,接收管理软件发来的命令,调用axum模块的相应功能执行VD的创建、删除、扩容及PD的创建、删除等操作,并返回执行结果。
代理通过VIC节点的信息接口,即文件/proc/axum/pd、/proc/axum/vd、/proc/axum/sc,可以获取虚拟化配置相关信息,并反馈给管理软件显示。
根据管理软件的命令,代理可以实现对lunmask文件的动态配置,进而实现对前端主机与虚拟盘的动态配置。
我们把存储网络前端的一台主机作为管理主机,通过管理界面程序对VIC管理的海量存储资源进行配置 管理界面程序运行在专门的管理主机上,基于标准的Java规范,对操作系统无限制,为管理者提供一个集成的海量存储资源配置管理环境。
通过Socket机制与VIC节点代理通信,获取相关信息并进行显示。
管理者通过图形界面对海量存储环境中的虚拟化配置工作进行管理,输入相应的参数,实现包括虚拟盘的创建、删除、容量变化及物理设备的加入和删除等操作。管理软件将操作及参数封装成相应的命令通过Socket发送到VIC节点机的代理上执行,并获得执行结果。
用户可以通过管理软件获取VIC节点上维护的关于物理设备、虚拟设备、整个存储池空间统计情况和前端主机的相关信息。
4.资源配置AXUM系统的各模块加载后,如果从未进行过虚拟化配置,那么前端主机不会看到任何虚拟盘设备。因此,我们必须在VIC上通过管理软件利用已有的设备空间创建虚拟盘。AXUM虚拟化系统需要在它管理的物理设备上进行标记,并预留磁盘空间,所以,为了不影响用户对某些磁盘设备的特殊使用配置,我们需要把每个要让AXUM管理的设备由用户逐一添加到虚拟化系统中来,虚拟盘只能由用户指定加入到系统中的设备空间来构成。如果没有加入任何物理设备就进行虚拟化配置,系统会给出错误信息提示。
AXUM的资源信息组织结构使得逻辑空间的分配非常方便。在增加逻辑空间时,如果该虚拟盘VD的分片数(stripe number)是S(S≥1),那么AXUM需要每次从S个分属不同PD的FS中划分空间,并把相应S个PS段提供给VD作为虚拟盘逻辑空间。同样地,如果要减少虚拟盘的大小,需要把S(或S的整数倍)段空间从VD的PS表中最后的部分删除,并归还到对应PD的FS表。前端服务器探查到虚拟盘容量发生变化后,就可以方便地对该VD的容量进行在线修改。以图5为例,图中的VD是一个条带组织的虚拟盘,分片数为5。如果要增加50GB的容量,只需要从5个物理设备中分别获取10GB的空间,并把对应的5段PS加入到VD的PS链表后端即可。而如果要删除20GB空间,只要在最后5个PS中,每段都减少4GB的空间大小即可。
普通的虚拟化系统管理的都是比较小规模的存储资源,一般并不会考虑实际物理设备的区别,这样很容易造成空间的浪费和性能的下降。AXUM系统面向的是海量存储环境,能够管理网络中各厂商各类型的设备。由于不同设备的性能指标各不相同,因此我们在AXUM中加入了设备评价机制,它通过统计物理设备的负载强度,空间利用情况和性能指标等,得到每个设备的评价值,优先利用那些性能最好的设备来进行逻辑空间的分配,以便提高整个存储网络的读写性能,并尽量保证各设备的负载均衡。
在进行设备评价时,主要考虑的因素包括1)设备优先级由用户指定,这样虚拟盘会优先使用优先级高的设备。
2)PD的读写命令强度Drw它等于该PD处理的读写请求总量与该PD创建时间之比。
3)PD的可分配空间大小FSt该物理设备尚未分配给虚拟盘的空间大小。
4)PD上的VD数量Nvd使用该物理设备空间的VD总数。
5)PD的硬件指标Hs反映物理设备的性能,包括空间大小,寻道时间,数据传输率和设备缓存大小等。
AXUM系统对每个PD的评价函数为Hs*Fst+a/(Nvd+1)+b/Drw,其中a,b为常数,可根据对不同指标的侧重进行调整。在各PD优先级相同的条件下,系统首先选取评价值最高的PD进行虚拟盘的空间分配。对每个PD,从它的FS链表中划分空间给VD。如果所需容量小于FSt,那么每次从大小最合适的FS段中划分空间。
AXUM的存储资源虚拟化配置功能包括虚拟盘的创建、删除、容量修改,以及虚拟盘的使用主机指定等。下面以创建虚拟盘为例说明系统中的资源配置信息如何改变(图6)1)用户通过资源配置管理软件确定要创建的虚拟盘参数,包括虚拟盘的名称,大小,是否条带组织以及数据分片数。管理软件把这些信息填充到一个虚拟盘结构(ax_vd_t)类型的变量avd中。通过ioctl机制从Linux操作系统的用户空间传递到内核空间ioctl(dev_fd,AXIO_VD_CREATE,&avd)。其中dev_fd是AXUM资源配置模块在内核中定义的字符型设备的设备号,AXIO_VD_CREATE是通知内核进行虚拟盘创建工作的命令标识,avd是用户空间要传递给内核的参数。
2)axum.o模块通过ioctl机制发现用户空间传来的AXIO_VD_CREATE命令后,把avd地址中的参数信息获取出来,调用虚拟盘创建函数do_vdcreate(avd.vd_name,avd.vd_size,avd.mapping_type,avd.stripe_num)进行虚拟盘创建,其中四个参数分别为虚拟盘VD的名称,大小,组织方式(目前支持连续方式和条带方式)和条带数据分片数。
3)do_vd_create函数首先创建一个ax_vd_t结构的变量thevd,用来记录新的虚拟盘配置信息,把参数信息填入,然后判断参数中的组织方式,分别进行不同的空间分配处理3.1)如果是连续组织方式,调用连续空间分配函数alloc_vdspace_linear(thevd,vdsize)进行虚拟盘空间分配,其中第一个参数是新的虚拟盘结构,第二个参数是虚拟盘大小 确定参数中的thevd是否为新创建的虚拟盘如果不是,找到它的最后一个PS,从而确定该虚拟盘的最后一段物理空间位于哪个物理设备(PD),优先选择该PD进行空间扩展;如果是新的虚拟盘,对所有可用设备进行评价和排序,优先使用最好的PD进行空间分配。
确定要分配的空间大小sg_remain,当sg_remain大于0时,循环做如下步骤 创建一个新的PS结构pps,并使指针pfs指向选定PD的FS列表中第一项。
把pfs指向的空间尽量划分给pps,把pps插入thevd中PS列表的最后一项。
更新虚拟盘大小和sg_remain的值,更新相应PD的信息。
选择下一个PD进行空间分配。
空间分配成功,返回。
3.2)如果是条带组织方式,调用条带空间分配函数alloc_vdspace_stripe(thevd,vdsize)进行虚拟盘空间分配,其中第一个参数是新的虚拟盘结构,第二个参数是虚拟盘大小 确定参数中的虚拟盘结构thevd是否为新的虚拟盘如果是,对所有物理设备进行排序,假设虚拟盘thevd的分片数(stripe number)为s,则选择s个PD进行空间分配;否则,选择原有虚拟盘中最后s个PS对应的PD进行空间分配。
确定剩余要分配的空间大小sg_remain,当sg_remain大于0时,循环做如下步骤 用一个指针数组ppd[]指向s个PD; 确定每个ppd指向的设备可用; 当所用空间可用,并且sg_remain大于0时,循环下面步骤●确定每个ppd指向的设备中,最小可分配空间大小min;●从每个ppd指向的设备中,划分min空间给虚拟盘; 更新虚拟盘结构thevd的容量值和剩余要分配的空间大小sg_remain。
对PD重新排序,选择新的s个设备。
空间分配成功,返回。
4)填充新的虚拟盘(thevd)结构中其他统计信息,包括空间大小和虚拟盘状态等,并把该结构插入axum_SC全局变量中。通知用户虚拟盘创建成功。
5.元数据保存用户在进行海量存储资源配置过程中,发生诸如物理磁盘的创建、删除,虚拟磁盘的创建、删除和扩展等操作时,系统中的全局变量axum_SC所对应的关于物理存储设备和虚拟磁盘的信息就会发生更改。如果这些信息不予以保存的话,系统重新启动之后就会丢失。因此每次更改都必须将更改后的信息保存在磁盘上。这些保存在磁盘上的信息数据我们称之为元数据。
要保存的元数据包括四种类型(1)PD基本元数据,它包括所存放的物理设备的全局统一标识符(UUID)以及磁盘类型等信息;(2)SC基本元数据,即系统中SC信息结构的数据;(3)SC所属PD的元数据,即SC中所有PD的UUID的信息;(4)SC所属VD的元数据,它不仅包括所有的VD信息结构的数据,还包括每个VD在实际磁盘中所占用的位置、大小等信息的数据。
我们在系统中每个实际的物理磁盘上,都将前25M的空间空出用于存放元数据。元数据在磁盘中的布局如图7所示。
在实际的系统中,我们使用两块磁盘来保存所有的元数据信息,我们称之为元数据磁盘,而其余的磁盘只保存各自的PD基本元数据。这是因为如果所有的磁盘都保存一份完整元数据的话,每次元数据的导出开销会很大。使用两个磁盘保存所有元数据既不会有很大的开销,并且当某个元数据磁盘坏掉之后还有另外一个元数据磁盘可以使用,系统仍然恢复配置,继续使用。
当用户进行物理磁盘的创建、删除,虚拟磁盘的创建、删除和扩展等操作时,系统会自动调用一次元数据的保存操作。系统进行元数据保存操作的过程如下 如果进行的是针对物理磁盘的操作,那么首先向被操作的物理磁盘PD基本元数据位置写入PD基本元数据。
向系统中元数据磁盘内保存SC基本元数据的位置写入SC的信息数据。
向系统中元数据磁盘内保存SC所属PD元数据的位置写入PD的UUID信息数据。
向系统中元数据磁盘内保存SC所属VD元数据的位置写入VD的基本元数据以及VD所占有的实际空间信息的数据。
6.数据访问前端主机加载光纤通道卡(FC-HBA)的驱动程序后,会检测到AXUM系统提供的虚拟盘。这些虚拟盘可以被当作普通的SCSI磁盘进行操作,比如格式化,创建文件系统,挂载(mount)等,初始化成功后就可以对这个虚拟磁盘进行数据存取访问。前端主机对虚拟盘逻辑空间的读写是通过SCSI命令发出的,SCSI命令会被FC包封装,并发送到VIC节点的STML模块(mid_target.o)进行处理。支持虚拟化功能STML的处理流程如图8所示。目标器FC-HBA驱动把包含逻辑地址的SCSI命令提交给STML,STML把这些逻辑命令组织成队列。对于每个逻辑命令,如果是查询类的命令,将直接根据AXUM的信息内容和SCSI标准格式产生反馈信息。主要查询命令及其处理方法为
由于前端主机只能看到虚拟盘VD,而无法看到实际的设备,所以发到VIC上的SCSI读写命令中包含的都是各虚拟盘的逻辑空间地址,而这些地址必须要根据AXUM元数据中对应虚拟盘VD的PS列表信息,转化为实际设备对应的物理地址,并把包含物理地址的命令发送到对应设备。由于一段要读写的数据可能跨越VD的多段PS空间(尤其在条带化组织的磁盘中),因此一个逻辑命令可能会被拆分成多个物理命令。地址转化工作的目标是确定每个逻辑命令要拆分成几个实际命令,并计算每个实际命令对应的偏移地址和数据长度。同时,读写操作还可能分别需要对处理的数据进行组装或拆分。
STML模块分别使用虚拟命令处理线程(VCPT)和物理命令处理线程(PCPT)完全控制每个命令的状态、处理方法和流程(图9)。下面说明前端主机发来的SCSI读写命令在STML模块中的处理过程。
命令接收函数rx_cmnd()在接收到一个虚拟命令后,生成一个相应的虚拟命令结构Target_Virtual_Scsi_Cmnd,并置命令状态为ST_NEW_CMND,然后把该结构插入虚拟命令队列,唤醒VCPT线程。VCPT线程对状态为ST_NEW_CMND的虚拟命令调用虚拟命令分析函数analyse_virtual_cmd(),该函数针对不同的命令执行不同的操作1)读命令处理
根据axum.o模块维护的虚拟化配置信息,通过地址映射函数axum_mapping()把虚拟命令映射成一个或多个(数量为n)物理SCSI命令。
对于每个物理命令,填充一个物理命令结构Target_Physical_Scsi_Command。把该虚拟命令的状态为ST_DISASSEMBEL,并置对应各个物理命令的状态为ST_PHYSICAL_NEW_CMND。
把这些物理命令插入物理命令队列,唤醒处理PCPT线程进行处理。并置虚拟命令的状态为ST_PROCESSING。(a)
PCPT线程调用物理命令处理函数handle_physical_cmd()处理实际命令 将物理命令的状态置为ST_PHYSICAL_CMD_PROCESSING。
调用Linux内核中的SCSI命令处理函数scsi_do_req()函数执行物理命令。
在scsi_do_req命令返回后,调用返回处理函数te_cmd_processed_new()。该函数首先置物理命令的状态为ST_PHYSICAL_CMD_DONE,接着判断是否这个物理命令所属的虚拟命令的所有物理命令都已经执行完毕。如果一个虚拟命令的所有物理命令都已经执行完毕,则置虚拟命令的状态为ST_ASSEMBLE,并唤醒处理虚拟命令队列的线程VCPT。
VCPT对于状态为ST_ASSEMBLE的虚拟命令,调用数据合并函数simulate(),收集该虚拟命令对应的所有物理命令的响应,然后形成虚拟命令的响应。对于读操作,还要把各物理命令返回的数据合并。最后置虚拟命令的状态为ST_DONE。
VCPT对于状态为ST_DONE的虚拟命令,调用命令反馈通知函数handle_to_front_end(),把该虚拟命令的响应发送给光纤HBA驱动,并将虚拟命令的状态转换成ST_HANDED。
当HBA驱动调用命令结束处理函数scsi_target_done()后,VCPT把虚拟命令的状态改变成ST_DEQUEUE,并置该虚拟命令对应的所有物理命令状态为ST_PHYSICAL_CMD_DEQUEUE。
VCPT线程对于状态为ST_DEQUEUE的虚拟命令执行如下操作先把该虚拟命令对应的物理命令从相应队列中删除,然后把该虚拟命令从虚拟命令队列中删除。
2)写命令处理 根据axum.o模块维护的虚拟化配置信息,调用地址映射函数axum_mapping()函数把虚拟命令映射成一个或多个物理SCSI命令(n个)。
把虚拟命令的状态为ST_DISASSEMBEL,并置相应各物理命令的状态为ST_PHYSICAL_NEW_CMD。
VCPT把置虚拟命令的状态为ST_PENDING,把对应各物理命令的状态置为ST_PHYSICAL_CMD_PENDING。
把物理命令插入物理命令队列。
VCPT对状态为ST_PENDING的虚拟命令调用命令反馈通知函数hand_to_front_end(),通知HBA驱动从主机传来数据,并把虚拟命令的状态置为ST_XFERRED。把虚拟命令对应的各物理命令的状态置为ST_PHYSICAL_CMD_XFERRED。
HBA驱动调用数据接收函数scsi_rx_data()把传来的数据交给VCPT,把虚拟命令的状态置为ST_TO_PROCESS。并把各物理命令的状态置为ST_PHYSICAL_CMD_TO_PROCESS。
VCPT调用数据拆分函数data_dispatch()把数据分片并分发到若干个对应的物理命令。置虚拟命令的状态为ST_PROCESSING,各物理命令的状态为ST_PHYSICAL_CMD_PROCESSING。
唤醒PCPT进行处理,余下与读类型命令流程(a)后的处理过程相同。
7.功能总结AXUM系统的功能模块只在VIC节点上实现,对海量存储资源的配置工作可以直接在VIC上进行,也可以通过远程管理主机上的管理软件进行。AXUM把存储网络中各设备逐一加入虚拟化系统进行管理,并利用这些设备的存储空间创建虚拟磁盘。对于已有的虚拟盘,可以进行删除,容量修改和主机分配。前端主机通过加载光纤通道卡的驱动程序来发现分配给它的虚拟盘,并可以像使用普通SCSI磁盘一样对虚拟盘进行各种操作,如格式化,创建磁盘文件系统等。主机对虚拟盘的访问使用SCSI标准命令,在VIC上的STML模块中,对虚拟命令进行映射,使它们转化为面向实际物理设备的物理命令,从而实现逻辑空间到物理空间的正确转化处理,保证虚拟设备的操作与功能正确可靠。
本发明的相关性能测试VIC提供给前端的虚拟盘读写性能如图10所示。图中横坐标为虚拟盘VD的分片数目(stripe number),纵坐标单位为每秒数据吞吐量(MB/s)。从测试结果可见,随着stripe数量的增加,相应虚拟盘的性能也会逐渐提高。在同等条件下,前端主机访问虚拟盘,即使该VD不进行分片(stripe number=1),也将比网络中实际存储设备的I/O性能提升7%左右。这样的性能差距主要是由于VIC节点可以提供的大容量(1GB)的内存作为数据Cache,从而使得AXUM提供的VD读写性能优于普通存储设备。同时,如果使用条带组织方式(stripe),AXUM提供的虚拟盘带来的性能优势将更加明显。
经过虚拟化处理的I/O访问延迟如图11所示。图中纵坐标表示I/O操作的平均响应时间(单位为ms)。从测试结果可以看出,由于光纤通道的传输和FC协议处理会带来延迟,所以网络设备的响应时间要略长于本地磁盘(9%左右)。但是同样是网络设备,AXUM系统提供的虚拟盘的响应时间比直接网络磁盘访问只多了约0.8%,可见,由AXUM虚拟化系统造成的软件延迟(主要包括地址映射计算和数据的拆装)是非常小的。
VIC节点的数据处理能力如图12所示。我们在每台前端主机上挂载AXUM创建的不同虚拟盘,每个VD只占用一个PD的空间,使得对不同虚拟盘的访问能够互不影响。使用Iometer测试工具对这些虚拟盘进行完全顺序读操作测试,以便获取无缓存影响的VIC最大数据吞吐率。从测试结果可以看出,在数据吞吐率小于120MB/s时,VIC的处理能力与前端的工作负载基本呈线性递增的关系。但是当数据吞吐率大于120MB/s后,VIC的处理能力趋于饱和,平均I/O响应时间也显著增加。这是由于SCSI总线的带宽限制造成的(160MB带宽SCSI总线的实际最大数据吞吐率为135MB左右),VIC节点的最大数据处理能力为127MB/s左右。而此时CPU利用率还不到20%。可见,在现有的硬件条件下,VIC的处理能力主要取决于数据通路上各部件的性能,而不是VIC节点的计算能力。为了消除VIC的性能瓶颈,最有效的手段只能是扩展处理节点的数量,使多个节点协同工作,从而能够适应存储网络的工作负载变化。
权利要求
SAN环境中基于网络的海量存储资源管理方法,其特征在于,它是在下述存储区域网络,即SAN中实现的,所述的网络含有 主机,即前端服务器,有1个以上,其中一台作为管理主机,安装管理程序界面; 光纤交换机,它与各主机、节点机和光纤存储设备互连; 节点机,用VIC表示,只有一个,插有一块启动器模式的以及目标器模式的光纤驱动卡即FC-HBA各一块,它与所述光纤交换机相连,安装有资源配置模块、软件目标器模块和管理软件代理程序; 后端存储设备,包括直接与所述光纤交换机相连的光纤磁盘以及经过普通I/O节点与光纤交换机相连的SCSI即小型计算机接口系统磁盘阵列;在所述磁盘中,有两块元数据磁盘,用于保存所有的元数据信息,所述元数据是指在用户使用过程中,发生的包括物理磁盘、虚拟存盘的创建、删除、扩展在内的操作时形成的每次更改后的磁盘信息,所述元数据包含以下内容 PD基本元数据位置,包括所存放的物理设备的全局统一标识符,用UUID表示,以及类型信息在内; SC基本元数据,SC是指各种存储设备组成的统一存储空间,SC基本元数据即系统中SC信息结构的数据; SC所有PD的元数据,即SC中所有实际的存储设备,即所有PD的UUID信息; SC所有的VD的元数据,即不仅包括所有的VD即虚拟磁盘信息结构的数据,还包括每个VD在实际磁盘中所占用的位置、大小在内的信息;除元数据盘外,系统的其余磁盘只保存各自的PD基本元数据;本发明所述的方法在上述存储区域网络中实施时,它依次含有以下步骤第1步在所述I/O节点机即VIC节点中加载以下模块资源配置模块,用axum.o表示;它确定要创建的虚拟盘参数,包括虚拟盘的名称、大小、是否条带组织以及数据分片数,同时提供内核符号、内核信息接口以及注册特殊的字符型设备,以便所述模块能接收用户的虚拟化配置指令,并修改它维护的相应资源配置信息,同时把变化的信息保存到元数据盘;SCSI目标器模块,用mid_target.o表示,它根据axum.o的配置信息,组织SCSI设备队列,同时建立命令处理线程,用以处理发来的I/O请求;为此,它分别建立虚拟命令和物理命令的线程来处理针对虚拟磁盘的SCSI命令即虚拟命令,以及把虚拟命令分解后的对于实际物理磁盘的SCSI命令即物理命令的链表型队列;在处理上述I/O请求时,根据axum.o的配置信息进行地址映射和数据的拆分或合并处理,返回处理结果;第2步资源配置;管理员通过节点机提供的配置工具对海量存储资源进行虚拟化配置,它依次含有以下步骤第2.1步用户通过资源配置管理软件确定要创建的虚拟盘参数;第2.2步axum.o模块通过ioctl机制发现用户空间传来的通知内核进行虚拟盘创建的命令标识,把用户空间要传递给内核的参数取出,包括虚拟盘即VD的名称、大小、组织方式和条带数据分片数,进行虚拟盘创建;第2.3步创建虚拟盘结构即ax_vd_t的变量,填入参数信息,并记录新的虚拟盘配置数据;第2.4步判断参数中的组织方式,进行相应的空间分配处理第2.4.1步当为连续组织方式时首先确定参数中的虚拟磁盘是否为新创建的磁盘,若不是,则优先选择该磁盘的最后一段物理空间所属的物理设备进行空间扩展;否则,优先使用最好的物理磁盘进行空间分配;其次,确定剩余要分配的空间大小,选择新的磁盘进行空间分配;空间分配成功,返回;第2.4.2步当为条带组织方式时,假设条带数量为s首先,确定是否为新的虚拟盘,若是,则对所有的物理设备排序,选择s个物理磁盘进行空间分配;否则,选择原有虚拟盘中最后s块存储空间所对应的物理磁盘进行空间分配;确定剩余要分配的空间大小;更新虚拟盘的容量和剩余空间的大小;对物理设备重新排序,选择新的s个设备;空间分配成功,返回;第2.5步填充新的虚拟盘结构,并把该结构插入全局变量中,通知用户虚拟盘创建完成;第3步元数据保存,它依次含有以下步骤当操作针对物理磁盘时,首先在被操作的物理磁盘PD基本元数据位置写入PD基本元数据;向元数据盘内保存SC基本元数据的位置写入SC的信息数据;向元数据盘内保存SC所有VD元数据的位置写入VD的基本元数据以及VD的占用信息;第3步数据访问第3.1步mid_target.o经接口函数收到前端服务器发来的对虚拟盘逻辑空间的SCSI读写命令,并生成相应的指令结构,设置命令状态后,把该命令结构插入虚拟命令的处理队列;第3.2步mid_target.o唤醒虚拟命令线程,调用虚拟分析指令,判断并针对不同的命令执行不同的操作;第3.3步读命令处理,依次包含以下步骤根据axum.o模块维护的虚拟化配置信息,通过资源配置用的映射函数把虚拟命令映射成几个物理SCSI命令;对每个物理命令,构建相应的指令结构,同时,设置虚拟命令的状态以及各物理命令的状态;把这些物理命令插入物理命令处理队列,唤醒物理命令处理线程进行处理,并设置虚拟命令的相应处理状态;在物理命令处理完毕后,虚拟命令处理线程收集所有物理命令的响应,形成虚拟命令的响应,同时把各物理命令返回的数据合并,然后把该虚拟命令的响应发送给光纤驱动卡,并修改个命令状态;虚拟命令处理线程把对应的物理命令从相应队列中删除,再把该虚拟命令从虚拟命令处理队列中删除;第3.4步写命令处理,依次包含以下步骤根据axum.o模块维护的虚拟化配置信息,通过资源配置用的映射函数把虚拟命令映射成几个物理命令;对于每个物理命令,构建相应的指令结构,同时,设置虚拟命令的状态以及各物理命令的状态;把这些物理命令插入物理命令处理队列;虚拟命令处理线程根据虚拟命令的状态调用接口函数通知光纤卡驱动从前端服务器传来数据,重新设置虚拟命令及相应各物理命令的状态;光纤卡驱动通过接口函数把数据交给虚拟命令处理队列,并把虚拟命令及各物理命令设成正在处理的状态;虚拟命令处理线程通过接口函数把数据分片并发到相应的物理命令中,重新设置虚拟命令及各物理命令的状态;物理命令处理线程进行处理;在处理完毕后,通过光纤卡驱动通知前端主机,并改变虚拟命令及对应的各物理命令的状态,虚拟命令处理线程把对应的物理命令从相应队列中删除,再把该虚拟命令从虚拟命令处理队列中删除。
全文摘要
SAN环境中基于网络的海量存储资源管理属于存储区域网络领域,其特征在于它通过专用处理器节点机来维护一套存储资源配置信息,并集中管理存储网络中各种不同的存储设备资源,并通过小型计算机系统接口(即SCSI)中间层进行命令分析处理,从而对前端主机提供完全透明的虚拟化存储服务。它在节点机上维护全部存储设备的配置信息列表;同时在节点机上实现一个支持虚拟化功能的SCSI软件目标器,以把主机对虚拟盘逻辑空间的访问转化为对实际物理设备的访问。它具有不必在前端主机或设备上加载任何软件,占用信息资源少、空间分配灵活、优先使用性能最佳的物理设备的优点。
文档编号G06F17/30GK1645342SQ20051001123
公开日2005年7月27日 申请日期2005年1月21日 优先权日2005年1月21日
发明者舒继武, 薛巍, 王迪, 章宏灿, 李必刚, 郑纬民 申请人:清华大学