压缩方法及相关装置与流程

文档序号:11154703阅读:830来源:国知局
压缩方法及相关装置与制造工艺

本发明涉及计算机技术领域,特别是涉及压缩技术。



背景技术:

在数据洪水爆发的今天,面对数据的急剧膨胀,存储设备(例如磁盘阵列)需要进行数据压缩来有效实现数据容量缩减:假设存储空间是1TB,但用户需要存储的数据是1.3TB。则存储设备可对上述1.3TB的原始数据进行压缩,将压缩结果(数据)存储,这样可以节约存储空间,并且这种压缩对用户而言是透明的;在需要读取数据时,则需要先对压缩数据进行解压缩。

然而在实际应用过程中,发明人发现:解压缩后得到的数据有可能和原始数据不一致,对外表现为数据损坏,这进一步可能引起上层应用异常,如导致虚拟机、数据库等应用宕机。



技术实现要素:

本发明的目的在于提供压缩方法及相关装置,以解决上述问题。

为实现上述目的,本发明提供了如下方案:

一方面,本申请的实施例提供一种压缩方法,该压缩方法由存储设备中的控制器中的处理器或硬件加速卡,与其他部件交互完成。该压缩方法包括:获取原始数据;对原始数据进行压缩,得到压缩结果;对压缩结果进行解压缩,得到解压缩结果;校验解压缩结果与原始数据是否一致;若一致,输出压缩结果;若不一致,输出原始数据。相较于现有技术,本发明提供的方案,在压缩原始数据之后、存储之前,会对压缩结果进行解压缩,得到解压缩结果,并校验解压缩结果与原始数据是否一致。若一致,输出压缩结果,也即对压缩结果进行存储。若不一致,说明解压缩后得到的数据和原始数据不一致,则抛弃压缩结果,输出原始数据,对原始数据进行存储。这样可避免解压缩后得到的数据有可能和原始数据不一致的现象的出现。

在一个可能的设计中,在对原始数据进行压缩之前或在校验解压缩结果与原始数据是否一致之前,还可先计算原始数据的校验数据。此外,在校验解压缩结果与原始数据是否一致之前,还可先计算解压缩数据的校验数据。而校验所述解压缩结果与所述原始数据是否一致的步骤,可具体细化为:比较原始数据的检验数据与解压缩结果的校验数据是否一致。若一致,输出压缩结果;若不一致,输出原始数据。从而可以更好得避免解压缩后得到的数据和原始数据不一致的问题。

在一个可能的设计中,上述原始数据的校验数据可包括原始数据的校验码(例如CRC码)和原始数据的长度的至少一种。而解压缩结果的校验数据可包括:解压缩结果的校验码(例如CRC校验码)和解压缩结果的长度的至少一种。为便于区分,可将原始数据的校验码称为第一校验码,将原始数据的长度称为第一长度,将解压缩结果的校验码称为第二校验码,将解压缩结果的长度称为第二长度。若原始数据的校验数据包括第一校验码和第一长度,则解压缩结果的校验数据相应的包括第二校验码和第二长度;若原始数据的校验数据仅包括第一校验码,则解压缩结果的校验数据相应的仅包括第二校验码;而若原始数据的校验数据仅包括第一长度,则解压缩结果的校验数据相应的仅包括第二长度。在本发明其他实施例中,也可用哈希算法分别得到原始数据和解压缩结果的哈希值,将二者的哈希值作为校验码。本实施例提供了校验数据的具体内容,从而可以更好得避免解压缩后得到的数据和原始数据不一致的问题。

在一个可能的设计中,也可直接对解压缩结果和原始数据进行逐个字节对比,这种方式相对比较简单。

再一方面,本发明实施例提供了一种存储设备,该存储设备具有实现上述方法实际中存储设备行为的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。

又一方面,本发明实施例提供了一种计算机存储介质,用于储存为上述存储设备所用的计算机软件指令,其包含用于执行上述方面所设计的程序。

相较于现有技术,本发明提供的方案,在压缩原始数据之后、存储之前,会对压缩结果进行解压缩,得到解压缩结果,并校验解压缩结果与原始数据是否一致。若一致,输出压缩结果,也即对压缩结果进行存储。若不一致,说明解压缩后得到的数据和原始数据不一致,则抛弃压缩结果,输出原始数据,对原始数据进行存储。这样可避免解压缩后得到的数据有可能和原始数据不一致的现象的出现。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的应用场景示意图;

图2a和图2b为本发明实施例提供的控制器的示例性结构图;

