一种用于SSD的RAID编解码系统及方法与流程

文档序号:12462664阅读:647来源:国知局
一种用于SSD的RAID编解码系统及方法与流程

本发明特别涉及一种用于SSD的RAID编解码系统及方法。



背景技术:

SSD(Solid State Drive, 固态硬盘)是一种以固态电子存储器件作为存储介质,通过内嵌主控芯片实现数据访问和存储介质管理的存储设备。SSD具有响应速度快、功耗低、噪音小等特点,被广泛应用于国防、金融、消费电子等领域,具有替代传统机械硬盘的局势。

NAND Flash作为当前主流SSD产品采用的存储介质,由于受到器件漂移效应、用户读写操作和恶劣工作环境等因素影响出现比特反转现象,导致用户数据丢失,影响SSD产品数据可靠性。

为了解决SSD中NAND Flash中产生的数据丢失问题,现有技术中引入了用于SSD的RAID(Redundant Arrays of Independent Disks, 独立磁盘冗余阵列)编解码系统,包括RAID编解码模块,其一方面可以将片外缓存中的待编码数据进行编码计算,再将编码计算结果送至片内缓存存储。更重要的一点是,当出现系统异常或磁盘暴露等原因引起的错误数据时,可以通过RAID编解码模块对错误数据进行解码,将错误数据恢复成正确数据送至片内缓存或片外缓存。

现有SSD中的RAID编解码系统具有以下缺点:编码过程不能被中断,因而当在RAID编码过程中出现更高优先级别的编码需求或在用户取数据出现错误需要立刻恢复时,需要等待当前编码过程执行完成,因而重要数据无法优先编码、错误数据无法有效及时恢复,极大程度影响系统效率。



技术实现要素:

现有用于SSD的RAID编解码系统无法优先编码重要数据、无法有效及时恢复错误数据,系统效率较低。本发明的目的在于,针对上述现有技术的不足,提供一种改进了的用于SSD的RAID编解码系统及方法,能够在SSD中实现RAID编码的中断和恢复,能够在任意RAID编码过程中暂停并且释放硬件资源处理更高优先级别的编码需求,在任意RAID解码请求时中断编码操作,优先解码重要数据,有效及时恢复错误数据,提高数据可靠性和系统响应速度。

为解决上述技术问题,本发明所采用的技术方案是:

一种用于SSD的RAID编解码系统,包括RAID编解码模块,其结构特点是还包括第一DMA(Direct Memory Access,直接内存存取)模块和第二DMA模块,RAID编解码模块通过第一DMA模块与片外缓存相连,RAID编解码模块通过第二DMA模块与片内缓存或片外缓存相连;其中,第一DMA模块用于向RAID编解码模块发送命令,所述命令包括中断命令和恢复命令;在RAID编解码模块响应中断命令时将RAID编解码模块中正在处理的编码命令的中间编码结果搬移至片外缓存,在RAID编解码模块响应恢复命令时将片外缓存中的中间编码结果搬移至RAID编解码模块;第二DMA模块用于向RAID编解码模块发送命令,包括编码命令和编码输出命令;并在RAID编解码模块响应编码命令时将待编码数据从片外缓存搬移到RAID编解码模块中,在RAID编解码模块响应编码输出命令时将编码结果从RAID编解码模块搬移到片内缓存或片外缓存。

借由上述结构,当在RAID编码过程中出现更高优先级别的编码需求时,可以中断当前编码过程,将高优先级别的编码需求优先编码,最后再继续编码执行中断了的编码过程,优先编码重要数据,数据可靠性高,耗时短,效率高。

进一步地,还包括第三DMA模块,RAID编解码模块通过第三DMA模块分别与片外缓存和片内缓存相连;其中,第三DMA模块用于向RAID编解码模块发送解码命令,并将SSD中的待解码数据送至RAID编解码模块,将RAID编解码模块中的解码结果搬移至片外缓存或片内缓存。

借由上述结构,当在RAID编码过程中出现数据错误需要立刻恢复时,可以中断当前编码过程,立即执行解码操作,最后再继续编码执行中断了的编码过程,有效及时恢复地错误数据,数据可靠性高,耗时短,效率高。

