用于存取独立硬盘冗余阵列的系统与方法与流程

文档序号:16607278发布日期:2019-01-14 21:12阅读:162来源:国知局
用于存取独立硬盘冗余阵列的系统与方法与流程

本发明是有关于一种数据存取方法,且特别是有关于一种用于存取独立硬盘冗余阵列的系统与方法。



背景技术:

依操作方式不同,现行的独立硬盘冗余阵列(redundancyarrayofindependentdisks,raid)结构分为许多种类,诸如raid0、raid1、raid2至raid7等等,其中,raid3至raid6例如会使用异或(exclusiveor,xor)逻辑运算来产生奇偶校验码(paritycode),以实现raid的容错能力。举例来说,在以三个硬盘所组成的raid5中,当有一批数据要写入独立硬盘冗余阵列时,中央处理器会将这批数据划分(stripe)为两组不同的部分数据并暂存在随机存取存储器(randomaccessmemory,ram)中,然后再指示硬盘控制器(例如raid控制器)将其分别写入两个不同的硬盘。此外,中央处理器还会根据这两组成份数据进行异或运算,以计算对应的奇偶校验数据并暂存在ram中,然后再指示硬盘控制器将其写入另外一个硬盘。

为了提升系统的效能,常使用raid加速器来协助中央处理器计算奇偶校验数据。然而,在raid加速器将计算完的奇偶校验数据记录在ram之后,必须经过诸如系统调用(systemcall)、文件系统(filesystem)、计算访问地址等等流程,因此到硬盘控制器实际开始从ram取得数据并将其写入硬盘之前有一大段时间硬盘控制器是处于闲置的状态。



技术实现要素:

有鉴于此,本发明提供一种用于存取独立硬盘冗余阵列的系统与方法,通过减少硬盘控制器的闲置时间,以提升数据存取的速度。

本发明所揭露的用于存取独立硬盘冗余阵列的系统耦接于中央处理器、主存储器以及该独立硬盘冗余阵列之间,所述系统包括运算电路、暂存器及硬盘控制器,其中运算电路耦接于该中央处理器与该主存储器,用以从该主存储器读取写入数据并计算该写入数据的多个校验子,并且将计算完成的该多个校验子储存至该主存储器;暂存器耦接于该运算电路,用以储存该运算电路计算该多个校验子的计算进度;硬盘控制器耦接于该暂存器以及该独立硬盘冗余阵列,用以从该暂存器取得该计算进度,并且根据所取得的该计算进度将计算完成的该多个校验子从该主存储器储存至该独立硬盘冗余阵列。

本发明所揭露的用于存取独立硬盘冗余阵列的方法,包括:读取主存储器中的写入数据;计算该写入数据的多个校验子并且将该多个校验子储存至该主存储器;将计算该多个校验子的计算进度储存于暂存器中;以及读取该暂存器中的该计算进度,并根据所读取的该计算进度,将该多个校验子从该主存储器储存至该独立硬盘冗余阵列。

基于上述,本发明所揭露的用于存取独立硬盘冗余阵列的系统与方法,在独立硬盘冗余阵列加速器中提供一组暂存器来即时记录独立硬盘冗余阵列加速器计算校验子的计算进度。硬盘控制器在将校验子从主存储器写入硬盘前,先读取独立硬盘冗余阵列加速器中的暂存器,以根据暂存器中所记录的计算进度来将主存储器中的计算完成的校验子写入硬盘。据此,可以在独立硬盘冗余阵列加速器计算校验子的过程中,硬盘控制器就可以先将计算完成的部分校验子写入硬盘,而不必等到该笔写入数据所对应的全部校验子都计算完成并储存到主存储器之后才通知硬盘控制器将计算完成的校验子写入硬盘,从而减少硬盘控制器的闲置时间,以提升数据存取的速度。

为让本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合所附图式作详细说明如下。

附图说明

图1绘示本发明一实施例中计算机系统的概要方块图。