图3a、图4为本发明实施例提供的压缩方法示例性流程图;

图3b为现有的压缩方法的示例性结构图;

图5为本发明实施例提供的压缩装置(特别是硬件加速卡)的结构示例图;

图6为本发明实施例提供的硬件加速卡内部的数据流向示意图。

具体实施方式

本发明实施例提供了压缩方法及相关装置(压缩装置、存储设备/系统、硬件加速数据卡)。

上述存储设备/系统具体可为磁盘阵列等。

图1描绘了本发明实施例提供的存储设备/系统的组成图,包括至少一个控制器101和硬盘框102。

控制器101可以是一种计算设备,如服务器、台式计算机等等。在控制器101上安装有操作系统以及其他应用程序。控制器101可以接收来自应用主机的输入输出(I/O)请求,存储I/O请求中携带的数据,并将数据写入硬盘框102中。硬盘框102则可包括一个或多个硬盘。

在一个应用场景下,控制器101可以通过SAN网络与应用主机(图中未示出)连接。

硬盘框102则可包括一个或多个硬盘。例如,可安装20个硬盘。

图2a是上述控制器101的一种结构示例图,如图2a所示,控制器101可包括通过总线相连的处理器201、存储器202、通信接口203(可进一步包括前端接口卡和后端接口卡),以及输入设备204和输出设备205。

其中,前端接口卡可用于和应用主机通信,控制器101的处理器201可以通过前端接口卡接收应用主机的各种操作指令。

控制器101的处理器201可能是一个中央处理器CPU,或者是特定集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。在本发明实施例中,处理器201可以用于接收来自应用主机的写数据请求或者读数据请求、处理所述写数据请求或者读数据请求,以及将所述写数据请求或者读数据请求发送给cache等其他操作。

存储器202可用于存储数据。更具体的,存储器202可包含内存、缓存(例如图2b中的cache 206)。内存可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可以理解的是,内存可以为随机存储器(Random-Access Memory,RAM)、磁碟、硬盘、光盘、固态硬盘(Solid State Disk,SSD)或者非易失性存储器等各种可以存储程序代码的非短暂性的(non-transitory)机器可读介质。需要说明的是,在实施例中内存也可集成缓存功能。

后端接口卡,可用于和硬盘框102中的硬盘通信,控制器101的处理器201可以通过后端接口卡将数据发送给硬盘框102中的硬盘存储。

需要说明的是,若硬盘框102和控制器101共同安装在一个框内,内部就集成了后端接口卡。

而若硬盘框102和控制器101独立安装在不同的框中,则后端接口卡可不与其他部件集成在一起。

上述压缩装置可以软件或硬件的形式应用于上述存储设备/系统中。

在一个示例中,当压缩装置以软件形式应用于存储设备/系统中,可由存储器202保存有执行本发明技术方案的程序,当然,存储器202还可以保存有操作系统和其他应用程序。处理器201可通过执行上述程序来执行本发明提供的压缩方法。

在另一个示例中,请参见图2b,压缩装置可以以硬件加速卡207的形式应用于上述存储设备/系统中。更具体的,硬件加速卡207可安装在控制器101(控制框)的插槽上。

当然,硬件加速卡207中也有缓存。

在使用时,控制器101的处理器201可将来自应用主机的原始数据存入cache206,cache206可决定何时将原始数据提供给硬件加速卡207,由硬件加速卡207执行本发明提供的压缩方法。

下面将基于上面所述的本发明涉及的共性方面,对本发明实施例如何存储管理进行进一步详细说明。

图3a示出了本发明实施例提供的压缩方法的一种示例性流程,用以解决避免解压缩后得到的数据有可能和原始数据不一致的问题。

图3a所示的方法应用在图1所示的应用场景中,由图2a所示的控制器101的处理器201与其他部件交互实现,或者,由图2b所示的控制器101的硬件加速卡207与其他部件交互实现。

该流程包括:

300部分:获取原始数据。

在一个示例中,在由控制器101的处理器201执行压缩方法的场景下,可由控制器101的处理器201执行300部分。具体的,可由控制器101的处理器201通过前端接口卡接收应用主机发送的原始数据,将其存入cache 206。当需要进行压缩处理时,处理器201再读取出cache 206中的原始数据。

在另一个示例中,在由硬件加速卡207执行压缩方法的场景下,在处理器201将来自应用主机的原始数据存入cache 206后,cache 206将原始数据提供给硬件加速卡207。

