性能改善的数据存储和方法

文档序号:6421117阅读:92来源:国知局
专利名称:性能改善的数据存储和方法
技术领域
本发明总的涉及数据存储装置和系统,特别是涉及日志结构的写高速缓存器,通过将随机数据写转换成顺序数据写来改善这些装置和系统的性能。
背景技术
日志结构存储系统已经被提出,通过将随机写转换成顺序写来改善写数据的性能。存储装置如硬盘装置具有比随机I/O吞吐量快多个量级级的顺序存取吞吐量。然而,日志结构存储装置和系统实施成本高,因而具有明显的缺点。尽管随机写被转换成顺序写,但是顺序读往往又被转换成随机读,从而抵消了任何性能的改善。基于日志的文件系统进行实施和管理时通常是非常复杂的。最终导致日志结构的存储装置和系统不能被广泛推广使用。
Kenchammana-Hoskote和Sarkar(美国专利申请公布US2002/0108017A1)公开了一种现有技术方案,其中把数据写顺序日志地记录到分离存储装置中,并且依据日志分离地记录与日志相关的元数据。该方案在单一主存储媒介的情况下是不可行的,因为需要使日志独立于主媒介以保持性能相干性。
Mattson和Menon(美国专利US5416915)公开了另一种现有技术方案,通过在盘阵列上执行并行写操作来增强写性能。但是该技术方案不能取得顺序写的性能优点。
Rosenblum等人(“The Design and Implementation of a Log Structured FileSystem,”ACM Transactions on Computer Systems,V10-1,Feb.1992,pp.26-52)公开了又一种现有技术方案,其中由于性能原因,将文件系统设计成执行顺序写,然而该技术方案仅仅适用于可以实施日志结构文件系统的系统,因而是主机依赖型的。此外,这一系统的全部性能将不能充分执行,除非文件系统知道存储系统的基本特性,然而通常不存在这种情况。

发明内容
本发明的目的是提供一种用于数据存储系统如盘驱动器、盘阵列、光盘和存储服务器的日志结构写高速缓存器,以便可以将随机数据以顺序数据那样的效率写入这些系统中。本发明的另一目的是实现日志结构写高速缓存器的优点,而又不出现日志结构写高速缓存器的全读性能惩罚的情况。本发明的另一个目的是在存储系统中提供一种有效操作,将数据登记到写高速缓存器以及随后将数据从高速缓存器中写到目标扇区地址中。扇区是存储系统中的最小地址单元,通常是512个八比特字节。日志结构写高速缓存器在把数据写入目标扇区地址之前进行写数据。通过高速缓存还能够改善读操作。
写高速缓存器最好被实施在系统的主存储媒介中,但是也可以设置在系统的其它存储部件中。写高速缓存器包括多个高速缓存器行,其中写数据以非易失性状态被暂时累积,以便在以后时间可以将其顺序写入目标存储位置,由此改善系统的整个性能。每个高速缓存器行的元数据也可以保存在写高速缓存器中。元数据包括该行中的用于每个扇区的目标扇区地址和指示数据被登记到高速缓存器行上的顺序的顺序号。缓存器表项被供应给每个高速缓存器行。散列表用来搜索每个数据读和写操作时所需要的扇区地址的缓存表。
存在用于对估算任何高速缓存系统进行评估大量度量标准(metrics)。数据写必须充分地限制主机确认的任何数据在断电事件和系统复位事件中都将像已经写入那样被恢复。基本度量标准是读写I/O速率。高速缓存管理操作的开销也是重要的。开销包括确定项是否在高速缓存器中的时间以及需要增加项和从高速缓存器中移出项的时间和资源。存储高速缓存元数据所需的存储量是重要的。意外停机之后恢复系统状态所需的时间应当降至最小。刷新或部分刷新写高速缓存所需时间应当最小化,尽管这经常是一个后台(低优先级)操作。
下面将说明本发明的附加目的和优点,这些目的和优点将部分地从结合附图的说明中得知,或者可以通过本发明的实践得知。