图2绘示本发明一实施例中运算电路执行数据存取方法的流程图。

图3绘示本发明一实施例中硬盘控制器执行数据存取方法的流程图。

图4绘示本发明一实施例中数据存取方法的示意图。

其中,附图中符号的简单说明如下:

10:计算机系统;100:独立硬盘冗余阵列存取系统;111:运算电路;113:暂存器;120:独立硬盘冗余阵列加速器;130:硬盘控制器;200:中央处理器;300:主存储器;300-1、300-2、300-3:主存储器300的区块;400:独立硬盘冗余阵列;410、420、430:硬盘;page1-0、page1-1、page1-2、page1-n:第一部分的数据;page2-0、page2-1、page2-2、page2-n:第二部分的数据;pagepq-0、pagepq-1、pagepq-2、pagepq-n:校验子数据;s210、s220、s230、s240、s250、s310、s320、s325、s330、s340、s350、s360、s370:数据存取方法的步骤。

具体实施方式

图1绘示本发明一实施例中计算机系统的概要方块图。

请参照图1,计算机系统10包括中央处理器(centralprocessingunit,cpu)200、主存储器(mainmemory)300、独立硬盘冗余阵列(redundancyarrayofindependentdisks,raid)400以及独立硬盘冗余阵列存取系统100。独立硬盘冗余阵列存取系统100耦接于中央处理器200、主存储器300以及独立硬盘冗余阵列400之间。

详细来说,独立硬盘冗余阵列存取系统100包括运算电路111、暂存器113以及硬盘控制器130,其中硬盘控制器130例如是硬盘阵列控制器,可经由诸如ata/atapi、sata或是scsi等规格的总线通道连接到多个硬盘410、420、430,以将这些硬盘整合成硬盘阵列,本发明并不在此限制整合为硬盘阵列的硬盘数量。

运算电路111耦接于中央处理器200与主存储器300,用以从主存储器300读取写入数据并计算写入数据的多个校验子,并且将计算完成的校验子储存至主存储器300。暂存器113耦接于运算电路111,用以储存运算电路111计算校验子的计算进度。硬盘控制器130耦接于暂存器113以及独立硬盘冗余阵列400,用以从暂存器113读取计算进度,并且根据所读取的该计算进度将计算完成的校验子从主存储器300储存至独立硬盘冗余阵列400。

在一些实施例中,运算电路111与暂存器113是整合为独立硬盘冗余阵列加速器(raidaccelerator,raida)120来实施,其中运算电路111负责协助中央处理器200进行独立硬盘冗余阵列400所需要的计算(例如,计算p校验子、q校验子等)。特别是,暂存器113与硬盘控制器130之间以实体线路连接,因此硬盘控制器130可快速且直接地存取暂存器113中的计算进度。

在一些实施例中,raida120是整合于北桥芯片组(northbridgechipset)中。硬盘控制器130是整合于南桥芯片组(southbridgechipset)中。中央处理器200例如可经由此北桥芯片组存取主存储器300或下达指令至南桥芯片组的硬盘控制器130,而硬盘控制器130例如可经由此北桥芯片组存取主存储器300。在其它实施例中,例如片上系统(systemonchip,soc)的实施例中,raida120和硬盘控制器130可整合于同一输入输出(io)扩展芯片中。

以下将举实施例详细说明当中央处理器200欲将写入数据储存至独立硬盘冗余阵列400中时,独立硬盘冗余阵列存取系统100的操作流程。

图2绘示本发明一实施例中运算电路执行数据存取方法的流程图,图3绘示本发明一实施例中硬盘控制器执行数据存取方法的流程图,图4绘示本发明一实施例中数据存取方法的示意图。

