一种磁盘在线重构方法

文档序号:6439290阅读:582来源:国知局
专利名称:一种磁盘在线重构方法
技术领域
本发明涉及独立冗余磁盘阵列(RAID)系统领域,特别是涉及一种磁盘在线重构方法。
背景技术
随着计算机数据处理能力的不断增强,硬盘的读取速度已无法满足大量数据读取的需要,因而出现了独立冗余磁盘阵列技术,其以成本低、功耗小、传输速率高、实现简单等优点,在网络服务器等设备中得到广泛应用。
RAID技术的优点之一就是能够在磁盘损坏时进行在线磁盘重构。目前主流的磁盘重构方法如下构造N个进程,N-1个进程对应N-1个仍然正常工作的磁盘,一个进程对应于热备盘。
与正常工作的磁盘相连的进程进行如下的处理步骤1、找到该磁盘上地址最低的分条单元;步骤2、若缓冲区(buffer)有足够的空间接收数据,则对该分条单元发出一个低优先级的读请求,读至缓冲区内(跳过已重构完毕的分条);步骤3、等待读操作完成,如果缓冲区管理器(buffer manager)中有缓冲区能接受该数据,将该数据送至缓冲区管理器的缓冲区中进行异或,并返回步骤1,否则等待,直到所有的分条单元都被读完。
与热备盘相连的进程进行如下处理步骤4、若缓冲区管理器中有已进行完所有分条单元异或的缓冲区,取出,进入下一步,否则等待;步骤5、对热备盘发出一个低优先级的写请求,将取来的缓冲区中的数据写至热备盘上,返回步骤4,等待写完成,直到失败磁盘所有数据都得到重构。
目前主流的Raid技术中均含有对逻辑单元(LUN,Logical Unit Number)的划分,Raid的分条深度,即在一个单盘上可以连续读写的数据数量,依LUN的大小而指定,所以各LUN的分条深度互有不同。
从上面流程可知,在面向磁盘的重构算法中,由于不同磁盘上的用户随机到达,有可能某些进程读取的数据块比其它进程多,缓存管理进程必须管理这些信息直到系统中最慢进程提交数据上来。这样各个进程对缓存的需求随时变化,没有一个固定值,但是系统的缓存是有限的,因而必须限制各个进程的缓存需求量。而重构过程中,是按分条单元地址由低到高顺序进行的,因此缓冲区管理器中申请缓冲区的大小很难确定。而如果缓冲区的大小不固定,则会增加缓存的申请释放过程,影响系统性能。对此,目前通常的做法是使缓冲区管理器中的缓冲区大小依最大的分条单元而定。这样虽然统一了缓冲区的大小,但可能造成内存的浪费。特别是当分条深度差别较大时,比如按照不同应用,一个逻辑单元的分条深度可能相差上千倍,那么如果按最大的分条深度统一申请的缓存大小,将长时间占用buffer manager中的大块缓存,从而造成内存资源的极大浪费。

发明内容
有鉴于此,本发明的目的是提供一种基于磁盘逻辑单元在线重构中的缓存管理方法。使通过该方法能够在保证较少的buffer manager内存申请释放次数的同时,降低内存的浪费。
为达到上述目的,本发明的技术方案具体是这样实现的一种磁盘逻辑单元在线重构中的缓存管理方法,包括以下步骤a)预先将独立冗余磁盘阵列中分条深度大小相近的逻辑单元划分成至少一个以上的组;b)磁盘重构过程开始,按RAID中分条深度最大的LUN申请一块缓存作为专有缓存,按组进行重构,重构进行到某一组时,按该组中分条深度最大的LUN申请一块缓存作为自由缓存,预留缓存的申请与自由缓存的相同。
较佳的使该方法步骤a)所划分的每个组中所有LUN的分条深度大小之和相近。
该方法进一步包括设定一个阈值,如果RAID中分条深度最大的LUN与分条深度最小的LUN的比值小于该阈值,则令步骤a)中的分组个数为1,否则,令步骤a)中的分组个数为3至5之间。
该方法所述阈值为2或3。
通过上述方案可以看出,针对传统面向磁盘的重构算法的缺点,本发明增加了对LUN的区分,这样buffer manager的buffer大小可以根据LUN组的变更进行调整,从而实现内存的较低浪费和内存的较少次申请释放过程。


