一种提高磁盘阵列性能的方法及装置.pdf

上传人:GAME****980 文档编号:1638132 上传时间:2018-06-30 格式:PDF 页数:13 大小:811.90KB
返回 下载 相关 举报
摘要
申请专利号:

CN201310638469.3

申请日:

2013.12.02

公开号:

CN104679442A

公开日:

2015.06.03

当前法律状态:

实审

有效性:

审中

法律详情:

实质审查的生效IPC(主分类):G06F 3/06申请日:20131202|||公开

IPC分类号:

G06F3/06; G06F17/30

主分类号:

G06F3/06

申请人:

中兴通讯股份有限公司

发明人:

李贵宁

地址:

518057广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦法务部

优先权:

专利代理机构:

北京元本知识产权代理事务所11308

代理人:

秦力军

PDF下载: PDF下载
内容摘要

本发明公开了一种提高磁盘阵列性能的方法及装置,涉及计算机系统技术领域,其方法包括以下步骤:在磁盘阵列RAID与磁盘块设备之间设置缓存器;在写IO下发到磁盘阵列时,将磁盘阵列所需数据暂时保存到所述缓存器中;通过对所述缓存器暂时保存的磁盘阵列所需数据进行组织,提供相应的查找和更新的接口;利用所述接口进行写IO所需的查找和更新。本发明通过形成RAID中的有效数据的组织形式以及一系列配合起来使用的机制,达到智能的暂时保存RAID所需要使用的数据,从而使得RAID尽量减少下盘读数据的目的,同时也能解决RAID write-hold的问题,提高磁盘阵列性能。

权利要求书

权利要求书
1.  一种提高磁盘阵列性能的方法,其特征在于,包括以下步骤:
在磁盘阵列RAID与磁盘块设备之间设置缓存器;
在写IO下发到磁盘阵列时,将磁盘阵列所需数据暂时保存到所述缓存器中;
通过对所述缓存器暂时保存的磁盘阵列所需数据进行组织,提供相应的查找 和更新的接口;
利用所述接口进行写IO所需的查找和更新。

2.  根据权利要求1所述的方法,其特征在于,所述的对所述缓存器暂时保 存的磁盘阵列所需数据进行组织包括:
将磁盘阵列所需数据划分成便于并发处理的多个分条。

3.  根据权利要求2所述的方法,其特征在于,将属于同一个逻辑单元号LUN的 所有分条构成二叉树,所述二叉树包括作为树的根节点的LUN、作为第一层查找 树的分条查找索引、作为第二层查找树的分条,其中在第二层查找树中分条为叶 子节点,并且所述根节点和叶子节点构成所述查找和更新的接口。

4.  根据权利要求3所述的方法,其特征在于,所述的将属于同一个逻辑单 元号LUN的所有分条构成二叉树包括:
将属于同一个逻辑单元号LUN的所有分条分别进行ID的编码;
将每个分条的ID作为分条查找索引;
将LUN作为一棵树的根节点,每个分别按照其索引分别挂入到LUN树上的相 应位置上,以形成叶子节点。

5.  根据权利要求4所述的方法,其特征在于,每个叶子节点包括:
若干个分别作为指针的头部数据;以及
分别由若干个头部数据指向的若干个数据页面。

6.  根据权利要求4所述的方法,其特征在于,还包括利用两个所述缓存器 对磁盘阵列所需数据进行双控的镜像保护。

7.  根据权利要求6所述的方法,其特征在于,所述磁盘阵列所需数据包括 待写入磁盘的数据和从磁盘上读出的数据。

8.  根据权利要求6所述的方法,其特征在于,按照递增序列对每个待写入 磁盘的分条进行ID的编码,形成待写入磁盘数据的队列。

9.  一种提高磁盘阵列性能的装置,其特征在于,包括:
设置缓存器模块,用于在磁盘阵列RAID与磁盘块设备之间设置缓存器;
数据保存模块,用于在写IO下发到磁盘阵列时,将磁盘阵列所需数据暂时 保存到所述缓存器中;
获得接口模块,用于通过对所述缓存器暂时保存的磁盘阵列所需数据进行组 织,提供相应的查找和更新的接口;
查找及更新模块,用于利用所述接口进行写IO所需的查找和更新。