请先参照图4,在一些实施例中,中央处理器200例如会先将写入数据划分为第一部分以及第二部分,并分别记录在主存储器300的两个不同区块300-1、300-2中,其中第一部分例如包括n+1个页面(page)的数据page1-0至page1-n,而第二部分例如包括n+1个页面的数据page2-0至page2-n。而与写入数据对应的计算完成的校验子会记录在主存储器300的区块300-3中,同样的,校验子例如包括n+1个页面的数据pagepq-0至pagepq-n。每个页面的校验子对应于写入数据的第一部分和第二部分的一个页面的数据,比如写入数据的第一部分的页面数据page1-0和第二部分的页面数据page2-0对应的校验子为pagepq-0。其中一个页面例如可包括4千字节(kb)的数据。硬盘控制器130可随后将写入数据的第一部分从主存储器300写入硬盘410中,并且将写入数据的第二部分从主存储器300写入硬盘420中。本发明中的raida120在对多个校验子进行计算的过程当中,硬盘控制器130将已经计算完成的校验子从主存储器300写入硬盘430中,以实现raid的容错能力。

然而,本发明并不在此限制划分写入数据的具体方式。举例来说,写入数据亦可例如被划分为三个或其他更多个部分,并记录于主存储器300的三个或更多个区块当中。

在一些实施例中,中央处理器200例如会为raida120生成与需要计算校验子的写入数据对应的计算请求,以指示raida120计算写入数据的校验子。举例来说,中央处理器200例如可在主存储器300中配置计算请求表(未绘示),用以先进先出地记录多个计算请求,以告知raida120其计算校验子所需的多笔写入数据。中央处理器200选取主存储器300中的区块300-1、300-2中储存的写入数据的第一部分和第二部分的一部分页面(比如选取第一部分与第二部分的各16个页面)并获得选取的第一部分和第二部分的页面在主存储器300中的地址、长度等信息;然后根据选取的第一部分和第二部分的页面在主存储器300中的地址、长度等信息在主存储器300的区块300-3中分配对应的校验子储存空间,并获得校验子储存空间的地址、长度等信息;再在暂存器113中生成对应的计算进度并获得计算进度在暂存器113中的地址等信息。中央处理器200根据选取的写入数据的第一部分和第二部分的页面在主存储器300中的储存空间的地址、长度等信息和选取的写入数据的第一部分和第二部分的页面对应的校验子在主存储器300中的储存空间的地址、长度等信息和计算进度在暂存器113中的地址等信息,生成对应的计算请求;然后将计算请求存入主存储器300(例如存入主存储器300中的计算请求表),再通知raida120从主存储器300中读取计算请求并根据读取到的计算请求计算校验子;同时,中央处理器200会通知硬盘控制器130进行校验子写入处理(下文会详述)。在一实施例中,中央处理器200在这里会根据计算请求的部分信息生成一写入请求并通知硬盘控制器130进行校验子写入处理。

在一实施例中,如果还有剩余的写入数据对应的页面没有生成计算请求,则中央处理器200会重复上述生成计算请求的过程,直到所有写入数据对应的页面都生成计算请求并存入主存储器300(例如主存储器300中的计算请求表)。据此,raida120可从主存储器300中依序取得计算请求来计算对应写入数据的校验子,并将计算完的校验子写入主存储器300的区块300-3中对应的储存空间,且即时更新计算请求对应的位于暂存器113中的计算进度。硬盘控制器130在接收到中央处理器200的通知后,会读取暂存器113中该计算请求对应的计算进度,并根据读取到的计算进度将计算完的校验子写入硬盘430中(下文会详述)。在一实施例中,硬盘控制器130在接收到中央处理器200的通知后会读取主存储器300中与该计算请求对应的前述写入请求并进行处理,并根据该写入请求读取暂存器113中对应的计算进度。

在完成该计算请求对应的所有校验子的计算后,raida120删除暂存器113中对应的计算进度,并从主存储器300(例如主存储器300中的计算请求表)中依序取得下一个计算请求来计算对应写入数据的校验子,直到处理完所有计算请求(例如计算请求表为空)。然而,本发明并不在此限制中央处理器200通知raida120的具体实施方式。

