专利名称:基于存储区域网络的高速固态存储设备的实现方法
技术领域:
基于存储区域网络的高速固态存储设备的实现方法属于存储区域网络SAN存储技术领域。
背景技术:
随着近年来CPU和主存性能的大幅提升,外存储器的I/O能力逐渐成为计算机系统真正的瓶颈。特别是随着宽带互联网的普及、移动终端数量的增长及多媒体应用的日益丰富,越来越多的信息系统采用集群系统来进行事务处理,如大规模在线事务处理,高性能计算等,这样信息系统对存储系统提出越来越高的要求更大的存储容量,更快的存储速度,更经济的存储价格。存储区域网络(SAN)技术的出现很好的满足了信息系统对存储系统在容量和价格上的要求,然而采用SAN技术的存储系统的性能需要得到进一步的提高以更好的满足信息系统对存储系统性能上的要求。
事实上,SAN系统中传统的磁盘由于驱动器的机械特性,性能一直无法得到大幅提高,对于目前规模越来越大的数据带宽需求来说,其可期望的性能提高十分有限。另外,机械磁盘的寻道和旋转延迟是导致系统响应时间过长的主要原因。寻道和旋转延迟同时导致了磁盘性能的不稳定,以及大量并发请求情况下性能的急剧降低。其表现为每秒处理的I/O请求数量不稳定,平均数值很低,远远达不到某些关键应用的要求。
另一方面,由于随机访问DRAM内存资源没有寻道和旋转延迟,并且近年来DRAM的存储密度不断增长,单位存储价格不断降低,DRAM的性能也不断提高,使用DRAM资源作为大容量存储设备的性价比越来越高。因此,可以利用DRAM快速设备来提高系统的性能,满足某些关键应用在存储上的要求。基于存储区域网络的高速固态存储设备TH-SSD(TsingHua-Solid State Disk)就是一种利用存储区域网络系统的DRAM内存资源形成的高性能存储设备,它是一种虚拟的固态磁盘(SSD),使用计算机的一部分系统内存作为外部存储,类似于一个高速的硬盘。其优点是存取速率与系统主存相当,系统主存直接使用前端总线,故其速度比基于其它总线的SSD设备要快很多。
本发明采用软件方式实现,不需要额外的附加快速存储硬件来进行支持,充分利用存储区域网络上已有的前端服务器和目标器端节点的富余DRAM内存,使用虚拟技术实现了高速固态存储设备TH-SSD。这样,用户通过将应用程序频繁访问的数据文件提前调入到TH-SSD设备中,以对TH-SSD中数据的访问代替对磁盘数据的访问,可以大大提高整个存储区域网络系统的I/O性能。
发明内容
本发明的目的在于提出一种基于存储区域网络实现高速固态存储设备的方法,它可以充分利用存储区域网络上已有的DRAM内存资源,将这些富余的内存空间虚拟成高速虚拟磁盘设备,以代替传统的磁盘对前端服务提供高速稳定的数据访问。这种方法消除了由磁盘的机械特性带来的系统性能瓶颈,提高了系统每秒钟处理的I/O操作数量(IOPS),能够满足存储区域网络中对大规模数据访问的带宽需求。
本发明的特征在于,这是一种把存储区域网络中前端服务器和目标服务器端节点上富余的DRAM内存资源组织起来形成高速的虚拟磁盘设备,为用户提供与普通磁盘一致的读写访问接口,以代替磁盘为前端应用程序提供高速稳定的数据访问的方法,所述的实现方法依次含有以下步骤步骤(1)依次按以下步骤,重新组织SAN的前端服务器和目标服务器节点的DRAM内存资源,生成虚拟磁盘SSD步骤(1.1)所述的SSD均通过SSD驱动程序实现在前端服务器上,设定本地SSD驱动程序,该驱动程序经SCSI驱动程序连接到文件系统,同时该驱动程序又与本地SSD互连,所述本地SSD驱动程序负责处理前端应用程序对本地SSD的数据访问操作;在作为存储管理节点的目标服务器端,设定目标服务器端SSD驱动程序,该驱动程序在与目标服务器端SSD互连的同时又与SCSI模拟目标器中间层互连,而该SCSI模拟目标器中间层又经SCSI子系统与磁盘子系统互连;步骤(1.2)所述的SSD驱动程序加载时通过扫描内核对象e820map结构来检测系统的内存,将系统内存中那些为SSD预留的内存区域的起始地址和大小记录在SSD驱动程序用于记录可用于SSD的内存段的结构中,将物理上可能不连续的内存空间转换为逻辑上连续的虚拟磁盘空间,并使用以下公式计算该内存区域在虚拟磁盘SSD中的起始地址本次扫描的内存区域在虚拟磁盘SSD中的起始地址=上次扫描过的内存区域在虚拟磁盘中的起始地址+上次扫描过的内存区域的大小,其中“+”表示相加,把原本物理上可能不连续的内存空间映射成逻辑上连续的虚拟磁盘空间,在前端服务器和目标服务器端生成虚拟磁盘SSD;步骤(2)按照SCSI文档,本地SSD驱动程序从SCSI驱动程序获得前端应用程序发往本地SSD的数据访问的SCSI命令请求,目标服务器端SSD驱动程序从SCSI模拟目标器中间层获得前端应用发往目标器服务器端SSD的数据访问的SCSI命令请求;步骤(3)对于非读写的命令请求,该命令请求的数据缓冲区中保存有所述非读写命令执行完毕后返回的数据,则依次按照服下步骤处理步骤(3.1)SSD驱动程序使用内核数据结构scatterlist来表示命令请求的数据缓冲区,每一个scatterlist结构中都有一个地址域和一个长度域,其中地址域用于存储所表示的数据缓冲区的起始地址,长度域用于存储所表示的数据缓冲区的大小;步骤(3.2)SSD驱动程序按照SCSI的命令处理格式把该非读写命令请求执行完毕后返回的数据填充到此命令的scatterlist结构所表示的缓冲区中;步骤(4)对于读写命令请求,则SSD驱动程序按照以下步骤依次处理步骤(4.1)SSD驱动程序按照步骤(3.1)所述的方法使用scatterlist结构表示该读写命令请求的数据缓冲区步骤(4.2)SSD驱动程序从SCSI命令中解析出此命令要进行读写操作的数据所在的虚拟磁盘地址以及数据长度;步骤(4.3)SSD驱动程序根据SCSI命令所请求的数据在虚拟磁盘中的起始地址和请求数据的长度,顺次扫描SSD驱动程序用于记录可用于SSD的内存段的结构,以确定该SCSI命令所要访问的虚拟磁盘中的数据段在哪些物理内存段,并获取此数据段所在相应的物理内存段中的起始地址以及长度;步骤(4.4)将所获得数据段在各个物理内存段中的地址空间映射到内核空间,对于读请求,把虚拟磁盘存储空间中的数据拷贝到与该请求对应的scatterlist结构所表示的数据缓冲区;对于写请求,把该请求对应的scatterlist结构所表示的数据缓冲区中的数据拷贝到虚拟磁盘的存储空间段中,并进行磁盘备份;步骤(4.5)将步骤(4.4)中所述的地址映射撤销。
测试结果表明与使用传统磁盘的存储区域网络系统的I/O性能相比较,目标器端采用了基于系统DRAM内存资源实现的SSD的存储区域网络系统的I/O性能有了明显的提高在光纤网络环境下,对于比较典型的随机请求块大小为4KB的100%读请求,系统的IOPS提高了131.9倍,对于随机请求块大小为4KB的100%写请求,系统的IOPS提高了46.2倍;在千兆以太网环境下,对于上述类型的读写请求,系统的IOPS分别提高了92.4倍和72.9倍。而前端服务器采用了SSD的存储区域网络系统的性能提高更大在千兆以太网环境下,对于上述类型的读写请求,系统的IOPS分别提高了234.1和103.6倍。
图1存储区域网络示意图。
图2存储管理节点的硬件结构。
图3采用TH-SSD的存储区域网络系统(以光纤网络为例)的软件结构。
图4系统程序流程图。
图5x86平台上的内存扩展方案。
图6x86平台上物理扩展模式下三级页表映射方式。
图7双日志双备份磁盘镜像策略示意图。
具体实施例方式
本发明将存储区域网络中前端服务器和目标服务器节点上富余的DRAM内存资源组织起来形成高速的虚拟磁盘设备,为用户提供与普通磁盘一致的读写访问接口。本发明实现的高速存储设备采用虚拟技术将原本分散的内存空间通过映射转换成连续的虚拟磁盘地址空间,前端应用发出的对高速存储设备的数据访问请求均是对虚拟磁盘的访问。本发明在存储区域网络中的前端服务器和目标服务器上都实现了这种虚拟磁盘,均是通过SSD驱动程序来实现的本地SSD驱动程序运行在前端服务器上,负责接收处理前端应用对本地SSD的数据访问请求;目标服务器端SSD驱动程序运行在目标服务器上,负责接收处理前端应用对目标服务器端SSD的数据访问请求。使用高速存储设备依次含有以下步骤(1)重新组织SAN的前端服务器和目标服务器节点的DRAM内存资源,生成高速虚拟磁盘设备SSD。SSD驱动程序加载时通过扫描内核对象e820map结构来检测系统的内存,将为SSD预留的内存区域的起始地址和大小记录在SSD驱动程序用于记录可用于SSD的内存段的结构中,将物理上可能不连续的内存空间转换为逻辑上连续的虚拟磁盘空间,并使用以下公式计算该内存区域在虚拟磁盘SSD中的起始地址本次扫描的内存区域在虚拟磁盘SSD中的起始地址=上次扫描过的内存区域在虚拟磁盘中的起始地址+上次扫描过的内存区域的大小,把原本物理上可能不连续的内存空间映射成逻辑上连续的虚拟磁盘空间。这样,在前端服务器和目标服务器节点上就形成了高速虚拟磁盘设备。
(2)按照SCSI文档,本地SSD驱动程序从SCSI驱动程序获得前端发往本地SSD的数据访问的SCSI命令请求,目标服务器端SSD驱动程序从SCSI模拟目标器中间层获得前端发往目标器服务器端SSD的数据访问的SCSI命令请求;(3)对于非读写的命令请求,该命令请求的数据缓冲区中保存有所述非读写命令执行完毕后返回的数据,SSD驱动程序使用内核数据结构scatterlist来表示命令请求的数据缓冲区,每一个scatterlist结构中都有一个地址域和一个长度域,其中地址域用于存储所表示的数据缓冲区的起始地址,长度域用于存储所表示的数据缓冲区的大小,SSD驱动程序按照SCSI的命令处理格式把该非读写命令请求执行完毕后返回的数据填充到此命令的scatterlist结构所表示的缓冲区中;(4)对于读写命令请求,SSD驱动程序使用scatterlist结构表示该读写命令请求的数据缓冲区。在SSD驱动程序从SCSI命令中解析出此命令要进行读写操作的数据所在的虚拟磁盘地址以及数据长度,SSD驱动程序根据SCSI命令所请求的数据在虚拟磁盘中的起始地址和请求数据的长度,顺次扫描SSD驱动程序用于记录可用于SSD的内存段的结构,以确定该SCSI命令所要访问的虚拟磁盘中的数据段在哪些物理内存段,并获取此数据段所在相应的物理内存段中的起始地址以及长度。SSD驱动程序将所获得数据段在各个物理内存段中的地址空间映射到内核空间,对于读请求,把虚拟磁盘存储空间中的数据拷贝到与该请求对应的scatterlist结构所表示的数据缓冲区;对于写请求,把该请求对应的scatterlist结构所表示的数据缓冲区中的数据拷贝到虚拟磁盘的存储空间段中,并进行磁盘备份。在读写操作完成之后,SSD驱动程序将地址映射撤销,以释放占用的内核地址空间。
存储区域网络将存储设备与主机分离,对存储空间进行统一管理和分配,其结构如图1所示。
服务器节点的硬件子系统包括INTEL CPU、标准的PCI总线、SCSI接口卡、标准的光纤网络接口卡(FC HBA)、以太网络接口卡、硬盘。服务器节点可以运行WINDOWS 2000等多种操作系统和WEB服务器软件系统。
光纤交换机采用Brocade 3200系列交换机。管理主机采用商用PC机,使用以太网络接口卡连接到以太网络,管理存储区域网络。
作为存储管理节点的目标服务器采用商业化商用PC机如联想天瑞3130,硬件子系统的模块结构如图2。
目标服务器的主板采用商用的服务器主板,如Supermicro(超微)公司X5DA8、X5DAE主板等,所有的CPU采用INTEL公司XEON系列CPU。目标服务器节点包括2个商用的光纤通道HBA,如QLOGIC公司的QLA2310F系列,它们之间可以实现容错备份或者捆绑功能。目标服务器节点包括2-3个商用的SCSI接口卡,如ADAPTEC公司的7XXX系列接口卡,他们连接高密度的磁盘阵列子系统如ISD PinnacleRAID 500。电源子系统采用目前标准的、商用的N+1方式电源如山特公司的3C3系列,FLASH DISK负责存储各种软件,如M-SYSTEMS公司的DOC2000系列。Myrinet接口卡采用Myricom公司的LANai9系列接口卡。
本项发明基于存储区域网络的高速固态存储设备TH-SSD在SSD驱动中实现,在存储区域网络中有两个实现位置本地SSD驱动位于本地文件系统下层,运行在前端服务器结点上;而目标器端SSD驱动位于SCSI目标模拟器中间层模块上层,与存储区域网络的目标器软件一起运行在目标服务器节点上。存储区域网络的软件结构以及SSD驱动的位置如图3所示。为了使软件在光纤网络和以太网络上都能很好地运行,本发明抽象出了FC和iSCSI协议处理中使用到的一系列公共接口,实现了对FC和iSCSI协议的集成。在附图中,为了描述方便,系统中使用的连接网络及其协议分别用光纤网络和FC协议代替。下同。
存储区域网络系统中各软件模块的功能如下表
表1存储区域网络系统的软件功能列表SSD驱动程序作为内核模块,在前端服务器的操作系统和目标服务器端的嵌入式操作系统中运行(操作系统在图3中没有给出,实际上所有软件部分包括的模块都运行在操作系统当中)。系统程序流程如图4所示。
SSD驱动程序将前端服务器和存储网络目标服务器节点上富余的DRAM内存虚拟成高速磁盘设备TH-SSD,以代替传统磁盘对前端服务器发出的数据访问请求做出响应。其过程如下(1)重新组织存储区域网络的前端服务器和目标服务器节点的DRAM内存资源,生成高速虚拟磁盘设备TH-SSD。
SSD驱动程序在加载时检测系统内存,这是通过扫描内核对象e820map实现的。
e820map对象记录了每片连续内存区域的起始地址、大小和用途类型。被预留作SSD用的内存区域会在其用途类型中注明,其内存起始地址和大小在虚拟磁盘的存储空间段结构中做记录,并将它在虚拟磁盘中与已扫描过的SSD内存区域拼接起来,形成连续的虚拟磁盘空间。它在虚拟磁盘中的起始地址遵循以下公式本次扫描的SSD内存区域在虚拟磁盘中的起始地址=上次扫描过的SSD内存区域在虚拟磁盘中的起始地址+上次扫描过的SSD内存区域大小。这样,每片为SSD预留的物理内存区域都用虚拟磁盘的一个存储空间段表示,并且将原本可能不连续的SSD内存区域被映射成连续的虚拟磁盘空间。
在对系统内存进行检测的过程中,我们利用了x86平台上的内存扩展技术,内存扩展方案如图5所示。为此在x86平台上采用物理地址扩展模式,该模式下,CPU启用自身的36根地址线和内存管理单元的三级页表映射方式,三级页表映射方式如图6所示。在该模式下,页目录指针项、页目录项、页表项都是64位,其中页表项的32-36位包含了36位物理地址的高4位。用线性地址的最高2位索引CR3寄存器指向的页目录指针表,以36位物理地址定位页目录表,后继9位在页目录表中定位页表的36位物理地址,再接着9位在页表中定位页的36位物理地址,最后12位为4K页中的偏移量,最终将32位线性地址转换成36位物理地址。由于启用了36根地址线,系统可支持的最大物理内存扩充到236B=64GB。
系统启动时仅为操作系统保留少量维持基本运行所需的物理内存,剩下的为SSD预留和大于4GB的物理地址空间都将映射到不到1GB的内核地址空间中。为此,我们采用了分段动态映射机制完成物理内存空间到内核空间的映射,即在进行读写操作前先将所要读写的数据段映射到内核空间,待读写操作完毕后撤消映射关系,使得内核空间可为其他读写请求所用。
为了便于管理虚拟磁盘,SSD驱动以块为单位对虚拟磁盘空间进行划分,并采用位图记录每个块的使用情况,如果有请求更改了某一内存块的数据,则在位图中将其标记为“脏”,表明此内存块数据应当写回备份磁盘以保证数据的完整性。
此过程完毕后,在前端服务器和远端目标器节点上已经形成连续一致的虚拟磁盘空间,即生成了高速存储设备TH-SSD,接下来可接收前端应用发出的对TH-SSD设备的访问请求。
(2)本地SSD驱动程序从SCSI驱动程序获得前端发往本地TH-SSD的数据访问请求,目标服务器端SSD驱动从SCSI目标模拟中间层获得前端发往目标服务器端TH-SSD的数据访问请求。这个过程遵循标准的SCSI命令处理流程,具体实现可参见SCSI文档。
(3)对于非读写的命令请求(命令详细结构请查阅SCSI文档),它的数据缓冲区中通常会存放命令执行完毕后返回的结果。例如READ_CAPACITY是用于查询虚拟磁盘容量的命令,则命令执行完后其数据缓冲区中就记录了虚拟磁盘的容量大小。在这里,我们使用了分散/聚集映射的I/O处理技术,使得系统可以使用虚拟磁盘进行DMA操作以提高系统性能。具体实现方法是首先,SSD驱动将命令请求数据缓冲区的类型转换为内核数据结构scatterlist类型。这一类型中有一个地址域,它指向了将要进行DMA传输的数据块。其次,SSD驱动将命令执行的结果按照标准SCSI的命令处理格式填充地址域指向的缓冲区域。例如上面的READ_CAPACITY命令执行完毕后,缓冲区域的低4个字节记录了虚拟磁盘的块数目,高4个字节记录了块大小。具体的命令格式可参见标准SCSI指令集。最后向前端返回结果,命令执行结束。
(4)对于读写命令请求,SSD驱动首先根据SCSI命令格式找到要求进行读写操作的虚拟磁盘地址。例如READ_10读命令的命令缓冲区中的第2-第5字节记录了要读取的数据在虚拟磁盘中的块地址,将块地址与块大小相乘即得到数据在虚拟磁盘中的地址。然后SSD驱动将读写请求数据缓冲区的类型转换为scatterlist内核数据类型。同非读写命令一样,其地址域指向了存放读写数据的缓冲区。接下来,SSD驱动根据请求数据在虚拟磁盘中的起始地址和大小,顺次扫描虚拟磁盘的内存空间段,以定位出该数据块位于哪些内存空间段。SSD驱动使用内核映射函数ioremap()将所访问数据在这些内存空间段的物理地址空间映射到内核地址空间。
对于读请求,需要将虚拟磁盘存储空间段中的数据拷贝到scatterlist类型中address成员指向的读缓冲区;对于写请求,需要将scatterlist类型中地址域指向的写缓冲区中的数据拷贝到虚拟磁盘的存储空间段。在此期间,每读写一块缓冲区中的数据,都需要将scatterlist类型的数据缓冲区映射到内核空间,读写完毕后撤消该映射。此外,如果SSD驱动程序在加载时指定了备份磁盘,则需要将备份磁盘的信息填充到写请求结构的设备域中,使用内核提供的SCSI命令接口函数将命令和数据发往备份磁盘,系统会启动一个工作线程对磁盘进行异步写操作,即写操作无需等待磁盘写操作的完成即可向前端返回。
读写操作完毕后,撤消虚拟磁盘的存储空间段地址到内核地址空间的映射,释放读写缓冲区占用的内存空间,向前端返回执行结果。
由于系统采用易失性的内存作为高速存储设备,在系统发生崩溃或重启时其中的数据会丢失。因此需要一种机制保证TH-SSD中数据的完整性,这就是使用备份磁盘的目的。在这里,我们使用了双日志双备份磁盘镜像策略,其示意图如图7。
写请求对虚拟磁盘的某个块写入数据后,会在位图中将块标识为“脏”。虚拟磁盘工作线程启动后,会设置一个缓冲队列,将此时刻后到来的I/O操作缓存起来,然后将标识为“脏”的内存块写回到备份磁盘。写完毕后再将缓冲队列中的内容写回内存块并在位图中标记其为“脏”。
为方便表述,将磁盘A记为A,磁盘B记为B,日志A记为A(L),日志B记为B(L),虚拟磁盘工作线程记为C。每次工作线程启动后的备份过程如下初始状态A处于T(1)时刻的完整状态,A(L)记录了T(0)时刻到T(1)时刻的变化量Δ(0);B处于T(2)时刻的完整状态,B(L)记录了T(1)时刻到T(2)之间的变化量Δ(1)。在T(3)时刻,C将向A中写入T(2)到T(3)时刻之间的变化量Δ(2),写入步骤如下步骤(1)在此过程中B是T(2)时刻的完整状态,而A不完整步骤(2)在此过程中A是T(2)时刻完整状态,B是T(2)时刻的完整状态,A(L)不完整步骤(3)在此过程中B是T(2)时刻完整状态,A不完整写入结束时可保证B是T(2)时刻完整状态,B(L)记录了T(1)时刻到T(2)之间的变化量Δ(2),A是T(3)时刻的完整状态,A(L)记录了T(2)时刻到T(3)时刻的变化量Δ(2)。这样,一个备份处理过程结束,只需交换A、B的角色,即可继续下一个备份过程。
以上每个操作均在完成后在日志中做标记,如果没有该标记则证明上一次的写入操作失败。系统重新启动之后可以选择处于某时刻完整状态的磁盘向不完整的磁盘同步。同步的时候,如果是在步骤1失败,则只需将B(L)写入A,此时A、B处于同一时刻的完整状态(T(2));如果在步骤2失败,只需作废A(L),这时A、B均处于相同时刻的完整状态(T(2));如果在步骤3失败,只需将A(L)写入A,这时A、B处于不同时刻的完整状态(AT(3),BT(2))。
我们在光纤网络和千兆以太网络环境下,对带有SSD驱动程序的存储区域网络系统的I/O性能进行了测试,采用的测试工具是Iometer,使用100%随机读写命令流,并将结果与传统磁盘的I/O性能进行了对比。结果如下表2传统磁盘的读写性能
表3目标服务器使用SSD的存储区域网络系统在光纤网络环境下的读写性能
表4目标服务器使用SSD的存储区域网络系统在千兆以太网环境下的读写性能
表5前端服务器使用SSD的存储区域网络系统在千兆以太网环境下的读写性能
测试结果表明与使用传统磁盘的存储区域网络系统的I/O性能相比较,目标服务器采用了基于系统DRAM内存资源实现的高速存储设备TH-SSD的存储区域网络系统的I/O性能有了明显的提高在光纤网络环境下,对于比较典型的随机请求块大小为4KB的100%读请求,系统的IOPS提高了131.9倍,对于随机请求块大小为4KB的100%写请求,系统的IOPS提高了46.2倍;在千兆以太网环境下,对于上述类型的读写请求,系统的IOPS分别提高了92.4倍和72.9倍。而前端服务器采用了TH-SSD的存储区域网络系统的性能提高更大在千兆以太网环境下,对于上述类型的读写请求,系统的IOPS分别提高了234.1和103.6倍。
基于存储区域网络的高速固态存储设备具有如下特点1、充分利用了存储区域网络前端服务器和目标服务器节点上富余的DRAM内存资源,提高了系统的资源利用率;2、在x86平台上采用物理地址扩展技术使系统可支持多达64GB的物理内存,使用虚拟技术可将物理内存地址分段、动态地映射到内核空间,大大扩展了虚拟磁盘的容量,从而支持对大容量TH-SSD的数据访问。
3、采用双日志双备份磁盘镜像策略保护TH-SSD中数据的完整性。该策略保证在任意时刻都至少有一块磁盘包含了TH-SSD在某一时刻的完整数据。这样在系统崩溃或重启后,TH-SSD可以从包含完整数据的备份磁盘中恢复之前的数据。
4、无缝地实现了对FC SAN与IP SAN的支持。我们通过一系列的开关语句使得两个差异较大的软件模块合并成了一个软件模块,用户只需要在编译软件模块的时候通过简单的添加相应的选项就可以把相关的开关语句打开,实现对用户需要的SAN系统的支持。实验结果表明,TH-SSD在光纤网络和以太网络中都能很好地运行,并达到非常优越的性能。
权利要求
1.基于存储区域网络的高速固态存储设备的实现方法,其特征在于,这是一种把存储区域网络中前端服务器和目标服务器端节点上富余的DRAM内存资源组织起来形成高速的虚拟磁盘设备,为用户提供与普通磁盘一致的读写访问接口,以代替磁盘为前端应用程序提供高速稳定的数据访问的方法,在以下的叙述中除非另有说明,存储区域网络都简称为SAN,高速固态存储设备简称为SSD,所述的实现方法依次含有以下步骤步骤(1)依次按以下步骤,重新组织SAN的前端服务器和目标服务器节点的DRAM内存资源,生成虚拟磁盘SSD步骤(1.1)所述的SSD均通过SSD驱动程序实现在前端服务器上,设定本地SSD驱动程序,该驱动程序经SCSI驱动程序连接到文件系统,同时该驱动程序又与本地SSD互连,所述本地SSD驱动程序负责处理前端应用程序对本地SSD的数据访问操作;在作为存储管理节点的目标服务器端,设定目标服务器端SSD驱动程序,该驱动程序在与目标服务器端SSD互连的同时又与SCSI模拟目标器中间层互连,而该SCSI模拟目标器中间层又经SCSI子系统与磁盘子系统互连;步骤(1.2)所述的SSD驱动程序加载时通过扫描内核对象e820map结构来检测系统的内存,将系统内存中那些为SSD预留的内存区域的起始地址和大小记录在SSD驱动程序用于记录可用于SSD的内存段的结构中,将物理上可能不连续的内存空间转换为逻辑上连续的虚拟磁盘空间,并使用以下公式计算该内存区域在虚拟磁盘SSD中的起始地址本次扫描的内存区域在虚拟磁盘SSD中的起始地址=上次扫描过的内存区域在虚拟磁盘中的起始地址+上次扫描过的内存区域的大小,其中“+”表示相加,把原本物理上可能不连续的内存空间映射成逻辑上连续的虚拟磁盘空间,在前端服务器和目标服务器端生成虚拟磁盘SSD;步骤(2)按照SCSI文档,本地SSD驱动程序从SCSI驱动程序获得前端应用程序发往本地SSD的数据访问的SCSI命令请求,目标服务器端SSD驱动程序从SCSI模拟目标器中间层获得前端应用发往目标器服务器端SSD的数据访问的SCSI命令请求;步骤(3)对于非读写的命令请求,该命令请求的数据缓冲区中保存有所述非读写命令执行完毕后返回的数据,则依次按照服下步骤处理步骤(3.1)SSD驱动程序使用内核数据结构scatterlist来表示命令请求的数据缓冲区,每一个scatterlist结构中都有一个地址域和一个长度域,其中地址域用于存储所表示的数据缓冲区的起始地址,长度域用于存储所表示的数据缓冲区的大小;步骤(3.2)SSD驱动程序按照SCSI的命令处理格式把该非读写命令请求执行完毕后返回的数据填充到此命令的scatterlist结构所表示的缓冲区中;步骤(4)对于读写命令请求,则SSD驱动程序按照以下步骤依次处理步骤(4.1)SSD驱动程序按照步骤(3.1)所述的方法使用scatterlist结构表示该读写命令请求的数据缓冲区;步骤(4.2)SSD驱动程序从SCSI命令中解析出此命令要进行读写操作的数据所在的虚拟磁盘地址以及数据长度;步骤(4.3)SSD驱动程序根据SCSI命令所请求的数据在虚拟磁盘中的起始地址和请求数据的长度,顺次扫描SSD驱动程序用于记录可用于SSD的内存段的结构,以确定该SCSI命令所要访问的虚拟磁盘中的数据段在哪些物理内存段,并获取此数据段所在相应的物理内存段中的起始地址以及长度;步骤(4.4)将所获得数据段在各个物理内存段中的地址空间映射到内核空间,对于读请求,把虚拟磁盘存储空间中的数据拷贝到与该请求对应的scatterlist结构所表示的数据缓冲区;对于写请求,把该请求对应的scatterlist结构所表示的数据缓冲区中的数据拷贝到虚拟磁盘的存储空间段中,并进行磁盘备份;步骤(4.5)将步骤(4.4)中所述的地址映射撤销。
2.由于本方法是利用存储区域网络内前端服务器和目标服务器端富余的DRAM内存资源来实现高速固态存储设备的,数据具有易失性,因此我们根据权利要求1所述,对于写命令请求依次按以下步骤使用了双日志双备份磁盘镜像策略来保证系统在断电或者发生故障而重起的情况下SSD中数据的能够从磁盘中得到最近一次完整的数据并将SSD中的数据恢复成这些完整的数据,在这里我们定义双磁盘中某一个磁盘的数据为完整的,在写入到SSD中的数据还没有开始备份到磁盘的时候或者是当写入SSD中的数据块被成功的完全(而不是部分的)备份到此磁盘的时候步骤(1)在写请求虚拟磁盘中的某个块写入数据后,置位位图中相应的位以表示虚拟磁盘中与之相对应数据块为“脏”数据块(位图结构加载SSD驱动程序的时候被初始化,位图中的每一位都被初始化为“0”,SSD在逻辑上被划分为大小一致的块,位图中的每一位都与某一个块相对应,当位图中某一位为“0”时,表示相应的SSD块中的数据是“干净”的,即SSD块中的数据不需要备份到磁盘,当位图中某一位被置为“1”时,表示相应的SSD块中的数据是“脏”的,即SSD块中的数据需要备份到磁盘);步骤(2)在虚拟磁盘工作流程启动后,会设置一个缓冲队列,把此时刻到来的I/O操作予以缓存;步骤(3)然后把标记为“脏”的虚拟磁盘块写回到备份磁盘;步骤(4)再把缓冲队列中的内容写回到内存块,在位图中标记相应的位为“脏”。
3.根据权利要求1所述的基于存储区域网络的高速固态存储设备的实现方法,其特征在于在所述步骤(1.2)中检测系统内存时,利用了在X86平台上的物理地址扩展模式,在该模式下,CPU启用了自身的36根地址线和内存管理单元的三级页表映射方式,以把32位线性地址转换成36位物理地址,使系统支持的最大物理内存扩展到64GB。
4.根据权利要求1所述的基于存储区域网络的固态高速存储设备的方法,其特征在于位于作为存储管理节点的目标服务器上的SSD驱动程序通过一系列的开关语句使得目标服务器端的SSD可以无缝的分别支持通过光纤互连的存储区域网络以及通过以太网互连的存储区域网络,即可以分别支持通过FC以及IP传输的SCSI协议,这样用户只需要在重新编译SSD驱动程序通过简单的配置选项以打开相应的开关即可以使得SSD与用户使用的互连网络相兼容。
全文摘要
本发明属于存储区域网络SAN存储技术领域,其特征在于它将SAN中前端服务器和目标服务器节点上富余的DRAM内存资源组织起来形成高速虚拟磁盘设备TH-SSD,为用户提供与普通磁盘一致的读写访问接口。此方法采用虚拟技术将原本分散的内存资源映射到连续一致的虚拟磁盘地址空间,前端应用发出的对TH-SSD的数据访问请求均为对虚拟磁盘的请求。在实现上,采用了x86平台的内存扩展技术,扩展了可用的虚拟磁盘空间;采用了双日志双备份磁盘镜像策略保证TH-SSD中数据的完整性;实现了对FC SAN与IP SAN的无缝支持,使得TH-SSD在光纤网络和以太网络环境下都能很好地工作。
文档编号G06F3/06GK1945537SQ20061008893
公开日2007年4月11日 申请日期2006年7月27日 优先权日2006年7月27日
发明者舒继武, 薛巍, 于冰, 郑纬民 申请人:清华大学