一种磁盘外置Cache基于状态机的写回方法

文档序号:6340354阅读:211来源:国知局
专利名称:一种磁盘外置Cache基于状态机的写回方法
技术领域
本发明涉及磁盘外置Cache优化领域,具体涉及一种结合应用访问模式、磁盘负 载和磁盘外置Cache负载的方法来控制磁盘外置Cache的写回方法。
背景技术
磁盘的数据传输率是指磁盘读写数据的速度,包括内部数据传输率和外部数据传 输率。内部传输率也称为持续传输率,它反映了磁盘缓冲区未用时的性能,内部传输率主要 依赖于磁盘的旋转速度;外部传输率也称为突发数据传输率或接口传输率,它标称的是系 统总线与磁盘缓冲区之间的数据传输率,外部数据传输率与硬盘接口类型和硬盘缓存的大 小有关。之所以有这个差别,是因为存在一个称为磁盘缓冲区的高速设备,这是磁盘厂商为 了提高磁盘的读写性能在磁盘内部加入的,实际上是硬盘控制器上的一块内存芯片,具有 极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器。由于硬盘的内部数据传输 速度和外界介面传输速度不同,缓存在其中起到一个缓冲的作用。缓存的大小与速度是直 接关系到硬盘的传输速度的重要因素,能够大幅度地提高硬盘整体性能。当硬盘存取零碎 数据时需要不断地在硬盘与内存之间交换数据,有大缓存,则可以将那些零碎数据暂存在 缓存中,减小外系统的负荷,也提高了数据的传输速度。但是,受限于磁盘的硬件结构,其上的缓存容量不可能特别大,所以如果将磁盘 Cache从磁盘内部移动到外部将很容易解决容量的问题。因为不受空间的限制,外置磁盘 Cache可以达到几个GB,甚至几十GB的大小,使用如此大容量的缓存将会大大提高整个系 统的IO性能。然而,大容量缓存带来的一个很严重的问题是大量的被修改过的磁盘内容在 Cache中存放而不是用户所认知的位于磁盘上,这样当系统掉电等意外情况发生时,很难保 证磁盘外置Cache上的数据与磁盘上数据的一致性。在Linux系统上对磁盘数据的操作分为两类Direct IO和Buffered 10,前者是 一种不用内核缓存的10,它可以做到直接将用户空间的内存写入磁盘或者将磁盘数据直接 读到用户空间的缓冲区,这种策略就是不用内核的缓存而使用用户自己设计的缓存,这一 般在数据库系统中用到;后者则是使用最多的一种,用户对磁盘数据的访问都必须先经过 内核的缓存,读数据时如果数据在内核中有缓存则直接从内核内存中读出即可,速度远超 过从慢速的磁盘上读取,而写数据时也是先在内核中分配一段内存空间,然后将数据写入 此空间,以后在合适的时间再写入到磁盘中去,这里面也涉及很多写回的机制。因为,用户 希望写入磁盘的数据实际上并未真正的写入到磁盘中,而只是在内核空间中暂存,所以在 系统崩溃的时候暂存在内存中的磁盘数据将会全部都丢失。Linux使用一些专门的后台线 程定时地将内核中的磁盘数据写回磁盘中去。

发明内容
本发明充分考虑多方面的因素,既不影响应用程序的正常执行,也不长时间的将 脏数据保留在磁盘外置Cache中,提出了一种基于应用访问模式、磁盘和外置Cache状态的写回机制。一种磁盘外置Cache基于状态机的写回方法,状态机写回过程如下A、首先分配一个xinfo结构和一个rbio,若成功转B ;否则DIRTY,执行成功即从 FLUSH向DIRTY的转换,执行失败即从DIRTY向DIRTY的转换;B、若资源分配成功,检测当前脏数据位图,确定左右边界,以及是否为单一连续区 域,然后执行如下二选一路径Bi、若为单一连续区域,在Cache块或者xinfo中标记其为连续的,设置rbio的左 右边界和大小;B2、若为多个连续区域,设置左右边界为Cache块的左右边界;C、设置xinfo和rbio其它相关域,将rbio发送至外置磁盘Cache ;D、读回Cache块数据后,分两种情况D1、若其上的脏数据构成单一连续区域,则修改bio相关域,转发至磁盘;D2、若其上的脏数据不连续,需要先分配一个rbio,设置此bio,从磁盘读整个数 据块;E、从DIRTY向DIRTY的转换,或者从FLUSH向DIRTY的转换;F、读回磁盘数据后,与原来读的外置磁盘Cache块中的数据合并,再写回磁盘;G、从DIRTY向DIRTY的转换,或者从FLUSH向DIRTY的转换;H、如果写磁盘出错,则从DIRTY或者FLUSH向DIRTY的转换;I、否则,从FLUSH向CLEAN的转换,失败则从DIRTY向DIRTY的转换;J、释放相应资源;其中,CLEAN表示外置磁盘Cache块中没有脏数据,;DIRTY表示Cache块中有脏数 据;FLUSH表示一个写回流程处理一个Cache块的全部过程。本发明的一种优选技术方案在于在进行写回操作前需要先检测写回策略,根据 写回策略进行写回;写回策略包括不自动把脏块写回磁盘,没有写操作时将脏块写回磁盘, 既没有读也没有写操作时将脏块写回,没有顺序读写或顺序读写超过一定数目时将脏块写 回磁盘和只要有脏块即写回磁盘。本发明既体现了用户的需求,也保证了脏数据有机会写回磁盘,从而在发生严重 意外时不会有大量的未写回磁盘的数据被丢失。另外,本发明也充分考虑了系统的整体性 能,在存在一定数量的顺序读写时,系统不会执行额外的写回操作来打乱这些数据流的读 写,从而提高了 10的性能。


