数据解压装置及方法

文档序号:6601927阅读:203来源:国知局
专利名称:数据解压装置及方法
技术领域
本发明涉及数据处理领域,尤其涉及一种对数据进行解压缩的处理装置及处理方法。
背景技术
在互联网的大规模数据处理中,数据的压缩和解压缩是非常重要且常用的手段, 它可以大幅度提高磁盘的有效容量,提高I/O读写和网络传输的有效带宽,从而可以有效地降低互联网数据中心(InternetData Center,简称IDC)的成本和提高应用层程序的执行速度。在传统的解决方案里面,数据的压缩和解压缩一般采用Gzip (—种GNU自由软件的文件压缩程序)压缩算法。这种feip算法里面存在大量串行的不定长位操作,由于CPU 在处理数据和访问内存都是以定长的比特为单位,因此CPU在进行数据处理和访问内存时,需要从规整的数据中取出真正有效的数据,从而增加了额外的操作,导致软件处理效率较低,例如主频2. 66GHz的CPU进行压缩的带宽是50MB/S,解压缩的带宽是200MB/S。而目前采用的feip压缩算法的解压缩操作均采用的是软件实现的方式,这种方式的并行度较低,在大规模数据处理中,要压缩和解压缩的数据流巨大,使用CPU进行压缩解压缩处理必然要消耗大量的CPU资源,使机器负载加重。

发明内容
本发明的目的是提出一种数据解压装置及方法,能够实现数据解压缩线程的并行处理,增加解压缩的带宽,提高解压缩的速度。为实现上述目的,本发明提供了一种数据解压装置,包括驱动模块、硬件调度模块和片内多解压核,其中,所述驱动模块,用于将从多个应用程序进程接收到的并发的多个解压请求合并为一个解压命令,并将所述解压命令发送到所述硬件调度模块,以及将解压结果返回给对应的所述多个应用程序进程;所述硬件调度模块,用于分析接收到的所述解压命令,为所述解压命令中的多个解压请求分别分配所述片内多解压核中的多个单独的解压核进行处理,以及在所述多个解压请求均处理完毕后,发送中断及状态信息到所述驱动程序;所述片内多解压核,包括多个单独的解压核,用于执行解压处理。为实现上述目的,本发明提供了一种数据解压方法,包括以下步骤驱动模块将从多个应用程序进程接收到的并发的多个解压请求合并为一个解压命令,并将所述解压命令发送到硬件调度模块;所述硬件调度模块分析所述解压命令,并为所述解压命令中的多个解压请求分别分配片内多解压核中的多个单独的解压核进行处理;在所述多个解压请求均处理完毕后,所述硬件调度模块发送中断及状态信息到所述驱动模块;所述驱动模块将所述解压结果返回给对应的所述多个应用程序进程。基于上述技术方案,本发明通过片内多解压核对多个数据解压缩线程的多个解压请求进行并行处理,既不需要耗费CPU资源,也可以增加解压缩的带宽,提高了解压缩的速度。


