专利名称:网络存储系统的流水处理方法
技术领域:
本发明属于信息的存储,特别涉及网络存储系统的数据传输。
背景技术:
为了提高存储系统的性能,众多学者侧重存储系统的并行性、可扩展性和容错处理的研究。由于信息的重要价值以及网络的发展,引发出对存储系统独立性与共享性的需求,人们转而关注存储节点外部的网络存储结构的研究,从而启动了从内向外的发展过程。网络存储技术是当前信息技术领域研究的热点问题。存储区域网(storage area network,SAN)、附网存储(network attached storage,NAS)、网络磁盘阵列(network attachedRAID)等就是其中的代表。网络存储系统是以数据为中心的公共数据平台,能够同时为多用户提供服务,还可以对数据进行智能化处理。提高网络存储系统的性能可以从以下几个方面入手一是提高存储设备性能,二是提高存储网络带宽,三是优化网络存储系统结构及协议,四是研究更好的数据处理策略。
流水线技术最初运用到CPU内部,对处理机的算术逻辑部件进行分段,以便为各种数据类型进行流水操作,这种流水线称为部件级流水线。另一种流水线称为处理机级流水线,它是把解释指令的过程按照流水方式处理,处理机处理的主要时序就是解释指令的过程。把这个过程分为若干个子过程,按照流水方式组织起来,就能使处理机重叠地解释多条指令。还有一种流水线称为处理机间流水线,又叫宏流水线。它由两个或两个以上的处理机串行地对同一数据流进行处理,每个处理机完成一项任务。
随着单个存储设备性能的不断提高,又重拾存储系统内部结构的研究,存储I/O流水处理技术就是在这种思想指引下提出的。
发明内容
本发明提出两种网络存储系统的流水处理方法,其目的都是提高存储系统性能,从网络存储系统结构和数据处理策略出发,在理解流水线技术本质的基础上,将流水线技术运用到网络存储系统当中,它可以被广泛应用于各种网络存储系统。
本发明一种网络存储系统的流水处理方法,称为固定流水处理方法,顺序包括下列步骤(1)网络接口接收到用户数据请求,判断该数据请求类型;(2)如果是读请求,进行步骤(3),如果是写请求,转步骤(4);(3)将此请求加入读命令处理队列,等待流水处理流水处理由两个流水段组成,a、b步骤的顺序执行组成第一个流水段,c、d步骤的顺序执行组成第二个流水段;当前用户请求的第一个流水段和上一个用户请求的第二个流水段并行同时启动,在本流水段内顺序执行段内各步骤,两个流水段并行分别执行结束后,同步一次,即先完成的流水段必须等到并行的对方流水段完成后,再同时开始启动后续并行执行步骤当前用户请求的第二个流水段和下一个用户请求的第一个流水段并行同时启动,在本流水段内顺序执行段内各步骤,两个流水段并行分别执行结束后,必须再次同步,…如此顺序进行;每执行完一条读命令、即d步骤结束,通过网络端口返回处理结果;其中a步骤代表用户请求前期处理步骤,b步骤代表底层I/O调度步骤,c步骤代表数据拷贝步骤,d步骤代表返回用户请求结果步骤;(4)将此请求加入写命令处理队列,等待流水处理流水处理由两个流水段组成,a、e步骤的顺序执行组成第一个流水段;f、d步骤的顺序执行组成第二个流水段,当前用户请求的第一个流水段和上一个用户请求的第二个流水段并行同时启动,在本流水段内顺序执行段内各步骤,两个流水段并行分别执行结束后,同步一次,即先完成的流水段等到并行的对方流水段完成后,再同时启动后续并行执行步骤当前用户请求的第二个流水段和下一个用户请求的第一个流水段并行同时启动,在本流水段内顺序执行段内各步骤,两个流水段并行分别执行结束后,必须再次同步,…如此顺序进行;每执行完一条写命令、即d步骤结束,通过网络端口返回处理结果;其中a步骤代表用户请求前期处理步骤,e步骤代表数据拷贝步骤;f步骤代表底层I/O调度步骤,d步骤代表返回用户请求结果步骤。
所述的网络存储系统的流水处理方法,其特征在于(1)当处理读请求时,所述a步骤为用户请求前期处理步骤,当前用户请求,经过预处理添加至用户I/O任务链,然后控制程序从用户I/O任务链中提取命令,经过Cache处理、命令排队、命令分解处理后,形成多个磁盘上的子命令,并添加至对应磁盘串的子命令链;所述b步骤为底层I/O调度步骤,底层I/O控制程序通过执行各磁盘串的命令,进行并行I/O调度,从磁盘上存取数据;所述c步骤为读请求的数据拷贝步骤,根据数据的分块情况和网络传输所要求的数据存放位置,对从磁盘上读取的数据进行合并、整理、拷贝操作;所述d步骤为读请求的返回用户请求结果步骤,通过网络端口返回处理结果,至此用户请求完成;(2)当处理写请求时,所述a步骤为用户请求前期处理步骤,当前用户请求,经过预处理添加至用户I/O任务链,然后控制程序从用户I/O任务链中提取命令,经过Cache处理、命令排队、命令分解处理;所述e步骤为写请求的数据拷贝步骤,以及根据数据的分块情况对写数据进行分解、合并、拷贝等操作后,形成多个磁盘上的子命令,添加至对应磁盘串的子命令链;所述f步骤为写请求的底层I/O调度步骤,通过执行各磁盘串的命令,进行并行I/O调度,向磁盘写数据;所述d步骤为写请求的返回用户请求结果步骤,通过网络端口返回处理结果信息,至此用户请求完成。
本发明的另外一种网络存储系统的流水处理方法,称为柔性流水处理方法,顺序包括下列步骤(1)网络接口接收到用户数据请求,判断该数据请求类型;
(2)如果是读请求,进行步骤(3),如果是写请求,转步骤(4);(3)将此请求加入读命令处理队列,等待流水处理流水过程由两个流水段组成,a、b步骤或b步骤或a、b、c步骤或b、c步骤的顺序执行组成第一个流水段;c、d步骤或d步骤或d步骤与再下一个用户请求a步骤或c、d步骤与再下一个用户请求a步骤的顺序执行组成第二个流水段,当前用户请求的第一个流水段和上一个用户请求的第二个流水段并行同时启动,在本流水段内顺序执行段内各步骤,两个流水段并行分别执行结束后,同步一次,即先完成的流水段必须等到并行的对方流水段完成后,再同时开始启动后续并行执行步骤当前用户请求的第二个流水段和下一个用户请求的第一个流水段并行同时启动,在本流水段内顺序执行段内各步骤,两个流水段并行分别执行结束后,必须再次同步,…如此顺序进行;每执行完一条读命令、即d步骤结束,通过网络端口返回处理结果;其中a步骤代表用户请求前期处理步骤,b步骤在读请求时代表底层I/O调度步骤、在写请求时代表数据拷贝步骤;c步骤在读请求时代表数据拷贝步骤、在写请求时代表底层I/O调度步骤,d步骤代表返回用户请求结果步骤。
(4)将此请求加入写命令处理队列,等待流水处理流水过程由两个流水段组成,a、e步骤或a步骤或上一个用户请求d步骤与a步骤或上一个用户请求d步骤与a、e步骤的顺序执行组成第一个流水段;f、d步骤或f步骤或上一个用户请求e步骤与f步骤或上一个用户请求e步骤与f、d步骤的顺序执行组成第二个流水段,当前用户请求的第一个流水段和上一个用户请求的第二个流水段并行同时启动,在本流水段内顺序执行段内各步骤,两个流水段并行分别执行结束后,同步一次,即先完成的流水段必须等到并行的对方流水段完成后,再同时开始启动后续并行执行步骤当前用户请求的第二个流水段和下一个用户请求的第一个流水段并行同时启动,在本流水段内顺序执行段内各步骤,两个流水段并行分别执行结束后,必须再次同步,…如此顺序进行;每执行完一条写命令、即d步骤结束,通过网络端口返回处理结果;其中a步骤代表用户请求前期处理步骤,e步骤代表数据拷贝步骤;f步骤代表底层I/O调度步骤,d步骤代表返回用户请求结果步骤。
所述的网络存储系统的流水处理方法,其特征在于(1)当处理读请求时,所述a步骤为用户请求前期处理步骤,当前用户请求,经过预处理添加至用户I/O任务链,然后控制程序从用户I/O任务链中提取命令,经过Cache处理、命令排队、命令分解处理后,形成多个磁盘上的子命令,并添加至对应磁盘串的子命令链;所述b步骤为底层I/O调度步骤,底层I/O控制程序通过执行各磁盘串的命令,进行并行I/O调度,从磁盘上存取数据;所述c步骤为读请求的数据拷贝步骤,根据数据的分块情况和网络传输所要求的数据存放位置,对从磁盘上读取的数据进行合并、整理、拷贝操作;所述d步骤为读请求的返回用户请求结果步骤,通过网络端口返回处理结果,至此用户请求完成;(2)当处理写请求时,
所述a步骤为用户请求前期处理步骤,当前用户请求,经过预处理添加至用户I/O任务链,然后控制程序从用户I/O任务链中提取命令,经过Cache处理、命令排队、命令分解处理;所述e步骤为写请求的数据拷贝步骤,以及根据数据的分块情况对写数据进行分解、合并、拷贝等操作后,形成多个磁盘上的子命令,添加至对应磁盘串的子命令链;所述f步骤为底层I/O调度步骤,通过执行各磁盘串的命令,进行并行I/O调度,向磁盘写数据;所述d步骤为写请求的返回用户请求结果步骤,通过网络端口返回处理结果信息,至此用户请求完成。
以下对本发明得以实现的依据进行分析,在磁盘阵列存储系统中实现流水线操作的两个基本的前提条件是1、前一个I/O命令没有完全结束之前,应获取下一个I/O命令的有关信息;2、不同部件应能同时操作,资源不发生冲突。
从接收的渠道看,网络磁盘阵列不同于一般的盘阵列,它处理的信息包括两部分一是通过主机外设通道接收的SCSI命令,另一是通过网络接口接收到的用户数据请求。通过主机外设通道接收的SCSI命令根据其功能属性又分为两种类型,一种类型是与主机文件系统管理相关的命令,包括获取或修改目录结构、文件分布信息、文件属性信息以及文新文件分配空间等;第二种类型是与存储设备管理工作相关的命令,包括一些SCSI命令,如Test Unit Ready,Mode Sense,Capacity,Inquiry等。主机通过发送第二种类型的命令,可以获取相应存储设备的物理信息,改变存储设备的某些配置参数,并使存储设备处于工作就绪状态。通过网络接口接收到的用户数据请求通常包括读请求和写请求。
以读请求为例,通过网络接口接收到的用户数据请求包含I/O任务信息,其处理流程如图1所示。一个用户请求网络磁盘阵列的网络端口后,经过预处理添加至用户I/O任务链。然后控制程序从用户I/O任务链中提取命令,经过Cache处理、命令排队、命令分解等处理后,形成多个磁盘上的子命令,并添加至对应磁盘串的子命令链。底层I/O控制程序通过执行各磁盘串的命令,进行并行I/O调度,从磁盘上存取数据。根据数据的分块情况和网络传输所要求的数据存放位置,对从磁盘上读取的数据进行合并、整理、拷贝等操作。最后通过网络端口返回处理结果,至此用户请求完成。
从读请求用户请求的处理流程可以看出,网络磁盘阵列处理一个用户请求主要分为五个步骤。先是接收用户请求,然后处理用户请求(包括Cache调度、命令排队、命令分解等),再进行底层I/O调度,再经过数据拷贝阶段,最后返回用户请求结果。接收用户请求占用网卡、PCI总线、内存和CPU资源,处理用户请求占用内存和CPU资源,底层I/O调度占用PCI总线、内存、磁盘驱动卡资源,数据拷贝占用内存和CPU资源,返回用户请求结果占用内存和网卡资源。根据各个步骤对资源的占用情况,可以得到一个用户请求的处理流程在不同时段占用功能部件的预约表,如表1所示。
表1用户请求占用功能部件的预约表 为了满足资源不发生冲突的基本前提条件,应对使用频繁的内存部件的带宽给予必要的考虑。假设接收用户请求阶段和返回用户请求阶段能并行执行,则因网卡的峰值数据传输率为12.5MB/S,要求内存带宽25MB/S。在底层I/O调度阶段,如果采用两串SCSI-160通道的磁盘,峰值数据传输率为160*2=320MB/S,要求内存带宽320MB/S。在处理用户请求阶段,如果采用Pentium3-800Mhz的CPU,其性能大约在300MIPS左右,按照10条机器指令访问1次主存,则要求内存带宽30MB/S。假设接收用户请求、处理用户请求、底层I/O调度、返回用户请求结果4个阶段都能并行工作,则对内存的带宽要求之和为375MB/S。目前主流内存有PC133、DDR、RAMBUS3等。其中,PC133内存的峰值数据传输率为133*4=532(MB/S),DDR内存的峰值数据传输率为266*4=1064(MB/S),RAMBUS内存的峰值数据传输率为400*4=1600(MB/S)。采用这些内存的任一种,均能满足4个阶段并行工作的要求。因此,在流水调度上,内存可以不作为冲突部件,而对其它部件透明。
为了满足在一个I/O命令上未结束之前获得下一个I/O命令,并且准备就绪,应对各阶段的延迟时间进行分析,观察这些延时是否适宜作流水操作。下面我们来考虑各阶段的延时。
接收用户请求阶段的延时。用户的原始请求是面向文件的,经过网络磁盘阵列系统的服务器对文件信息的提取、整理,形成了一组描述文件数据区的地址表。各地址表对应的数据区域是不相交且不相邻的。用户请求涉及的关键数据结构如下TYPEDEF STRUCT{ unsigned long total;//用户请求中包含的离散数据区块数unsigned long op;//用户请求类型(读、写)unsigned long flength;//用户请求文件长度}HEADER;TYPEDEF STRUCT//文件连续数据区描述结构{ unsigned long blkbegin;//用户请求文件数据起始地址unsigned long blklength;//用户请求文件数据长度}BLKCHAIN;一个用户请求由上述HEADER;BLKCHAIN这两个结构组成,图2为用户请求数据结构示意图;图中,箭头表示指向下一个数据块的指针,由于用户请求中的数据是串行连接的,所以指针的表示可以按地址连续的方式隐含。如果一个用户请求包含10个块链结构,那么这个用户请求的实际数据大小就为164个字节。考虑用户请求的大小不是固定的,假设采用千兆网传输,传送一个用户请求大约在10us左右,若网络负荷较重,则用户请求的传输延时将增大。再考虑网络协议的处理时间,统计网络协议处理模块的C语言语句的条数,大约为200句左右,按1∶10的比例换算成机器代码为2000条左右。若CPU采用Pentium3-866Mhz,则1ns输出一条机器指令,执行2000条机器代码需要2us左右。综上考虑,接收用户请求阶段的延时大约在10us-20us左右。
处理用户请求阶段的延时。统计处理用户请求模块的程序量,以C语言的一条语句为单位,大约在1000-2000条范围内,按1∶10的比例换算成机器代码在10000-20000条左右,若CPU采用Pentium3-866Mhz,执行10000-20000条机器代码需要10-20us左右。则处理用户请求阶段的延时大约在10us-20us左右。
底层I/O调度阶段的延时。以请求64KB数据为例,若底层I/O设备采用三串SCSI-160磁盘并行操作,实际平均数传率在60MB/S左右,则延时大约为1ms。若I/O设备采用单个磁盘驱动器,按SCSI的适配器,峰值传输率为80MB/S,则平均数传率在35MB/S左右,则延时大约在2ms。因此底层I/O调度阶段的延时大约在1000us-2000us左右。
数据拷贝阶段的延时。经过测试,采用PC133内存和Pentium3-866Mhz的CPU,1MB数据在内存中移动一次,需要时间6ms左右。假设进行一次数据拷贝,64KB数据则需要延时400us。若考虑采用底层I/O聚散技术和VIA技术,数据拷贝过程将有所变化,对比将在后文予以讨论。因此,数据拷贝阶段的延时大约在400us左右。
返回用户请求结果阶段的延时。传送64KB数据,采用千兆网,如上所述,协议处理时间为2us,通常网络带宽的实际利用率只有30%左右,则传输数据的延时大约为1800us。因此返回用户请求结果阶段的延时在1800us左右。用户请求的处理过程延时量化处理,如图3所示。
由于底层I/O调度阶段占用的功能部件主要是设备通道驱动卡、PCI总线、内存,返回用户请求结果阶段主要占用网卡、内存,而目前内存的存取速度足够支持二者的并行工作,因此底层I/O调度阶段与返回用户请求结果阶段能够并行工作。
跟其它阶段的延时比较起来,接收用户请求阶段和处理用户请求阶段的延时很小,因此可以将这两个阶段合并,称为用户请求的前期处理阶段。考虑到用户请求的前期处理、底层I/O调度、数据拷贝、返回用户请求结果四个阶段中,主要是底层I/O调度和返回用户请求结果阶段的延时占了绝大部分时间,所以可以把一个用户请求的处理过程分为两个流水段,即底层I/O调度阶段和返回用户请求结果阶段。如果能使第n+1个用户请求的底层I/O调度阶段与第n个用户请求的返回用户请求结果阶段重叠执行,便可以实现多个用户请求的流水处理,如图4所示。
底层I/O调度阶段的延时在1000us-2000us之间,返回用户请求结果阶段的延时在1800us左右,无法肯定一个用户请求中两者的大小。因此,为了取得最佳的执行效果,可以将用户请求前期处理阶段和数据拷贝阶段灵活地分配到上述的两个流水段中。
写请求处理过程与读请求类似,通过网络接口接收到的用户数据请求包含I/O任务信息和写数据。一个用户请求网络磁盘阵列的网络端口后,经过预处理添加至用户I/O任务链。然后控制程序从用户I/O任务链中提取命令,经过Cache处理、命令排队、命令分解等处理,以及根据数据的分块情况对写数据进行分解、合并、拷贝等操作后,形成多个磁盘上的子命令,添加至对应磁盘串的子命令链。底层I/O控制程序通过执行各磁盘串的命令,进行并行I/O调度,向磁盘写数据。最后通过网络端口返回处理结果信息,至此用户请求完成。
从用户写请求的处理流程可以看出,网络磁盘阵列处理一个用户请求主要分为五个步骤,先是接收用户请求和数据,然后处理用户请求(包括Cache调度、命令排队、命令分解等),再进行底层I/O调度,再经过数据拷贝传递阶段,最后返回用户请求处理结果。各阶段延时分布上,写请求的接受用户请求延时,与读请求返回用户请求结果延时相当;写请求的返回用户请求结果延时与读请求的接受用户请求的延时相当;其他各阶段延时基本相同。因此与读请求处理类似地,可形成以接受用户请求阶段和底层I/O调度阶段为主的2个核心阶段,进行重叠流水调度。
为了验证采用流水处理后网络磁盘阵列系统的性能,我们在网络磁盘阵列的控制软件中分别采用传统串行方式、固定流水方式和柔性流水方式,测试三种处理方式下的不同性能。
定义服务时间指从用户发出请求开始,到请求全部完成所需的时间。表2所列的是测试时网络磁盘阵列和服务器的配置。
表2测试系统的配置
阵列配置为两串IDE盘,每串2个盘,磁盘型号Maxtor D740X-6L,容量为40G,转速为7200rpm。
网络环境配置为100Mbps交换以太网,计算机网络适配器DFE530TX。
表3试验数据
从表3的试验数据可以看出,采用流水方式的数据传输延时比采用串行方式减小了很多。图9、10分别表示三种调度方式下载和上载操作的性能比较,平均数据服务带宽表示网络磁盘阵列服务端的平均数据带宽,其中图(a)表示请求文件大小为120MB、图(b)表示请求文件大小为75MB、图(c)表示请求文件大小为57MB、图(d)表示请求文件大小为30MB时三种调度方式实现的系统性能比较。随着步骤数的增加,用户请求的频率越大,流水技术发挥的空间也就越大,因此,实验数据表明,随着步骤数的增加,网络磁盘阵列的平均服务数据带宽明显增大。
图1为网络接口接收到的用户数据读请求处理流程图;图2为用户请求数据结构示意图;图3为用户读请求的处理过程延时量化处理的时间图;图4为第n+1个用户请求的底层I/O调度阶段与第n个用户请求的返回用户请求结果阶段重叠执行示意图;图5为固定流水处理流程图;图6为柔性流水处理流程图;图7为用户读请求固定流水段的处理过程示意图;图8为用户读请求柔性流水段的处理过程示意图;图9表示分别采用传统串行、固定流水和柔性流水三种调度方式下载操作的性能比较;图10表示分别采用传统串行、固定流水和柔性流水三种调度方式上载操作的性能比较。
具体实施例方式
以下结合附图对本发明进一步说明。
固定流水方式处理流程如图5所示。用户请求被接收后分别加入读、写命令处理队列,等待流水处理。读流水处理流程如下所述流水线填充阶段完成后,即进入读流水处理同步控制;读流水处理同步操作读用户请求信息队列,将下一个读用户请求信息移到当前读用户请求信息,当前读用户请求信息移到上一个读用户请求信息,读命令处理队列的第一个用户请求移到下一个读用户请求信息;读用户请求信息队列操作完毕后,启动用户请求前期处理和数据拷贝步骤;当底层I/O调度和返回用户请求结果步骤完成后,启动下一次读流水处理同步。
写流水处理流程如下所述流水线填充阶段完成后,即进入写流水处理同步控制;写流水处理同步处理操作写用户请求信息队列,将下一个写用户请求信息移到当前写用户请求信息,当前写用户请求信息移到上一个写用户请求信息,写命令处理队列的第一个用户请求移到下一个写用户请求信息;写用户请求信息队列操作完毕后,启动用户请求前期处理和底层I/O调度步骤;当数据拷贝和返回用户请求结果步骤完成后,启动下一次写流水处理同步。
固定流水段的执行如图7所示。固定流水段的处理过程由两个流水段组成,步骤a、b的循环执行组成第一个流水段,步骤c、d的循环执行组成第二个流水段,各流水段只能在各自段内启动后续步骤,不能跨段启动对方段的步骤。处理第n-1个用户请求的a步骤an-1和处理第n-2个用户请求的c步骤cn-2同时启动,各自完成后,分别启动第n-2个用户请求的d步骤dn-2和第n-1个用户请求的b步骤bn-1。处理第n-2个用户请求的dn-2步骤和处理第n-1个用户请求的bn-1步骤可能不在同一时间完成,先完成的步骤必须要等到对方完成后,才能启动后续步骤,也就是说,两个流水段在一次循环执行结束后,必须同步一次,下一次循环从同一时间点开始。
固定流水段方式中,四个步骤间的通讯伪代码如下所示。
Initial{Sem1=1;Sem2=0;Sem3=1;Sem4=0;Sem5=0;Sem6=0;第1个用户请求的前期处理;第1个用户请求的底层I/O调度;启动进程a;启动进程b;启动进程c;启动进程d;}进程b进程a {{ while(1)while(1) {{ p(Sem2)p(Sem1) 底层I/O调度;用户请求前期处理;v(Sem6);v(Sem2) p(Sem5);} v(Sem1)} }}进程c 进程d{ {while(1) while(1){ {p(Sem3) p(Sem4)数据拷贝;返回用户请求结果;v(Sem4) v(Sem5);} p(Sem6);} v(Sem3)}}其中,Sem1、Sem2、Sem3、Sem4、Sem5、Sem6是控制步骤间同步的信号灯。初始化步骤在处理完第一个用户请求的前期处理阶段和底层I/O调度阶段后,就启动步骤a、b、c、d。因为信号灯Sem1、Sem3的初值等于1,所以步骤a立即进入第二个用户请求的前期处理,步骤c进入第一个用户请求的数据拷贝。因为信号灯Sem2、Sem4的初值等于0,所以步骤b一直等到步骤a执行完并开启信号灯Sem2后,步骤b才能进入处理第二个用户请求的底层I/O调度。步骤d一直等到步骤c执行完并开启信号灯Sem4后,步骤d才进入处理第一个用户请求的返回用户请求结果。当步骤b完成底层I/O调度,必须要等待步骤d完成返回用户请求结果并开启信号灯Sem5后,步骤b才能启动步骤a,开始第一个流水段的又一次循环。若步骤d先于步骤b完成,同样也必须等待步骤b完成。步骤b和步骤d之间的这种互锁机制,保证了两个流水段在完成各自的一次循环后进行同步。
柔性流水方式处理流程如图6所示。用户请求被接收后分别加入读、写命令处理队列,等待流水处理。读流水处理流程如下所述流水线填充阶段完成后,即进入读流水处理同步控制;读流水处理同步包含两步操作,第一步操作读用户请求信息队列,将下一个读用户请求信息移到当前读用户请求信息,当前读用户请求信息移到上一个读用户请求信息,读命令处理队列的第一个用户请求移到下一个读用户请求信息,第二步操作启动柔性流水段,若当前用户请求前期处理完毕,则启动底层I/O调度和数据拷贝步骤,否则启动用户前期处理和返回用户请求结果步骤;启动底层I/O调度和数据拷贝步骤后,若底层I/O调度步骤在返回用户请求结果步骤之前完成,则流程将从条件I返回读流水处理同步,若底层I/O调度步骤在返回用户请求结果步骤之后完成,则流程将从条件II返回读流水处理同步;启动用户前期处理和返回用户请求结果步骤后,若底层I/O调度步骤在返回用户请求结果步骤之前完成,则流程将从条件I返回读流水处理同步,若底层I/O调度步骤在返回用户请求结果步骤之后完成,则流程将从条件II返回读流水处理同步;开始下一次读流水处理同步。
写流水处理流程如下所述流水线填充阶段完成后,即进入写流水处理同步控制;写流水处理同步包含两步操作,第一步操作写用户请求信息队列,将下一个写用户请求信息移到当前写用户请求信息,当前写用户请求信息移到上一个写用户请求信息,写命令处理队列的第一个用户请求移到下一个写用户请求信息,第二步操作启动柔性流水段,若当前用户请求的数据拷贝步骤完毕,则启动底层I/O调度和返回用户请求结果步骤,否则启动用户前期处理和数据拷贝步骤;启动底层I/O调度和返回用户请求结果步骤后,若底层I/O调度步骤在用户请求前期处理步骤之前完成,则流程将从条件I返回写流水处理同步,若底层I/O调度步骤在返回用户请求结果步骤之后完成,则流程将从条件II返回读流水处理同步;启动用户前期处理和数据拷贝步骤后,若用户请求前期处理步骤在底层I/O调度步骤之前完成,则流程将从条件II返回写流水处理同步,若用户请求前期处理步骤在底层I/O调度步骤之后完成,则流程将从条件I返回写流水处理同步;开始下一次写流水处理同步。
图8为采用柔性流水操作方式来调度各阶段的执行,即采用不固定延时。当第二个流水段执行完bn-1时,由于第一个流水段dn-2还没有执行完,此时立即启动执行Cn-1。在下一次延时一开始,第一个流水段就可以从dn-1开始执行,而第二个流水段从an开始执行。若第一个流水段执行完dn-1,而第二个流水段还没有执行完bn,此时立即启动an+1。这样争先启动等待执行的用户请求处理阶段,使得各阶段之间的等待延时最小,从而加速了用户请求的处理过程。
柔性流水方式中,四个步骤间的通讯代码如下所示。
Initial{Sem1=1;Sem2=0;Sem3=1;Sem4=0;第1个用户请求的前期处理;第1个用户请求的底层I/O调度;启动进程a;启动进程b;启动进程c;启动进程d;}进程a 进程b{ {while(1) while(1){ {p(Sem1) p(Sem2)用户请求前期处理;底层I/O调度;v(Sem2) v(Sem3)} }} }进程c 进程d{ {while(1) while(1){ {p(Sem3) p(Sem4)数据拷贝;返回用户请求结果;v(Sem4) v(Sem1)} }} }Sem1、Sem2、Sem3、Sem4是控制步骤间同步的信号灯。初始化步骤在处理完第一个用户请求的前期处理阶段和底层I/O调度阶段后,启动步骤a、b、c、d。因为信号灯Sem1、Sem3的初值等于1,所以步骤a立即进入第二个用户请求的前期处理,步骤c进入第一个用户请求的数据拷贝。因为信号灯Sem2、Sem4的初值等于0,步骤a执行完并开启信号灯Sem2后,步骤b才能进入处理第二个用户请求的底层I/O调度;步骤c执行完并开启信号灯Sem4后,步骤d才进入处理第一个用户请求的返回用户请求结果。当步骤b完成底层I/O调度,直接开启信号灯Sem3,启动步骤c的下一个循环。步骤d完成返回用户请求结果,直接开启信号灯Sem1,启动步骤a的下一个循环。
权利要求
1.一种网络存储系统的流水处理方法,顺序包括下列步骤(1)网络接口接收到用户数据请求,判断该数据请求类型;(2)如果是读请求,进行步骤(3),如果是写请求,转步骤(4);(3)将此请求加入读命令处理队列,等待流水处理流水处理由两个流水段组成,a、b步骤的顺序执行组成第一个流水段,c、d步骤的顺序执行组成第二个流水段;当前用户请求的第一个流水段和上一个用户请求的第二个流水段并行同时启动,在本流水段内顺序执行段内各步骤,两个流水段并行分别执行结束后,同步一次,即先完成的流水段必须等到并行的对方流水段完成后,再同时开始启动后续并行执行步骤当前用户请求的第二个流水段和下一个用户请求的第一个流水段并行同时启动,在本流水段内顺序执行段内各步骤,两个流水段并行分别执行结束后,必须再次同步,…如此顺序进行;每执行完一条读命令、即d步骤结束,通过网络端口返回处理结果;其中a步骤代表用户请求前期处理步骤,b步骤代表底层I/O调度步骤,c步骤代表数据拷贝步骤,d步骤代表返回用户请求结果步骤;(4)将此请求加入写命令处理队列,等待流水处理流水处理由两个流水段组成,a、e步骤的顺序执行组成第一个流水段;f、d步骤的顺序执行组成第二个流水段,当前用户请求的第一个流水段和上一个用户请求的第二个流水段并行同时启动,在本流水段内顺序执行段内各步骤,两个流水段并行分别执行结束后,同步一次,即先完成的流水段等到并行的对方流水段完成后,再同时启动后续并行执行步骤当前用户请求的第二个流水段和下一个用户请求的第一个流水段并行同时启动,在本流水段内顺序执行段内各步骤,两个流水段并行分别执行结束后,必须再次同步,…如此顺序进行;每执行完一条写命令、即d步骤结束,通过网络端口返回处理结果;其中a步骤代表用户请求前期处理步骤,e步骤代表数据拷贝步骤;f步骤代表底层I/O调度步骤,d步骤代表返回用户请求结果步骤。
2.如权利要求1所述的网络存储系统的流水处理方法,其特征在于(1)当处理读请求时,所述a步骤即用户请求前期处理步骤中,当前用户请求,经过预处理添加至用户I/O任务链,然后控制程序从用户I/O任务链中提取命令,经过Cache处理、命令排队、命令分解处理后,形成多个磁盘上的子命令,并添加至对应磁盘串的子命令链;所述b步骤即底层I/O调度步骤中,底层I/O控制程序通过执行各磁盘串的命令,进行并行I/O调度,从磁盘上存取数据;所述c步骤即读请求的数据拷贝步骤中,根据数据的分块情况和网络传输所要求的数据存放位置,对从磁盘上读取的数据进行合并、整理、拷贝操作;所述d步骤即读请求的返回用户请求结果步骤中,通过网络端口返回处理结果,至此用户请求完成;(2)当处理写请求时,所述a步骤即用户请求前期处理步骤中,当前用户请求,经过预处理添加至用户I/O任务链,然后控制程序从用户I/O任务链中提取命令,经过Cache处理、命令排队、命令分解处理;所述e步骤即写请求的数据拷贝步骤中,以及根据数据的分块情况对写数据进行分解、合并、拷贝等操作后,形成多个磁盘上的子命令,添加至对应磁盘串的子命令链;所述f步骤即写请求的底层I/O调度步骤中,通过执行各磁盘串的命令,进行并行I/O调度,向磁盘写数据;所述d步骤即写请求的返回用户请求结果步骤中,通过网络端口返回处理结果信息,至此用户请求完成。
3.一种网络存储系统的流水处理方法,顺序包括下列步骤(1)网络接口接收到用户数据请求,判断该数据请求类型;(2)如果是读请求,进行步骤(3),如果是写请求,转步骤(4);(3)将此请求加入读命令处理队列,等待流水处理流水过程由两个流水段组成,a、b步骤或b步骤或a、b、c步骤或b、c步骤的顺序执行组成第一个流水段;c、d步骤或d步骤或d步骤与再下一个用户请求a步骤或c、d步骤与再下一个用户请求a步骤的顺序执行组成第二个流水段,当前用户请求的第一个流水段和上一个用户请求的第二个流水段并行同时启动,在本流水段内顺序执行段内各步骤,两个流水段并行分别执行结束后,同步一次,即先完成的流水段必须等到并行的对方流水段完成后,再同时开始启动后续并行执行步骤当前用户请求的第二个流水段和下一个用户请求的第一个流水段并行同时启动,在本流水段内顺序执行段内各步骤,两个流水段并行分别执行结束后,必须再次同步,…如此顺序进行;每执行完一条读命令、即d步骤结束,通过网络端口返回处理结果;其中a步骤代表用户请求前期处理步骤,b步骤在读请求时代表底层I/O调度步骤、在写请求时代表数据拷贝步骤;c步骤在读请求时代表数据拷贝步骤、在写请求时代表底层I/O调度步骤,d步骤代表返回用户请求结果步骤。(4)将此请求加入写命令处理队列,等待流水处理流水过程由两个流水段组成,a、e步骤或a步骤或上一个用户请求d步骤与a步骤或上一个用户请求d步骤与a、e步骤的顺序执行组成第一个流水段;f、d步骤或f步骤或上一个用户请求e步骤与f步骤或上一个用户请求e步骤与f、d步骤的顺序执行组成第二个流水段,当前用户请求的第一个流水段和上一个用户请求的第二个流水段并行同时启动,在本流水段内顺序执行段内各步骤,两个流水段并行分别执行结束后,同步一次,即先完成的流水段必须等到并行的对方流水段完成后,再同时开始启动后续并行执行步骤当前用户请求的第二个流水段和下一个用户请求的第一个流水段并行同时启动,在本流水段内顺序执行段内各步骤,两个流水段并行分别执行结束后,必须再次同步,…如此顺序进行;每执行完一条写命令、即d步骤结束,通过网络端口返回处理结果;其中a步骤代表用户请求前期处理步骤,e步骤代表数据拷贝步骤;f步骤代表底层I/O调度步骤,d步骤代表返回用户请求结果步骤。
4.如权利要求3所述的网络存储系统的流水处理方法,其特征在于(1)当处理读请求时,所述a步骤即用户请求前期处理步骤中,当前用户请求,经过预处理添加至用户I/O任务链,然后控制程序从用户I/O任务链中提取命令,经过Cache处理、命令排队、命令分解处理后,形成多个磁盘上的子命令,并添加至对应磁盘串的子命令链;所述b步骤即底层I/O调度步骤中,底层I/O控制程序通过执行各磁盘串的命令,进行并行I/O调度,从磁盘上存取数据;所述c步骤即读请求的数据拷贝步骤中,根据数据的分块情况和网络传输所要求的数据存放位置,对从磁盘上读取的数据进行合并、整理、拷贝操作;所述d步骤即读请求的返回用户请求结果步骤中,通过网络端口返回处理结果,至此用户请求完成;(2)当处理写请求时,所述a步骤即用户请求前期处理步骤中,当前用户请求,经过预处理添加至用户I/O任务链,然后控制程序从用户I/O任务链中提取命令,经过Cache处理、命令排队、命令分解处理;所述e步骤即写请求的数据拷贝步骤中,以及根据数据的分块情况对写数据进行分解、合并、拷贝等操作后,形成多个磁盘上的子命令,添加至对应磁盘串的子命令链;所述f步骤即底层I/O调度步骤中,通过执行各磁盘串的命令,进行并行I/O调度,向磁盘写数据;所述d步骤即写请求的返回用户请求结果步骤中,通过网络端口返回处理结果信息,至此用户请求完成。
全文摘要
网络存储系统的流水处理方法,属于信息的存储,特别涉及网络存储系统的数据传输,其目的是提高存储系统性能,从网络存储系统结构和数据处理策略出发,在理解流水线技术本质的基础上,将流水线技术运用到网络存储系统当中,它可以被广泛应用于各种网络存储系统。本发明顺序包括下列步骤A.网络接口接收到用户数据请求,判断该数据请求类型;B.如果是读请求,进行步骤C,如果是写请求,转步骤D;C.将此请求加入读命令处理队列,等待流水处理;D.将此请求加入写命令处理队列,等待流水处理;流水处理有两种方式固定流水处理和柔性流水处理。实验数据表明,随着步骤数的增加,网络磁盘阵列的平均服务数据带宽明显增大。
文档编号H04L29/02GK1633121SQ20041006140
公开日2005年6月29日 申请日期2004年12月20日 优先权日2004年12月20日
发明者周可, 张江陵, 冯丹, 王芳, 刘景宁, 施展, 童薇, 田磊 申请人:华中科技大学