更具体的,cache 206是以内存页为单位,将原始数据提供给硬件加速卡。每一页内存页存储容量为4kB(Byte)。

也即,无论某种场景下,原始数据均可先存入cache 206(内存)中。

需要说明的是,在有大量的原始数据需要存储时,可进行分批处理,每次获取原始数据的一部分。

301部分:对原始数据进行压缩,得到压缩结果。

可采用不同的压缩方式进行压缩,例如,Huffman编码。

在一个示例中,在由控制器101的处理器201执行压缩方法的场景下,可由控制器101的处理器201执行301部分。

在另一个示例中,在由硬件加速卡207执行压缩方法的场景下,可由硬件加速卡207执行301部分。硬件加速卡207中可包含多个压缩引擎,例如10个压缩引擎,从而可以同时并行进行压缩处理。

实际上,在硬件加速卡207内部,其处理的是内存页上的数据。前述提及,一页内存页的存储量是4KB,假定硬件加速卡一次最大能处理64KB大小的数据,则可一次处理16页内存页。

当然,这16页内存页上的数据可由多个压缩引擎并行进行压缩处理。

302部分:对压缩结果进行解压缩,得到解压缩结果。

可采用与压缩算法相对的解压缩算法,对压缩结果进行解压缩。

在一个示例中,在由控制器101的处理器201执行压缩方法的场景下,可由控制器101的处理器201执行302部分。

在另一个示例中,在由硬件加速卡207执行压缩方法的场景下,可由硬件加速卡207执行302部分。硬件加速卡207中可包含多个解压缩引擎,例如3个解压缩引擎,从而可以同时并行进行解压缩处理。

303部分:校验解压缩结果与原始数据是否一致,若一致,进入304部分,否则,进入305部分。

校验方式有多种,在一个示例中,可直接对解压缩结果和原始数据进行逐个字节对比,若存在不一致,则判定二者不一致,否则判定二者一致。

在另一个示例中,可采用CRC(Cyclic Redundancy Check,循环冗余校验)校验或哈希校验等。本文后续将进行具体介绍。

在一个示例中,在由控制器101的处理器201执行压缩方法的场景下,可由控制器101的处理器201执行303部分。

在另一个示例中,在由硬件加速卡207执行压缩方法的场景下,可由硬件加速卡207执行303部分。

304部分:输出压缩结果。

若校验结果一致,说明上述压缩结果解压缩后,与原始数据是一致的。不会出现解压缩后得到的数据和原始数据不一致的情况,所以输出压缩结果。

305部分:输出原始数据。

若不一致,说明解压缩后得到的数据和原始数据不一致,则抛弃压缩结果,输出原始数据。

在一个示例中,在由控制器101的处理器201执行压缩方法的场景下,可由控制器101的处理器201执行304和305部分。在该场景下,控制器101的处理器201可以通过后端接口卡将原始数据或压缩结果发送给硬盘框102进行存储。

在另一个示例中,在由硬件加速卡207执行压缩方法的场景下,可由硬件加速卡207执行304和305部分。硬件加速卡207将原始数据或压缩结果输出给cache 206。后续,cache 206将原始数据或压缩结果发送给硬盘框102进行存储。

需要说明的是,在本实施例中,由于最终可能输出原始数据,也可能输出压缩结果。所以在输出前,原始数据和压缩结果均缓存在硬件加速卡207中。

请参见图3b,在现有压缩方式中,在获取到原始数据后,会对其进行压缩,并输出压缩结果。相较于现有技术,本发明提供的方案,在压缩原始数据之后、存储之前,会对压缩结果进行解压缩,得到解压缩结果,并校验解压缩结果与原始数据是否一致。若一致,输出压缩结果,也即对压缩结果进行存储。若不一致,说明解压缩后得到的数据和原始数据不一致,则抛弃压缩结果,输出原始数据,对原始数据进行存储。这样可避免解压缩后得到的数据有可能和原始数据不一致。

下面,将以硬件加速卡207执行压缩方法为例,对本发明的技术方案进行更为详细的介绍。

图4示出了本发明实施例提供的压缩方法的一种交互示例性流程。图4所示的方法应用在图1所示的应用场景中,由图2b所示的控制器101的硬件加速卡207与其他部件交互实现。本实施例重点介绍了如何校验原始数据和解压缩结果。

该交互流程包括:

400部分:硬件加速卡207从cache 206接收原始数据。

400部分与前述300部分相类似,在此不作赘述。

401部分:硬件加速卡207计算获取到的原始数据的校验数据。