在一实施例中,中央处理器200在主存储器300中配置写入请求表(未绘示),用以先进先出地记录多个写入请求,以告知硬盘控制器130其所需写入硬盘430的校验子。中央处理器200在生成计算请求并通知raida120后,再根据计算请求的部分数据生成一个对应的写入请求并存入写入请求表,然后通知硬盘控制器130读取写入请求并进行处理。硬盘控制器130从写入请求表中读取写入请求并在其暂存器中分配一写入进度(未示出);根据写入请求中的信息获取对应的校验子的计算进度和校验子在主存储器300中的地址、长度等信息,如果计算进度大于写入进度,则读取计算完成的校验子并将其写入硬盘430中,同时更新写入进度;如果计算进度等于写入进度,则硬盘控制器130延迟预定的时间(比如10毫秒)后再从暂存器113中读取计算进度;如果读取不到校验子的计算进度,说明此写入请求对应的校验子已经全部计算完成,直接将此写入请求对应的所有校验子从主存储器300写入硬盘430中;重复上述过程,直到将写入请求对应的所有校验子都写入硬盘430中并删除对应的写入进度。

处理完一个写入请求后,硬盘控制器130会再从写入请求表中读取下一个写入请求进行处理,直到写入请求表为空。

特别是,raida120取得一个计算请求进行计算,但尚未计算完该计算请求对应的所有校验子时,硬盘控制器130依据取得的与计算请求对应的写入请求读取该计算请求对应的计算进度,以将计算请求对应的计算完成的校验子从主存储器300写入硬盘430中。如此一来,raida120在计算校验子的过程中(即尚未计算完所有的校验子时),硬盘控制器130便可以开始将计算完成的部分校验子从主存储器300写入硬盘430,而不必等到该笔写入数据所对应的全部校验子都计算完成并储存到主存储器300之后才通知硬盘控制器130将计算完成的校验子写入硬盘430,从而大幅减少了硬盘控制器130闲置的时间。

在一实施例中,中央处理器200是以执行主存储器300中的一段代码的方式生成计算请求和写入请求的。在另一实施例中,中央处理器200还执行该段代码将计算请求和写入请求分别存入计算请求表和写入请求表中。

在另一实施例中,raida120包含多个运算核,各个运算核可以同时对写入数据的不同部分进行校验子计算,从而提高raida120的计算能力。

请参照图2,同时参照图1与图4,在步骤s210中,raida120会从主存储器300(例如主存储器300中的计算请求表)中读取计算请求,随后在步骤s220中,会根据计算请求(例如其中所包括的写入数据的地址、长度信息)读出计算请求所对应的写入数据。举例来说,raida120可从主存储器300中读出计算请求对应的写入数据的各个部分,例如从主存储器300的区块300-1、300-2分别读出写入数据的第一部分以及第二部分。举另一例来说,写入数据的各个部分也记录在中央处理器200的快取存储器(cache)中,因此运算电路111亦可以直接从cpu200的快取存储器读出写入数据的各个部分,本发明并不在此限制写入数据记录的具体位置。

在一些实施例中,raida120的运算电路111例如在步骤s220中首先读出第一部分中第一个页面的数据page1-0以及第二部分中第一个页面的数据page2-0。

在步骤s230中,运算电路111会计算所读的写入数据的校验子并且将计算完成的校验子储存至主存储器300中。详细来说,运算电路111会对当前读出的数据页面计算出对应的校验子数据,并且根据计算请求中校验子在主存储器300中的地址信息将其写入主存储器300的区块300-3中。举例来说,运算电路111会对第一部分中第一个页面的数据page1-0以及第二部分中第一个页面的数据page2-0进行异或(exclusiveor,xor)运算,来取得第一个页面的校验子数据pagepq-0,并且将其写入主存储器300的区块300-3中。

然而,本发明并不在此限制根据写入数据的各部分计算校验子的具体方式,所属技术领域的技术人员当可依其需求以及raid的规范来进行实施。

