首页 / 国际专利分类库 / 电学 / 基本电子电路 / 在存在重现的霍夫曼树的情况下加速解压缩的方法和系统

在存在重现的霍夫曼树的情况下加速解压缩的方法和系统

申请号 CN201410555209.4 申请日 2014-10-20 公开(公告)号 CN104579356B 公开(公告)日 2017-09-15
申请人 国际商业机器公司; 发明人 D·哈尼克; E·卡哈特齐恩; S·马伦科夫; D·索特尼科夫;
摘要 本公开涉及在存在重现的霍夫曼树的情况下 加速 解压缩的方法和系统。为了在存在重现的霍夫曼树的情况下加速解压缩,比较霍夫曼树的紧束描述和最近使用的霍夫曼树紧束,以识别匹配,而不是根据各个数据 块 的压缩块的头部重构霍夫曼树,以避免霍夫曼树重构的开销。
权利要求

1.一种在计算存储环境中利用处理器设备在存在重现的霍夫曼树的情况下加速解压缩的方法,所述方法包括:
比较霍夫曼树的紧束描述和在先霍夫曼树紧束,以便识别匹配,而不是根据每个数据的压缩块的头部重构霍夫曼树,从而避免霍夫曼树重构的开销,以及如果在霍夫曼树的紧束描述和在先霍夫曼树紧束之一之间识别出匹配,那么利用在先霍夫曼树解压缩新的数据块。
2.按照权利要求1所述的方法,还包括检查压缩块的头部,以判定所述头部是否指示编码是利用动态霍夫曼树进行的。
3.按照权利要求2所述的方法,还包括进行下述至少之一:
如果所述头部指示编码是利用动态霍夫曼树进行的,那么在读取在先霍夫曼树的紧束描述之前,判定在用于Inflate操作的存储器中,是否存在在先霍夫曼树,和如果在用于Inflate操作的存储器中存在在先霍夫曼树,那么比较在先霍夫曼树的紧束描述和新的数据块的头部中的紧束描述。
4.按照权利要求1所述的方法,还包括进行下述至少之一:
按照所述头部准备新的霍夫曼树,并保持新的数据块的头部的紧束描述的参考,和在准备新的霍夫曼树时,保存树紧束的长度。
5.按照权利要求1所述的方法,还包括进行下述至少之一:
松散树紧束的霍夫曼树,和
比较树紧束的长度和从新的数据块的头部中的指定位置起的相同数目的比特,以确保匹配严格,并且返回关于任何两个不相同霍夫曼树的任意失配。
6.按照权利要求1所述的方法,还包括把在先霍夫曼树保持在高速缓存中,以及比较头部中的新的霍夫曼树的紧束与保存在高速缓存中的在先霍夫曼树的各个紧束。
7.按照权利要求6所述的方法,还包括为保存在高速缓存中的在先霍夫曼树的一组紧束准备数据结构,其中所述数据结构用于识别匹配。
8.一种在计算存储环境中在存在重现的霍夫曼树的情况下加速解压缩的系统,所述系统包括:
在计算环境中操作的处理器设备,其中所述处理器设备:
比较紧束的霍夫曼树和在先霍夫曼树紧束,以便识别匹配,而不是根据每个数据块的压缩块的头部重构霍夫曼树,从而避免霍夫曼树重构的开销,以及
如果在紧束的霍夫曼树和在先霍夫曼树紧束之一之间识别出匹配,那么利用在先霍夫曼树解压缩新的数据块。
9.按照权利要求8所述的系统,其中所述处理器设备检查压缩块的头部,以判定所述头部是否指示编码是利用动态霍夫曼树进行的。
10.按照权利要求9所述的系统,其中所述处理器设备进行下述至少之一:
如果所述头部指示编码是利用动态霍夫曼树进行的,那么在读取在先霍夫曼树的紧束描述之前,判定在用于Inflate操作的存储器中,是否存在在先霍夫曼树,和如果在用于Inflate操作的存储器中存在在先霍夫曼树,那么比较在先霍夫曼树的紧束描述和新数据块的头部中的紧束描述。
11.按照权利要求8所述的系统,其中所述处理器设备进行下述至少之一:
按照所述头部准备新的霍夫曼树,并保持新的数据块的头部的紧束描述的参考,和在准备新的霍夫曼树时,保存树紧束的长度。
12.按照权利要求8所述的系统,其中所述处理器设备进行下述至少之一:
松散树紧束的霍夫曼树,和
比较具有给定长度的树紧束和从新的数据块的头部中的指定位置起的相同数目的比特,以确保匹配严格,
把在先霍夫曼树保持在高速缓存中,并比较头部中的新的霍夫曼树的紧束与保存在高速缓存中的在先霍夫曼树的各个紧束,和
为保存在高速缓存中的在先霍夫曼树的一组紧束准备数据结构,其中所述数据结构用于识别匹配。