在一个示例中,上述校验数据可包括原始数据的校验码(例如CRC校验码)和长度。

CRC(Cyclic Redundancy Check,循环冗余校验)算法是一种根据指定数据产生简短固定位数校验码的一种散列函数,用来检测或校验数据传输或者保存后可能出现的错误。

在本发明其他实施例中,还可采用哈希算法得到原始数据的哈希值作为原始数据的校验码。

哈希算法就是单向摘要算法,由任意长数据产生定长数据,当输入数据发生少量变化可引起输出数据明显变化。

当然,还可采用其他算法来计算原始数据的校验码。

为便于区分,可将原始数据的(CRC)校验码称为第一(CRC)校验码,将原始数据的长度称为第一长度。

在另一个示例中,原始数据的校验数据也可仅包括第一(CRC)校验码或第一长度。

402部分:硬件加速卡207对原始数据进行压缩,得到压缩结果。

403部分:硬件加速卡207对压缩结果进行解压缩,得到解压缩结果。

402-403部分与前述301-302部分相类似,在此不作赘述。

404部分:硬件加速卡207计算解压缩结果的校验数据。

在一个示例中,与原始数据的校验数据相一致,解压缩结果的校验数据可包括:解压缩结果的校验码(例如CRC校验码)和长度。

在本发明其他实施例中,还可采用哈希算法得到解压缩结果的哈希值作为其校验码。

为便于区分,可将解压缩结果的(CRC)校验码称为第二(CRC)校验码,将解压缩结果的长度称为第二长度。

当然,在另一个示例中,解压缩结果的校验数据也可仅包括第二(CRC)校验码或第二长度。

需要说明的是,若原始数据的校验数据包括第一(CRC)校验码和第一长度,则解压缩结果的校验数据相应的包括第二(CRC)校验码和第二长度;若原始数据的校验数据仅包括第一(CRC)校验码,则解压缩结果的校验数据相应的仅包括第二(CRC)校验码;而若原始数据的校验数据仅包括第一长度,则解压缩结果的校验数据相应的仅包括第二长度。

405部分:硬件加速卡207比较原始数据的检验数据与解压缩结果的校验数据是否一致,若一致,进入406部分,否则,进入407部分。

对于原始数据的校验数据包括第一(CRC)校验码和第一长度,解压缩结果的校验数据相应的包括第二(CRC)校验码和第二长度的情况,需要分别比较第一(CRC)校验码与第二(CRC)校验码是否相等,第一长度与第二长度是否相等,均相等时,才能得到校验数据一致的结果。

而对于原始数据的校验数据仅包括第一(CRC)校验码或第一长度,解压缩结果的校验数据相应的仅包括第二(CRC)校验码或第二长度的情况,则只要第一(CRC)校验码与第二(CRC)校验码相等,或第一长度与第二长度相等,就可得到得到校验数据一致的结果。

406部分:硬件加速卡207向cache 206输出压缩结果。

407部分:硬件加速卡207向cache 206输出原始数据。

406-407部分与前述的304-305部分相类似,在此不作赘述。

图5示出了上述实施例中所涉及的压缩装置(特别是硬件加速卡)的一种可能的结构示意图,包括:读写模块501、压缩模块502、解压缩模块503和校验模块504。

其中,压缩模块502可用于对读写模块501获取的原始数据进行压缩,得到压缩结果;压缩模块502可包括多个压缩引擎。

解压缩模块503可用于对压缩模块502得到的压缩结果进行解压缩,得到解压缩结果;解压缩模块503可包括多个解压缩引擎。

校验模块504可用于校验解压缩模块503得到的解压缩结果与读写模块501获取的原始数据是否一致;若一致,指示读写模块501输出上述压缩结果,若不一致,指示读写模块501输出上述原始数据。

更具体的,请参见图6,上述读写模块501可为DMA(Direct Memory Access,直接内存存取)引擎5011。

DMA引擎5011采用DMA技术传输数据。

DMA引擎5011进一步可包括DMA控制器和内部存储器(可为RAM)。

DMA技术允许不同速度的硬件装置来沟通,而不需要依赖于CPU(这里指的是控制器101的处理器201)的大量中断负载。

DMA技术可将数据从一个地址空间复制到另外一个地址空间。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。

DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应把总线控制权再交回给CPU。

DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAM与I/O接口进行DMA传输。

在DMA控制器的控制下,在RAM和外部设备之间直接进行数据传送,在传送过程中不需要CPU的参与。开始时需提供要传送的数据的表项数据(数据的起始位置和数据长度)。