进一步地,还包括仲裁单元,所述RAID编解码模块通过仲裁单元分别与第一DMA模块和第二DMA模块相连;其中,第二DMA模块还用于向RAID编解码模块发送命令,所述命令包括中断命令或恢复命令;在RAID编解码模块响应中断命令时将RAID编解码模块中的中间编码结果搬移至片外缓存,在RAID编解码模块响应恢复命令时将片外缓存中的中间编码结果搬移至RAID编解码模块;仲裁单元用于选择由第一DMA模块或第二DMA模块向RAID编解码模块发送命令;当仲裁单元选择由第一DMA模块向RAID编解码模块发送命令时,由第一DMA模块将RAID编解码模块中的中间编码结果搬移至片外缓存,或者由第一DMA模块将片外缓存中的中间编码结果搬移至RAID编解码模块;当仲裁单元选择由第二DMA模块向RAID编解码模块发送命令时,由第二DMA模块将RAID编解码模块中的中间编码结果搬移至片外缓存,或者由第二DMA模块将片外缓存中的中间编码结果搬移至RAID编解码模块。

仲裁单元可以选择由第一DMA模块或第二DMA模块发送命令或搬移数据,第二DMA模块同样可以发起中断和恢复命令,数据搬移方向与第一DMA模块相同,增加了系统的灵活性。

进一步地,所述第二DMA模块还用于将数据从片外缓存搬移到片内缓存中。

第二DMA模块能够根据需要实现RAID旁路功能,即用户数据不需要进行RAID编码时,可以旁路RAID编解码模块,直接将数据从片外缓存搬移到片内缓存中。

基于同一个发明构思,本发明还提供了一种用于SSD的RAID编解码方法,采用所述的RAID编解码系统,包括以下方法:若第二DMA模块中待编码数据的优先级别高于RAID编解码模块中正在编码的数据,通过第一DMA模块向RAID编解码模块发送中断命令,RAID编解码模块响应中断命令后,由第一DMA模块将RAID编解码模块中的中间编码结果搬移至片外缓存;在RAID编解码模块将第二DMA模块中高优先级别的待编码数据编码完成后,首先通过第二DMA模块将RAID编解码模块中的编码结果搬移至片内缓存或片外缓存,再通过第一DMA模块向RAID编解码模块发送恢复命令,RAID编解码模块响应恢复命令后,由第一DMA模块将片外缓存中的中间编码结果搬移至RAID编解码模块;最后RAID编解码模块继续编码中间编码结果。

进一步地,还包括以下方法:当第三DMA模块向RAID编解码模块发送解码命令时,若此时RAID编解码模块正在执行编码操作,则通过第一DMA模块向RAID编解码模块发送中断命令,RAID编解码模块响应中断命令后,由第一DMA模块将RAID编解码模块中的中间编码结果搬移至片外缓存,最后RAID编解码模块对第三DMA模块中的待解码数据进行解码操作;在RAID编解码模块将第三DMA模块中的待解码数据解码完成后,首先通过第三DMA模块将RAID编解码模块中的编码结果搬移至片外缓存或片内缓存;再通过第一DMA模块向RAID编解码模块发送恢复命令,RAID编解码模块响应恢复命令后,由第一DMA模块将片外缓存中的中间编码结果搬移至RAID编解码模块;最后RAID编解码模块继续编码中间编码结果。

进一步地,还包括利用仲裁单元选择由第一DMA模块或第二DMA模块向RAID编解码模块发送命令;当仲裁单元选择由第一DMA模块向RAID编解码模块发送命令时,由第一DMA模块将RAID编解码模块中的中间编码结果搬移至片外缓存,或者由第一DMA模块将片外缓存中的中间编码结果搬移至RAID编解码模块;当仲裁单元选择由第二DMA模块向RAID编解码模块发送命令时,由第二DMA模块将RAID编解码模块中的中间编码结果搬移至片外缓存,或者由第二DMA模块将片外缓存中的中间编码结果搬移至RAID编解码模块。

与现有技术相比,本发明能够在SSD中实现RAID编码的中断和恢复,能够在任意RAID编码过程中暂停并且释放硬件资源处理更高优先级别的编码需求,在任意RAID解码请求时中断编码操作,优先恢复错误数据,数据可靠性高,耗时短,效率高。

附图说明

图1为本发明RAID编解码系统的结构示意图。

图2为图1中RAID编解码模块的状态机描述图。

图3为本发明RAID编解码方法流程图。

其中,1为RAID编解码模块,2为第一DMA模块,3为第二DMA模块,4为片外缓存,5为片内缓存,6为第三DMA模块,7为仲裁单元,M为第二DMA模块暂停控制位。