说明书全文

在存在重现的霍夫曼树的情况下加速解压缩的方法和系统

技术领域

[0001] 本发明涉及计算机,更具体地,涉及在计算存储环境中,在存在重现的霍夫曼树的情况下,加速解压缩。

背景技术

[0002] 在当今社会,计算机系统很常见。可在工作场所、家里或者学校见到计算机系统。计算机系统可包括数据存储系统或磁盘存储系统,以处理和存储数据。近年来,软件技术和硬件技术都已经历令人惊异的发展。借助新技术,增加了越来越多的功能,并为这些电子设备的使用提供更大的便利。最新的计算机技术引入的最值得注意的变化之一是图像、视频和音频的包含,以增强计算系统的能。在多媒体时代,待处理的信息量大大增加。处理大数据文件的一种普遍方法是压缩数据,以便存储或传输。于是,处理非常大量的信息是要解决的关键问题。于是,需要提高数据压缩的效率。

发明内容

[0003] 在一个实施例中,提供一种在计算环境中,在存在重现(reoccurring)的霍夫曼树的情况下,加速解压缩的方法。在一个实施例中,只是作为例子,比较霍夫曼树的紧束描述和最近使用的霍夫曼树紧束(compaction),以便识别匹配,而不是根据每个数据的压缩块的头部重构霍夫曼树,从而避免霍夫曼树重构的开销。
[0004] 在另一个实施例中,提供一种在计算环境中,利用至少一个处理器设备,在存在重现的霍夫曼树的情况下,加速解压缩的计算机系统。计算机系统包括计算机可读介质和与计算机可读介质操作通信的处理器。在一个实施例中,只是作为例子,处理器设备中的至少一个处理器设备比较霍夫曼树的紧束描述和最近使用的霍夫曼树紧束,以便识别匹配,而不是根据每个数据块的压缩块的头部重构霍夫曼树,从而避免霍夫曼树重构的开销。
[0005] 在另一个实施例中,提供一种在计算环境中,利用至少一个处理器设备,在存在重现的霍夫曼树的情况下,加速解压缩的计算机程序产品。计算机可读存储介质具有保存在上面的计算机可读程序代码部分。计算机可读程序代码部分包括比较霍夫曼树的紧束描述和最近使用的霍夫曼树紧束,以便识别匹配,而不是根据每个数据块的压缩块的头部重构霍夫曼树,从而避免霍夫曼树重构的开销的可执行部分。
[0006] 除了上述例证方法实施例之外,提供其它的例证系统和计算机产品实施例,所述其它的例证系统和计算机产品实施例提供相关的优点。提供以上的发明内容,从而简化地介绍下面在具体实施方式中进一步说明的原理的选择。发明内容部分并不打算识别要求保护的主题的关键特征或基本特征,也不意图帮助确定要求保护的主题的范围。要求保护的主题并不局限于解决在背景技术中提及的任意或所有缺陷的实现。附图说明
[0007] 为了易于理解本发明的优点,将参考在附图中图解说明的具体实施例,更详细地说明上面简述的发明。显然,这些附图描述本发明的实施例,于是不应视为对本发明范围的限制,通过利用附图,更特定和详细地说明和解释本发明,附图中:
[0008] 图1图解说明具有其中可实现本发明的各个方面的例证存储设备的计算机存储环境;
[0009] 图2A图解说明表示其中可实现本发明的各个方面的计算机系统中的数据压缩系统的硬件结构的例证方框图
[0010] 图2B图解说明表示其中可实现本发明的各个方面的计算机系统中的数据存储系统的硬件结构的例证方框图;
[0011] 图3是图解说明其中可实现本发明的各个方面的,在存在重现的霍夫曼树的情况下,加速Inflate速度的例证方法的流程图
[0012] 图4是图解说明其中可实现本发明的各个方面的,在存在重现的霍夫曼树的情况下,加速Inflate速度的另一种例证方法的流程图;
[0013] 图5是图解说明其中可实现本发明的各个方面的,在存在重现的霍夫曼树的情况下,加速Inflate速度的另一种例证方法的流程图。

具体实施方式