图1为本发明实施例的实现示意图。
具体实施例方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
通常RAID重构缓存包括三部分专有缓存、预留缓存、自由缓存。专有缓存在重构过程中专用于读取磁盘数据;自由缓存用于保存待异或数据;预留缓存属于自由缓存的一部分,主要用于当出现强制重构,即用户写请求的分条正处于重构状态时,专有缓存若无法提交自由缓存进行异或操作,则专有缓存提交预留缓存完成异或操作。
针对前面所述的发明目的,本发明采用如下策略先将分条深度较接近的LUN分为一组,然后按组进行重构,当重构到某一组时,按该组中最大的分条深度申请自由缓存和预留缓存,待该组重构完成后再将其释放,而用于磁盘数据预读取的专有缓存则按整个RAID中最大分条深度的LUN申请,申请之后,除非重构结束,专有缓存不被释放。这样通过将LUN分组,从而既减少缓存资源占用,又保证了尽量少的缓存申请释放次数。
在实际操作过程中,还要考虑到如果RAID中各LUN分条深度相差不大,则没必要对其分组。
因此,首先给定一个阈值M。并假设N=MAX_Memery_Requied/MIN_Memery_Requied。这里Memery_Requied为每个LUN重构时所需的缓存大小;MAX_Memery_Requied为该RAID中LUN的最大值;MIN_Memery_Requied为其中的最小值。
有如下两种情况1、N小于M,此时由于分条深度之间差距较小,可不对其分组,而是统一申请一块缓存池,专有缓存、自由缓存和预留缓存,都可按该RAID中LUN的最大分条深度统一申请。当然也可以认为将整个RAID是分成了一组。这样既降低了内存管理难度,也减少了内存释放的频度。比如有LUN1~LUN5,其最大分条单元深度为45个Sectors,那么所需的重构缓存不会超过1MB,此时LUN1~LUN5完全可以固定申请一块缓存池,统一使用。
2、N大于M,此时分条深度差异较大。则需按上述方法分组进行磁盘重构。
阈值M,一般在2~3之间。其具体值,可根据该RAID组的应用场合,并结合系统配置,合理设置M。比如对于多媒体应用,由于一个分条单元大小较大,一般在512K~4M之间,则M可设置略大,如3。
参见图1所示,以RAID5为例来说明基于LUN的在线重构方法。
一般情况下,LUN之间的分条深度差异不很均匀。如图1中的情况,则可先确定一个允许差值δ,比较RAID组中所有LUN的分条深度,将满足|LUNi-LUNj|≤δ的LUN集中起来,根据分组情况,分别申请缓存,供其重构使用。
比如若设δ=50扇区(Sectors),则将LUN1~LUN5分成了三个组,组1LUN1、LUN3;组2LUN2、LUN4;组3LUN5。在重构过程中,专有缓存大小恒定为800个Sectors;自由缓存或预留缓存则随着重构的进行,依次取为250个Sectors、350个Sectors、800个Sectors。重构时,按照LUN1与LUN3第一组、LUN2与LUN4第二组、LUN5第三组顺序依次重构,重构完成一组LUN,重新申请自由缓存。
具体步骤是步骤1申请专有缓存的大小为800个Sectors。
步骤2读取LUN1中的数据到专有缓存,申请自由缓存的大小为250个Sectors,将LUN1的数据提交到自由缓存,进行异或操作,完成后将数据发送至热备盘。此时保留该自由缓存,继续按以上步骤对LUN3进行重构,即读取LUN3中的数据到专有缓存,将LUN3的数据提交到自由缓存,待LUN3的所有分条单元的数据进行完异或后,将数据发送至热备盘,从而完成了组1的重构。
这样,组1重构完成后,释放该自由缓存;重新申请自由缓存大小为350个Sectors,对组2的LUN2、LUN4按上述步骤一次进行重构,完成后,释放该自由缓存;再申请自由缓存的大小为800个Sectors,对组3的LUN5进行重构。
当出现强制重构时,若无法将数据从专有缓存提交自由缓存进行异或操作,则提交预留缓存完成异或操作,其步骤及缓存申请办法与自由缓存相同。
这里的δ,以使分组数目在3~5之间为好,太大太小都起不到分组归类的目的。且分组时,最好能使每个分组中所有LUN大小之和相近,这样重构的每个分组大小相近,若主机每个分组的访问频率相近的情况下,每个分组的重构时间相近,不至使某个分组重构时间过长,某个分组的重构时间又过短。由于某个LUN重构时,主机对该LUN的访问效率总会受到影响,减少某个LUN所在分组的重构时间,对提高主机对该LUN的访问效率是有好处的。
如果RAID系统各LUN的分条深度相差恰好较为均匀,比如同样是图1结构的RAID系统,而LUN的分条深度从LUN1到LUN5恰好依次为100、200、300、400、500个Sectors,此时很难确定一个合适的δ大小,因此可以根据上述各分组中LUN大小之和相近的原则,将LUN1到LUN3划为一组,LUN4为一组,最后LUN5为一组。重构过程与上述相同。
另外,对于另一种情况,比如仍以图1结构的RAID为例。如果LUN1至LUN5依次为100、210、300、410、500,虽然此时按设定一个差值δ的方法可以分组,但无法满足各组中LUN大小之和相近原则,此时可同样将LUN1到LUN3划为一组,LUN4为一组,最后LUN5为一组。
总之,分组原则既要使分组数目不能太多,通常在3~5之间,以保证缓存较少的申请释放次数,又要使各分组中LUN大小之和相近。这样可根据实际情况,综合考虑上述两原则来确定较佳的分组方案。当然,在具体实施方式
中并不仅限于上述分组方法。即保证较少的缓存申请释放次数,又实现内存的较低浪费的其他分组方法也可达到本发明的目的。
权利要求
1.一种磁盘在线重构方法,其特征在于,包括以下步骤a)预先将独立冗余磁盘阵列(RAID)中分条深度大小相近的逻辑单元(LUN)划分成至少一个以上的组;b)磁盘重构过程开始,按RAID中分条深度最大的LUN申请一块缓存作为专有缓存,按组进行重构,重构进行到某一组时,按该组中分条深度最大的LUN申请一块缓存作为自由缓存,预留缓存的申请与自由缓存的相同。
2.根据权利要求1所述的方法,其特征在于,步骤a)所划分的每个组中所有LUN的分条深度大小之和相近。
3.根据权利要求1所述的方法,其特征在于,进一步包括设定一个阈值,如果RAID中分条深度最大的LUN与分条深度最小的LUN的比值小于该阈值,则令步骤a)中的分组个数为1,否则,令步骤a)中的分组个数为3至5之间。
4.根据权利要求3所述的方法,其特征在于,所述阈值为2或3。
全文摘要
本发明公开了一种磁盘在线重构方法,包括以下步骤预先将独立冗余磁盘阵列(RAID)中的分条深度大小相近的逻辑单元(LUN)划分成至少一个以上的组;磁盘重构过程开始,按RAID中分条深度最大的LUN申请一块缓存作为专有缓存,按组进行重构,重构进行到某一组时,按该组中分条深度最大的LUN申请一块缓存作为自由缓存,预留缓存的申请与自由缓存的相同。通过本发明方案能够在保证较少的缓冲区管理器内存申请释放次数的同时,降低内存的浪费。
文档编号G06F12/00GK1519726SQ0310246
公开日2004年8月11日 申请日期2003年1月24日 优先权日2003年1月24日
发明者张巍, 张国彬, 任雷鸣, 陈绍元, 郑珉, 胡鹏, 罗传藻, 张 巍 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1