具体实施方式

如图1所示,本发明RAID编解码系统的一实施例包括RAID编解码模块1、第一DMA模块2和第二DMA模块3,RAID编解码模块1通过第一DMA模块2与片外缓存4相连,RAID编解码模块1通过第二DMA模块3与片外缓存4相连,RAID编解码模块1通过第二DMA模块3与片内缓存5相连;其中,第一DMA模块2用于向RAID编解码模块1发送命令,所述命令包括中断命令或恢复命令;在RAID编解码模块1响应中断命令时将RAID编解码模块1中的中间编码结果搬移至片外缓存4,在RAID编解码模块1响应恢复命令时将片外缓存4中的中间编码结果搬移至RAID编解码模块1;第二DMA模块3用于向RAID编解码模块1发送编码命令,并将待编码数据从片外缓存4搬移至RAID编解码模块1,以及将RAID编解码模块1中的编码结果搬移至片内缓存5或片外缓存4。所述第二DMA模块3还用于将数据从片外缓存4搬移到片内缓存5中。

RAID编解码系统还包括第三DMA模块6,RAID编解码模块1通过第三DMA模块6分别与片外缓存4和片内缓存5相连;其中,第三DMA模块6用于向RAID编解码模块1发送解码命令,并将SSD中的待解码数据送至RAID编解码模块1,将RAID编解码模块1中的解码结果搬移至片外缓存4或片内缓存5。

RAID编解码系统还包括仲裁单元7,所述RAID编解码模块1通过仲裁单元7分别与第一DMA模块2和第二DMA模块3相连;其中,第二DMA模块3还用于向RAID编解码模块1发送命令,所述命令包括中断命令或恢复命令;在RAID编解码模块1响应中断命令时将RAID编解码模块1中的中间编码结果搬移至片外缓存4,在RAID编解码模块1响应恢复命令时将片外缓存4中的中间编码结果搬移至RAID编解码模块1;仲裁单元7用于选择由第一DMA模块2或第二DMA模块3向RAID编解码模块1发送命令;当仲裁单元7选择由第一DMA模块2向RAID编解码模块1发送命令时,由第一DMA模块2将RAID编解码模块1中的中间编码结果搬移至片外缓存4,或者由第一DMA模块2将片外缓存4中的中间编码结果搬移至RAID编解码模块1;当仲裁单元7选择由第二DMA模块3向RAID编解码模块1发送命令时,由第二DMA模块3将RAID编解码模块1中的中间编码结果搬移至片外缓存4,或者由第二DMA模块3 将片外缓存4中的中间编码结果搬移至RAID编解码模块1。具体地,本发明RAID编解码系统以RAID编解码模块1(RAID Codec)为核心,辅以三个DMA模块(第一DMA模块2、第二DMA模块3和第三DMA模块6)和一块片外缓存4(DRAM或Flash等各种易失/非易失存储器件)一块片内缓存5(SRAM)配合实现RAID编码(Encode)、解码(Decode)、中断(Terminate)和恢复(Resume)等操作。

第一DMA模块2用于将因高优先级编码或解码需求而中断的当前RAID编码命令中间编码结果从RAID编解码模块1搬移到片外缓存4,以及在恢复操作时将中间编码结结果从片外缓存4搬移到RAID编解码模块1中。

第二DMA模块3完成三个任务,一个是将待编码数据从片外缓存4搬移到RAID编解码模块1中执行编码计算,以及将计算结果从RAID编解码模块1搬移到片内缓存5中;另一个与第一DMA模块2类似,在执行中断操作时将中间编码结果从RAID编解码模块1搬移到片外缓存4,以及在执行恢复操作时将中间编码结果从片外缓存4搬移到RAID编解码模块1中;第三个是RAID旁路,即将数据不经过RAID编解码而直接从片外缓存4搬移到片内缓存5中。

第三DMA模块6用于将待解码数据(错误数据)搬移到RAID编解码模块1中进行解码恢复,并将解码恢复结果搬移到片内缓存5或片外缓存4中。

RAID编解码模块1支持五种命令类型:“编码命令”、“解码命令”、“中断命令”、“恢复命令”和“编码输出命令”。相应的RAID编解码模块1状态机包含“初始状态”、“编码状态”、“解码状态”、“中断状态”、“恢复状态”和“编码完成状态”,状态跳转关系如图2所示:

下面对RAID编解码模块1状态和跳转条件进行描述:

初始状态:

系统上电复位后RAID编解码模块1处于初始状态,内部中间变量清零。当发起编码/解码命令时进入编码/解码状态,此时需要设置RAID编解码模块1为编码/解码模式,设置“组/页”大小和纠错能力。另外,执行恢复命令之前也需要使RAID编解码模块1进入初始状态,清空存放中间变量的内部寄存器,并设置“组/页”大小、中断时刻下一个页编号。

编码状态:

编码状态时,如果当前编码命令完整执行,RAID编解码模块1进入编码完成状态;如果当前编码命令被中断,通过发送中断命令使RAID编解码模块1进入中断状态。

解码状态:

解码状态时,由于解码命令有完整性约束,因此无法中断。完成解码命令后RAID编解码模块1输出解码结果,清空中间变量,并进入初始状态。

中断状态:

中断状态时,如果需要执行后续高优先级的编码命令或解码命令或恢复前一个编码命令时,RAID编解码模块1都需要先进入初始状态,清空中间变量。

恢复状态:

恢复状态时,如果出现新的更高优先级的编码需求或解码需求,发送中断命令并进入中断状态,否则返回编码状态,继续执行此前被中断的编码命令。

编码完成状态:

当完成编码命令后,RAID编解码模块1进入编码完成状态。此时输出编码结果,清空中间变量。完成上述行为后RAID编解码模块1进入初始状态,准备接收新的RAID命令。

本发明还提供了一种用于SSD的RAID编解码方法,采用所述的RAID编解码系统,包括以下方法:若第二DMA模块3中待编码数据的优先级别高于RAID编解码模块1中正在编码的数据,通过第一DMA模块2向RAID编解码模块1发送中断命令,RAID编解码模块1响应中断命令后,由第一DMA模块2将RAID编解码模块1中的中间编码结果搬移至片外缓存4;在RAID编解码模块1将第二DMA模块3中高优先级别的待编码数据编码完成后,首先通过第二DMA模块3将RAID编解码模块1中的编码结果搬移至片内缓存5或片外缓存4,再通过第一DMA模块2向RAID编解码模块1发送恢复命令,RAID编解码模块1响应恢复命令后,由第一DMA模块2将片外缓存4中的中间编码结果搬移至RAID编解码模块1,继续进行剩下的编码工作;当RAID编解码模块1完成被中断命令剩余的编码工作后,通过第二DMA模块3将编码结果搬移到片外缓存4或片内缓存5中。

RAID编解码方法还包括:当第三DMA模块6向RAID编解码模块1发送解码命令时,若此时RAID编解码模块1正在执行编码操作,则通过第一DMA模块2向RAID编解码模块1发送中断命令,RAID编解码模块1响应中断命令后,由第一DMA模块2将RAID编解码模块1中的中间编码结果搬移至片外缓存4,最后RAID编解码模块1对第三DMA模块6中的待解码数据进行解码操作;在RAID编解码模块1将第三DMA模块6中的待解码数据解码完成后,首先通过第三DMA模块6将RAID编解码模块1中的编码结果搬移至片外缓存4或片内缓存5;再通过第一DMA模块2向RAID编解码模块1发送恢复命令,RAID编解码模块1响应恢复命令后,由第一DMA模块2将片外缓存4中的中间编码结果搬移至RAID编解码模块1;最后RAID编解码模块1继续编码中间编码结果,并通过第二DMA模块3将编码结果搬移到片外缓存4或片内缓存5中。

RAID编解码方法还包括利用仲裁单元7选择由第一DMA模块2或第二DMA模块3向RAID编解码模块1发送命令;当仲裁单元7选择由第一DMA模块2向RAID编解码模块1发送命令时,由第一DMA模块2将RAID编解码模块1中的中间编码结果搬移至片外缓存4,或者由第一DMA模块2将片外缓存4中的中间编码结果搬移至RAID编解码模块1;当仲裁单元7选择由第二DMA模块3向RAID编解码模块1发送命令时,由第二DMA模块3将RAID编解码模块1中的中间编码结果搬移至片外缓存4,或者由第二DMA模块3将片外缓存4中的中间编码结果搬移至RAID编解码模块1。

RAID编解码模块1在执行编码命令过程中,会告知第一DMA模块2和第二DMA模块3每一个允许打断当前正在执行编码命令的时间点。软件能够控制第一DMA模块2和第二DMA模块3选择在哪个时间点打断当前正在执行的编码命令。