此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中图1为本发明数据解压装置的第一实施例的结构示意图。图2为本发明数据解压装置的第二实施例的结构示意图。图3为本发明数据解压装置的第三实施例中硬件框架部分的结构示意图。图4为本发明数据解压装置的第四实施例中硬件框架部分的结构示意图。图5为本发明数据解压方法的第一实施例的流程示意图。图6为本发明数据解压方法的第二实施例的流程示意图。图7为本发明数据解压方法的第三实施例中硬件解压过程的流程示意图。图8为本发明数据解压方法的第四实施例中硬件解压过程的流程示意图。
具体实施例方式下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。在现有技术中数据的解压缩操作是在CPU中进行的,因此会耗费大量的CPU资源, 既加重了机器的负载,也影响了解压缩的速度。在本发明中,可以考虑通过设置数据解压装置来实现解压缩的方案,并且在数据解压装置中设置多个解压核,来实现并行的对多个解压请求进行处理,从而不需要耗费CPU的资源来进行解压缩,进而提高解压缩的速度。本发明的数据解压装置可以通过可编程逻辑器件(例如现场可编程门阵列Field Programmable Gate Array,简称FPGA等)来实现,并且可以根据对解压效率、成本等因素选择低端或高端的可编程逻辑器件。如图1所示,为本发明数据解压装置的第一实施例的结构示意图。在本实施例中, 数据解压装置至少包括驱动模块1、硬件调度模块2和片内多解压核3。其中,驱动模块1 运行硬件的驱动程序来驱动硬件进行操作,当接收到上层(例如应用层等)的多个应用程序进程并行发送的多个解压请求时,驱动模块1可以将这些多个解压请求合并为一个解压命令,并将该解压命令发送到硬件调度模块2。硬件调度模块2对接收到的解压命令进行分析,获得解压命令中所包括的多个解压请求,并将该多个解压请求分别分配片内多解压核3中的多个单独的解压核(例如图1 中的解压核coreO 幻来进行处理。被分配了解压任务的多个解压核(例如coreO 幻可以根据解压请求对待解压的数据进行解压缩操作,当解压请求均被处理完毕,则硬件调度模块2向驱动模块1发送中断及解压核的状态信息,根据解压核的状态信息可以确定是否有解压结果返回。在本实施例中,片内多解压核3中包括有4个单独的解压核,在对多个解压请求进行处理的时候,最多可以并行处理4个解压请求。在本发明的另一实施例中,还可以根据应用和需要灵活的增加或减少单独的解压核的数量,解压核的数量的配置主要取决于可编程逻辑器件的容量,对于较高端的可编程逻辑器件,则可以设置更多的解压核,例如8个、12 个解压核等。 在上述实施例中,通过合并多个解压请求成一个解压命令,并且在片内多解压核全部处理完毕后,才发送中断,这种方式减少了中断次数,降低了中断的开销,并且通过合并成解压命令的方式,使得软硬件接口的实现也更为简单。考虑到上层的应用程序进程可能较多,本发明数据解压装置不能够一次完成解压过程,此时,还可以通过在数据解压装置中增加进程队列处理模块来对应用程序进程进行管理。如图2所示,为本发明数据解压装置的第二实施例的结构示意图。与上一实施例相比,本实施例增加了队列处理模块4,该模块对上层的发出多个解压请求的多个应用程序进程进行排队,为了便于控制,还可以对该多个应用程序进程的处理状态进行设置。以包括4个单独的解压核的片内多解压核3为例,片内多解压核3每次最多可以并行处理4个应用程序进程。驱动模块1对进程队列处理模块4中排队的多个应用程序进程进行处理,其中每次选择处理的应用程序进程的数量不超过4,在该4个应用程序进程被处理的过程中,其他应用程序进程处于等待状态。当该4个应用程序进程均完成处理,硬件调度模块2向驱动模块1发出中断,驱动模块1在接收到中断后,唤醒被处理的4个应用程序进程。通过这种方式,有效地减少了硬件中断处理的次数,有助于提高解压过程的效率。在进程队列处理模块4对发出解压请求的多个应用程序进程进行管理时,可以选择下面举例的处理方式,即首先设置信号量n,将信号量η初始化为1,在第一次时只处理1 个应用程序进程,排队的其他应用程序进程等待;在处理完该应用程序进程后,查看后续有 m个排队的应用程序进程,如果m < 4,则信号量η设为m,即η = m,表示本次可以处理m个应用程序进程;如果m > 4,则信号量η设为4,即η = 4,表示本次可以处理4个应用程序进程。如图3所示,为本发明数据解压装置的第三实施例中硬件框架部分的结构示意图。在本实施例中,硬件框架部分除了包括硬件调度模块2和片内多解压核3之外,还包括数据读取模块5和数据写入模块6。在本实施例中,片内多解压核3中的多个解压核具有共享的数据输入总线和数据输出总线,数据读取模块5与数据输入总线相连,可以从片外的内存(例如DDR2、DDR等)中读取待解压的数据,并分发给片内多解压核3中的多个单独的解压核(GzipO 3)。数据写入模块6与数据输出总线相连,负责将解压结果写入所述内存中的解压核对应的地址空间。硬件调度模块2在接收到解压命令后,为各个解压核分配解压任务,并且指示数据读取模块5和数据写入模块6分别进行待解压的数据的读取和解压结果的写入,然后根据解压核的解压状态判断解压是否完成,如果各个解压核均完成解压任务,则向驱动模块1 发送中断。在本实施例中,解压核并不需要考虑数据的交互以及与上层程序之间的接口,每个解压核与内存之间的数据交换都统一由数据读取模块5和数据写入模块6完成。这种硬件构架具有很好的移植特性,在各种可编程逻辑器件中均可以采用,而且还可以根据需要裁减或增加解压核的数量。在验证方面,由于控制通路限制在装置内部,因此验证比较方便。在另一实施例中,每个解压核还可以设置输入和输出的先入先出(First Input First Output,简称FIFO)接口。每个解压核的输入数据和输出数据均使用FIFO接口与外部的总线隔离,从而隔离时钟域,并使数据接口更加清晰,而且这种数据接口可以降低模块间的耦合度。在数据读取模块5对待解压的数据进行读取的过程中,可以采用轮询的方式分别从片外的内存(例如DDR2、DDR等)中读取待解压的数据,并通过数据输入总线分发给片内多解压核3中的多个单独的解压核。数据写入模块6也可以采用轮询的方式通过数据输出总线将解压结果写入片外的内存中的解压核对应的地址空间。为了实现数据流的高效调度和处理,在本发明的数据解压装置中还可以增加直接内存访问(Direct Memory Access,简称DMA)控制器,如图4所示,为本发明数据解压装置的第四实施例中硬件框架部分的结构示意图。相比于前述的数据解压装置实施例,在本实施例中增加了 DMA控制器7,该DMA控制器7与硬件调度模块2相连,负责将主机端(Host) 存储器的待解压的数据转存到外部的内存中,并将内存中的解压核对应的地址空间中的解压结果转存到主机端(Host)存储器。通过设置DMA控制器7,可以快速的对数据进行搬运,提高解压缩的处理效率。以待解压的数据被分发到解压核的过程为例,DMA控制器7可以根据硬件调度模块2的指示将待解压的数据从主机端的存储器中搬运(即转存)到片外的DDR2内存,再由数据读取模块 5将DDR2内存中的待解压的数据读出,并分发给片内多解压核3中的多个单独的解压核。 DMA控制器7具有较高的效率,且可以与数据读取模块5同步进行数据搬运,因此大大地提高了数据搬运的效率,整体上提高了解压缩的效率。在前述的几个装置实施例中,解压核的实现可以采用已有的解压算法,也可以采用前文提到的feip解压算法,虽然feip解压算法涉及大量复杂的不定长位操作,存在效率问题,但本发明中通过片内多解压核以及合并解压请求等手段实现了线程级的并行处理方式,大幅度提高解压缩的处理带宽。下面,本发明还提供了多个数据解压方法的实施例进行说明。如图5所示,为本发明数据解压方法的第一实施例的流程示意图。在本实施例中, 数据解压过程包括以下步骤步骤101、驱动模块将从多个应用程序进程接收到的并发的多个解压请求合并为一个解压命令,并将该解压命令发送到硬件调度模块;步骤102、硬件调度模块分析该解压命令,并为解压命令中的多个解压请求分别分配片内多解压核中的多个单独的解压核进行处理;步骤103、在多个解压请求均处理完毕后,硬件调度模块发送中断及状态信息到驱动模块;步骤104、驱动模块将解压结果返回给对应的所述多个应用程序进程。在本实施例中,驱动模块会对多个并发的解压请求进行合并,硬件调度模块在接收到解压命令后,会为分析得到的多个并发的解压请求分配多个单独的解压核进行处理, 这样就实现了发出解压请求的应用程序进程的并发执行,而且多个解压核同时进行解压操作,可以提高解压的带宽,提高数据的解压效率。
考虑到同时发出解压请求的应用程序进程可能会较多,为了实现应用程序进程并行处理和控制,可以通过图6的实施例来实现。如图6所示,为本发明数据解压方法的第二实施例的流程示意图。与上一实施例相比,本实施例中在步骤101之前,还包括步骤100a、对发出的多个解压请求的多个应用程序进程进行排队,并设置所述多个应用程序进程的处理状态;步骤100b、所述驱动模块对所述进程队列处理模块中排队的多个进程进行处理。在步骤104中,驱动模块在接收到中断后,唤醒被处理的多个应用程序进程,并且将解压结果返回给对应的所述多个应用程序进程。以包括4个单独的解压核的片内多解压核为例,片内多解压核每次最多可以并行处理4个应用程序进程。因此可以设置最大进程处理数为4。驱动模块对排队的多个应用程序进程进行处理,其中每次选择处理的应用程序进程的数量不超过4,在该4个应用程序进程被处理的过程中,其他应用程序进程处于等待状态。当该4个应用程序进程均完成处理,硬件调度模块向驱动模块发出中断,驱动模块在接收到中断后,唤醒被处理的4个应用程序进程。通过这种方式,有效地减少了硬件中断处理的次数,有助于提高解压过程的效率。在对发出解压请求的多个应用程序进程进行管理时,可以选择下面举例的处理方式,即首先设置信号量n,将信号量η初始化为1,在第一次时只处理1个应用程序进程,排队的其他应用程序进程等待;在处理完该应用程序进程后,查看后续有m个排队的应用程序进程,如果m < 4,则信号量η设为m,即η = m,表示本次可以处理m个应用程序进程;如果m > 4,则信号量η设为4,即η = 4,表示本次可以处理4个应用程序进程。如图7所示,为本发明数据解压方法的第三实施例中硬件解压过程的流程示意图。在硬件调度模块为所述解压命令中的多个解压请求分别分配单独的解压核后,还包括以下步骤步骤201、数据读取模块从片外的内存中读取待解压的数据,并通过数据输入总线分发给所述片内多解压核中的多个单独的解压核;步骤202、多个单独的解压核分别对分发的所述待解压数据进行解压缩操作,获得解压结果;步骤203、数据写入模块通过数据输出总线将解压结果写入片外的内存中的与解压核对应的地址空间。在本实施例中,由数据读取模块和数据写入模块统一完成每个解压核与内存之间的数据交换,解压核可以不需要考虑数据的交互以及与上层程序之间的接口。在解压过程中,为了提高各个解压核的处理效率,确保每个解压核都处于工作状态,数据读取模块可以采用轮询的方式从片外的内存中读取待解压的数据,并通过数据输入总线分发给片内多解压核中的多个单独的解压核。同理,数据写入模块也可以采用轮询的方式通过数据输出总线将解压结果写入片外的内存中的解压核对应的地址空间。通过轮询方式,可以平衡每个解压核的负荷,减少总的解压时间。在另一个方法实施例中,如果解压核配置了输入和输出的FIFO接口,则数据读取模块会将待解压的数据分发给片内多解压核中的多个单独的解压核对应的FIFO接口,而数据写入模块从解压核的FIFO接口读取解压结果,并通过数据输出总线将解压结果写入片外的内存中的解压核对应的地址空间。为了进一步的提高数据调度的效率,本发明还可以通过DMA控制器对数据进行搬运,如图8所示,为本发明数据解压方法的第四实施例中硬件解压过程的流程示意图。与上一实施例相比,本实施例在步骤201之前还包括步骤200,即DMA控制器将主机端存储器的待解压的数据转存到内存中,即DMA控制器数据搬入过程,在步骤203之后还包括步骤204, 即DMA控制器将内存中的解压核对应的地址空间中的解压结果转存到主机端存储器,即直接内存访问控制器数据搬出过程。在另一实施例中,步骤200和步骤201之间可以不采用固定的时序关系,例如数据读取模块从片外的内存中读取待解压的数据与DMA控制器数据搬入过程可以是并行的。步骤203和步骤204之间也可以不采用固定的时序关系,例如数据写入模块将解压结果写入内存中的解压核对应的地址空间与DMA控制器数据搬出过程是并行的。数据读取模块在将从内存读取的待解压的数据分发给片内多解压核中的多个单独的解压核之前,数据读取模块还需检查内存中与解压核对应的地址空间中是否存在数据,并判断解压核中的FIFO接口的剩余空间是否满足数据搬运的需要,如果均满足,则数据读取模块进行待解压的数据的分发。在DMA控制器进行数据的搬运过程中,考虑到解压应用中输入数据量(即压缩数据)相对于输出数据量(解压缩数据)较小,且解压处理过程较长,为了充分利用总线带宽,DMA数据搬入过程在总线管理中相比于DMA控制器数据搬出过程可以具有较高优先级。 举例来说,在DMA控制器搬运输入数据完毕之前,不能启动DMA控制器数据搬出,具体来说, DMA数据搬入请求不能被DMA搬出请求及其他解压核的数据请求打断,直到该次所有的数据均被搬入为止。如果多个解压处理核都有DMA搬入请求,那么采用轮叫调度(也称round robin) 的方式来处理,即均勻地为每个解压核搬入数据,使其都处于工作状态,提高数据处理效率。对于解压数据的搬出过程,下面给出了一种异步发送模式的实例来进行说明,即当解压结果数据长度大于等于预设的DMA突发长度(例如4KB)或者是解压结果的最后一块数据(不足4KB)时,就发送数据搬出请求。只要DMA控制器不处于忙的状态,就接受该解压数据的搬出请求。如果有多个解压处理核都有数据搬出请求,那么也可以采用round robin的方式来处理,即均勻地为每个解压核搬出数据,防止数据长时间阻塞,影响解压处理效率。在发送数据搬出请求的同时,该解压核的序号被记录在一个队列中,当每次数据搬出请求完成时,都要读取该队列的解压核序号,以便更新该解压核的状态信息,这样就完成了数据搬出的异步操作。以4解压核的可编程逻辑器件构架为例,聚合解压带宽能达到单个解压核的3倍, 此时瓶颈是外部PCI数据总线带宽,如果换成PCIE等更高速的外部数据总线,则能比单个解压核高4倍。用户可以根据需要灵活扩充解压核的个数,实现解压带宽的线性增长。下面通过对4解压核架构的实施例的实验,进一步说明本发明所实现的性能比现有的软件解压带宽更高。
权利要求
1.一种数据解压装置,包括驱动模块、硬件调度模块和片内多解压核,其中,所述驱动模块,用于将从多个应用程序进程接收到的并发的多个解压请求合并为一个解压命令,并将所述解压命令发送到所述硬件调度模块,以及将解压结果返回给对应的所述多个应用程序进程;所述硬件调度模块,用于分析接收到的所述解压命令,为所述解压命令中的多个解压请求分别分配所述片内多解压核中的多个单独的解压核进行处理,以及在所述多个解压请求均处理完毕后,发送中断及状态信息到所述驱动程序;所述片内多解压核,包括多个单独的解压核,用于执行解压处理。
2.根据权利要求1所述的数据解压装置,其中还包括进程队列处理模块,用于对发出多个解压请求的多个应用程序进程进行排队,并设置所述多个应用程序进程的处理状态;所述驱动模块还用于对所述进程队列处理模块中排队的多个应用程序进程进行处理, 并在接收到中断后,唤醒被处理的多个应用程序进程。
3.根据权利要求1所述的数据解压装置,其中所述片内多解压核具有共享的数据输入总线和数据输出总线,所述数据解压装置还包括数据读取模块,与所述数据输入总线相连,用于从片外的内存中读取待解压的数据,并分发给所述片内多解压核中的多个单独的解压核;数据写入模块,与所述数据输出总线相连,用于将解压结果写入所述内存中的解压核对应的地址空间。
4.根据权利要求3所述的数据解压装置,其中所述片内多解压核中的每个解压核设有输入和输出的先入先出接口,分别与所述数据读取模块和数据写入模块相连。
5.根据权利要求3或4所述的数据解压装置,其中所述数据解压装置还包括直接内存访问控制器,与所述硬件调度模块相连,用于将主机端存储器的待解压的数据转存到所述内存中,并将所述内存中的解压核对应的地址空间中的解压结果转存到所述主机端存储器。
6.根据权利要求1所述的数据解压装置,其中所述数据解压装置由可编程逻辑器件实现,所述片内多解压核中的单独的解压核的数量根据所述可编程逻辑器件的容量进行配置。
7.一种数据解压方法,包括以下步骤驱动模块将从多个应用程序进程接收到的并发的多个解压请求合并为一个解压命令, 并将所述解压命令发送到硬件调度模块;所述硬件调度模块分析所述解压命令,并为所述解压命令中的多个解压请求分别分配片内多解压核中的多个单独的解压核进行处理;在所述多个解压请求均处理完毕后,所述硬件调度模块发送中断及状态信息到所述驱动模块;所述驱动模块将所述解压结果返回给对应的所述多个应用程序进程。
8.根据权利要求7所述的数据解压方法,其中在所述驱动模块将从多个应用程序进程接收到的并发的多个解压请求合并为一个解压命令之前,还包括对发出的多个解压请求的多个应用程序进程进行排队,并设置所述多个应用程序进程的处理状态;所述驱动模块对所述进程队列处理模块中排队的多个应用程序进程进行处理,并在接收到中断后,唤醒被处理的多个应用程序进程。
9.根据权利要求8所述的数据解压方法,其中还包括设置最大进程处理数,在对所述进程队列处理模块中排队的多个进程进行处理时,被处理的多个进程不大于所述最大进程处理数。
10.根据权利要求7所述的数据解压方法,其中在所述硬件调度模块为所述解压命令中的多个解压请求分别分配单独的解压核后,还包括数据读取模块从片外的内存中读取待解压的数据,并通过数据输入总线分发给所述片内多解压核中的多个单独的解压核;所述多个单独的解压核分别对分发的所述待解压数据进行解压缩操作,获得解压结果;数据写入模块通过数据输出总线将解压结果写入片外的内存中的与解压核对应的地址空间。
11.根据权利要求10所述的数据解压方法,其中所述数据读取模块采用轮询的方式从片外的内存中读取待解压的数据,并通过数据输入总线分发给所述片内多解压核中的多个单独的解压核,所述数据写入模块采用轮询的方式通过数据输出总线将解压结果写入片外的内存中的解压核对应的地址空间。
12.根据权利要求10所述的数据解压方法,其中在所述数据读取模块从片外的内存中读取待解压的数据时,还包括直接内存访问控制器将主机端存储器的待解压的数据转存到所述内存中的直接内存访问控制器数据搬入过程;在所述数据写入模块将解压结果写入所述内存中的解压核对应的地址空间时,还包括所述直接内存访问控制器将所述内存中的解压核对应的地址空间中的解压结果转存到所述主机端存储器的直接内存访问控制器数据搬出过程。
13.根据权利要求12所述的数据解压方法,其中所述数据读取模块从片外的内存中读取待解压的数据与所述直接内存访问控制器数据搬入过程是并行的,所述数据写入模块将解压结果写入所述内存中的解压核对应的地址空间与所述直接内存访问控制器数据搬出过程是并行的;所述数据读取模块在将从所述内存读取的待解压的数据分发给所述片内多解压核中的多个单独的解压核之前,还包括所述数据读取模块检查所述内存中与所述解压核对应的地址空间中是否存在数据,并判断所述解压核中的先入先出接口的剩余空间是否满足数据搬运的需要,如果均满足,则所述数据读取模块进行待解压的数据的分发。
14.根据权利要求12所述的数据解压方法,其中所述直接内存访问控制器数据搬入过程在总线管理中相比于所述直接内存访问控制器数据搬出过程具有较高优先级。
全文摘要
本发明涉及一种数据解压装置,包括驱动模块、硬件调度模块和片内多解压核,驱动模块用于将从多个应用程序进程接收到的并发的多个解压请求合并为一个解压命令,并将解压命令发送到硬件调度模块,以及将解压结果返给应用程序进程;硬件调度模块用于分析接收到的解压命令,为解压命令中的多个解压请求分别分配单独的解压核进行处理,以及在多个解压请求均处理完毕后,发送中断及状态信息到驱动程序;片内多解压核,包括多个单独的解压核,用于执行解压处理。本发明还涉及一种数据解压方法。本发明通过片内多解压核对多个数据解压缩线程的多个解压请求进行并行处理,既不需要耗费CPU资源,也可以增加解压缩的带宽,提高了解压缩的速度。
文档编号G06F9/38GK102236543SQ20101016557
公开日2011年11月9日 申请日期2010年5月7日 优先权日2010年5月7日
发明者欧阳剑, 王斐, 田甲子 申请人:百度在线网络技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1