基于位图的双控制器的高速缓冲存储器回写方法及装置与流程

文档序号:13214935阅读:163来源:国知局
技术领域本发明涉及计算机数据处理技术领域,尤其涉及一种基于位图的双控制器的高速缓冲存储器回写方法及装置。

背景技术:
磁盘阵列其原理是利用数组方式形成磁盘组,配合数据分散排列的设计,提升数据的安全性。目前,RAID都是由很多便宜、容量较小、稳定性较高的磁盘组成的一个大型磁盘组,实现了利用个别磁盘提供数据所产生的加成效果来提升整个磁盘系统效能。RAID通过在多个磁盘上同时存储数据来大幅提高数据存储的吞吐量,同时,RAID本身也具有缓存刷写功能,其在到达一定条件比如存储容量被占满时,会自动将缓存的数据刷写至硬盘。Cache是指磁盘阵列缓存,缓存位置在内存,缓存对象是磁盘阵列上存储的数据。双控高速缓冲存储器cache的回写(flush)需要双控IO锁的保护,用于确保flush完成之后,在双端将cache页由脏变成非脏时数据的一致性。如果不使用双控IO锁对flush和写cache进行互斥,那么在A端flush完成的时候,去通知B端页不再为脏,而恰好此时B端的Cache被写操作更新了,那么实际上B端就会认为部分脏页是干净的,不会将其flush,此时如果发生控制器失效或者电源失效,就会导致独立冗余磁盘阵列(RAID)数据丢失。IO锁的冲突强度是由两方面决定的:IO锁的锁范围大小、IO锁的持有时间。在flush时,一般的方案是在开始flush时获取IO锁的读锁,在结束并通知两个控制器flush完成之后释放IO锁。由于RAID随机写的性能远远低于顺序写的性能,在RAID大小远远大于cache大小的情况下,处理随机写时cache中的数据几乎都是离散的,flush的延时会变得很大。加上有可能出现正在flush的数据同时又在被写入的情况,等待flush的IO锁的cache层IO会越积越多,这些IO的延迟会不断增大。在并发数目确定的情况下,过大的IO延迟会导致整体性能的下降。由于IO锁的锁范围不能改变,而IO锁的持有时间变得过长而难以接受,因此需要解决长时间持有IO锁的问题。