如图3所示,假设当前RAID编解码模块1处于待机状态,结合图1阐述中断和恢复流程:

1.当第二DMA模块3发起编码命令,由于RAID编解码模块1此时并无命令执行,所以计算编码结果。由于没有编码命令被中断,所以当后面没有新的编码命令到来时,RAID编解码模块1输出编码结果并重新处于待机状态。此过程中第二DMA模块3从片外缓存4搬移数据进入RAID编解码模块1进行编码计算,并将计算结果搬移到片外缓存4或片内缓存5中,供后续模块使用。

2.如果RAID编解码模块1正在执行编码命令,第二DMA模块3又有新的更高优先级的编码需求或第三DMA模块6有解码需求,仲裁单元7通过第二DMA模块暂停控制位M选择由第一DMA模块2或第二DMA模块3发起中断命令。如果配置第一DMA模块2发起中断请求,仲裁单元7首选控制暂停第二DMA模块3的运行,并由第一DMA模块2将已经完成计算的中间编码结果从RAID编解码模块1搬移到片外缓存4;如果配置第二DMA模块3发起中断请求,第二DMA模块3会中断未完成的命令发送,并将已经完成计算的中间编码结果从RAID编解码模块1搬移到片外缓存4。

3.如果发起中断命令的原因是执行更高优先级的编码命令,RAID编解码模块1会完整的执行该命令。此时第二DMA模块3从片外缓存4搬移新的待编码数据进入RAID编解码模块1进行编码计算,并将计算结果搬移到片外缓存4或片内缓存5供后续模块使用。

如果发起中断命令的原因是执行解码命令,RAID编解码模块1会完整的执行该命令。此时第三DMA模块6将待解码数据搬移到RAID编解码模块1进行数据解码恢复,并将恢复后数据送入片内缓存5或片外缓存4中。

4.当执行完更高优先级的编码命令或解码命令后,查询是否有命令被中断。如果有命令被中断,仲裁单元7通过第二DMA模块暂停控制位M选择由第一DMA模块2或第二DMA模块3进行现场恢复,并继续搬移片外缓存4中的中间编码数据进入RAID编解码模块1,进行编码计算并输出计算结果。否则,进入待机状态等待新的RAID命令请求。

如果仲裁单元7控制第一DMA模块2执行现场恢复,第一DMA模块2会向RAID编解码模块1发起恢复命令,并从片外缓存4将中间编码结果搬移到RAID编解码模块1中。然后由仲裁单元7激活第二DMA模块3,并控制第二DMA模块3将剩余未编码数据从片外缓存4搬移到RAID编解码模块1中进行编码计算,并输出完整编码结果到片外缓存4或片内缓存5。

如果仲裁单元7控制第二DMA模块3执行现场恢复,第二DMA模块3会向RAID编解码模块1发起恢复命令,并从片外缓存4将中间编码结果搬移到RAID编解码模块1中。然后由软件控制第二DMA模块3将剩余未编码数据从片外缓存4搬移到RAID编解码模块1中进行编码计算,并输出完整的编码结果到片外缓存4或片内缓存5。

综上可见,本发明的特点在于:

(1)允许软件控制不同的DMA模块发起中断和恢复,硬件自动执行数据搬移,提高性能和系统灵活性。

(2)SSD中RAID命令的中断和恢复触发因素不局限于异常状况,如果RAID编码过程中需要相同的硬件资源处理更高优先级事物,允许随时中断当前RAID编码操作。

(3)支持使用SSD主控芯片内部存储单元(SRAM)和片外存储器件(例如DRAM/FLASH等易失和非易失性存储器件)存储RAID中断涉及的中间数据(包括已经参与编码的原始数据和该部分数据计算出来的中间结果,以及这部分数据在条带中的索引信息等);具体缓存方式软件可控制。

(4)数据恢复过程中,不需要重新从头开始输入数据计算校验码,只需要将中间结果通过硬件手段快速搬移到RAID编解码模块1中,节省重新计算的时间开销,提高总线效率。

(5)支持软硬件协同处理RAID编码中断的多重嵌套,例如当前RAID编码数据尚未准备好,可以中断当前编码命令,并执行新的编码命令,提高总线利用率。

(6)中断和恢复过程中完成中间数据缓存后,软件控制或硬件自动完成RAID编解码模块1中中间数据的清除。

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