这是因为,前述提及了硬件加速卡207内部处理的是一页一页的内存页,每一内存页大小为4KB,但这4KB的存储内容中,并不是所有内容都是原始数据。所以要提供原始数据的表项数据(起始位置和长度)。这里的起始位置指的是偏移地址。

当然,DMA引擎向外输出数据(可称为回写)时,也是需要提供回写数据的表项数据的。

表项数据可经由CMMDQ(Controller Memory Management Data Queue,控制器内存管理-数据队列)模块505输入或输出。

CMMDQ模块505以串行方式从cache 206接收表项数据,其可能会依次接收到很多数据,这些数据会以队列的形式保存。

CMMDQ模块505可向DMA引擎提供原始数据的表项数据。在输出原始数据或压缩结果时,CMMDQ模块5可向外部提供输出的数据的表项数据。

图6示出了硬件加速卡207的内部数据流向示意图。其可包括如下流程:

601部分:DMA引擎5011从cache 206处接收内存页。

更具体的,是从cache 206处将内存页复制到DMA引擎5011内部的RAM上。

而原始数据是存储在内存页中的。

602部分:DMA引擎5011从CMMDQ模块505处获取原始数据的表项数据。

603部分:DMA引擎5011根据CMMDQ模块505提供的原始数据的表项数据,将原始数据提供给压缩模块502。

原始数据是存储在内存页的,原始数据的表项数据用于描述原始数据的起始位置和长度,得知起始位置和长度后,就可从内存页中读取出原始数据,将原始数据提供给压缩模块502。

604部分:压缩模块502对原始数据进行压缩,得到压缩结果。

压缩结果是存储在硬件加速卡的存储器中的。

前述提及了,有多个压缩引擎分别进行压缩,每一压缩引擎可产生一个或多个压缩数据块,所有的压缩数据块构成上述压缩结果。当然,每一压缩数据块都有编号,以便于识别。

605部分:解压缩模块503对上述压缩结果进行解压缩,得到解压缩结果。

需要说明的是,压缩模块502得到压缩结果后,其工作就完成了。那么如何令解压缩模块503开始解压缩工作呢?可通过异步队列来实现:在完成压缩后,压缩模块502可在异步队列中放入压缩数据块的编号。

只要异步队列不为空,解压缩模块503就会根据异步队列中的编号对压缩数据块进行解压缩处理。

606部分:校验模块504计算原始数据的检验数据,并将其与解压缩结果的校验数据进行比对,得到校验结果。

相关细节可参见前述401、404和405部分。

校验结果可为一致或不一致。在实际中,可通过编码0表征一致,通过编码1表征不一致。当然,也可使用其他方式来表征不同的校验结果,在此不作赘述。

607部分:校验模块504向CMMDQ模块505返回校验结果。

608部分:校验模块504向DMA引擎5011返回原始数据或压缩结果的表项数据。

需要说明的是,若校验结果为一致,则校验模块504向DMA引擎5011返回压缩结果的表项数据;若不一致,则校验模块504向DMA引擎5011返回原始数据的表项数据。

在本发明其他实施例中,由于校验模块504会向CMMDQ模块505返回校验结果,则也可由CMMDQ模块505向DMA引擎5011返回原始数据或压缩结果的表项数据。

609:DMA引擎5011根据表项数据向cache 206输出原始数据或压缩结果;同时,CMMDQ模块505向外输出(向cache 206输出)原始数据或压缩结果的表项数据。

具体的,若校验结果一致,DMA引擎5011接收到的是压缩结果的表项数据,则输出包含压缩结果的内存页,而CMMDQ模块505输出的也是压缩结果的表项数据。

反之,若校验结果不一致,DMA引擎5011接收到的是原始数据的表项数据,则输出包含原始数据的内存页,而CMMDQ模块505输出的也是原始数据的表项数据。

此外,读写模块501或DMA模块5011还可执行图3a所示实施例的300、304和305部分,图4所示实施例的400、406和407部分;

压缩模块502还可执行图3a所示实施例的301部分,图4所示实施例的402部分;

解压缩模块503还可执行图3a所示实施例的302部分,图4所示实施例的403部分;

校验模块504还可执行图3a所示实施例的303部分,图4所示实施例的401、404和405部分。

上述主要从各个装置之间交互的角度对本发明实施例提供的方案进行了介绍。可以理解的是,各个装置,例如控制器101、硬件加速卡207等为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本发明能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。

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