CN101299181A - 基于磁盘进行i/o请求缓存的方法和装置以及san存储设备 - Google Patents
基于磁盘进行i/o请求缓存的方法和装置以及san存储设备 Download PDFInfo
- Publication number
- CN101299181A CN101299181A CNA2008101326351A CN200810132635A CN101299181A CN 101299181 A CN101299181 A CN 101299181A CN A2008101326351 A CNA2008101326351 A CN A2008101326351A CN 200810132635 A CN200810132635 A CN 200810132635A CN 101299181 A CN101299181 A CN 101299181A
- Authority
- CN
- China
- Prior art keywords
- disk
- request
- address
- buffer queue
- logical volume
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于磁盘进行I/O请求缓存的方法和装置,适用于包括多个磁盘的SAN存储设备。该方法包括:为存储设备的每一个磁盘建立一个I/O请求缓存队列,并记录各磁盘与逻辑卷之间的地址映射关系;当接收到客户端I/O请求时,执行以下步骤:提取该I/O请求所携带的逻辑卷标识和逻辑卷地址;根据所记录的地址映射关系,查找获得对应的磁盘和磁盘地址;按照预设的磁盘地址排序方式,将该I/O请求插入到该磁盘的I/O请求缓存队列中。本发明还公开了一种SAN存储设备。通过本发明,在一定程度上保证了I/O请求磁盘处理的顺序性;提高了磁盘接口的I/O处理能力;提高了存储设备的性能。
Description
技术领域
本发明涉及存储区域网络技术领域,尤其涉及一种基于磁盘进行I/O请求缓存的方法和装置,还涉及一种SAN存储设备。
背景技术
SAN(Storage Area Network,存储区域网络)是一种通过专用光纤通道网络或者IP网络将一个或多个网络存储设备与客户端连接起来的专用存储系统,用于提供客户端与存储系统之间的数据传输。SAN的工作原理为:存储设备为客户端分配块存储资源,客户端和存储设备基于存储协议,如FC(Fibre Channel,光纤通道)、iSCSI(internet Small Computer System Interface,Internet小型计算机系统接口)进行通信,实现存储资源的数据读写操作。
其中,存储设备的基础存储单元是磁盘,而且出于可靠性、大容量等方面的考虑,存储设备往往会使用多块磁盘进行数据存储。如图1所示,显示了存储设备上的一种资源管理模型:存储设备使用RAID(Redundant Array ofIndependent Disks,独立冗余磁盘阵列)策略,如RAID0、RAID1、RAID5等,将多块磁盘构成一个阵列;在阵列上创建LV(Logical Volume,逻辑卷);之后基于存储协议把LV共享给客户端,图中以iSCSI协议为例。
客户端通过在分配给它的LV上进行数据读写操作实现在存储设备上的数据存储。但限于存储设备自身的处理能力,或者磁盘接口的处理能力,对于客户端的I/O(Input&Output,读/写操作)请求往往无法做到100%的及时响应和处理,因此必须先对客户端的I/O请求进行队列缓存,之后加以调度处理。
现有技术中,I/O请求缓存技术是基于客户端或者说LV进行的:存储设备基于LV为I/O请求建立缓存队列;在接收到客户端的I/O请求时,把不同LV的I/O请求分别放入不同的缓存队列中;再由CPU轮询不同缓存队列,按先进先出的原则调度处理。这种基于LV进行I/O请求缓存的缺陷在于导致了磁盘I/O操作的随机性。
为了便于描述,在此基于图1所示的资源管理模型提供一个资源管理示例:以4块磁盘(标记为Disk 0/Disk 1/Disk 2/Disk 3)创建一个RAID0阵列(标记为Array 0),之后在Array 0上创建3个逻辑卷(标记为LV0,LV 1和LV 2)。由于磁盘和LV的基本存储单位是扇区(每扇区固定512Byte),如果按照通常的以多个(2的整数次方,如4K个)扇区为单位进行空间管理,那么在每块磁盘的地址空间为0~16384的情况下,阵列Array 0的地址空间就是0~65535;则可以分配LV 0的地址空间为0~32767,LV 1和LV 2的地址空间均为0~16383。本示例中LV、阵列和磁盘之间的映射关系如表1所示:
磁盘 | 地址 | 阵列 | 地址 | 逻辑卷 | 地址 |
Disk 0 | 0~4095 | Array 0 | 0~4095 | LV 0 | 0~4095 |
Disk 0 | 4096~8191 | Array 0 | 16384~20479 | LV 0 | 16384~20479 |
Disk 0 | 8192~12287 | Array 0 | 32768~36863 | LV 1 | 0~4095 |
Disk 0 | 12288~16383 | Array 0 | 49152~53247 | LV 2 | 0~4095 |
Disk 1 | 0~4095 | Array 0 | 4096~8191 | LV 0 | 4096~8191 |
Disk 1 | 4096~8191 | Array 0 | 20480~24575 | LV 0 | 20480~24575 |
Disk 1 | 8192~12287 | Array 0 | 36864~40959 | LV 1 | 4096~8191 |
Disk 1 | 12288~16383 | Array 0 | 53248~57343 | LV 2 | 4096~8191 |
Disk 2 | 0~4095 | Array 0 | 8192~12287 | LV 0 | 8192~12287 |
Disk 2 | 4096~8191 | Array 0 | 24576~28671 | LV 0 | 24576~28671 |
Disk 2 | 8192~12287 | Array 0 | 40960~45055 | LV 1 | 8192~12287 |
Disk 2 | 12288~16383 | Array 0 | 57344~61439 | LV 2 | 8192~12287 |
Disk 3 | 0~4095 | Array 0 | 12288~16383 | LV 0 | 12288~16383 |
Disk 3 | 4096~8191 | Array 0 | 28672~32767 | LV 0 | 28672~32767 |
Disk 3 | 8192~12287 | Array 0 | 45056~49151 | LV 1 | 12288~16383 |
Disk 3 | 12288~16383 | Array 0 | 61440~65535 | LV 2 | 12288~16383 |
表1
在表1示例的基础上,假定存储设备把LV 0,LV 1和LV 2分别分配给三个客户端,则这三个客户端挂载磁盘后开始进行数据的读写操作。其中,以Write(LV ID,Address,Data,Length)来描述一个写请求,以Read(LV ID,Address,Length)来描述一个读请求,LV ID标识一个逻辑卷,Address标识开始写入数据的起始地址空间,Data标识要写入的数据内容,Length标识要写入的数据长度。
如果存储设备以时间顺序收到以下I/O请求:
Write(LV 0,0,data,4096);
Write(LV 2,0,data,4096);
Write(LV 0,16384,data,4096);
Write(LV 1,0,data,4096);
Read(LV 2,0,4096);
Read(LV 0,0,4096);
Read(LV 1,0,4096);
Write(LV 0,16384,data,4096);……
则根据表1的映射关系可以看出,这些I/O请求实际都是在Disk0上进行数据读写。但如果按照现有技术进行I/O请求缓存并按照先进先出的原则进行顺序处理的话,上述I/O请求将被分配进入不同的I/O缓存队列,并在磁盘Disk0上按照以下起始地址进行I/O操作:0->12288->4096->8192->12288->0->8192->4096,具有相当大的随机性。
对于磁盘接口而言,I/O请求的地址越有顺序,磁盘接口的性能就越高;反之,I/O请求的地址越随机无序,磁盘接口的性能就越低。显然,现有技术中并未将磁盘、RAID阵列和LV关联起来,在缓存和调度I/O请求时没有考虑到磁盘因素,因此导致磁盘上的I/O操作随机性很高,磁盘磁头需要频繁跳转,并由此导致磁盘接口的性能严重下降。由于磁盘接口性能,或者说磁盘接口的I/O处理能力,是影响存储设备读写性能的一个重要因素,因此现有的进行I/O请求缓存的方案无疑导致了存储设备性能的下降。
特别是随着存储技术的发展,SAN的应用领域日益广泛,比如在监控应用中,编码设备不断采集图像生成媒体数据,而且这些媒体数据需要长时间持续不断地写入到存储设备中保存起来,以支持后续的点播回放。这类应用表现出的特点是:(1)每路图像数据读写所占用的带宽小,但平稳、持续时间长;(2)每路图像数据需要的存储空间一般较小,一块磁盘的空间可能存储几十路媒体流录像;(3)每次读写的数据量都比较大。
在上述应用场合下,I/O请求的随机性表现的更为明显,磁盘接口的I/O处理能力将严重下降,成为存储设备的性能瓶颈。
发明内容
本发明的实施例旨在提供能够基于磁盘进行I/O请求缓存的技术方案,以提高对同一块磁盘的I/O请求的执行顺序性,从而提高磁盘接口的I/O处理能力,进而提高存储设备的性能。
为实现上述目的,本发明的实施例提供了一种基于磁盘进行I/O请求缓存的方法,适用于包括多个磁盘的SAN存储设备,包括为存储设备的每一个磁盘建立一个I/O请求缓存队列,并记录各磁盘与逻辑卷之间的地址映射关系;当接收到客户端I/O请求时,执行以下步骤:
S1、提取该I/O请求所携带的逻辑卷标识和逻辑卷地址;
S2、根据所记录的地址映射关系,查找获得对应的磁盘和磁盘地址;
S3、按照预设的磁盘地址排序方式,将该I/O请求插入到该磁盘的I/O请求缓存队列中。
本发明的实施例还提供了一种基于磁盘进行I/O请求缓存的装置,应用于包括多个磁盘的SAN存储设备,包括:缓存队列建立单元,用于为存储设备的每一个磁盘建立一个I/O请求缓存队列;I/O请求缓存队列,由该缓存队列建立单元所建立,分别与SAN存储设备每一个磁盘对应;映射关系记录单元,用于记录磁盘与逻辑卷之间的地址映射关系;逻辑卷信息提取单元,用于提取客户端I/O请求所携带的逻辑卷标识和逻辑卷地址;磁盘及地址获取单元,与该逻辑卷信息提取单元和映射关系记录单元连接,用于根据所记录的地址映射关系,查找获得对应的磁盘和磁盘地址;I/O请求缓存控制单元,分别与该I/O请求缓存队列以及该磁盘及地址获取单元连接,用于按照预设的磁盘地址排序方式,将该I/O请求插入到该磁盘的I/O请求缓存队列中。
本发明的实施例还提供了一种SAN存储设备,包括多个磁盘以及数据输入输出装置,还包括如上所述的基于磁盘进行I/O请求缓存的装置,该基于磁盘进行I/O请求缓存的装置分别与该数据输入输出装置和该多个磁盘连接。
由上述技术方案可知,本发明的实施例通过基于磁盘建立IO请求缓存队列,采用在缓存队列中为I/O请求排序的方式,具有以下有益效果:
1、在一定程度上保证了I/O请求磁盘处理的顺序性;
2、提高了磁盘接口的I/O处理能力;
3、提高了存储设备的性能。
通过以下参照附图对优选实施例的说明,本发明的上述以及其它目的、特征和优点将更加明显。
附图说明
图1为现有技术中一种资源管理模型的示意图;
图2为本发明提供的基于磁盘进行I/O请求缓存的方法一实施例的流程图;
图3为图2所示方法中记录各磁盘与逻辑卷之间的地址映射关系一实施例的流程图;
图4为本发明提供的基于磁盘进行I/O请求缓存的方法另一实施例的流程图;
图5为本发明提供的基于磁盘进行I/O请求缓存的装置一实施例的框图;
图6为图5所示I/O请求缓存控制单元一实施例的框图;
图7为本发明提供的SAN存储设备一实施例的框图。
具体实施方式
下面将详细描述本发明的具体实施例。应当注意,这里描述的实施例只用于举例说明,并不用于限制本发明。
首先,本发明的发明构思在于提高对同一块磁盘的I/O请求的执行顺序性,从而提高磁盘接口的I/O处理能力。为了实现这一发明构思,本发明提供了基于磁盘管理I/O请求缓存队列,并根据I/O请求对应的磁盘地址对队列中的I/O请求进行排队的技术方案,下面结合附图和实施例加以具体说明。
请结合图2,显示了本发明提供的基于磁盘进行I/O请求缓存的方法一实施例的流程图,包括:
A1、为存储设备的每一个磁盘建立一个I/O请求缓存队列;当然,在建立之初,也就是初始队列时,该队列为空;
A2、记录各磁盘与逻辑卷之间的地址映射关系;
具体的,如图3所示,本步骤A2可以包括:
A21、检测到磁盘上线时,为磁盘生成一全局唯一标识;
比如,可以根据磁盘所在机框号和槽位号来生成标识,如0号机框1号槽位的磁盘标识为01,以便后续的记录;
A22、创建RAID阵列,并记录每一磁盘相应的阵列标识和阵列地址;
需要指出,本步骤A22中RAID阵列的创建是进行逻辑卷创建之前的中间环节,SAN存储设备基于所创建的RAID阵列为客户端分配逻辑资源,进行逻辑卷的创建。这一步骤是本领域技术人员的常用技术手段,在此不再赘述。
但是,本步骤A22中对于阵列标识和阵列地址的记录是可选的,比如当所有的磁盘仅创建一个阵列,那么就无需记录相应的阵列标识;当然,在多个阵列的情况下,为了区分不同的磁盘地址,需要相应记录阵列标识和阵列地址,以保证后续查找的顺利进行。
A23、基于RAID阵列为客户端创建逻辑卷,且对于每一磁盘,采用一定的数据格式记录其全局唯一标识和其对应不同逻辑卷的磁盘地址,以及记录相应的逻辑卷标识和逻辑卷地址;
虽然采用不同的RAID策略创建阵列式时,逻辑卷和磁盘之间的地址映射关系会存在区别,但该地址映射关系的存在却是必然的,也就是说,SAN存储设备中天然存在着磁盘和逻辑卷之间的地址映射关系;
可以采用一定的数据结构来记录这种逻辑关系,如表1所示的二维表形式,也可以采用其他的记录形式;由于如何采用数据结构来描述数据之间的对应关系是本领域技术人员所熟知的手段,在此不再赘述。
需要指出的是,当记录有阵列标识和阵列地址时,上述数据结构事实上记录的是LV、RAID阵列和磁盘三者之间的映射关系。
经过上述步骤之后,本发明所提供的基于磁盘进行I/O请求缓存的方法可以对I/O请求进行基于磁盘的缓存处理,当接收到客户端I/O请求时,执行以下步骤:
S1、提取该I/O请求所携带的LV标识和LV地址;
S2、根据所记录的地址映射关系,查找获得对应的磁盘和磁盘地址;
S3、按照预设的磁盘地址排序方式,将该I/O请求插入到磁盘的I/O请求缓存队列中;具体的,可以根据磁盘标识查找到对应的I/O请求缓存队列,如果队列为空,则直接把该I/O请求写入缓存队列;如果不为空,则根据I/O请求的磁盘地址在队列中进行排队处理。
在一个具体实施例中,本步骤S3可以包括:从磁盘的I/O请求缓存队列队尾开始依次进行与该I/O请求的磁盘地址比较,直至将该I/O请求插入到磁盘的I/O请求缓存队列中,使该I/O请求缓存队列中的全部I/O请求按照预设的磁盘地址排序方式排列;该预设的磁盘地址排序方式可以包括按照I/O请求的磁盘地址进行从大到小排序,或者,按照I/O请求的磁盘地址进行从小到大排序,其中后者更佳。
通俗一点说,如果按照从小到大来排序,就是从I/O请求缓存队列的队尾开始比较已有的I/O请求:如果最后一个节点对应的磁盘地址小于或者等于待插入的I/O请求,则直接把该I/O请求插入到缓存队列的队尾;否则,把该I/O请求插入到队列中两个已有节点之间,条件是前一个节点的磁盘地址小于或者等于该I/O请求的磁盘地址,而后一个节点的磁盘地址大于该I/O请求的磁盘地址。
仍以前文示例为例,假定存储设备把LV 0,LV 1和LV 2分别分配给三个客户端,这三个客户端挂载磁盘后开始进行数据的读写操作。如果存储设备以时间顺序收到以下I/O请求:
Write(LV 0,0,data,4096);
Write(LV 2,0,data,4096);
Write(LV 0,16384,data,4096);
Write(LV 1,0,data,4096);
Read(LV 2,0,4096);
Read(LV 0,0,4096);
Read(LV 1,0,4096);
Write(LV 0,16384,data,4096);……
那么依照本发明提供的技术方案,假设Disk1的I/O请求缓存队列为空,则按照磁盘地址由小到大的排序方式,上述I/O请求在Disk1的I/O请求缓存队列中的顺序会是:
Write(LV 0,0,data,4096);
Read(LV 0,0,4096);
Write(LV 0,16384,data,4096);
Write(LV 0,16384,data,4096);
Write(LV 1,0,data,4096);
Read(LV 1,0,4096);
Write(LV 2,0,data,4096);
Read(LV 2,0,4096);……
可见,经排序处理后,磁盘Disk1上的I/O操作起始地址依次是0->0->4096->4096->8192->8192->12288->12288。
可以看出,通过本发明所提供的基于磁盘进行I/O请求缓存的方法,能够使磁盘I/O操作顺序执行,减少随机性,磁盘磁头不需要多次频繁跳转,从而提高磁盘接口的读写能力,进而提高SAN存储设备的性能。
需要指出,本发明所提供的基于磁盘进行I/O请求缓存的方法在一定程度上会牺牲响应的及时性。对于传统的I/O请求缓存技术而言,其主要面对的是企业级的应用环境,如数据库应用等,具有I/O请求突发性较大的特点,因此主要满足存储设备快速响应客户端I/O请求的要求;但对于应用领域日益广泛的存储设备而言,特别是对于监控应用来说,由于I/O操作的随机性比较明显,存储设备的性能瓶颈不再是CPU、接口带宽和内存等,而集中于磁盘接口的I/O处理能力,因此对于存储设备的要求也就随之变化:对持续读/写性能的要求大为提高,而对及时响应的要求可以适当降低,以更好的满足视频监控类应用的要求。这也是本发明所提供方法的现实基础。
但作为较佳的实施例,可以考虑对顺序性和及时性进行折中处理,即在队列深度超过N时,使新到的I/O请求不插入到前N个位置,从而保证缓存队列前面的I/O请求可以很快得到调度处理,其处理延时不至于过长。可以参见图4,显示了相应实施例的流程图。
具体的,在图3所示实施例的基础上,步骤S3可以包括:
S31、识别磁盘的I/O请求缓存队列中已有的I/O请求数目是否大于预设的阈值N,比如10个;
S32、是则,保持队列中前N个I/O请求的排列次序不变,再从队尾至队列中已有的第N+1个I/O请求的区间内依次进行与所述I/O请求的磁盘地址比较,直至将该I/O请求插入到所述I/O请求缓存队列中,使I/O请求缓存队列中从N+1开始的I/O请求按照所述预设的磁盘地址排序方式排列;
S33、否则,从磁盘的I/O请求缓存队列队尾开始逐一进行与I/O请求的磁盘地址比较,直至将该I/O请求插入到磁盘的I/O请求缓存队列中,使I/O请求缓存队列中的全部I/O请求按照预设的磁盘地址排序方式排列。
从本实施例可以看出,对于一个I/O请求的缓存队列而言,前N个I/O请求的顺序不会被打乱,因此这几个I/O请求将得到较快的执行。
由于这N个I/O请求之间也是按照预设的磁盘地址排序方式排列,因此虽然第N个I/O请求和第N+1个I/O请求之间会存在磁盘磁头跳转的可能,但这种跳转无疑不会过于频繁的发生。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,包括为存储设备的每一个磁盘建立一个I/O请求缓存队列,并记录各磁盘与逻辑卷之间的地址映射关系;当接收到客户端I/O请求时,执行如下步骤:
S1、提取所述I/O请求所携带的逻辑卷标识和逻辑卷地址;
S2、根据所记录的地址映射关系,查找获得对应的磁盘和磁盘地址;
S3、按照预设的磁盘地址排序方式,将所述I/O请求插入到所述磁盘的I/O请求缓存队列中;
所述的存储介质包括:ROM/RAM(Read Only Memory/Random-AccessMemory,只读存储器/随机访问内存)、磁碟或者光盘等。
相应的,本发明还提供了一种基于磁盘进行I/O请求缓存的装置100,应用于包括多个磁盘的SAN存储设备,请结合图5,包括:
缓存队列建立单元101,用于为存储设备的每一个磁盘建立一个I/O请求缓存队列102;
I/O请求缓存队列102,由该缓存队列建立单元101所建立,分别与SAN存储设备每一个磁盘对应,初始队列为空;
映射关系记录单元103,用于记录各磁盘与逻辑卷之间的地址映射关系;
具体的,映射关系记录单元103可以包括磁盘标识生成模块(图中未示),用于在检测到磁盘上线时为磁盘生成一全局唯一标识;
以及记录模块(图中未示),与该磁盘标识生成模块连接,用于对于每一磁盘,采用一定的数据格式记录其全局唯一标识和其对应不同逻辑卷的磁盘地址,以及记录相应的逻辑卷标识和逻辑卷地址,该数据格式可以为二维表。
需要指出,记录模块是在现有SAN设备创建RAID阵列以及进一步创建逻辑卷的基础上,进行磁盘和逻辑卷之间地址映射关系的记录的。至于SAN设备如何创建RAID阵列以及如何基于RAID阵列创建逻辑卷,作为本领域技术人员的常用技术手段,在此不再赘述。
但是,如果SAN设备创建的RAID阵列不只一个,那么记录模块还需要记录相应的阵列标识和阵列地址,即记录LV、RAID阵列和磁盘三者之间的映射关系,以保证磁盘及地址获取单元105能够查找获得正确的磁盘和磁盘地址。
逻辑卷信息提取单元104,用于提取客户端I/O请求所携带的LV标识和LV地址;
磁盘及地址获取单元105,与逻辑卷信息提取单元104和映射关系记录单元103连接,用于根据所记录的地址映射关系,查找获得对应的磁盘和磁盘地址,该磁盘地址将作为在相应磁盘I/O请求缓存队列102中排序的依据;
I/O请求缓存控制单元106,分别与I/O请求缓存队列102以及磁盘及地址获取单元105连接,用于按照预设的磁盘地址排序方式,将I/O请求插入到该磁盘的I/O请求缓存队列102中。
在一个具体实施例中,I/O请求缓存控制单元106可以包括:
排序方式保存模块1061,用于保存预设的磁盘地址排序方式,推荐为按照磁盘地址从小到大进行排序,当然按照磁盘地址由大至小排序,或者采用其他排序方式亦可;
缓存队列比较模块1062,用于从该磁盘的I/O请求缓存队列102队尾开始依次进行与I/O请求的磁盘地址比较;
I/O请求插入模块1063,与排序方式保存模块1061和缓存队列比较模块1062连接,用于接收缓存队列比较模块1062的比较结果,并在某一位置将该I/O请求插入到I/O请求缓存队列102中,使I/O请求缓存队列102中的全部I/O请求按照预设的磁盘地址排序方式排列;当然,为了避免缓存队列比较模块1062继续进行无益的比较,I/O请求插入模块1063可以在合适的位置向缓存队列比较模块1062发送一指令,使其停止继续比较。
可以看出,通过I/O请求缓存控制单元106进行I/O请求插入后,能够使磁盘I/O操作顺序执行,减少随机性,磁盘磁头不需要多次频繁跳转,从而提高磁盘接口的读写能力,进而提高SAN存储设备的性能。
上述实施例中是I/O请求缓存队列102内所有的节点都按照磁盘地址排序,这往往在一定程度上对部分I/O请求处理的及时性造成较大影响;作为一较佳的具体实施例,可以考虑对顺序性和及时性进行折中处理,即在队列深度超过N时,使新到的I/O请求不插入到前N个位置,从而保证缓存队列102前面的I/O请求可以很快得到调度处理,其处理延时不至于过长。可以参见图6,上述描述的I/O请求缓存控制单元106进一步包括:队列纵深识别模块1064,用于识别磁盘的I/O请求缓存队列102中已有的I/O请求数目是否大于预设的阈值N,并在已有I/O请求数目大于预设的阈值N的情况下相应指令缓存队列比较模块1062;则缓存队列比较模块1062与队列纵深识别模块1064连接,用于根据队列纵深识别模块1064的指令,在从队尾至队列中已有的第N+1个I/O请求的区间内,依次进行与待插入I/O请求的磁盘地址比较;I/O请求插入模块1063在某一位置将该待插入I/O请求插入到I/O请求缓存队列102中,使所述I/O请求缓存队列102中从N+1开始的I/O请求按照所述预设的磁盘地址排序方式排列。
当然,如果已有I/O请求数目不大于预设的阈值N,那么队列纵深识别模块1064可以通知不大于阈值的结果或者不通知,由缓存队列比较模块1062和I/O请求插入模块1063实现全队列的排序插入。
相应的,本发明还提供了一种SAN存储设备10的实施例,如图7所示,包括多个磁盘200以及数据输入输出装置300,还包括如上所述的基于磁盘进行I/O请求缓存的装置100,该基于磁盘进行I/O请求缓存的装置100分别与数据输入输出装置300和多个磁盘200连接,通过尽可能保证同一块磁盘上I/O操作的磁盘地址的顺序性,获得更好的磁盘接口I/O性能,从而保证SAN存储设备的高性能。
虽然已参照几个典型实施例描述了本发明,但应当理解,所用的术语是说明和示例性、而非限制性的术语。由于本发明能够以多种形式具体实施而不脱离发明的精神或实质,所以应当理解,上述实施例不限于任何前述的细节,而应在随附权利要求所限定的精神和范围内广泛地解释,因此落入权利要求或其等效范围内的全部变化和改型都应为随附权利要求所涵盖。
Claims (11)
1.一种基于磁盘进行I/O请求缓存的方法,适用于包括多个磁盘的SAN存储设备,其特征在于,包括为存储设备的每一个磁盘建立一个I/O请求缓存队列,并记录各磁盘与逻辑卷之间的地址映射关系;当接收到客户端I/O请求时,执行以下步骤:
S1、提取所述I/O请求所携带的逻辑卷标识和逻辑卷地址;
S2、根据所记录的地址映射关系,查找获得对应的磁盘和磁盘地址;
S3、按照预设的磁盘地址排序方式,将所述I/O请求插入到所述磁盘的I/O请求缓存队列中。
2.根据权利要求1所述的基于磁盘进行I/O请求缓存的方法,其特征在于,所述记录磁盘与逻辑卷之间的地址映射关系的步骤包括:
检测到磁盘上线时,为磁盘生成一全局唯一标识;
创建RAID阵列;
基于RAID阵列为客户端创建逻辑卷,且对于每一磁盘,采用一定的数据格式记录其全局唯一标识和其对应不同逻辑卷的磁盘地址,以及记录相应的逻辑卷标识和逻辑卷地址。
3.根据权利要求2所述的基于磁盘进行I/O请求缓存的方法,其特征在于,所述创建RAID阵列的步骤还包括:记录每一磁盘相应的阵列标识和阵列地址。。
4.根据权利要求1所述的基于磁盘进行I/O请求缓存的方法,其特征在于,所述步骤S3包括:从所述磁盘的I/O请求缓存队列队尾开始依次进行与所述I/O请求的磁盘地址比较,直至将所述I/O请求插入到所述磁盘的I/O请求缓存队列中,使所述I/O请求缓存队列中的全部I/O请求按照所述预设的磁盘地址排序方式排列。
5.根据权利要求1所述的基于磁盘进行I/O请求缓存的方法,其特征在于,所述步骤S3包括:
S31、识别所述磁盘的I/O请求缓存队列中已有的I/O请求数目是否大于预设的阈值N;
S32、是则,保持队列中前N个I/O请求的排列次序不变,在从队尾至队列中已有的第N+1个I/O请求的区间内依次进行与所述I/O请求的磁盘地址比较,直至将所述I/O请求插入到所述I/O请求缓存队列中,使所述I/O请求缓存队列中从N+1开始的I/O请求按照所述预设的磁盘地址排序方式排列;
S33、否则,从所述磁盘的I/O请求缓存队列队尾开始逐一进行与所述I/O请求的磁盘地址比较,直至将所述I/O请求插入到所述磁盘的I/O请求缓存队列中,使所述I/O请求缓存队列中的全部I/O请求按照所述预设的磁盘地址排序方式排列。
6.根据权利要求4或5所述的基于磁盘进行I/O请求缓存的方法,其特征在于,所述预设的磁盘地址排序方式包括按照I/O请求的磁盘地址进行从大到小排序,或者,按照I/O请求的磁盘地址进行从小到大排序。
7.一种基于磁盘进行I/O请求缓存的装置,应用于包括多个磁盘的SAN存储设备,其特征在于,包括:
缓存队列建立单元,用于为存储设备的每一个磁盘建立一个I/O请求缓存队列;
I/O请求缓存队列,由所述缓存队列建立单元所建立,分别与所述SAN存储设备每一个磁盘对应;
映射关系记录单元,用于记录各磁盘与逻辑卷之间的地址映射关系;
逻辑卷信息提取单元,用于提取客户端I/O请求所携带的逻辑卷标识和逻辑卷地址;
磁盘及地址获取单元,与所述逻辑卷信息提取单元和映射关系记录单元连接,用于根据所记录的地址映射关系,查找获得对应的磁盘和磁盘地址;
I/O请求缓存控制单元,分别与所述I/O请求缓存队列以及所述磁盘及地址获取单元连接,用于按照预设的磁盘地址排序方式,将所述I/O请求插入到所述磁盘的I/O请求缓存队列中。
8.根据权利要求7所述的基于磁盘进行I/O请求缓存的装置,其特征在于,所述映射关系记录单元包括:
磁盘标识生成模块,用于在检测到磁盘上线时为磁盘生成一全局唯一标识;
记录模块,与所述磁盘标识生成模块连接,用于对于每一磁盘,采用一定的数据格式记录其全局唯一标识和其对应不同逻辑卷的磁盘地址,以及记录相应的逻辑卷标识和逻辑卷地址。
9.根据权利要求7所述的基于磁盘进行I/O请求缓存的装置,其特征在于,所述I/O请求缓存控制单元包括:
排序方式保存模块,用于保存预设的磁盘地址排序方式;
缓存队列比较模块,用于从所述磁盘的I/O请求缓存队列队尾开始依次进行与所述I/O请求的磁盘地址比较;
I/O请求插入模块,与所述排序方式保存模块和缓存队列比较模块连接,用于接收所述缓存队列比较模块的比较结果,并在某一位置将所述I/O请求插入到所述I/O请求缓存队列中,使所述I/O请求缓存队列中的全部I/O请求按照所述预设的磁盘地址排序方式排列。
10.根据权利要求9所述的基于磁盘进行I/O请求缓存的装置,其特征在于,所述I/O请求缓存控制单元还包括:
队列纵深识别模块,用于识别所述磁盘的I/O请求缓存队列中已有的I/O请求数目是否大于预设的阈值N,并在已有I/O请求数目大于预设的阈值N的情况下相应指令所述缓存队列比较模块;
所述缓存队列比较模块与所述队列纵深识别模块连接,用于根据所述队列纵深识别模块的指令,在从队尾至队列中已有的第N+1个I/O请求的区间内,依次进行与所述I/O请求的磁盘地址比较;
所述I/O请求插入模块在某一位置将所述I/O请求插入到所述I/O请求缓存队列中,使所述I/O请求缓存队列中从N+1开始的I/O请求按照所述预设的磁盘地址排序方式排列。
11.一种SAN存储设备,包括多个磁盘以及数据输入输出装置,其特征在于,还包括如权利要求7-10任一所述的基于磁盘进行I/O请求缓存的装置,所述基于磁盘进行I/O请求缓存的装置分别与所述数据输入输出装置和所述多个磁盘连接。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008101326351A CN101299181A (zh) | 2008-07-08 | 2008-07-08 | 基于磁盘进行i/o请求缓存的方法和装置以及san存储设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008101326351A CN101299181A (zh) | 2008-07-08 | 2008-07-08 | 基于磁盘进行i/o请求缓存的方法和装置以及san存储设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101299181A true CN101299181A (zh) | 2008-11-05 |
Family
ID=40079018
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2008101326351A Pending CN101299181A (zh) | 2008-07-08 | 2008-07-08 | 基于磁盘进行i/o请求缓存的方法和装置以及san存储设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101299181A (zh) |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102207830A (zh) * | 2011-05-27 | 2011-10-05 | 杭州宏杉科技有限公司 | 一种缓存动态分配管理方法及装置 |
CN102929801A (zh) * | 2012-10-25 | 2013-02-13 | 华为技术有限公司 | 一种用于磁盘寻址的方法和装置 |
CN103336669A (zh) * | 2013-05-21 | 2013-10-02 | 华中科技大学 | 一种基于固态盘内部并行性的i/o调度方法及调度器 |
CN103514140A (zh) * | 2013-08-05 | 2014-01-15 | 东南大学 | 用于实现可重构系统中配置信息多发射的重构控制器 |
CN103577357A (zh) * | 2013-11-06 | 2014-02-12 | 华为技术有限公司 | 一种i/o请求消息的处理方法及控制器 |
CN104391656A (zh) * | 2014-11-19 | 2015-03-04 | 华为技术有限公司 | 一种存储设备的io资源分配方法、装置及存储设备 |
CN104598409A (zh) * | 2013-10-31 | 2015-05-06 | 华为技术有限公司 | 一种处理输入输出请求的方法及设备 |
CN106598768A (zh) * | 2016-11-28 | 2017-04-26 | 华为技术有限公司 | 一种处理写请求的方法、装置和数据中心 |
CN107450861A (zh) * | 2017-08-17 | 2017-12-08 | 郑州云海信息技术有限公司 | 一种存储系统随机存储读写方法和装置 |
CN107728953A (zh) * | 2017-11-03 | 2018-02-23 | 记忆科技(深圳)有限公司 | 一种提升固态硬盘混合读写性能的方法 |
WO2018119899A1 (zh) * | 2016-12-29 | 2018-07-05 | 华为技术有限公司 | 一种存储控制器及io请求处理方法 |
CN108984112A (zh) * | 2015-09-29 | 2018-12-11 | 华为数字技术(成都)有限公司 | 存储QoS控制策略的实现方法及装置 |
WO2019062103A1 (zh) * | 2017-09-30 | 2019-04-04 | 深圳市华德安科技有限公司 | 磁盘阵列的挂载方法、Android设备和存储介质 |
CN110765290A (zh) * | 2019-10-25 | 2020-02-07 | 湖南省公安厅 | 图片存储方法、读取方法、装置及存取系统 |
CN111427507A (zh) * | 2019-01-09 | 2020-07-17 | 深圳市茁壮网络股份有限公司 | 一种磁盘连接方法、装置及电子设备 |
US10884667B2 (en) | 2017-01-05 | 2021-01-05 | Huawei Technologies Co., Ltd. | Storage controller and IO request processing method |
-
2008
- 2008-07-08 CN CNA2008101326351A patent/CN101299181A/zh active Pending
Cited By (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102207830B (zh) * | 2011-05-27 | 2013-06-12 | 杭州宏杉科技有限公司 | 一种缓存动态分配管理方法及装置 |
CN102207830A (zh) * | 2011-05-27 | 2011-10-05 | 杭州宏杉科技有限公司 | 一种缓存动态分配管理方法及装置 |
CN102929801A (zh) * | 2012-10-25 | 2013-02-13 | 华为技术有限公司 | 一种用于磁盘寻址的方法和装置 |
CN102929801B (zh) * | 2012-10-25 | 2016-06-22 | 华为技术有限公司 | 一种用于磁盘寻址的方法和装置 |
CN103336669A (zh) * | 2013-05-21 | 2013-10-02 | 华中科技大学 | 一种基于固态盘内部并行性的i/o调度方法及调度器 |
CN103336669B (zh) * | 2013-05-21 | 2015-12-02 | 华中科技大学 | 一种基于固态盘内部并行性的i/o调度方法及调度器 |
CN103514140A (zh) * | 2013-08-05 | 2014-01-15 | 东南大学 | 用于实现可重构系统中配置信息多发射的重构控制器 |
CN103514140B (zh) * | 2013-08-05 | 2016-03-16 | 东南大学 | 用于实现可重构系统中配置信息多发射的重构控制器 |
CN104598409B (zh) * | 2013-10-31 | 2017-09-19 | 华为技术有限公司 | 一种处理输入输出请求的方法及设备 |
CN104598409A (zh) * | 2013-10-31 | 2015-05-06 | 华为技术有限公司 | 一种处理输入输出请求的方法及设备 |
CN103577357A (zh) * | 2013-11-06 | 2014-02-12 | 华为技术有限公司 | 一种i/o请求消息的处理方法及控制器 |
CN103577357B (zh) * | 2013-11-06 | 2017-11-17 | 华为技术有限公司 | 一种i/o请求消息的处理方法及控制器 |
CN104391656A (zh) * | 2014-11-19 | 2015-03-04 | 华为技术有限公司 | 一种存储设备的io资源分配方法、装置及存储设备 |
CN108984112A (zh) * | 2015-09-29 | 2018-12-11 | 华为数字技术(成都)有限公司 | 存储QoS控制策略的实现方法及装置 |
CN106598768B (zh) * | 2016-11-28 | 2020-02-14 | 华为技术有限公司 | 一种处理写请求的方法、装置和数据中心 |
CN106598768A (zh) * | 2016-11-28 | 2017-04-26 | 华为技术有限公司 | 一种处理写请求的方法、装置和数据中心 |
JP2020503613A (ja) * | 2016-12-29 | 2020-01-30 | ホアウェイ・テクノロジーズ・カンパニー・リミテッド | ストレージコントローラおよびioリクエスト処理方法 |
WO2018119899A1 (zh) * | 2016-12-29 | 2018-07-05 | 华为技术有限公司 | 一种存储控制器及io请求处理方法 |
US11003360B2 (en) | 2016-12-29 | 2021-05-11 | Huawei Technologies Co., Ltd. | IO request processing according to processing sorting indexes |
US10884667B2 (en) | 2017-01-05 | 2021-01-05 | Huawei Technologies Co., Ltd. | Storage controller and IO request processing method |
CN107450861A (zh) * | 2017-08-17 | 2017-12-08 | 郑州云海信息技术有限公司 | 一种存储系统随机存储读写方法和装置 |
WO2019062103A1 (zh) * | 2017-09-30 | 2019-04-04 | 深圳市华德安科技有限公司 | 磁盘阵列的挂载方法、Android设备和存储介质 |
CN107728953A (zh) * | 2017-11-03 | 2018-02-23 | 记忆科技(深圳)有限公司 | 一种提升固态硬盘混合读写性能的方法 |
CN111427507A (zh) * | 2019-01-09 | 2020-07-17 | 深圳市茁壮网络股份有限公司 | 一种磁盘连接方法、装置及电子设备 |
CN111427507B (zh) * | 2019-01-09 | 2023-09-12 | 深圳市茁壮网络股份有限公司 | 一种磁盘连接方法、装置及电子设备 |
CN110765290A (zh) * | 2019-10-25 | 2020-02-07 | 湖南省公安厅 | 图片存储方法、读取方法、装置及存取系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101299181A (zh) | 基于磁盘进行i/o请求缓存的方法和装置以及san存储设备 | |
CN102467408B (zh) | 一种虚拟机数据的访问方法和设备 | |
CN109388590B (zh) | 提升多通道dma访问性能的动态缓存块管理方法和装置 | |
CN101446924B (zh) | 一种数据存储及获取方法、系统 | |
CN103399823B (zh) | 业务数据的存储方法、设备和系统 | |
CN107832423B (zh) | 一种用于分布式文件系统的文件读写方法 | |
CN111400083B (zh) | 数据存储方法及系统、存储介质 | |
CN101246460A (zh) | 缓存数据写入系统及方法和缓存数据读取系统及方法 | |
CN104765575A (zh) | 信息存储处理方法 | |
CN105608193A (zh) | 分布式文件系统的数据管理方法和装置 | |
CN103985393B (zh) | 一种多光盘数据并行管理方法及装置 | |
CN104765574A (zh) | 数据云端存储方法 | |
CN103514210A (zh) | 小文件处理方法及装置 | |
CN115933994B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN105868093A (zh) | 一种日志写入方法及服务端 | |
CN104809178A (zh) | 一种键值数据库内存日志的写入方法 | |
CN107577549A (zh) | 一种存储重删功能的测试方法 | |
CN103778120A (zh) | 全局文件标识生成方法、生成装置及相应的分布式文件系统 | |
US20070083708A1 (en) | Controller of redundant arrays of independent disks and operation method thereof | |
CN103577469A (zh) | 数据库连接复用方法和装置 | |
CN110515562A (zh) | 一种磁盘访问方法及装置 | |
CN1963810A (zh) | 在Flash存储介质上的关于文件分配表的缓存实现方法 | |
CN111427845B (zh) | 一种交互式建模分析算子数据交换方法 | |
CN108762681A (zh) | 一种固态硬盘及其读写方法和装置 | |
CN103064926B (zh) | 数据处理方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Open date: 20081105 |