在步骤s240中,raida120会将运算电路111的计算进度写入暂存器130中。详细来说,raida120会根据计算请求中的计算进度在暂存器113中的地址信息将计算写入数据的校验子的当前完成的情况记录在暂存器130中,并且即时地进行更新。举例而言,raida120在运算电路111计算完每个页面的校验子数据后都会更新记录在暂存器130中的计算进度。

举例来说,raida120会在第一个页面的校验子数据pagepq-0计算完成后,即时地将此计算进度(例如,计算完的校验子的页面数量占全部页面数量n+1的百分比,或最近一次记录到主存储器300中的校验子数据在主存储器300中的起始地址等)记录在暂存器130中。然而,只要能够表示目前校验子的计算进度,本发明并不在此限制记录时使用的形式。

在一些实施例中,raida120还将所计算的校验子在主存储器300中的储存地址以及长度(例如,区块300-3的物理地址以及n+1个页面共4n+4kb)记录于暂存器130的对应计算进度中。

在步骤s250中,raida120会判断是否有尚未计算完的写入数据的校验子。若否,则删除计算进度并结束计算;反之,则回到步骤s220,继续读出写入数据,并且重复步骤s230至s250,直到该笔写入数据的校验子全部计算完成。

举例来说,若当前的计算进度是计算完第一个页面的校验子数据pagepq-0,则raida120会回到步骤s220继续读出写入数据的第一部分中第二个页面的数据page1-1以及第二部分中第二个页面的数据page2-1,并且重复步骤s230至s250,然后再回到步骤s220继续读出写入数据的第一部分中第三个页面的数据page1-2以及第二部分中第三个页面的数据page2-2,并且重复步骤s230至s250,以此类推,直到第n+1个页面的校验子数据pagepq-n都被计算出来并且写入主存储器300的区块300-3。

特别是,由于中央处理器200在raida120尚未计算完写入数据的所有校验子时,便通知硬盘控制器130读取计算进度,因此硬盘控制器130在上述流程中实现同步地将校验子从主存储器300的区块300-3写入硬盘430中。

请参照图3,同时参照图1与图4,在步骤s310中,硬盘控制器130会接收来自中央处理器200的通知从而读取主存储器300(例如主存储器300中的写入请求表)中的写入请求。举例来说,中央处理器200会在生成计算请求并指示raida120根据生成的计算请求计算写入数据的校验子的同时,根据该计算请求的部分信息生成对应的写入请求并通知硬盘控制器130读取生成的写入请求,在步骤s320中,硬盘控制器130根据写入请求读取暂存器113中的计算进度,从而将已经计算完成的部分校验子从主存储器300写入硬盘430中(下文会详述)。因此,硬盘控制器130例如能够在raida120的运算电路111将写入数据的所有校验子都计算完成之前开始将已经计算完成的部分校验子从主存储器300写入硬盘430。在其它实施例中,也可以省略写入请求,在步骤s310中,硬盘控制器130接收来自中央处理器200的通知时直接读取主存储器300(例如主存储器300中的计算请求表)中的计算请求;在步骤s320中,硬盘控制器130根据计算请求读取暂存器113中对应的计算进度。

总而言之,在步骤s320中,硬盘控制器130会读取raida120的暂存器130中的计算进度。

在步骤s325中,硬盘控制器130会根据在步骤s320中的读取结果判定计算进度是否存在,如果计算进度存在,则在步骤s330中判断主存储器300中是否有已经计算完成但尚未写入硬盘430的校验子;如果计算进度不存在,则进入步骤s370(下文会详述)。

在步骤s330中,根据计算进度判断主存储器中300是否有尚未写入硬盘430的计算完成的校验子。如果硬盘控制器130判断主存储器300中存有尚未写入硬盘430的写入数据的计算完成的校验子,则进入步骤s340来根据暂存器130中记录的计算进度将计算完成的写入数据的校验子从主存储器300写入硬盘430。

