本文已经是高速数据压缩主题中的第二篇。 第一篇文章描述了以10GB / s的速度运行的压缩机。 每个处理器内核(最小压缩,RTT-Min)。
该压缩器已被引入鉴识复制器的设备中,用于高速压缩存储介质转储并提高加密强度,它还可以用于压缩虚拟机映像并交换RAM文件,同时将它们存储在高速SSD驱动器上。
第一篇文章还宣布了一种压缩算法的开发,该压缩算法用于压缩HDD和SSD磁盘驱动器的备份副本(中压缩,RTT-Mid),并显着改善了数据压缩参数。 迄今为止,这台压缩机已经完全准备就绪,本文是关于他的。
实施RTT-Mid算法的压缩器可提供与以高速模式运行的标准存档器(如WinRar,7-Zip)相当的压缩率。 而且,其速度至少高一个数量级。
打包/解包数据的速度是确定压缩技术范围的关键参数。 任何人都不太可能考虑以每秒10-15兆字节的速度压缩这TB的数据(这是标准压缩模式下存档器的速度),因为要完全加载处理器大约需要20个小时...
另一方面,相同的TB可以以每秒2-3 GB的速度复制大约十分钟。
因此,如果以不低于实际输入/输出速度的速度执行压缩,则涉及大量信息的压缩。 对于现代系统,这至少是每秒100兆字节。
现代压缩机只能在“快速”模式下产生这样的速度。 在这种当前模式下,我们将RTT-Mid算法与传统压缩机进行比较。
新压缩算法的对比测试
RTT-Mid压缩机是测试程序的一部分。 在一个真正的“工作”应用程序中,它的运行速度要快得多,在那里正确地使用了多线程,并且使用了“普通”编译器,而不是C#。
由于比较测试中使用的压缩机基于不同的原理,并且不同类型的数据进行了不同的压缩,因此出于测试的客观性,我们使用了“医院平均温度”的测量方法...
已创建Windows 10操作系统的逻辑驱动器的逐个扇区转储文件;这是每台计算机上实际可用的各种数据结构的最自然的混合。 该文件的压缩将使您可以将新算法的压缩速度和压缩程度与现代存档器中使用的最先进的压缩器进行比较。
这是转储文件:

转储文件由PTT-Mid,7-zip,WinRar压缩程序压缩。 WinRar压缩器和7-zip设置为最大速度。
7压缩压缩机的工作原理:

它会将处理器负载100%,而原始转储的平均读取速度约为60兆字节/秒。
WinRar压缩机的工作原理:

情况类似,处理器负载几乎为100%,转储的平均读取速度约为125 MB /秒。
与前面的情况一样,存档器的速度受到处理器功能的限制。
RTT-Mid压缩机测试程序现在可以运行:

屏幕快照显示处理器已加载50%的数据,其余时间都处于空闲状态,因为没有地方可以下载压缩数据。 数据上传磁盘(磁盘0)几乎已完全加载。 读取数据(磁盘1)的速度跳跃很多,但平均速度超过200兆字节/秒。
在这种情况下,压缩器速度受到将压缩数据写入磁盘0的能力的限制。
现在,生成的档案的压缩率:



可以看出,RTT-Mid压缩器的压缩性能比任何人都更好,它创建的档案比WinRar档案小1.3千兆字节,比7z档案小2.1千兆字节。
创建档案所花费的时间:
- 7-zip-26分钟10秒;
- WinRar-17分钟40秒;
- RTT中期-7分30秒。
因此,即使是使用RTT-Mid算法的测试程序(不是经过优化的程序),创建档案的速度也可以快两倍以上,而档案却明显小于竞争对手的档案...
那些不相信屏幕截图的人可以自己验证其准确性。 该测试程序可
在此处下载,检查。
但是,仅在支持AVX-2的处理器上,如果没有这些指令的支持,压缩器将无法运行,并且无法在较旧的AMD处理器上测试算法,因此它们执行AVX命令的速度很慢...
压缩方式
该算法使用索引字节细化中重复文本片段的方法。 这种压缩方法早已为人所知,但是由于匹配查找操作在必需的资源方面非常昂贵,并且比构建字典需要更多的时间,因此尚未使用。 因此,RTT-Mid算法是“回到未来”运动的经典示例...
PTT压缩器使用独特的高速扫描仪查找匹配项,正是他允许加快压缩过程。 一款自制的扫描仪,这是“我的魅力……”,“因为它是完全手工制作的,所以价格不菲”(用汇编语言编写)。
匹配搜索扫描器基于两级概率方案,首先扫描匹配的“符号”的存在,并且只有在此位置检测到“符号”之后,才开始检测真实匹配的过程。
匹配搜索窗口的大小是不可预测的,具体取决于正在处理的数据块中的熵的程度。 对于完全随机(不可压缩)的数据,它的大小为兆字节,对于具有重复的数据,它的大小总是大于兆字节。
但是许多现代数据格式是不可压缩的,并且在其上“驱动”资源密集型扫描仪是无用且浪费的,因此,该扫描仪使用两种操作模式。 首先,搜索源文本中可能重复的部分,该操作也通过概率方法执行,并且执行速度非常快(4-6 GB /秒的速度)。 然后由主扫描仪处理可能匹配的区域。
索引压缩不是很有效,您必须用索引替换重复的片段,并且索引数组会大大降低压缩率。
为了提高压缩率,不仅对字节字符串的完全匹配进行索引,而且当字符串中存在匹配或不匹配的字节时,还对部分匹配进行索引。 为此,索引掩码字段包含在索引格式中,它指示两个块的重合字节。 为了获得更大的压缩效果,索引将与当前块上的几个部分匹配的块重叠。
所有这些使得有可能在PTT-Mid压缩机中获得压缩比,与根据字典方法制造的压缩机相比,但工作速度更快。
新压缩算法的速度
如果压缩器专用于内存高速缓存(每个流需要4兆字节),那么速度在700-2000兆字节/秒之间。 每个处理器核,取决于要压缩的数据类型,很少取决于处理器的工作频率。
使用压缩器的多线程实现,有效的可伸缩性由第三级的高速缓存存储器的容量确定。 例如,拥有“内置” 9 MB的缓存,运行两个以上的压缩流是没有意义的,速度不会因此而增长。 但是,有了20 MB的缓存,您已经可以运行五个压缩流。
同样,RAM的等待时间成为确定压缩机速度的重要参数。 该算法使用对OP的随机访问,其中一些不进入高速缓存(大约10%),并且必须处于空闲状态,等待来自OP的数据,这降低了工作速度。
显着影响压缩机的速度和数据输入/输出系统的运行。 从I / O向OP的请求阻塞了来自CPU的数据请求,这也降低了压缩率。 对于笔记本电脑和台式机,此问题很严重;对于服务器,此问题不太重要,这是因为系统总线和多通道RAM的访问控制单元更先进。
在本文中的任何地方,文章都提到压缩,解压缩超出了本文的范围,因为巧克力中包含了所有内容。 解压缩要快得多,并且受I / O速度的限制。 一个线程中的一个物理核心可以平静地提供3-4 GB /秒的解压缩速度。
这是由于在解包过程中没有匹配查找操作,该操作会在压缩过程中“消耗”主处理器和缓存资源。
可靠存储压缩数据
正如使用数据压缩(存档器)的整个软件工具的名称所暗示的那样,它们被设计用于信息的长期存储,而不是多年,而是数百年和几千年的历史。
在存储期间,存储介质会丢失一些数据,这是一个示例:

这种“模拟”存储介质已有一千多年的历史,丢失了一些碎片,但总的来说信息是“可读的” ...
现代数字存储系统和数字媒体的负责任制造商中,没有一家提供超过75年的完全数据安全保证。
这是一个问题,但是这个问题被推迟了,我们的后代将解决它...
数字数据存储系统不仅会在75年后丢失数据,而且即使在记录过程中也可能随时出现数据错误,它们会通过使用冗余和纠错系统来尽量减少这些失真。 冗余和更正系统不能始终还原丢失的信息,如果还原了丢失的信息,则不能保证恢复操作是正确的。
这也是一个大问题,但不是一个延迟的问题,而是当前的问题。
用于存档数字数据的现代压缩器是基于对字典方法的各种修改构建的,对于此类档案,丢失一条信息将是致命事件,甚至对于这种情况甚至有一个确定的术语-“破损”档案...
具有字典压缩功能的档案中信息存储的低可靠性与压缩数据的结构有关。 这样的档案中的信息不包含源文本,字典中的条目数存储在此处,字典本身由当前的可压缩文本动态修改。 如果存档的某个片段丢失或失真,则无法通过目录中的内容或条目的长度来标识所有后续的存档条目,因为尚不清楚词典条目的编号与之对应。
从这样一个“破碎”的存档中恢复信息是不可能的。
RTT算法基于一种更可靠的存储压缩数据的方法。 它使用索引法来计算重复的片段。 这种压缩方法允许最小化介质上信息失真的后果,并且在许多情况下,可以自动校正在信息存储期间出现的失真。
这是由于在压缩索引的情况下存档文件包含两个字段:
对于数据恢复至关重要的索引字段大小不大,可以复制以进行可靠的数据存储。 因此,即使源文本或索引数组的片段丢失了,所有其他信息也将毫无问题地恢复,如带有“模拟”信息载体的图片中所示。
算法缺点
没有缺点就没有优点。 索引压缩方法不压缩重复的短序列。 这是由于索引方法的限制。 索引的大小至少为3个字节,最大为12个字节。 如果重复发生的大小小于描述它的索引的大小,则不会考虑该重复,但是通常会在可压缩文件中检测到此类重复。
传统的词汇压缩方法有效地压缩了多个短重复序列,因此比索引压缩实现了更高的压缩率。 没错,这是由于中央处理器的高工作量而实现的,因此词汇方法比索引方法开始更有效地压缩数据,在具有完全CPU利用率的实际计算安装中,它必须将数据处理速度降低到每秒10-20兆字节。
如此低的速度对于现代数据存储系统是不可接受的,并且比实际更具有“学术性”的兴趣。
信息压缩的程度将在PTT算法的下一个修改形式(RTT-Max)中得到显着提高,它已经在开发中。
因此,一如既往,继续...