[0014] 随着对更快、更强大和更高效的信息存储方式的需求日益增大,存储技术的优化正在变成关键挑战。逻辑数据对象(数据文件、图像文件、数据块等)可被压缩,以便传输和/或存储。数据压缩技术可用于减少待保存和/或传送的数据量,以便分别降低存储容量和/或传输时间。在一个实施例中,霍夫曼树可被反复使用,这降低计算效率,产生利用一组有限/重新出现的霍夫曼树压缩的数据的缓慢解压缩。从而,需要在计算环境中,在存在重现的霍夫曼树的情况下,加速解压缩。换句话说,本发明提供利用多组有限和/或重新出现的霍夫曼树压缩的数据的解压缩的显著改善。
[0015] 在一个实施例中,使用Deflate,Deflate是在具有由各种浏览器和加速器支持的压缩/解压缩标准的RFC 1951中定义的无损数据压缩算法。Deflate利用消除重复的Lempel-Ziv算法(LZ77)和霍夫曼编码的组合。在一个实施例中,提供利用软件和硬件的Deflate标准的各种实现(例如,Zlib压缩器)。Deflate标准由顺序采用两种不同的压缩算法组成:首先采用重复查找Lempel-Ziv算法(LZ77)类压缩,之后采用霍夫曼编码压缩。霍夫曼编码是基于“霍夫曼树”的熵编码。为了对数据进行霍夫曼编码和解码,系统必须预先知道正在使用霍夫曼树。为了适应解压缩(例如,“Inflate”操作),所述霍夫曼树被编写在每个压缩块的头部。在一个实施例中,在Deflate标准中,对于霍夫曼树,存在两种选项。一个选项是“静态”树,它是为所有压缩器和解压缩器所知的单一硬编码霍夫曼树。利用静态树的优点在于其描述不必被写入压缩块的头部,并且为即时解压缩作好准备。另一方面,“动态”树专用于在手头的数据块,于是,动态树的准确描述必须被写入输出中。
[0016] 在一个实施例中,霍夫曼编码可利用基于熵的变长码表对源符号编码,并且如前所述,被定义成静态的或动态的。在静态霍夫曼编码中,利用在RFC中定义的固定表(SHT),编码各个文字(literal)或距离。不过,在动态霍夫曼编码中,构成特殊编码表,以更好地适应被压缩数据的统计信息。在多数情况下,与SHT相比,利用DHT获得更好的压缩比(例如,质量),代价是降低压缩率(例如,性能)和增大设计复杂性。静态和动态霍夫曼编码方法最好地反映压缩率和压缩比之间的内在折衷。静态霍夫曼方法实现比可能的压缩比低的压缩比。这归因于不管输入数据块的内容地利用固定编码表。例如,随机数据和四字母DNA序列常常利用相同的霍夫曼表编码。
[0017] 与利用静态霍夫曼编码相比,利用动态霍夫曼编码可提高压缩比,但是一般费时,并且需要复杂的硬件。在维持有效率的性能的同时提高压缩比的一种解决方案是分析到来数据流的第一部分,并投机性地选择将对整个数据使用的预定的预置字典(而不是通用静态字典)。找出具有相似性质的文件(例如,两个英文文本文件)的统计信息之间的高相关度。这种相关度被用于构成预定的DHT预置。匹配的预置产生两全其美的结果:接近于DHT的压缩比和接近于SHT的压缩率。这种方法提供一种具有使用的一组有限的重新出现的霍夫曼树的设置。
[0018] 应注意,每个数据块具有头部,所述头部(除了其它以外)还指示该数据块是利用动态树还是利用静态树进行霍夫曼编码。如果树是动态树,那么所述头部还包括将用于关于对应块的Inflate的霍夫曼树的紧束描述。Deflate标准紧束地编写霍夫曼树(以优化总的输出大小)。在Inflate(例如,解压缩)期间,首先读取紧束的树描述,随后张开紧束的树,并准备适当的数据结构,以便利用霍夫曼树,只有这样才能够开始实际的解压缩处理。这种树建立和准备过程费时,于是,与利用静态树压缩的数据相比,利用动态树压缩的数据往往具有明显更低的解压缩速度。当写块较小时,解压缩时间的这种差异变得更加明显,因为对于每个写块,都编写动态树。在Inflate期间,树准备的开销较高,因为每棵树编码较少的用户数据。尽管如此,动态霍夫曼树仍然有益,因为动态霍夫曼树提供的压缩比一般远远好于静态树的压缩比。注意,随着主数据系统上的实时压缩的引入,对较小的写块利用Deflate变得更重要。在一些Deflate实现中,较小的一组霍夫曼树可被反复重用。当被压缩数据性质相同时,这是有益的-在压缩期间,不必在许多树建立方面进行投入,然而同质数据在数据的大部分内仍能受益于单一的霍夫曼树(就压缩比来说)。例如,通过把单一的专用霍夫曼树用于英文,英文文本通常获得良好的压缩比(对任何其它语言来说同样如此)。为了与标准兼容,仍然必须在每个压缩块的头部编写这种专用树。不过,反复重用霍夫曼树会降低计算效率,产生利用一组有限/重现的霍夫曼树压缩的数据的缓慢Inflate速度。
[0019] 从而,需要在计算环境中,在存在重现的霍夫曼树的情况下,加速Inflate速度。换句话说,本发明提供利用多组有限/重现的霍夫曼树压缩的数据的Inflate速度的显著改善。在一个实施例中,只是作为例子,比较编码的霍夫曼树和最近使用的霍夫曼树紧束,以识别匹配,而不是根据各个数据块的压缩块的头部重构霍夫曼树,以避免霍夫曼树重构的开销。
[0020] 在一个实施例中,只是作为例子,本发明首先比较编码树(例如,编码的霍夫曼树)和最近使用的树紧束,而不是根据各个块的压缩块的头部重构霍夫曼树。当发现匹配时,本发明避免树重构的开销。本发明加速在重现的树的上述情况下的Inflate的性能。然而本发明的Inflate实现仍然与在霍夫曼树不重复的情况下的Deflate标准相容,并且对性能的影响可以忽略。
[0021] 在一个实施例中,只是作为例子,本发明按照以下方式扩充标准Inflate实现。首先,当读取压缩块时,检查头部,以了解所述头部是否是利用动态霍夫曼树编码的。如果是,那么在读取紧束的树描述之前,本发明检查/判定在Inflate过程的存储器中,是否存在在先树。如果存在在先树,那么比较在先树的紧束描述与在新的块的头部内的紧束描述。如果存在匹配,那么本发明利用在先树解压缩新的块(从而节约用于新的块的新树的松散(de-compaction)和准备时间)。如果不存在匹配,那么按照新的块的头部中的紧束描述,准备新树,本发明另外保持新的块的新树的紧束描述的参考。注意,树紧束的长度预先未知,获悉所述长度的唯一方式是实际松散该树。为了克服该问题,在一个实施例中,本发明保存在先树的紧束长度,并比较该紧束和从新的块的头部中的指定位置起的相同数目的比特。依据紧束操作的性质(例如,它没有前缀),这种比较保证对于确切的匹配,作出肯定的回答,并且对于任何两个不相同的树,返回失配。
[0022] 在一个实施例中,只是作为例子,本发明把许多在先树(例如,在先的霍夫曼树)保持/保留在高速缓存(存储器)中,并比较新的头部中的树和各个保存的树。对于在Deflate期间从一组可用树中选择霍夫曼树的实现来说,这是适宜的。在一个实施例中,只是作为例子,本发明为所述一组高速缓存的霍夫曼树,准备诸如二分搜索树之类的数据结构。这是可能的,因为霍夫曼树描述无前缀。在Inflate期间,用户/应用可利用该专用数据结构(例如,二分搜索树)寻找匹配的霍夫曼树。这将减少为比较新的霍夫曼树的描述和高速缓存中的所有在先霍夫曼树所需的开销。
[0023] 在一个实施例中,只是作为例子,如果在编码霍夫曼树和最近使用的霍夫曼树紧束之一之间,识别出匹配,那么本发明利用在先霍夫曼树(例如,在先创建和/或在先使用的霍夫曼树)解压缩新的数据块。检查压缩块的头部,以判定所述头部是否是用动态霍夫曼树编码的。在一个实施例中,只是作为例子,如果所述头部是用动态霍夫曼树编码的,那么在读取在先霍夫曼树的紧束描述之前,本发明判定在用于Inflate操作的存储器中,是否存在在先霍夫曼树,如果在用于Inflate操作的存储器中存在在先霍夫曼树,那么比较所述在先霍夫曼树的紧束描述和新的数据块的头部的紧束描述。
[0024] 在一个实施例中,只是作为例子,按照所述头部,准备新的霍夫曼树,并保持新的数据块的头部的紧束描述的参考。
[0025] 在一个实施例中,只是作为例子,本发明松散霍夫曼树(在松散的同时,可确定树紧束的长度),保存在先霍夫曼树的树紧束的长度,和/或比较树紧束的长度和从新的数据块的头部中的指定位置起的相同数目的比特,以确保匹配严格,并且返回关于任何两个不相同霍夫曼树的任意失配。
[0026] 在一个实施例中,只是作为例子,本发明把在先霍夫曼树保持在高速缓存中,并比较数据块的头部中的新的霍夫曼树和保存在高速缓存中的各个在先霍夫曼树,和/或准备保存在高速缓存中的一组在先霍夫曼树的数据结构,所述数据结构用于识别匹配。
[0027] 参见图1,图中描述其中可实现本发明的各个方面的例证计算机系统10。计算机系统10包括中央处理器(CPU)12,CPU 12连接到大容量存储器14和存储设备16。大容量存储器可包括硬盘驱动器(HDD)设备,可按独立磁盘冗余阵列(RAID)的形式构成HDD设备。在位于系统10或别处的大容量存储器14上,可以执行进一步说明的备份操作。存储设备16可包括诸如电可擦可编程只读存储器(EEPROM)和相关设备的主机之类的存储器。存储设备16和大容量存储器14通过信号承载介质,连接到CPU 12。另外,CPU 12通过通信端口18,连接到具有多个附接的附加计算机系统22和24的通信网络20。计算机系统10可包括一个或多个处理器设备(例如,CPU),以执行和完成这里说明的各个操作,从而实现本发明的目的。
[0028] 图2A图解说明表示其中可实现本发明的各个方面的计算机系统中的数据压缩系统的硬件结构的例证方框图。压缩器2008接收数据字节的输入流,在具有存储器2004和视频加速器2006的视频卡2002中输出压缩流。在一个实施例中,视频卡2002的图2A的描述也可以是图形加速卡2002,浮点加速卡2002,游戏控制卡2002,移动电话机芯片组2002,视频显示控制器2002,GPU集群2002,数据流单元2002,数据处理单元2002等。解压缩器2010接收压缩流,输出与输入流相同的解压缩流。在一个实施例中,可在包含中央处理器、存储器和输入/输出装置的计算机系统(参见图1和图2B)上,实现视频卡2002、视频加速器2006、压缩器2008和解压缩器2010。在备选实施例中,利用专用计算机系统,或者利用离散的逻辑器件,实现压缩器2008和解压缩器2010。压缩器2008和解压缩器2010可用于压缩和解压缩各种数据,包括保存在存储器中的数据,保存在磁盘上的数据,或者在通信通道上传送的数据。压缩器2008输出的压缩流可被保存,以便稍后解压缩,或者被传送给远程位置,在所述远程位置,所述压缩流被解压缩。解压缩器2010可包括LZ77解码器(未图示)。LZ77解码器把从各个文字解码的单一字节输出给解压缩流。
[0029] 图2B是表示按照本发明的计算机系统中的数据存储系统的硬件结构的例证方框图200。图中表示了主计算机210、220、225,每个主计算机210、220、225充当作为数据存储系统
200的一部分而进行数据处理的中央处理器。集群主机/节点(物理或虚拟设备)210、220和
225可以是在数据存储系统200中,实现本发明的目的的一个或更多的新的物理设备或逻辑设备。在一个实施例中,只是作为例子,数据存储系统200可被实现成
去重系统TS7650GTM。网络连接可以是光纤通道架构,光纤通道点对点链路,以太网光纤通道架构或点对点链路,FICON或ESCON I/O接口,任何其它I/O接口种类,无线网络,有线网络,LAN,WAN,异类网络连接,同类网络连接,公共网络连接(即,因特网),专用网络连接,或者它们的任意组合。主机210、220和225可以在本地,或者分布在一个或更多的位置,并可以配备有存储控制器240的任何种类的架构(或架构通道)(图2B中未图示)或者网络适配器,比如光纤通道,FICON,ESCON,以太网,光纤,无线或同轴适配器。数据存储系统200相应地配有适当的架构(图2B中未图示)或网络适配器,以便通信。图2B中描述了数据存储系统200,包括存储控制器240和集群主机210、220和225。集群主机210、220和225可包括集群节点。
[0030] 为了便于更清楚地理解这里说明的方法,在图2B中,存储控制器240被表示成单一的处理单元,包括微处理器242、系统内存243和非易失性存储器(“NVS”)216。注意在一些实施例中,存储控制器240由多个处理器构成,每个处理器具有它自己的处理器联合体和系统存储器,并由数据存储系统200内的专用网络互连。存储器230(在图2B中,被标记为230a、230b和230n)可由一个或多个存储设备,比如存储阵列组成,所述存储设备连接到存储控制器240(通过存储网络),同时一个或多个集群主机210、220和225连接到各个存储控制器
240。
[0031] 在一些实施例中,包含在存储器230中的设备可被连接成环路体系结构。存储控制器240管理存储器230,使预定给存储器230的写入和读取请求的处理更容易。存储控制器240的系统内存243保存程序指令和数据,处理器242可访问所述程序指令和数据,以便执行这里所述的用于执行和管理存储器230的本发明的功能和方法步骤。在一个实施例中,系统内存243包括操作软件250,与操作软件250关联,或者与操作软件250通信,以进行这里说明的方法和操作。如图2B中所示,系统内存243可包括存储器230用高速缓存245(这里也称为“高速缓冲存储器”),或者与存储器230用高速缓存245通信,以缓存“写数据”和“读数据”,所述“写数据”和“读数据”分别指的是写入/读取请求和它们的相关数据。在一个实施例中,在位于系统内存243之外的设备中分配高速缓存245,该高速缓存245仍然可被微处理器242访问,并且除了进行这里所述的操作之外,还用于提供防备数据丢失的额外安全性。
[0032] 在一些实施例中,高速缓存245用易失性存储器和非易失性存储器实现,并通过局域总线(图2B中未图示)耦接到微处理器242,以增强数据存储系统200的性能。包含在数据存储控制器中的NVS 216可被微处理器242访问,用于提供对如在其它附图中说明的本发明的操作和执行的额外支持。NVS 216也可被称为“永久”高速缓存,或者“高速缓冲存储器”,是利用可利用或可不利用外部电力来保持保存在其中的数据的非易失性存储器实现的。为了适合于实现本发明的目的的任何用途,NVS可以保存在高速缓存245中,和与高速缓存245保存在一起。在一些实施例中,在数据存储系统200电力中断的情况下,诸如电池之类的备用电源(图2B中未示出)向NVS 216供给足够的电力,以保持保存在其中的数据。在一些实施例中,NVS 216的容量小于或等于高速缓存245的总容量。
[0033] 存储器230可由一个或更多的存储设备,比如存储阵列物理构成。存储阵列是诸如硬盘之类的单个存储设备的逻辑编组。在一些实施例中,存储器230由JBOD(简单磁盘绑)阵列或RAID阵列(独立磁盘冗余阵列)构成。一批物理存储阵列可被进一步组合,从而形成区块(Fank),区块使物理存储器和逻辑结构分离。区块中的存储空间可被分成逻辑卷,逻辑卷定义在写入/读取请求中指定的存储位置。
[0034] 在一个实施例中,只是作为例子,如图2B中所示的存储系统可包括逻辑卷,或者简单地“卷”,可以具有不同种类的分配。存储器230a、230b和230n被表示成数据存储系统200中的区块,这里称为区块230a、230b和230n。区块可在存储系统200本地,或者可以位于物理上遥远的位置。换句话说,本地存储控制器可与远程存储控制器连接,并管理在远程位置的存储器。区块230a被表示成由两个完整卷234和236,以及一个部分卷232a构成。区块230b被表示成具有另一个部分卷232b。从而卷232是跨区块230a和230b分配的。区块230n被表示成完全分配给卷238-即,区块230n指的是卷238的整个物理存储空间。根据上面的例子,将意识到区块可被配置成包括一个或多个部分卷和/或完整卷。卷和区块可被进一步分成所谓的“磁道”,磁道代表固定的存储块。于是,磁道与给定卷关联,并可被赋予给定的区块。
[0035] 存储控制器240(和/或由未在图2B中图解说明,但是本领域的普通技术人员使用/采用的处理器设备关联和控制的其它硬件组件)可包括预定霍夫曼树模块255,快速压缩器模块257,霍夫曼编码器模块259,加速Inflate速度模块261,及统计信息和性能模块263。预定霍夫曼树模块255,快速压缩器模块257,霍夫曼编码器模块259,加速Inflate速度模块261,及统计信息和性能模块263可以和存储控制器240,主机210、220、225和存储设备230的每个组件一起工作。预定霍夫曼树模块255,快速压缩器模块257,霍夫曼编码器模块259,加速Inflate速度模块261,及统计信息和性能模块263在结构上可以是一个完整的模块,或者可以与其它各个模块关联和/或包含在其它各个模块内。预定霍夫曼树模块255,快速压缩器模块257,霍夫曼编码器模块259,加速Inflate速度模块261,及统计信息和性能模块263也可以位于高速缓存245或其它组件中。
[0036] 存储控制器240包括控制主计算机210、220、225的光纤通道协议的控制交换机241,控制整个存储控制器240的微处理器242,保存用于控制存储控制器240的操作的微程序(操作软件)250、控制用数据的非易失性控制内存243,用于临时保存(缓存)数据的高速缓存245,和帮助高速缓存245读取和写入数据的缓冲器244,控制交换机241用于控制协议,从而控制往来于可在其中设定信息的存储器230、预定霍夫曼树模块255、快速压缩器模块
257和霍夫曼编码器模块259的数据传送。利用本发明可以实现多个缓冲器244,以帮助这里说明的操作。在一个实施例中,集群主机/节点210、220、225和存储控制器240通过作为接口的网络适配器(可以是光纤通道),即,通过称为“架构”的至少一个交换机被连接。
[0037] 在一个实施例中,主计算机或一个或多个物理或虚拟设备210、220、225和存储控制器240通过作为接口的网络(可以是光纤通道)260,即,通过称为“架构”的至少一个交换机被连接。在一个实施例中,将说明图2B中所示的系统的操作。微处理器242控制内存243保存来自主机设备(物理或虚拟)210的信息,和用于识别主机设备(物理或虚拟)210的信息。控制交换机241,缓冲器244,高速缓存245,操作软件250,微处理器242,内存243,NVS 216,预定霍夫曼树模块255,快速压缩器模块257,霍夫曼编码器模块259,加速Inflate速度模块
261,及统计信息和性能模块263彼此通信,可以是分离的组件或者一个单独的组件。另外,几个组件(即使不是所有的组件),比如操作软件250可以包含在内存243内。为了适合于本发明的用途起见,所示设备内的各个组件可被链接在一起,并且可以相互通信。如上所述,预定霍夫曼树模块255,快速压缩器模块257,霍夫曼编码器模块259,加速Inflate速度模块
261,及统计信息和性能模块263也可以位于高速缓存245或者其它组件中。因而,可根据存储体系结构和用户偏爱,根据需要使用预定霍夫曼树模块255,快速压缩器模块257,霍夫曼编码器模块259,加速Inflate速度模块261,及统计信息和性能模块263。
[0038] 如前所述,本发明比较编码霍夫曼树和最近使用的树紧束,以避免树重构的开销,而不是根据各个块的压缩块的头部重构霍夫曼树。这使得能够利用在先霍夫曼树解压缩新的块(注意:这可节约为新的块松散和准备新树的时间)。如果不存在匹配,那么按照所述头部准备新树,另外保持此树的紧束描述的参考,供下次之用。
[0039] 现在参见图3,图中描述图解说明其中可实现本发明的各个方面的,在存在重现的霍夫曼树的情况下,加速Inflate速度的例证方法300的流程图。方法300开始(步骤302),比较编码霍夫曼树和最近使用的霍夫曼树紧束,以识别匹配,而不是根据各个数据块的压缩块的头部重构霍夫曼树,从而避免霍夫曼树重构的开销(步骤304)。方法300随后结束(步骤306)。
[0040] 现在参见图4,图中描述图解说明其中可实现本发明的各个方面的,在存在重现的霍夫曼树的情况下,加速Inflate速度的另一种例证方法400的流程图。通过在读取新的压缩块时,首先检查该压缩块的头部,以了解所述头部是否是用动态霍夫曼树编码的(步骤404),开始方法400(步骤402)。方法400判定所述头部是否是用动态霍夫曼树编码的(步骤
406)。如果否,那么方法400结束(步骤420)。如果是,那么在读取紧束树描述之前,方法400检查在Inflate过程的存储器中,是否存在在先树(步骤408)。方法400判定和/或识别在Inflate过程的存储器中,是否存在在先树(步骤410)。如果否,那么方法400转到步骤418。
如果是,那么方法400比较在先树的紧束树描述和在新的压缩块的头部中的紧束树描述(步骤412)。方法400判定在在先树的紧束树描述和新的压缩块的头部中的紧束树描述之间,是否识别出匹配(步骤414)。如果是,那么方法400利用先前的树解压缩新的压缩块(步骤
416)。如果否,那么方法400按照新的压缩块的头部准备新树,并保持所述新树的紧束描述的参考(步骤418)。方法400随后结束(步骤420)。
[0041] 另外,结合图4中说明的方法,可以和图4一起使用图5中图解说明的备选实施例,同时可根据用户/应用的需要,并入在图5中实现的各个步骤,以进一步增强图4。现在参见图5,图中描述图解说明其中可实现本发明的各个方面的,在存在重现的霍夫曼树的情况下加速Inflate速度的另一种例证方法500的流程图。通过把多个在先树保持/保存在高速缓存(内存)中(步骤504),开始方法500(步骤502)。方法500随后比较新的压缩块的新头部中的树和各个保存的树(步骤506)。注意:对于在Deflate期间,从一组可用树中选择霍夫曼树的实现来说,这是适宜的。方法500随后结束(步骤508)。
[0042] 从而,如图1-5中图解所示,通过比较霍夫曼树的紧束描述和最近使用的霍夫曼树紧束,以便识别匹配,而不是根据各个数据块的压缩块的头部重构霍夫曼树,从而避免霍夫曼树重构的开销,本发明在存在重现的霍夫曼树的情况下,加速Inflate速度。在一个实施例中,只是作为例子,每个压缩数据块具有头部,所述头部(除了其它以外)还指示该压缩数据块是利用动态树还是静态树进行霍夫曼编码。如果树是动态树,那么所述头部还包括将用于关于对应块的Inflate的霍夫曼树的紧束描述。如果在编码霍夫曼树和最近使用的霍夫曼树紧束之一之间识别出匹配,那么利用在先霍夫曼树解压缩新的数据块。检查压缩块的头部,以判定所述头部是否是用动态霍夫曼树编码的。如果所述头部指出编码是利用动态霍夫曼树进行的,那么在读取在先霍夫曼树的紧束描述之前,判定在用于Inflate操作的存储器中,是否存在在先霍夫曼树。如果在用于Inflate操作的存储器中存在在先霍夫曼树,那么比较在先霍夫曼树的紧速描述和在新的数据块的头部中的紧束描述。
[0043] 在一个实施例中,只是作为例子,按照头部准备新的霍夫曼树,并保持新的数据块的头部的紧束描述的参考,在准备新的霍夫曼树时,保存树紧束的长度,松散树紧束的霍夫曼树,和/或比较树紧束的长度和从新的数据块的头部中的指定位置起的相同数目的比特,以确保匹配严格,并且返回关于任何两个不相同霍夫曼树的任意失配。在一个实施例中,松散霍夫曼树是为了准备新的霍夫曼树,并且在松散时,可以保存树紧束的长度。
[0044] 在一个实施例中,只是作为例子,在先霍夫曼树可被保存、保持和/或维持在高速缓存中,可比较头部中的新霍夫曼树与保存在高速缓存中的各个在先霍夫曼树。在一个实施例中,只是作为例子,也可为保存在高速缓存中的一组在先霍夫曼树,准备和形成数据结构。所述新创建的数据结构也可用于识别匹配。
[0045] 本领域的技术人员会意识到,本发明的各个方面可以实现为系统、方法或计算机程序产品。因此,本发明的各个方面可以采取以下形式,即:纯硬件实施例、纯软件实施例(包括固件、驻留软件、微代码等),或结合硬件和软件方面的实施例,这里可以统称为“电路”、“模块”、“方法”、“计算机程序产品”和/或“系统”。此外,本发明的各个方面还可以采取体现为上面具有计算机可用程序代码的任意一个或多个计算机可读介质的计算机程序产品的形式。应注意一个或多个处理器设备(例如,用于操作软件实施例的硬件实施例)可用于实现、控制、批准、利用、操作、执行、命令、进行、运行、处理和/或进行如这里所述的本发明所需的任何其它活动。
[0046] 可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质(例如,非临时性计算机可读介质)。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者以上的任意适当组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适组合。
[0047] 可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言-诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言-诸如“C”语言或类似的程序设计语言。程序代码可以完全用户计算机上执行、部分在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)-连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0048] 上面参照按照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图,说明了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些计算机程序指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。这些计算机程序指令也可被存储在计算机可读介质中,所述计算机可读介质能够指令计算机、其它可编程数据处理设备、或其他装置以特定方式工作,以致存储在计算机可读介质中的指令产生包括实现在流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品。计算机程序指令也可被加载到计算机、其它可编程数据处理设备、或其它装置上,使得在所述计算机、其它可编程数据处理设备、或其它装置上执行一系列的操作步骤,从而产生计算机实现的处理,以致在计算机或其它可编程设备上执行的指令提供用于实现在流程图和/或框图中的一个或多个方框中规定的功能/动作的处理。
[0049] 附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0050] 尽管详细说明了本发明的一个或多个实施例,不过本领域的普通技术人员会意识到,可以作出对这些实施例的更改和修正,而不脱离如在以下权利要求中记载的本发明的范围。
QQ群二维码
意见反馈