举例来说,假设硬盘控制器130目前尚未写入任何校验子数据至硬盘430,而暂存器130中的计算进度指示raida120计算完第一个页面的校验子数据pagepq-0且尚未计算完第二个页面的校验子数据pagepq-1。据此,硬盘控制器130会判断主存储器300的区块300-3中存有尚未写入硬盘430的校验子数据pagepq-0,并且将其写入硬盘430中。举另一例来说,假设硬盘控制器130目前写入到第一个页面的校验子数据是pagepq-0,而暂存器130中的计算进度指示raida120已计算完第三个页面的校验子数据pagepq-2但尚未计算完第四个页面的校验子数据pagepq-3。据此,硬盘控制器130会判断主存储器300的区块300-3中存有尚未写入硬盘430的校验子数据pagepq-1、pagepq-2,并且将此些校验子数据pagepq-1、pagepq-2写入硬盘430中,以此类推。

在一些实施例中,硬盘控制器130还从计算请求或写入请求中读取校验子信息在主存储器300中的储存地址以及数据长度,并且同时根据暂存器130中计算校验子的计算进度、校验子信息在主存储器300中的储存地址以及数据长度来从主存储器300将校验子信息写入硬盘430。

随后,在步骤s350中,硬盘控制器130会判断写入数据的校验子是否已经全部写入硬盘430。若是,则结束写入;反之,则回到步骤s320继续读取raida120的暂存器130中的计算进度。

若在步骤s330中硬盘控制器130判断主存储器300中没有尚未写入硬盘430的写入数据的校验子,则进入步骤s360来延迟预定时间后再回到步骤s320。详细来说,硬盘控制器130判断主存储器300中没有尚未写入硬盘430的校验子表示硬盘控制器130将写入数据的校验子从主存储器300写入硬盘430的进度已经达到运算电路111计算校验子的计算进度。因此,硬盘控制器130例如会延迟预定时间再回到步骤s320来检查计算进度的更新,并且重复上述步骤s325至步骤s350,直到写入数据的校验子全部计算完并写入硬盘430。

若在步骤s325中计算进度不存在,则表示计算请求对应的校验子已经全部计算完成,从而不需要根据计算进度来控制写入进度了;因而进入步骤s370直接将尚未写入硬盘的已计算完成的校验子全部写入硬盘430中,然后结束。

此外,值得一提的是,由于raida120的运算电路111是存取中央处理器200的快取存储器或主存储器300来进行校验子的计算,然后将计算完成的校验子存回主存储器300中,而硬盘控制器130是从主存储器300将其中所储存的校验子写入硬盘430中。基于快取存储器与主存储器的存取速度远快于硬盘,因此即使发生硬盘控制器130将写入数据的校验子从主存储器300写入硬盘430的进度已经达到运算电路111计算校验子的计算进度的情形(即步骤s330:否),硬盘控制器130也只需要在步骤s360中延迟极短的时间(例如,毫秒、微秒或是更短时间等级的延迟)就能够尝试继续回到步骤s320来检查计算进度的更新。

综上所述,本发明实施例提出的用于存取独立硬盘冗余阵列的系统与方法,在独立硬盘冗余阵列加速器中提供一组暂存器来即时记录独立硬盘冗余阵列加速器计算校验子的进度。硬盘控制器在将校验子从主存储器写入硬盘前,先读取独立硬盘冗余阵列加速器中的暂存器,以根据暂存器中所记录的计算进度来将主存储器中的校验子写入硬盘。据此,可以在独立硬盘冗余阵列加速器计算校验子的过程中,硬盘控制器就可以先将计算完成的部分校验子写入硬盘,而不必等到该笔写入数据所对应的全部校验子都计算完成并储存到主存储器之后才通知硬盘控制器将计算完成的校验子写入硬盘,从而减少硬盘控制器的闲置时间,以提升数据存取的速度。

以上所述仅为本发明较佳实施例,然其并非用以限定本发明的范围,任何熟悉本项技术的人员,在不脱离本发明的精神和范围内,可以在此基础上做进一步的改进和变化,因此本发明的保护范围应当以本申请的权利要求书所界定的范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1