技术实现要素:
针对现有技术中的缺陷,本发明提供一种基于位图的双控制器的高速缓冲存储器回写方法及装置,能够大幅度降低IO锁的持有时间,能够将回写的异步IO处理的时间从回写持有IO所的时间中移出,降低与IO处理之间的锁的冲突。第一方面,本发明提供一种基于位图的双控制器的高速缓冲存储器回写方法,包括:建立高速缓冲存储器的位图数据结构;根据所述位图数据结构,对所述高速缓冲存储器进行写数据;其中,所述位图数据结构包括脏数据位,本地回写位,对端回写位和写数据位。进一步地,所述方法还包括:在对所述高速缓冲存储器回写启动时,启用所述回写高速缓冲存储器的位图保护;在对所述高速缓冲存储器回写完成时,解除所述回写高速缓冲存储器的位图保护。进一步地,所述根据所述位图数据结构,对所述高速缓冲存储器进行写数据步骤之前,还包括:获取高速缓冲存储器的IO锁。进一步地,所述根据所述位图数据结构,对所述高速缓冲存储器进行写数据,包括:获取第一端的本地回写位,将所述本地回写位存储于高速缓冲存储器,将所述本地回写位发送至第二端;所述第二端接收所述第一端的本地回写位,所述第二端将所述第一端的本地回写位记录在所述第二端的对端回写位,所述第二端创建对端回写组,将所述第二端的对端回写组的句柄发送给所述第一端;所述第一端接收到所述对端回写组的句柄,将所述IO锁释放。进一步地,所述根据所述位图数据结构,对所述高速缓冲存储器进行写数据,还包括:在所述本地回写位或所述对端回写位置为1时,且所述写数据位置为0时,所述第一端在写IO时,将所述写数据位置为1;在所述写数据位由0置为1时,在缓存数据被替换前,所述第一端不释放已有数据,而所述第二端释放已有数据,在所述写数据位已经被置为1时,在缓存数据被替换前释放已有数据,在所述写数据位无位图结构保护时,在缓存数据替换前释放已有数据;在所述回写IO完成时,在所述写数据位为1时,将所述IO引用的高速缓冲存储器中的数据释放;将所述本地回写位置为0,并将所述写数据位置为0,获取本地回写的结果,根据所述本地回写的结果,修改所述本地的脏数据位;将所述本地回写的结果发送给所述第二端,所述第二端清除第二端的脏数据位和所述第二端的对端回写位。第二方面,本发明提供了一种基于位图的双控制器的高速缓冲存储器回写装置,包括:创建模块,用于建立高速缓冲存储器的位图数据结构;写数据模块,用于根据所述位图数据结构,对所述高速缓冲存储器进行写数据;其中,所述位图数据结构包括脏数据位,本地回写位,对端回写位和写数据位。进一步地,所述写数据模块还用于在对所述高速缓冲存储器回写启动时,启用所述回写高速缓冲存储器的位图保护;在对所述高速缓冲存储器回写完成时,解除所述回写高速缓冲存储器的位图保护。进一步地,所述装置还包括:获取模块:获取高速缓冲存储器的IO锁。进一步地,所述写数据模块,还用于获取第一端的本地回写位,将所述本地回写位存储于高速缓冲存储器,将所述本地回写位发送至第二端;所述第二端接收所述第一端的本地回写位,所述第二端将所述第一端的本地回写位记录在所述第二端的对端回写位,所述第二端创建对端回写组,将所述第二端的对端回写组的句柄发送给所述第一端;所述第一端接收到所述对端回写组的句柄,将所述IO锁释放。进一步地,所述写数据模块,还用于在所述本地回写位或所述对端回写位置为1时,且所述写数据位置为0时,所述第一端在写IO时,将所述写数据位置为1;在所述写数据位由0置为1时,在缓存数据被替换前,所述第一端不释放已有数据,而所述第二端释放已有数据,在所述写数据位已经被置为1时,在缓存数据被替换前释放已有数据,在所述写数据位无位图结构保护时,在缓存数据替换前释放已有数据;在所述回写IO完成时,在所述写数据位为1时,将所述IO引用的高速缓冲存储器中的数据释放;将所述本地回写位置为0,并将所述写数据位置为0,获取本地回写的结果,根据所述本地回写的结果,修改所述本地的脏数据位;将所述本地回写的结果发送给所述第二端,所述第二端清除第二端的脏数据位和所述第二端的对端回写位。由上述技术方案可知,通过本发明提供的基于位图的双控制器的高速缓冲存储器回写方法及装置,其中方法包括:建立高速缓冲存储器的位图数据结构;根据所述位图数据结构,对所述高速缓冲存储器进行写数据;其中,所述位图数据结构包括脏数据位,本地回写位,对端回写位和写数据位。通过本发明提供的一种基于位图的双控制器的高速缓冲存储器回写方法及装置,能够大幅度降低IO锁的持有时间,能够将回写的异步IO处理的时间从回写持有IO所的时间中移出,降低与IO处理之间的锁的冲突。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明一实施例提供的一种基于位图的双控制器的高速缓冲存储器回写方法的流程示意图;图2为本发明另一实施例提供的一种基于位图的双控制器的高速缓冲存储器回写方法的流程示意图;图3为本发明一实施例提供的一种基于位图的双控制器的高速缓冲存储器回写装置的结构示意图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他的实施例,都属于本发明保护的范围。图1为本发明一实施例提供的一种基于位图的双控制器的高速缓冲存储器回写方法的流程示意图,如图1所示,本实施例提供的基于位图的双控制器的高速缓冲存储器回写方法如下所述。101、建立高速缓冲存储器的位图数据结构。应理解的是,所述位图数据结构包括脏数据位(dirtybit),本地回写位(localflushingbit),对端回写位(peerflushingbit)和写数据位(overwritebit)。获取高速缓冲存储器的IO锁。102、根据所述位图数据结构,对所述高速缓冲存储器进行写数据。应理解的是根据位图中的数据结构在写操作的过程中进行标志数据结构中的符号,对高速缓冲存储器进行写操作。通过本实施例提供的基于位图的双控制器的高速缓冲存储器回写方法,能够大幅度降低IO锁的持有时间,能够将回写的异步IO处理的时间从回写持有IO所的时间中移出,降低与IO处理之间的锁的冲突。图2为本发明另一实施例提供的一种基于位图的双控制器的高速缓冲存储器回写方法的流程示意图,如图2所示,本实施例提供的基于位图的双控制器的高速缓冲存储器回写方法如下所述。201、获取第一端的本地回写位,将所述本地回写位存储于高速缓冲存储器,将所述本地回写位发送至第二端。应理解的是,获取本地的回写位,并将本地的回写位存储于高速缓冲存储器中,同时将本地的=回写位发送给第二端。在高速缓冲存储器cache节点上增加位图bitmap数据结构,原本只有定义该cache数据是否为脏数据的bitmap,现对bitmap定义如下:dirtybit,如果该数据为脏数据,该位置位。localflushingbit,如果该数据正在本地flushing,该位置位。peerflushingbit,如果该数据正在对端flushing,该位置位。overwritebit,如果该数据的local/peerflushingbit在置位的情况下,该位置位。202、所述第二端接收所述第一端的本地回写位,所述第二端将所述第一端的本地回写位记录在所述第二端的对端回写位,所述第二端创建对端回写组,将所述第二端的对端回写组的句柄发送给所述第一端。应理解的是第二端接收第一端的本地回写位,第二端创建对端的回写组,第二端将第一端的本地回写位记录在第二端的对端回写位上,同时第二端将对端回写组的句柄发送给第一端。可以理解的是,生成localflushingbitmap并记录在本地cache中,将localflushingbitmap发送给对端,对端收到localflushingbitmap后,将其作为peerflushingbitmap记录在本地,并在本地创建一个清空该peerflushingbitmap的计划任务,将该任务的句柄返回给flush方。203、所述第一端接收到所述对端回写组的句柄,将所述IO锁释放。应理解的是,第一端接收到第二端发送的对端回写组的句柄,将IO锁进行释放,flush方收到对端返回的句柄,记录在flush工作结构中,释放IO锁。注意在这里IO锁仅保护flush协商过程,而不是整个异步IO过程。204、在所述本地回写位或所述对端回写位置为1时,且所述写数据位置为0时,所述第一端在写IO时,将所述写数据位置为1。应理解的是,在本地回写位为1时或者对端回写位为1时,且写数据位置为0,在第一端写IO时,将写数据位置为1。205、在所述写数据位由0置为1时,在缓存数据被替换前,所述第一端不释放已有数据,而所述第二端释放已有数据,在所述写数据位已经被置为1时,在缓存数据被替换前释放已有数据,在所述写数据位无位图结构保护时,在缓存数据替换前释放已有数据。应理解的是,在写数据位由0置为1时,在缓存数据被替换前,第一端不释放已有数据,而第二端释放已有数据。在写数据位已经被置为1时,在缓存数据被替换前释放已有数据。在写数据位无位图结构保护时,在缓存数据替换前释放已有数据。在处理写IO时,若某段数据的overwritebit已经置位,则释放已有Cache,再将新的数据填充到Cache中。在本地回写位置为1或者对端回写位置为1时,检查所述写数据位是否置为1,在所述述写数据位置为1时,缓存数据替换前释放已有数据,第二端在缓存数据前替换已有数据;206、在所述回写IO完成时,在所述写数据位为1时,将所述IO引用的高速缓冲存储器中的数据释放。应理解的是,在回写IO完成时,在写数据位为1时,将IO引用的高速缓冲存储器中的数据释放。207、将所述本地回写位置为0,并将所述写数据位置为0,获取本地回写的结果,根据所述本地回写的结果,修改所述本地的脏数据。应理解的是,将本地回写位置为0,并将写数据位置为0,获取本地回写的结果,根据本地回写的结果,修改本地的脏数据,也就是修改dirtybit。在处理写IO时,如果发现某段数据的local/peerflushingbit被置位,并且overwritebit未置位,则将其替换并将overwritebit置位。如果是localflushingbit置位,上述操作不会将已有的cache释放(因为有flushIO正在引用这些数据),而是将数据指针替换掉。如果是peerflushingbit被置位,则将已有cache释放即可(没有本地flushIO正在引用这些数据)。在处理写IO时,如果发现某段数据的overwritebit已经置位,则释放已有Cache,再将新的数据填充到Cache中。在所述写数据位由0置为1时,在缓存数据被替换前,所述第一端不释放已有数据,而所述第二端释放已有数据。在所述写数据位已经被置为1时,在缓存数据被替换前释放已有数据。在所述写数据位无位图结构保护时,在缓存数据替换前释放已有数据。在flush完成之后,需要统一将本次flush对应的localflusingbit和overwritebit复位。特别的如果overwritebit在此前被置位了,需要将flushIO引用的cache数据释放掉(因为cache中的数据已经更新了)。208、将所述本地回写的结果发送给所述第二端,所述第二端清除第二端的脏数据位和所述第二端的对端回写位。应理解的是,将本地回写的结果发送给第二端,第二端清除第二端的脏数据位和第二端的对端回写位。随后根据flush的结果,修改本地的dirtybitmap。随后根据flush的结果,使用计划任务句柄通知对端修改其dirtybitmap和peerflushingbitmap。通过本实施例提供的基于位图的双控制器的高速缓冲存储器回写方法,能够大幅度降低IO锁的持有时间,能够将回写的异步IO处理的时间从回写持有IO所的时间中移出,降低与IO处理之间的锁的冲突。图3为本发明一实施例提供的一种基于位图的双控制器的高速缓冲存储器回写装置的结构示意图,如图3所示,本实施例提供的基于位图的双控制器的高速缓冲存储器回写装置如下所述。基于位图的双控制器的高速缓冲存储器回写装置,包括创建模块31和写数据模块32。创建模块31,用于建立高速缓冲存储器的位图数据结构;写数据模块32用于根据所述位图数据结构,对所述高速缓冲存储器进行写数据;其中,所述位图数据结构包括脏数据位,本地回写位,对端回写位和写数据位。所述写数据模块32还用于在对所述高速缓冲存储器回写启动时,启用所述回写高速缓冲存储器的位图保护;在对所述高速缓冲存储器回写完成时,解除所述回写高速缓冲存储器的位图保护。所述装置还包括:获取模块:获取高速缓冲存储器的IO锁。所述写数据模块32,还用于获取第一端的本地回写位,将所述本地回写位存储于高速缓冲存储器,将所述本地回写位发送至第二端;所述第二端接收所述第一端的本地回写位,所述第二端将所述第一端的本地回写位记录在所述第二端的对端回写位,所述第二端创建对端回写组,将所述第二端的对端回写组的句柄发送给所述第一端;所述第一端接收到所述对端回写组的句柄,将所述IO锁释放。所述写数据模块32,还用于在所述本地回写位或所述对端回写位置为1时,且所述写数据位置为0时,所述第一端在写IO时,将所述写数据位置为1;在所述写数据位由0置为1时,在缓存数据被替换前,所述第一端不释放已有数据,而所述第二端释放已有数据,在所述写数据位已经被置为1时,在缓存数据被替换前释放已有数据,在所述写数据位无位图结构保护时,在缓存数据替换前释放已有数据。在所述回写IO完成时,在所述写数据位为1时,将所述IO引用的高速缓冲存储器中的数据释放;将所述本地回写位置为0,并将所述写数据位置为0,获取本地回写的结果,根据所述本地回写的结果,修改所述本地的脏数据位;将所述本地回写的结果发送给所述第二端,所述第二端清除第二端的脏数据位和所述第二端的对端回写位。通过本实施例提供的基于位图的双控制器的高速缓冲存储器回写装置,能够大幅度降低IO锁的持有时间,能够将回写的异步IO处理的时间从回写持有IO所的时间中移出,降低与IO处理之间的锁的冲突。本领域普通技术人员可以理解:实现上述方法实施例的全部或者部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质中。以上所述,仅为本发明的具体实施方式,但是,本发明的保护范围不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替代,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1