图1是磁盘外置Cache结构2是状态机转换过程
具体实施例方式本发明是一种基于应用访问模式、磁盘和外置Cache状态的写回机制。应用访问模式用户可以根据需要设置多种写回策略,比如不自动将脏数据写回、 没有10请求时再写回或者无论何种情况只要有脏数据就写回等策略,系统将根据用户的要求执行不同的处理流程;磁盘状态在磁盘处于空闲状态时,可以选择一些磁盘外置Cache中的脏数据写 回到磁盘中,这样既完成了刷新操作,避免了数据丢失的可能性,也充分利用了磁盘带宽, 具有较高的性价比;外置Cache状态如果外置Cache脏数据过多,则需要将部分脏数据写回磁盘,特 别的,在可用Cache块而必须替换以前的块时,如果被替换的数据有一部分是脏数据则应 该立即将这些数据写回磁盘以便其他流程可以使用此空间。根据应用的访问模式,可以设置几种写回策略。这些策略在系统发现某个磁盘外 置Cache块包含脏数据时使用,用户设定了一种写回策略后,只有满足策略要求的Cache块 才会被写回磁盘。在释放Cache块控制权的时候会去检测当前外置磁盘Cache设备对应的磁盘的忙 闲状态和包含脏数据的Cache块的数量,若磁盘不忙则会选择一部分Cache块写回磁盘。另 一方面,由于外置磁盘Cache容量小于对应的磁盘,所以在没有空闲Cache块供使用时需要 将包含数据的Cache块替换掉,如果此块包含的数据与磁盘上的数据完全一致,则直接使 用此空间即可;如果此Cache块包含的数据在磁盘中不存在,则必须将这些脏数据写回磁
ο以上操作确定了哪些Cache块需要写回磁盘,基于这些标记,负责具体写回操作 的流程首先从外置磁盘Cache中将所有的脏数据读出(因为外置磁盘Cache并不在内存的 地址空间,不能直接控制其写入磁盘)。若脏数据为单一连续区域,则只读这个区域,读回 来无误则直接写入磁盘;否则读整个Cache块,这部分可优化为只读多个脏数据区域的最 左边界至最右边界,读回来无误,再从磁盘读入对应的整个数据块,然后根据脏数据位图将 Cache块上最新的数据拷贝至磁盘回来的bio中,再将此bio写回磁盘。对单一连续区域 的检测要注意一点,不仅仅只看脏数据位图,如果此Cache块已经被缓存,那么应该直接从 Cache读到包含所有脏数据区域的最小区域,然后直接写磁盘即可。与写回操作有关的三个状态是CLEAN、DIRTY和FLUSH。CLEAN表示外置磁盘Cache 块中没有脏数据,注意此状态并不代表此Cache块所有sector都含有有效数据(比如之前 只发生过部分写入);DIRTY表示Cache块中有脏数据;FLUSH表示一个写回流程处理一个 Cache块的全部过程(未被写操作打扰的情况下)。这三个状态在各种情况下的转换关系 如图2所示。根据此状态机的详细处理流程如下所示1.首先分配一个xinfo结构和一个rbio,若成功转2 ;否则set_state(DIRTY), 执行成功对应于状态机中F2( !)从FLUSH向DIRTY的转换,执行失败对应于F2 ( !)从 DIRTY向DIRTY的转换,注意绝不可能有F2或者F2 ( !)从CLEAN向DIRTY的转换;2.此处资源分配成功,检测当前脏数据位图,确定左右边界,以及是否为单一连续 区域,然后执行如下二选一路径a)若为单一连续区域,在Cache块或者xinfo中标记其为连续的,设置rbio的左 右边界和大小;b)若为多个连续区域,设置左右边界为Cache块的左右边界;3.设置xinfo和rbio其它相关域,将rbio发送至外置磁盘Cache ;
4.读回Cache块数据后,分两种情况a)若其上的脏数据构成单一连续区域,则修改bio相关域,转发至磁盘;b)若其上的脏数据不连续,需要先分配一个rbio,设置此bio,从磁盘读整个数据 块;5. set_state (DIRTY),这对应于状态机中F2 ( !)从DIRTY向DIRTY的转换,或者 F2 ( !)从 FLUSH 向 DIRTY 的转换;6.读回磁盘数据后,与原来读的外置磁盘Cache块中的数据合并,再写回磁盘;7. set_state (DIRTY),这对应于状态机中F2 ( !)从DIRTY向DIRTY的转换,或者 F2 ( !)从 FLUSH 向 DIRTY 的转换;8.如果写磁盘出错,set_state (DIRTY),对应于状态机中F3 (disaster)从DIRTY 或者FLUSH向DIRTY的转换;9.否则,test_and_set_state (FLUSH, CLEAN),操作成功对应于状态机中 F3 从 FLUSH向CLEAN的转换,失败对应于F3从DIRTY向DIRTY的转换;10.释放相应资源。
权利要求
1. 一种磁盘外置Cache基于状态机的写回方法,其特征在于状态机写回过程如下A、首先分配一个xinfo结构和一个rbio,若成功转B;否则DIRTY,执行成功即从FLUSH 向DIRTY的转换,执行失败即从DIRTY向DIRTY的转换;B、若资源分配成功,检测当前脏数据位图,确定左右边界,以及是否为单一连续区域, 然后执行如下二选一路径Bi、若为单一连续区域,在Cache块或者xinfo中标记其为连续的,设置rbio的左右边 界和大小;B2、若为多个连续区域,设置左右边界为Cache块的左右边界;C、设置xinfo和rbio其它相关域,将rbio发送至外置磁盘Cache;D、读回Cache块数据后,分两种情况D1、若其上的脏数据构成单一连续区域,则修改bio相关域,转发至磁盘;D2、若其上的脏数据不连续,需要先分配一个rbio,设置此bio,从磁盘读整个数据块;E、从DIRTY向DIRTY的转换,或者从FLUSH向DIRTY的转换;F、读回磁盘数据后,与原来读的外置磁盘Cache块中的数据合并,再写回磁盘;G、从DIRTY向DIRTY的转换,或者从FLUSH向DIRTY的转换;H、如果写磁盘出错,则从DIRTY或者FLUSH向DIRTY的转换;I、否则,从FLUSH向CLEAN的转换,失败则从DIRTY向DIRTY的转换;J、释放相应资源;其中,CLEAN表示外置磁盘Cache块中没有脏数据,;DIRTY表示Cache块中有脏数据; FLUSH表示一个写回流程处理一个Cache块的全部过程。
2.如权利要求1所述一种磁盘外置Cache基于状态机的写回方法,其特征在于在进 行写回操作前需要先检测写回策略,根据写回策略进行写回;写回策略包括不自动把脏块 写回磁盘,没有写操作时将脏块写回磁盘,既没有读也没有写操作时将脏块写回,没有顺序 读写或顺序读写超过一定数目时将脏块写回磁盘和只要有脏块即写回磁盘。
全文摘要
本发明提供了一种基于应用访问模式、磁盘和外置Cache状态的写回机制。利用状态机对脏块进行写回,CLEAN表示外置磁盘Cache块中没有脏数据,;DIRTY表示Cache块中有脏数据;FLUSH表示一个写回流程处理一个Cache块的全部过程。本发明既体现了用户的需求,也保证了脏数据有机会写回磁盘,从而在发生严重意外时不会有大量的未写回磁盘的数据被丢失。另外,本发明也充分考虑了系统的整体性能,在存在一定数量的顺序读写时,系统不会执行额外的写回操作来打乱这些数据流的读写,从而提高了IO的性能。
文档编号G06F3/06GK102063271SQ20101061151
公开日2011年5月18日 申请日期2010年12月17日 优先权日2010年12月17日
发明者袁清波, 邵宗有, 骆志军 申请人:曙光信息产业(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1