图1是显示存储系统中本发明的写高速缓存器的示意图;图2a显示了本发明的提供日志结构写高速缓存和元数据的高速缓存器行的布局;图2b显示了高速缓存器行的进一步细节,包括数据块和扇区信息;图3显示了本发明的缓存表和在搜索缓存表时使用的散列表的一个实例;
图4是显示将数据输入到日志结构写高速缓存器的高速缓存器行上的登记(post)操作的一个最佳实施例的流程图;图5是显示从高速缓存器行中清除数据和把高速缓存器行中的扇区地址写入目标扇区地址的刷新操作的一个最佳实施例的流程图;图6a是显示写高速缓存器参与把数据写入存储装置的一个最佳处理的流程图;图6b是显示写高速缓存器参与从存储装置读取数据的一个最佳处理的流程图;图7a是显示响应登记操作进行瞬像(snapshot)操作的一个优选实施例的流程图;图7b是显示响应刷新操作进行瞬像操作的一个优选实施例的流程图;图8是显示当存储装置加电时恢复写高速缓存器状态的一个优选处理的流程图。
具体实施例方式
下面将按照一个供数据存储装置或系统使用的日志结构写高速缓存器说明本发明。然而,本领域熟练技术人员将会明白,可以对诸如数据处理系统的设备进行编程或者进行设计,使其便于实现本发明的方法,其中所述设备包括CPU、存储器、I/O、程序存储器、连接总线和其它合适的部件。这样一个系统可以包括运行本发明操作的适当程序装置。
此外,供数据处理系统使用的制造物,如预记录盘或者其它类似计算机程序产品,可以包括存储媒介和存储在其上的指导数据处理系统的程序装置,以便于本发明方法的实现。这些设备和制造物也落入本发明的精神和范围之内。
图1显示了存储设备100内的本发明的一般配置。主机102访问像是现有存储系统的存储系统104,主机102与1级(L1)写高速缓存控制106交互。写高速缓存控制106将数据暂时存储在L1写高速缓存器108中,写高速缓存器108在易失性随机存取存储器(RAM)122中存储数据。2级(L2)高速缓存控制110传递该数据和关联的元数据,以在RAM 122中建立其散列表112和缓存表114。在通常情况下,以高速缓存器行124的格式将数据和元数据发送到非易失性存储器120的存储区120上。一旦数据不再易失,则将存储确认返回给主机102高速缓存控制110周期性地更新高速缓存器的瞬像区域134,以反映缓存表114的当前状态。此外,当有助于操作时,从高速缓存器行124读出数据并写入主存储器126-132。主存储器可以包括如所示的多个存储装置或者单一存储装置,所以存储装置120、126-132驻留在单一存储区域中。
图2a显示了高速缓存器行布局200的一个实例。在可以是主存储器118的部分的非易失性存储器202的可寻址区域内,高速缓存器行204-208(b)和214-218被组成族。在图示202中存在位于数据区内的三个高速缓存器行的两个族。排列这些族以便进行最佳写操作,并且在族中顺序写这些高速缓存器行。例如,借助硬盘驱动器,高速缓存器行群将对应于将顺序写的盘上的一个或多个相邻轨迹。在存储阵列中,高速缓存器行群可以驻留在许多盘或者专用非易失性存储装置上,使顺序写速度更佳。图2a中的族被显示为散布在存储器的可寻址区域上,以便减少寻找距离。其它选择是,将所有高速缓存器行置入一个族中以减小恢复时间,或者分布各高速缓存器行,以便以恢复时间为代价改善稀有成组(scarce bursty)存储业务的性能。另外还分配了记录瞬像元数据的区域212。剩余的存储区域不用于高速缓存,而是可以用作主存储区域的部分。
瞬像元数据212、134定位在包含了用于整个高速缓存的元数据的瞬像拷贝的非易失性存储器118中。瞬像有助于停机之后的系统状态恢复。由于性能原因,瞬像不需要总是更新。瞬像信息保护性能优于如利用奇偶扇区的保护性能。
图2b示出了单一高速缓存器行204的内容。该行包括多个数据块252-256,与这些数据块关联的元数据258、可选奇偶块260,和可选引导顺序号250。每个高速缓存器行都具有标识行的写顺序的顺序号。顺序号被认为是元数据258的部分,但是也可以如图所示的那样置于高速缓存器行的前面。在图2b中,所示高速缓存器行中的第二数据块254被标识为块1,在8个扇区的块长情况下,被细化成包括数据扇区264-278。
对于写高速缓存器,术语“登记”用来说明把数据写入高速缓存器行的操作,术语“刷新”用来说明把数据从高速缓存器行移到目标位置的操作。
高速缓存器行作为一个单位来登记,以确保已写数据的完整性,并且仅仅被登记到一个空行上(成功刷新时刻的空行)。当整个行被登记时,向主机102显示一个“写完成”。行元数据250、258包含位于行204的信息;这样,写操作不包含将元数据写到任何其它位置。这是保持顺序存取性能的关键。奇偶块260是一个选项,它进一步提供数据完整性,以避免足以破坏整个块或者元数据的严重错误。
本发明的关键方面是高速缓存器行可以包含两个孔(没有数据出现的数据保留区域)和数据复制(在一组高速缓存器行之内多次复制主存储器中的数据)。涉及数据扇区的信息通过L2高速缓存控制进行跟踪。
以下部分更详细地描述了写高速缓存器的结构和操作。
行元数据行元数据包含行中关于每个扇区的目标地址的信息,以便得知扇区的位置和标识。行作为一个单元被登记,以提供顺序写,并且通过顺序号250标识写,以便以后确定写顺序。被登记到第一行作为第一写操作的结果的扇区能够被顺序登记到第二行以作为第二写操作。读操作必须能够定位和标识最近写入的扇区版本。
这里描述的本发明最佳实施例使必须被存储到易失性RAM 122中的元数据量最小化。高速缓存器行的行元数据250、258至少包括两个数据对象行顺序号和缓存器表。ANSIC程序设计语言中这些对象的实例定义可以是typedef struct{unsigned int SeqNum32;LineBufEntry LBE[lineSize];}LineBufTable;SeqNum是高速缓存器行的顺序号。它被显示为32-比特整数,但是只需要大得足以处理一组高速缓存器行之内唯一的顺序号即可。最好是,顺序号250(SeqNum)和行元数据258分别被嵌入到高速缓存器行204的起点和结尾,以确保正确写入行中。LBE是块缓存器表,假定其中存在高速缓存器行中的LineSize块位置。下面说明LineBufEntry结构。行缓存器表具有用于每个数据块位置的项。该项包括目标块号(涉及目标扇区地址)和指示该块中哪个扇区位置被占用的比特图(Bitmap)。通常不希望占用一个块中的所有扇区位置。等于0的比特图指示该块是空的。在C语言中的其结构是typedef struct{
unsigned int Block32;unsigned int Bitmap8;}LineBufEntry;一个块具有由BlockSize指示的固定数量扇区的存储,它最好是2的幂以便使用一位操作从目标扇区地址中算出块号。存储效率通过将扇区地址组合(group)为块而得以增强。存储效率反映大多数存储系统操作同时操控一个以上扇区的观测。例如,如果BlockSize是8,那么用于单一扇区地址(表示为LBA)的比特图项和块号可以按下式计算块=LBA>>3;比特图=1U<<(LBA & 7);因此,可以看到块和比特图值足以用于标识行中的每个扇区地址。上述比特图公式计算用于特定扇区地址的比特值。这些比特值被逐位或,以形成块的全比特图。BlockSize将确定比特图元素的比特长度。
高速缓存器行顺序号将用来确定行登记的顺序。某些顺序号值可以专用于指示例如行是空的。
缓存器表在操作期间,用于所有高速缓存器行的行缓存器表可以在随机存取存储器中合并成单一表,即缓存器表。该表具有用于每个项的附加元素,以存储对另一缓存器表项寻址的索引值。缓存器表项可以被定义为typedef struct{unsigned int Block32;unsigned int Bitmap8;unsigned int NextEntey16;}BufEntry;在缓存器表中顺序存储每个行缓存器表,因此,即使不存储数据基准,日志缓存器中的每个块项也具有特定的固定存储地址。缓存器表可以被定义为BufEntry BufTable[Lines*LineSize];在这里,诸多行是数个高速缓存器行。每个块项具有与其关联的固定存储器地址。这为登记和刷新高速缓存器行提供了显著的性能优势。
散列表在每个数据读和写操作时需要具有快速搜索缓存器表寻找扇区地址的能力。尽管存在大量的适于搜索高速缓存器寻找扇区地址的技术,但是链接列表项的散列表适合于搜索缓存器表。散列表提供一个小存储器轨迹和一个快速查找表。散列函数用来依据扇区地址号和块号实现比较均匀的诸多散列的分布。一个实例散列将使用块号的最低有效位。链接列表用来存取对应于散列值得缓存器表中的所有的块。
图3示出了散列表302以及该散列表如何用来引用缓存器表。散列表302具有用于每个唯一散列值的项,其中每个项是对应于散列的用于块的缓存器表中的项的索引。缓存器表320持有用于高速缓存器块的缓存器项。高速缓存器块仅具有单一的相应散列项,而许多块可以共享相同的散列项。NextEntry元素持有对应于散列值得缓存器表中的下一个块的索引。一个特定值“End”专用于指示链接列表的结尾。NextEntry元素的大小通常由可以保持的高速缓存器中块的数量决定。例如,16比特NextEntry足以满足64,000个项。
图3示出了散列表302和链接列表311-318的示例配置。在该实施例中,散列项310包含[行-1,0]的[行,块]索引。这是如连接316所指示的最后散列高速缓存器行370的第一块的索引。该块的NextEntry378包含如连接317所指示的
的索引。这是高速缓存器行0(330)的块1(340)的索引。块1(340)是链接列表中的最后项,因此NextEntry343包含对应于结尾390的索引值,如连接313所指示。图3中还显示了其它示例连接。
增加散列表的长度将改善查找链接列表中扇区地址时的性能,因为链接列表的长度往往较短。然而,这将增加存储要求。不需要在缓存器表中显性地存储高速缓存器行号,因为可以从索引值中算出其值。高速缓存器行中数据存储的位置可以用上述信息加高速缓存器行的起始位置算出。
在本发明的最佳实施例中,当登记行时,可以将项加载到散列表上的链接列表起点(该列表的头部)。这意味着在查找操作期间,第一匹配项是最新的。当刷新行时,项将从链接列表的尾部移出,从而确保顺序次序得以保留。
登记操作图4显示了登记操作400的细节。在步骤402,登记操作经过一组扇区和相关联的地址。在步骤404检验高速缓存器以查看是否充满。如果没有空余行,则在步骤406搜索高速缓存器,以寻找每个扇区地址。这包含先前所述的计算扇区的块号和比特图,和计算散列值以及仔细检查散列表的列表以寻找匹配。在步骤408,如果高速缓存器中没有扇区地址,则直接将扇区写到目标位置(步骤434),并且将登记操作指示为完成(步骤436)。在步骤408,如果在高速缓存器中找到任何一个扇区地址,则必须使缓存器表中的相应项无效。在步骤410,将不在高速缓存器中的一组扇区写到目标扇区上。在步骤412,调用刷新操作,在写高速缓存器中腾出空位。位于高速缓存器中的该组扇区随即进入进行登记的步骤414。这只是保持高速缓存器状态相干的许多可能方法之一。在步骤404,如果高速缓存器中存在空位,则扇区进入到步骤414。
在步骤414,确定将接收已高速缓存的数据得高速缓存器行的族。在步骤416,递增顺序号。然后在步骤418,以环绕或先进先出(FIFO)方式(即,以该族中高速缓存器行的数目为模)递增该族(cluster)的高速缓存器行指针,即登记行族#。在步骤420,处理高速缓存器行元数据外,还依据扇区地址建立一组块号和比特图。在步骤422,将这些块号和比特图作为一个单元写入由登记行指示的高速缓存器行上。步骤424、426和428构成一个循环,其中散列表通过在高速缓存器行中增加每个块的项来更新。这包括计算用于每个块的散列,然后将索引插入到链接列表前端处的块的BufTable项,并且把BufTable项的下一个索引值更新到在前的第一列表项的点上。这确保了按顺序号的次序存储链接列表。在步骤430,向主机102指示登记完成。最后,在步骤432,发送瞬像登记操作的信号,这可以导致元数据的瞬像写入存储器。尽管未示出,但是扇区列表可以导致登记多个行。
以上描述仅仅打算说明保持高速缓存器状态相干的登记操作的关键特征。也可以使用其它方法。例如,可以首先确定一组将要执行的操作,然后使用最佳化算法合并和排序媒介写操作。此外,在步骤412和414,可以使用保持高速缓存器状态相干的刷新然后登记的方法。其它方法也是可应用的,比如修改系统元数据以无效项。此外,替代用于块的现有散列项,而不是在列表的头部插入新值,也许是理想的。这将以纪录操作时搜索链接列表的附加处理为代价保证链接列表较短。
在本发明的优选实施例中,以每个族内的FIFO次序填充高速缓存器行。在FIFO中,以行数为模,按照行号递增次序登记诸多行。在该配置中,每个族具有读指针(刷新下一行的顺序号)和写指针,即登记行族#(登记下一行的顺序号)。如下所述,这一安排在初始化时简化了高速缓存器状态的恢复。
登记操作可以被各种条件触发。在大量写操作期间,登记可以在L1写高速缓存器接近充满时启动。也可以在以下时间触发登记操作当数据的行的价值(line’s worth)位于L1写高速缓存器中,或者当写活动性减弱时,或者当数据在某一时段位于L1写高速缓存器之后。基于写活动性的方法特别适合于L1写高速缓存完全未使用的情况。在此情况下,本发明的目的是以写速率较之在目标扇区写数据得以提高的一个速率登记诸多行。
刷新操作刷新操作用来从高速缓存器中清除数据并把扇区写到目标地址上。当已高速缓存的数据被移到目标位置上时,读取性能通常比全日志结构系统高(增强),因为主机102分配的扇区地址经常是局部上下文相似,尽管它们是无序写入的。然而,散列操作消耗时间,并且在空闲间隔按标准执行。许多存储工作量如台式和移动存储系统所生成的存储工作量是由具有活动性长间隔的活动性短脉冲串(高峰I/O速率)的短脉冲串表征的(例如,参见美国专利US5682273)。这些工作量提供刷新高速缓存器行的许多机会。实际上,美国专利US5682273的空闲检测算法可以用来识别这样的情况。
图5显示了刷新操作500的细节。在步骤502,刷新操作根据顺序号通过一个族的最旧的行号。这就确保了总是保留写数据次序。在步骤504,作为一个操作将整个高速缓存器行写入存储器。步骤506至514构成在高速缓存器行中处理诸多块中所有扇区的循环。在步骤508,散列表中查找每个块的块地址项。在步骤510,将最近的项与正在处理的项进行比较。如果值不匹配,则当前行中的扇区不是最新版本,并跳过。反之,在步骤512,将扇区写入盘上。
一旦所有扇区都已经得到处理,则在步骤516将该行标注为存储器中的空行(并且被反映到非易失性存储器中)。步骤518至522估算估算位于该行内的所有块。在步骤520,从列表中移出对应于块的散列表项。这可以通过搜索链接列表,寻找对应于当前行上块的项来实现。重新调整列表中在前项的下一个值,使之指向块项之后的项,从而将该项从列表中移出。在步骤524,发出瞬像刷新操作的信号,从而可以导致元数据的瞬像写入存储器。当更新元数据时,将高速缓存器行的空闲状态写入非易失性存储器。具有元数据立即反映的空闲状态并不重要。如果因意外功率损耗使系统状态丢失,其结果将是再次对行进行无关紧要的刷新。
尽管仅对刷新高速缓存器行的关键操作进行了说明,但是其它各种此类处理都是可能的。例如,不需要按照步骤512所示的次序写入扇区。此外,利用重新排序算法合并和分类诸多写,有利于性能最佳化。
数据写操作图6a显示了数据写操作600的细节。在步骤602,写操作通过一组扇区和关联的地址。在步骤604,确定是否应当高速缓存数据。例如,大顺序写绕过写高速缓存器也许是有利的。如果扇区可以被高速缓存,那么在步骤606则将登记操作转到扇区的列表。一旦登记完成,就在步骤614指示写完成。如果高速缓存器被绕过,则在步骤608直接将数据写到目标扇区地址。
在登记操作中,必须使写高速缓存器当前的任何扇区无效。在步骤610,搜索高速缓存器,以查看是否有任何扇区目前存在于高速缓存器中。如果没有,则在步骤614指示一个写完成。在步骤612,如果任何扇区位于高速缓存器中,则将无效对应的高速缓存器项。在本发明的优选实施例中,将这些剩余扇区放入被转移到登记操作的一个已减少的列表中。该描述用于仅仅说明写数据的关键特征。例如,通过首先标识所有操作,然后使用重新排序算法合并和最佳化写次序,来改善性能。
数据读操作图6b显示了数据读操作600的细节。在步骤620,读操作转到一组扇区地址。步骤622至632为每个扇区地址而运行。在步骤624,在散列表中查找对应于扇区地址的块和比特图。在步骤626,如果在高速缓存器中找到扇区,则在步骤628从散列表项确定的高速缓存器中读出该扇区。在步骤630,如果未在高速缓存器中发现扇区,则从给定的扇区地址中读出扇区。进一步增强该处理是可能的。例如,可以通过以下方式提高性能在该循环中建立数据位置列表,然后使用重新排序算法合并和最佳化读次序。
瞬像操作瞬像操作用来提供高速缓存器元数据的几乎最新的拷贝。允许瞬像略微过期可以改善系统操作性能。存在两种瞬像操作;一种用于登记操作,另一种用于刷新操作。设置瞬像间高速缓存操作的上限是有利的。每N个登记和每M个刷新都可以得到瞬像。由于刷新操作通常发生在后台,因此M=1很可能是一个好选择。10至20间的N的值可能提供性能影响与恢复时间之间合理的折衷。
图7a显示了响应登记操作的瞬像操作的细节700。在步骤704,递增登记计数器。在步骤706,检验计数器以查看是否需要瞬像。如果不需要,则结束操作。如果是用于瞬像的时候,则控制转到步骤708,在此将N个在前登记行的瞬像元数据送交瞬像区域212。以登记行是具有最新顺序号的那些行。在步骤710,复位计算器值,指示瞬像的完成。
通常高速缓存器行的元数据所占据的区域小于一个扇区。通过立刻登记N个扇区,瞬像更新还可以是一个用于改善性能的流动操作。
图7b显示了负责刷新操作的瞬像操作的细节700。该操作类似于瞬像登记操作。其区别是,在步骤726,用指示行空闲的元数据改写对应于最近刷新的行的行元数据。例如,通过使用专用于空闲行的顺序号进行改写。
恢复操作当初始化系统时,需要适当地恢复非易失性写高速缓存器的状态。如果系统具有指示一个清除停机的方法,则在停机之前可以得到一个完整瞬像,所以可以将恢复限制到读出瞬像。例如,许多存储系统可以使用一个首次写时设置并在清除停机时清除的脏标志(dirty flag)。如果不设置脏标志,则认为瞬像良好。反之,则不能保证瞬像状态是有效的,并且必须用高速缓存器和瞬像重建高速缓存器元数据。
图8显示了恢复操作的细节800。步骤803初始化最新的顺序号(newsn)的值和最旧的有效顺序号(oldsn)的值。步骤804至816是遍历高速缓存器中所有行值的循环。在步骤806,读取一行的瞬像元数据(SMD)。瞬像中最新顺序号在步骤808中更新。在步骤810,计算该高速缓存器行的高速缓存器写指针(用于登记操作的下一行号,即登记行族#),以作为与族中最新顺序号对应的行的索引。在步骤812,将读指针(用于刷新操作的下一行号)确定为在指示空闲行的高速缓存器元数据之后的最高行号(服从于FIFO环绕条件)。在步骤814,计算最旧的顺序号。当该循环完成时,所有瞬像元数据就存入存储器中。此外,最新顺序号、每个族的读指针、每个族的写指针和最旧顺序号是未知的。
步骤820至828是遍历所有族的行值的一个循环,这些族包括从写指针(登记行)到可以在瞬像(N-1)之前登记的最大数量的行。在步骤822,读出一行的元数据。在步骤824,将该行的顺序号与最新顺序号进行比较。如果顺序号小于最新顺序号,或者该顺序号指示该行是空闲的,则这里没有其它的行需要检查,并且在步骤830完成恢复操作。反之,当前行不是瞬像的部分。在步骤826,写指针(登记行)被递增(FIFO方式)并更新最新扇区号。在该行的结尾将得知登记行和顺序号的最新值。
散列表不存储在元数据中。它是通过按照增加顺序号的次序加载所有块项(像数据被登记)用行元数据重构的。这保证了每个块的列表次序被保留,尽管可以改变不同块的列表项次序。然而,这是无关紧要的。此外,使用重建散列表的更完善方法可能是有利的。例如,通过仅仅加载具有最高顺序号的用于每个扇区的项,来最小化链接列表的长度。
上述实例描述了M=1的情况(每次刷新的瞬像)。M>1的情况具有类似于步骤820至828的用于定位读指针的一个附加循环。瞬像的使用消除了刷新时更新高速缓存器的元数据之需要。需要指出的是,瞬像区域212不需要驻留在一个邻接地址块中。
数据完整性日志缓存系统的状态总是被准确定义是至关重要的。这需要系统总是把每次读请求的最新写入数据返回到其地址。因此,系统必须在任何时候都具有准确定义的状态,而且该状态必须在记录媒介上存储的持久数据中得到反映。例如,强迫登记操作按次序写高速缓存器行可以确保部分写能够被删除。在高速缓存器行的每个扇区之内对数序号编码,进一步增强了完整性。这可以这样实现,使用每个扇区中预留位置,或者将顺序号预编码到扇区校验区域中。部分写的高速缓存器行可以按空闲对待,因为主机102并未确认该操作已经完成。依据高速缓存器行次序通过顺序号次序的一个中断,也可以检测瞬像中的部分写。在前描述的恢复过程可以恢复在瞬像中未被更新的任何被登记的行。未在瞬像中反映的任何被刷新的行可以被再次刷新。
当采用多扇区纠错码(ECC)如连续扇区奇偶校验时,缓存器行是ECC可寻址单元的整数以及奇偶性校验是完整的ECC可寻址单元将具有优势。
实施例与高速缓存器容量相比,该实施例的随机存取存储器轨迹(footprint)是非常小的。在8的BlockSize(块长)情况下。每个缓存器表项是7字节。因此该轨迹占用来用于缓存器表的字节为每个高速缓存器扇区小于1字节。散列表的大小是预期查找表性能与所需存储器之间的平衡。通常,计算性能取决于散列表和链接列表的长度。存储器轨迹可以按以下方式计算。散列表的字节大小是项数量(高达64K项)的两倍。缓存器表大小等于(7字节×LineSize×行的数量)。
将5400rpm移动硬盘驱动器考虑为存储系统的一个非限制性实例。选择位于数据区域(MD)中心附近的高速缓存器行的单个族,以最小化HDD寻找距离。对于该盘驱动器,在MD上每轨迹存在416个扇区。每个轨迹将有2个高速缓存器行,每行具有208个扇区,每个轨迹具有1个奇偶校验块和1个用于所有元数据的块。因此,LineSize是具有8个BlockSize的24个块。这样,在高速缓存器中将具有515个行,占据了256个轨迹,提供了12,288个块。这样,16K项的散列长度是适合的。表1显示了所需的各种存储器结构的大小。(在这里K是系数1024。)该高速缓存器具有接近48MB的容量,然而元数据轨迹小于128KB。通常,由于块结构的原因将不能得到全容量。假定典型的I/O是4KB,高速缓存器容量将是原来的一半,或者是24MB,因为未定位的8个扇区I/O将占据2个块。
表1

该设计的恢复时间可以依据旋转周期和一个轨迹查找时间来估算。瞬像元数据是缓存器表的大小。每行的每个元数据占据整个扇区,这需要512个扇区或者小于两个轨迹。选择用于登记的最大瞬像间隔为N=20,以及用于刷新的最大瞬像间隔为M=1,是指最坏情况包含从12个轨迹(20/2+1)中读取高速缓存器轨迹加上瞬像。在该实施例中,周期是11.1ms,一个轨迹读取寻找是2.5ms,从而导致200ms恢复时间。这将不会对系统等待时间造成明显影响,因为在没有日志写高速缓存器的情况下,现有技术的启动时间大约为1.7s。
扩展具有写高速缓存器的存储系统的性能可以通过从链接列表中移出过期项(具有较旧顺序号的复制扇区)得到改善。刷新操作提供一个唯一机会,因为它仔细检查散列表以发现尾标记。当项发生碰撞时,可以移除任何过期项。此外,不需要为正在刷新的行刷新其过期扇区。各高速缓存器行不需要具有相同容量,并且还可以改变每组的高速缓存器行的数量。这些情况在外加例如行大小表的高速缓存器中可以被容易地处理。当利用分区纪录系统中的分布式高速缓存器轨迹时,该方案是有用的,其中改变了邻接的连续扇区的数量。一个实施例将是每个轨迹保持恒定数量的高速缓存器行,但是改变行的大小。此外,把分布式高速缓存器处理为一组FIFO而不是处理为单一FIFO将是有利的。当操作集中于可寻址存储区域的不同区域时,这将允许初始化高速缓存器的数据。
留下高速缓存器行或者组或者或者缺陷管理组的一些空闲扇区也许是有益的。保持高速缓存器行快速可存取是性能的关键。因此,应当确定高速缓存器行组内是否具有缺陷。这种缺陷将需要高速缓存器行重新分配。这可以通过是高速缓存器行的待分配的缺陷自由区域来实现。作为选择,可以在高速缓存器行组中自行处理缺陷管理。尽管可以直接使用奇偶校验,但是也能够使用行组内的备用空间重新映射扇区。
通过扩展瞬像元数据使其包括无效信息,可以改善高速缓存器充满时的系统性能。当无效整个高速缓存器时,这将减少刷新高速缓存器或者修改现存元数据的需要。它还可以在数据写操作期间减少无效高速缓存器项的写操作量。
有了高速缓存器行的固定位置,可能导致对地址空间的局部区域的不成比例的I/O访问,其中某些存储系统可能不利于稳定和长效性能。一个算法可以用来周期地移动访问位置,以及刷新操作也将改变访问位置。另一替代方案是将高速缓存器行周期地移动到不同位置。这可以在全刷新之后实现,尽管这不是必需的。来自新位置的数据可以借助空闲高速缓存器行来环绕。如果存储器特征在新区域中不同,还可以调整高速缓存器行的大小。
尽管已经结合优选实施例具体实现并说明了本发明,但是本领域的熟练技术人员将会明白,在不背离本发明的精神和范围的条件下可以作出形式和细节上的各种变化。因此,所公开的本发明应当认为仅仅是说明性的,并且其范围仅仅由附带的权利要求限定。
权利要求
1.一种数据存储系统,包括一个按数据块存储数据的媒介,其每个数据块与扇区地址相关联;一个具有多个高速缓存储器行的写高速缓存器,每个高速缓存器行具有多个数据块、行元数据和顺序号,其中行元数据具有将写入所述高速缓存器行中数据块上的扇区地址的信息,所述顺序号指示相对于其它高速缓存器行中数据块的所述高速缓存器行中数据块的次序;其中写高速缓存器充当改善系统性能的数据顺序写分段区域。
2.根据权利要求1所述的存储系统,其中高速缓存器行还包括一个奇偶块,用于在高速缓存器行部分损失的情况下,启动高速缓存器行中数据的恢复。
3.根据权利要求1所述的存储系统,其中写数据被登记到写高速缓存器之后,再按扇区地址写入系统。
4.根据权利要求1所述的存储系统,其中写高速缓存器被保存在系统的非易失性存储器中。
5.根据权利要求1所述的存储系统,还包括一个与主机系统和写高速缓存器相互作用的写高速缓存器控制。
6.根据权利要求1所述的存储系统,其中行元数据包括标识高速缓存器行的顺序号。
7.根据权利要求1所述的存储系统,其中行元数据包括具有多个项的行缓存器表,每个项具有一个目标扇区地址和一个指示占据块中扇区位置的比特图。
8.根据权利要求7所述的存储系统,其中用于所有高速缓存器行的行缓存器表被集成到一个缓存器表中,以允许搜索扇区地址。
9.根据权利要求8所述的存储系统,其中利用散列表搜索缓存器表。
10.根据权利要求9所述的存储系统,还包括一个管理缓存器表和散列表的高速缓存器控制。
11.根据权利要求1所述的存储系统,其中媒介包括用于整个写高速缓存器的行元数据的瞬像,所述瞬像用于在系统停机情况下恢复数据。
12.根据权利要求1所述的存储系统,其中多个高速缓存器行在媒介上被一起组合为族。
13.根据权利要求1所述存储系统,其中系统是盘驱动器。
14.根据权利要求1所述存储系统,其中系统是光驱动器。
15.根据权利要求1所述的存储系统,其中系统是盘阵列。
16.根据权利要求1所述的存储系统,其中系统是存储服务器。
17.一种改善数据存储系统性能的方法,该数据存储系统具有按数据块存储数据的媒介,其每个数据块与一个扇区地址相关联,该方法包括以下步骤在媒介上提供一个写高速缓存器,所述写高速缓存器具有多个高速缓存储器行,每个高速缓存器行具有多个数据块、行元数据和顺序号,其中行元数据具有将写入所述高速缓存器行中数据块上的扇区地址的信息,所述顺序号指示相对于其它高速缓存器行中数据块的所述高速缓存器行中数据块的次序;和把写高速缓存器中的写数据分段为改善系统性能的顺序写数据。
18.根据权利要求1所述的方法,其中分段步骤包括以下步骤接收多个将要写入系统的数据块;和将诸多数据块存入一个高速缓存器行中;生成用于高速缓存器行的元数据,元数据包括高速缓存器行的顺序号和数据块的地址;将元数据存储到高速缓存器行中。
19.根据权利要求18所述的方法,还包括以下步骤计算高速缓存器行中数据的多个奇偶块;和将奇偶块写入高速缓存器行。
20.根据权利要求17所述的方法,还包括以下步骤在媒介上提供瞬像区域;和在数据被写入到写高速缓存器之后,将用于高速缓存器行的元数据拷贝写入瞬像区域中。
21.根据权利要求20所述的方法,还包括根据瞬像元数据进行初始化之后,确定写高速缓存器状态的步骤。
22.根据权利要求21所述的方法,其中确定步骤包括以下步骤阅读瞬像元数据;确定包含当前高速缓存数据的高速缓存器行;和根据与确定的高速缓存器行关联的元数据,确定写高速缓存器状态。
23.一种供存储系统使用以改善系统性能的计算机程序产品,该系统具有一个按数据块存储数据的媒介,其每个数据块与扇区地址相关联,该计算机程序产品包括一个计算机可读媒介;设置在计算机可读媒介上的装置,用于在媒介上提供一个写高速缓存器,所述写高速缓存器具有多个高速缓存储器行,每个高速缓存器行具有多个数据块、行元数据和顺序号,其中所述行元数据具有将写入所述高速缓存器行中数据块上的扇区地址的信息,所述顺序号指示相对于其它高速缓存器行中数据块的所述高速缓存器行中数据块的次序;和设置在计算机可读媒介上的分段装置,把写高速缓存器中的写数据分段为改善系统性能的顺序写数据。
24.根据权利要求23所述的计算机可读产品,其中分段装置包括以下步骤设置在计算机可读媒介上的接收装置,用于接收多个将要写入系统的数据块;设置在计算机可读媒介上的存储装置,用于将诸多数据块存入一个高速缓存器行中;设置在计算机可读媒介上的生成装置,用于生成用于高速缓存器行的元数据,元数据包括高速缓存器行的顺序号和数据块的地址;和设置在计算机可读媒介上的存储装置,用于将元数据存储到高速缓存器行中。
25.根据权利要求24所述的计算机可读产品,还包括设置在计算机可读媒介上的计算装置,用于计算高速缓存器行中数据的多个奇偶块;和设置在计算机可读媒介上的写装置,用于将奇偶块写入高速缓存器行。
26.根据权利要求23所述的计算机可读产品,还包括设置在计算机可读媒介上的装置,用于在媒介上提供瞬像区域;和设置在计算机可读媒介上的装置,用于在数据被写入到写高速缓存器之后,将用于高速缓存器行的元数据拷贝写入瞬像区域中。
27.根据权利要求26所述的计算机可读产品,还包括设置在计算机可读媒介上的确定装置,用于根据瞬像元数据进行初始化之后,确定写高速缓存器状态的步骤。
28.根据权利要求27所述的计算机可读产品,其中所述确定装置包括设置在计算机可读媒介上的装置,用于阅读瞬像元数据;设置在计算机可读媒介上的装置,用于确定包含当前高速缓存数据的高速缓存器行;和设置在计算机可读媒介上的装置,用于根据与确定的高速缓存器行关联的元数据,确定写高速缓存器状态。
全文摘要
本发明公开了用于数据存储系统的日志结构写高速缓存器及其方法,用于改善存储系统的性能。该系统可以是RAID存储阵列、盘驱动器、光盘或者磁带存储系统。写高速缓存器最好被实施在系统的主存储媒介中,但是也可以被设置在系统的其它存储部件中。写高速缓存器包括诸多高速缓存器行,它们以非易失状态暂时累积写数据,以便以后时间能将写数据顺序地写入目标存储位置,由此改善系统的总体性能。每个高速缓存器行的元数据还可以被保存在写高速缓存器中。元数据包括行中每个扇区的目标扇区地址,指示数据被登记到高速缓存器行的次序的顺序号。缓存器表项供每个高速缓存器行使用。散列表用来搜索缓存器表,以寻找每个数据读和写操作时所需的扇区地址。
文档编号G06F3/06GK1512353SQ20031012040
公开日2004年7月14日 申请日期2003年12月11日 优先权日2002年12月27日
发明者史蒂文·R·赫茨勒, 丹尼尔·F·史密斯, F 史密斯, 史蒂文 R 赫茨勒 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1