10.  根据权利要求9所述的装置,其特征在于,将属于同一个逻辑单元号 LUN的所有分条构成二叉树,所述二叉树包括作为树的根节点的LUN、作为第一 层查找树的分条查找索引、作为第二层查找树的分条,其中在第二层查找树中分 条为叶子节点,并且所述根节点和叶子节点构成所述查找和更新的接口。

说明书

说明书一种提高磁盘阵列性能的方法及装置
技术领域
本发明涉及计算机系统技术领域,特别涉及一种提高磁盘阵列性能的方法及 装置。
背景技术
RAID5/6(Redundant Arrays of Inexpensive Disks,磁盘阵列)作为一 种数据保护的技术方案,在SAN(Storage Area Network,存储区域网络)和 NAS(Network Attached Storage,网络附属存储)领域应用广泛,对于这种基于 冗余的数据保护技术,由于其在磁盘资源占用上的优势(对比于RAID1而言), 在很长一段时间内,还会长期存在下去(文章以下的描述均以RAID替代 RAID5/6)。
传统阵列的IO堆栈的方式如图1所示:通常的IO采用的是回写的方式, IO在高速缓冲存储器cache经过组织了以后,将重新组织(如重新排列和合并 的写IO等)的IO发到RAID模块,通常,RAID模块的重要作用之一就是将传入 的数据做RAID5/6的计算,此时,IO已经经过了cache,不可能再被缓存,因 此造成了后面谈到的一些性能问题。
RAID由于其自身算法的特点,决定了在实现的时候对IO性能上是有冲击 的,比如,当一个写IO下发的时候,RAID需要通过分条的范围做一次奇偶校 验parity数据的计算,这仅仅是在满分条的情况之下,如果是下发的数据并 非是满分条,则很可能出现先将其它分条单元的数据从盘上读出,然后再与写 入的新数据一起计算一次parity数据,即所谓的大写方式。
而另一种情况会稍好一点,可以仅仅将之前的分条的parity数据和老版 本的原数据部分读出,然后对三个值作相应的校验工作,生成新的parity数 据,再将新版本的写入数据和新计算的parity数据写入到相应的分条位置上, 这是所谓的小写。
从上面两种情况来看,无论是大写还是小写,都可能涉及到从磁盘上将老 版本的数据或者parity数据读出的过程和重新计算parity数据的过程,这两个 过程运行在IO的主路径上,对整个IO栈的运行效率是有较大影响的,由于从理 论上说,基于冗余计算的原理,计算parity的过程必不可少,这部分的影响无 法回避,因此,要想提高整个RAID的运行效率则需要在从磁盘上读出老版本 的数据上进行研究。
图2所示的是一种小写的做法,读老版本数据D1和奇偶校验parity  parity数据,以便后面对RAID5/6的校验数据进行计算。
RAID的另一个问题是,由于当一个分条可能由多个分条单元组成,而每 个分条单元位于不同的磁盘上,在实际的写入磁盘过程中,系统本身是无法保 证写入这一系列数据的原子性的(原子性的意思就是这些归属于多个磁盘的数 据,要不就一起写入成功,要不就一起写入失败),如果无法保证原子写的特 性,则会出现一个比较严重的问题,比如,该分条的部分分条单元写入完成, 而另一部分未写入,那么在盘上的分条则不再满足分条一致性,也就是说,当 其分条单元对应的一个磁盘坏掉,通过这个分条实际上是无法重构出正确的数 据的,这也就是RAID的write hole问题。
发明内容
本发明的目的在于提供一种提高磁盘阵列性能的方法及装置,从而使得磁盘 阵列减少了下盘读数据,同时也能满足对磁盘阵列write-hole的问题。
根据本发明的一个方面,提供了一种提高磁盘阵列性能的方法,包括以下步 骤:
在磁盘阵列RAID与磁盘块设备之间设置缓存器;
在写IO下发到磁盘阵列时,将磁盘阵列所需数据暂时保存到所述缓存器中;
通过对所述缓存器暂时保存的磁盘阵列所需数据进行组织,提供相应的查找 和更新的接口;
利用所述接口进行写IO所需的查找和更新。
优选地,所述的对所述缓存器暂时保存的磁盘阵列所需数据进行组织包括:
将磁盘阵列所需数据划分成便于并发处理的多个分条。
优选地,将属于同一个逻辑单元号LUN的所有分条构成二叉树,所述二叉树 包括作为树的根节点的LUN、作为第一层查找树的分条查找索引、作为第二层查 找树的分条,其中在第二层查找树中分条为叶子节点,并且所述根节点和叶子节 点构成所述查找和更新的接口。
优选地,所述的将属于同一个逻辑单元号LUN的所有分条构成二叉树包括:
将属于同一个逻辑单元号LUN的所有分条分别进行ID的编码;
将每个分条的ID作为分条查找索引;
将LUN作为一棵树的根节点,每个分别按照其索引分别挂入到LUN树上的相 应位置上,以形成叶子节点。
优选地,每个叶子节点包括:
若干个分别作为指针的头部数据;以及
分别由若干个头部数据指向的若干个数据页面。
优选地,还包括利用两个所述缓存器对磁盘阵列所需数据进行双控的镜像保 护。
优选地,所述磁盘阵列所需数据包括待写入磁盘的数据和从磁盘上读出的数 据。
优选地,按照递增序列对每个待写入磁盘的分条进行ID的编码,形成待写 入磁盘数据的队列。
根据本发明的另一方面,提供了一种提高磁盘阵列性能的装置,包括:
设置缓存器模块,用于在磁盘阵列RAID与磁盘块设备之间设置缓存器;
数据保存模块,用于在写IO下发到磁盘阵列时,将磁盘阵列所需数据暂时 保存到所述缓存器中;
获得接口模块,用于通过对所述缓存器暂时保存的磁盘阵列所需数据进行组 织,提供相应的查找和更新的接口;
查找及更新模块,用于利用所述接口进行写IO所需的查找和更新。
优选地,将属于同一个逻辑单元号LUN的所有分条构成二叉树,所述二叉树 包括作为树的根节点的LUN、作为第一层查找树的分条查找索引、作为第二层查 找树的分条,其中在第二层查找树中分条为叶子节点,并且所述根节点和叶子节 点构成所述查找和更新的接口。
与现有技术相比较,本发明的有益效果在于:
本发明通过在RAID和块设备之间加入一个RAID专属cache的缓存器,形成 磁盘阵列RAID中的有效数据的组织形式以及一系列配合起来使用的机制,达到 智能的暂时保存RAID所需要使用的数据,提高了磁盘阵列的性能。
附图说明
图1是现有技术提供的传统阵列的IO栈示意图;
图2是现有技术提供的小写方式的示意图;
图3是本发明实施例提供的一种提高磁盘阵列性能的方法流程图;
图4是本发明实施例提供的一种提高磁盘阵列性能的装置示意图;
图5是本发明实施例提供的提高性能装置的示意图;
图6是本发明实施例提供的数据组织方式的示意图;
图7是本发明实施例提供的二层查找表的组织方式示意图;
图8是本发明实施例提供的每个分条下的页面组织形式示意图;
图9是本发明实施例提供的数据镜像保护的示意图;
图10是本发明实施例提供的旧数据和计算得到的校验数据保存和使用的流 程图。
具体实施方式
以下结合附图对本发明的优选实施例进行详细说明,应当理解,以下所说明 的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
图3显示了本发明实施例提供的一种提高磁盘阵列性能的方法流程图,如图 3所示,包括以下步骤:
步骤S301:在磁盘阵列RAID与磁盘块设备之间设置缓存器;
步骤S302:在写IO下发到磁盘阵列时,将磁盘阵列所需数据暂时保存到所 述缓存器中;
步骤S303:通过对所述缓存器暂时保存的磁盘阵列所需数据进行组织,提 供相应的查找和更新的接口;
步骤S304:利用所述接口进行写IO所需的查找和更新。
其中,所述的对所述缓存器暂时保存的磁盘阵列所需数据进行组织包括:将 磁盘阵列所需数据划分成便于并发处理的多个分条。
具体地说,将属于同一个逻辑单元号LUN的所有分条构成二叉树,所述二叉 树包括作为树的根节点的LUN、作为第一层查找树的分条查找索引、作为第二层 查找树的分条,其中在第二层查找树中分条为叶子节点,并且所述根节点和叶子 节点构成所述查找和更新的接口。
本发明所述的将属于同一个逻辑单元号LUN的所有分条构成二叉树包括: 将属于同一个逻辑单元号LUN的所有分条分别进行ID的编码;将每个 分条的ID作为分条查找索引;将LUN作为一棵树的根节点,每个分别按照其索引 分别挂入到LUN树上的相应位置上,以形成叶子节点。
具体地说,每个叶子节点包括:若干个分别作为指针的头部数据;以及分别 由若干个头部数据指向的若干个数据页面。
本发明还包括利用两个所述缓存器对磁盘阵列所需数据进行双控的镜像保 护,其中,所述磁盘阵列所需数据包括待写入磁盘的数据和从磁盘上读出的数据。
本发明按照递增序列对每个待写入磁盘的分条进行ID的编码,形成待写入 磁盘数据的队列。
图4显示了本发明实施例提供的一种提高磁盘阵列性能的装置示意图,如 图4所示,包括:设置缓存器模块401,用于在磁盘阵列RAID与磁盘块设备之 间设置缓存器;数据保存模块402,用于在写IO下发到磁盘阵列时,将磁盘阵 列所需数据暂时保存到所述缓存器中;获得接口模块403,用于通过对所述缓存 器暂时保存的磁盘阵列所需数据进行组织,提供相应的查找和更新的接口;查找 及更新模块404,用于利用所述接口进行写IO所需的查找和更新。
其中,将属于同一个逻辑单元号LUN的所有分条构成二叉树,所述二叉树包 括作为树的根节点的LUN、作为第一层查找树的分条查找索引、作为第二层查找 树的分条,其中在第二层查找树中分条为叶子节点,并且所述根节点和叶子节点 构成所述查找和更新的接口。
图5显示了本发明实施例提供的提高性能装置的示意图,如图5所示,通过 在RAID和磁盘块设备之间加入一个RAID专属cache的缓存器,用于暂存RAID 的数据,其中RAID的数据包含老版本的数据和parity数据。即在整个分条写完 成之前,要保护图2中的D1和P的数据,这部分数据可以通过RAID专属cache 的缓存器进行镜像的保存,所述RAID专属cache的缓存器本身就必须要有镜像 功能,如果在其中加入了保证分条一致性的逻辑,这个缓存器可以实现 write-hole功能。
通过所述RAID专属cache的缓存器,解决了在该分条的所有数据未正确的 写入磁盘之前,在内存中暂存这些数据的问题,等到这个分条的所有数据都写完 成了以后,再将这些数据丢弃,而如果一旦在写入整个分条数据的时候,个别的 磁盘发生了错误,则可以将原来在内存中保存的老版本的数据覆盖写,这样就达 到了保护分条一致性的目的。
图6显示了本发明实施例提供的数据组织方式的示意图,如图6所示,传统 阵列在磁盘上的分条划分方式,对于未来的虚拟化阵列来说,组织方式完全一致, 仅仅是对磁盘变为虚拟化块,而分条是划在虚拟化块上面。
此外,由于分条本身是可设置的或者说是可变化的,它由多个分条单元组成, 分条单元其最终是由多个页面组成,而当RAID的大小写需要读出数据的时候, 也往往需要读出相应的分条的数据,因此,采用分条为最小组织粒度的方式应该 是一种比较合理的方式。
本发明由于按照分条进行了组织,而对应于分条来说,其地址的连续性也就 意味着盘上地址的连续性,因此,对于下盘的请求,在RAID专属cache的缓存 器中可以存在自己的逻辑,比如对于顺序IO而言,一次发送多个分条的数据可 以更多的利用后端的带宽,而RAID专属cache的缓存器也可以使用更加智能的 刷盘算法,比如,有选择性的将更多的满分条的数据一起刷盘,由于RAID专属 cache的缓存器的存在,其本身就可以累积更多的数据,也容易使得在其内存空 间中更容得得到满分条的数据。
当刷盘完成以后,如果其RAID专属cache的缓存器空间足够,则将这部分 写的新数据继续保留下来,通过MRU(Most Recently Used,最近使用)的方式 来进行淘汰,对于整个分条的写入都完成的数据,就可以删除其旧的校验数据和 旧数据,同时也需要删除镜像数据。
图7显示了本发明实施例提供的二层查找表的组织方式示意图,如图7所示, 将属于某个LUN(Logical Unit Number,逻辑单元号)的分条进行ID的编码, 通常可以采用一个递增的序列,然后将分条的ID作为其查找索引index,进而将 整个LUN作为一个根节点,分条按照其index挂入到LUN这棵树上的固定位置, 采用二叉树的方式,提高查找效率。
对于第一层查找,在传统阵列和虚拟化阵列中有不同的含义,传统阵列因为 都是以磁盘组成的,因此对于分条的查找是可以定义为固定的数量的查找,比如, 如果一个LUN为10TB,其分条单元的大小为32KB来定义,采用5+1的RAID,那 么第一层查找对应的分条集可定义为8192个,那么其第一层的节点总数就是 8192个,而其每个节点包含的分条数目也是8192个,这样,通过两层的查找就 可以很快的找到其对应的分条,这个集合个数的确定要着重考虑其节点占用的内 存空间和查找效率。
如果是虚拟化方式,则可以以块为单位,由于虚拟化阵列采用的块大小本身 每个阵列厂商采用的粒度是不同的,例如,采用512MB块为基本大小组成RAID, 则上述的查找表的组织就发生了变化,第一层节点为:4096个,每个第一层节 点下包含第二层节点为16384个。
二叉树查找的好处在于其查找的快速性,由于整个查找的过程实际上是在 IO的路径上完成的,因此保证其查找的快速性非常重要,这将直接影响到整个 磁盘阵列系统对外表现出的性能指标。而如果全部采用线性表的方法,这样又会 导致表节点占用的内存空间太大,因此,采用二叉树的方式实际上是这两种考虑 的妥协。总的来说,这个组成是可以灵活改变的,其选择的主要因素在于对内存 的占用和对查找时延的要求。
图8显示了本发明实施例提供的每个分条下的页面组织形式示意图,如图8 所示,D1/D2/D3/P为头部数据结构,其中包含一个数据成员为一个指针数组, 其中包含其数据所在的页面。当这些数据被有效的组织起来以后,就可以提供相 应的查找和更新的接口,通过这些接口对RAID模块提供相应的支持。
对于每个分条,包含数个分条单元,每个分条单元则包含于磁盘上相同的数 据,只是这些数据目前是存在于内存中,而基于对分条单元的元数据的设计,则 需要在分条单元的数据结构体的头中,包含该部分数据所对应的在磁盘上的数据 的定位信息(比如磁盘ID和磁盘地址及数据的长度)。
图9显示了本发明实施例提供的数据镜像保护的示意图,如图9所示,写入 的数据首先是写入到RAID所占用的内存空间,数据写入完成以后,必须要采用 双控的镜像,这样,该数据到了RAID专属cache的缓存器中,实际上已经受到 了保护,此时对于RAID专属cache的缓存器之上的模块来说,整个的写IO流程 就已经结束了,由于该块内存本身会采用0拷贝的方式来保存(也就是说,该数 据在进入到RAID专属cache的缓存器的时候不会被重新copy一次),那么这个 内存就经历了一次,由上层分配,但最终被放入到RAID专属cache的缓存器的 过程,这个过程需要考虑一种场景,RAID专属cache的缓存器不能将整个的内 存全部用掉,否则会导致上层无法为写分配分配到足够的内存页面。
图中RAID专属cache的缓存器中的小方框就是在上面组织形态中的节点, 这种方式通过将RAID要写入的数据以及从磁盘上读出的数据放入到这块RAID 专属cache的缓存器中,实现了新写数据和老数据的集中缓存,当控制器意外掉 电的时候,这些保存的数据可以依靠电池所提供的电能将数据写入到磁盘上从而 将这些数据进行了保存,当重新上电以后,这些数据(新数据和老数据)都可以 得到恢复,通过这样的方式,加上部分RAID的分条一致性的逻辑的实现,这样 就可以将整个分条的内容进行相应的保存。
图10显示了本发明实施例提供的旧数据和计算得到的校验数据保存和使用 的流程图,如图10所示,包括以下步骤:
步骤1:写IO到达RAID模块;
步骤2:通过地址和数据长度的计算得到是要进行大写还是小写;
步骤3:返回计算结果;
步骤4:流程进入RAID的cache尝试进行命中;
步骤5:如果数据在RAID的cache中无法命中,则生成IO进行下盘读写;
步骤6:下盘读数据;
步骤7:读出的数据直接返回到RAID模块做后继处理;
步骤8:做分条一致性逻辑检查;
步骤9:写入旧数据;
步骤10:将旧数据写入本地和镜像;
步骤11:在对端形成新节点(其中包含旧数据);
步骤12:写入旧数据完成;
步骤13:写入新数据;
步骤14:将新数据写入本地页面和镜像;
步骤15:写入新数据完成;
步骤16:写入旧数据和新数据完成;
步骤17:在RAID的cache中进行定时触发;
步骤18:写入新数据;
步骤19:写入完成。
这样,通过这个流程,写入的数据实际上就是写入到RAID专属cache的缓 存器之中,而整个的流程本身也含有了分条一致性的逻辑,既提高了普通状态下 的读效率又保证了write-hole问题不再发生。
总上所述,暂存数据并不是本发明目的,而是将这些暂存的数据进行有效的 组织以便于对这些数据可以进行高效、简单的访问、修改等操作才是基本的要求。 比如,当一个RAID的写到来的时候,通过RAID的算法选择,其可能是一个RAID 的小写,此时,它需要读出其老版本的数据和老版本的parity数据,如果这些 数据已经在内存中,则整个的读出过程要快速得多。其次,一个SAN管理着大量 的磁盘,为了让这些磁盘能够并发的运行,则必须要求RAID的并发性,而为了 让每个磁盘都能够快速高效的运行,则一定要对写入/读出该盘的IO进行地址 上的一个排队。将数据暂时保存起来,对这两种需求都能够做到很好的支持。
综上所述,本发明具有以下技术效果:
本发明通过在RAID和块设备之间加入一个RAID专属cache的缓存器,形成 磁盘阵列RAID中的有效数据的组织形式以及一系列配合起来使用的机制,达到 智能的暂时保存RAID所需要使用的数据,提高了磁盘阵列的性能。
尽管上文对本发明进行了详细说明,但是本发明不限于此,本技术领域技术 人员可以根据本发明的原理进行各种修改。因此,凡按照本发明原理所作的修改, 都应当理解为落入本发明的保护范围。

一种提高磁盘阵列性能的方法及装置.pdf_第1页
第1页 / 共13页
一种提高磁盘阵列性能的方法及装置.pdf_第2页
第2页 / 共13页
一种提高磁盘阵列性能的方法及装置.pdf_第3页
第3页 / 共13页
点击查看更多>>
资源描述

《一种提高磁盘阵列性能的方法及装置.pdf》由会员分享,可在线阅读,更多相关《一种提高磁盘阵列性能的方法及装置.pdf(13页珍藏版)》请在专利查询网上搜索。

本发明公开了一种提高磁盘阵列性能的方法及装置,涉及计算机系统技术领域,其方法包括以下步骤:在磁盘阵列RAID与磁盘块设备之间设置缓存器;在写IO下发到磁盘阵列时,将磁盘阵列所需数据暂时保存到所述缓存器中;通过对所述缓存器暂时保存的磁盘阵列所需数据进行组织,提供相应的查找和更新的接口;利用所述接口进行写IO所需的查找和更新。本发明通过形成RAID中的有效数据的组织形式以及一系列配合起来使用的机制,达。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1