Git DEFLATE/optimized zlib

6
我们在git中有一些非常大的代码库,我们发现远程/服务器压缩在克隆/拉取时是一个瓶颈。考虑到git已经变得如此普遍,并且使用zlib,这个zlib压缩是否已经被优化?
英特尔的一篇论文详细介绍了他们如何将DEFLATE压缩加速约4倍,尽管压缩比较小:

http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/ia-deflate-compression-paper.pdf

另一篇论文表明,在保留大多数压缩“级别”(1-9)的压缩比的情况下,速度提高了约1.8倍:

http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/zlib-compression-whitepaper-copy.pdf

这种优化似乎在Github上有提供:https://github.com/jtkukunas/zlib zlib看起来相当老旧(在这个快节奏的行业中),最新版本是2013年4月发布的。是否有尝试将zlib进行SIMD优化以适应新处理器一代的尝试?或者在git中使用zlib的替代方案?
我知道您可以在git中指定压缩级别,这会影响速度和压缩比。但是,以上内容表明,在不损害压缩比的情况下,可以对zlib进行相当大的性能改进。
因此,总结一下,是否存在使用高度优化的zlib或zlib替代方案的现有git实现?
附注:似乎很多开发人员/服务器都会从中受益(甚至包括减少温室气体排放;)
2个回答

5
实际上,英特尔对zlib的deflate做出了贡献,但尚未整合。您可以查看这个zlib分支,其中包含英特尔和Cloudfare改进压缩的实验性集成。您可以尝试使用git编译该分支以查看其表现如何。
zlib比您想象的要老。大部分压缩代码与20年前相比基本没有变化。解压缩在12年前进行了重写。

谢谢!这似乎很有趣。是否有任何原因导致它没有得到更多的关注或为什么没有努力将其集成到主要的zlib库中? - nietras

1

我不知道有任何使用优化的zlib或替代方法的git实现。然而,我已经对压缩和压缩级别与速度之间的权衡进行了一些调查,如果你的目标是显著提高性能,通常设计一个专注于速度的新算法比尝试优化现有算法会产生更好的结果。 LZ4 是一个以速度为优先考虑而设计的压缩算法的很好的例子。

压缩算法的性质意味着它们不太可能有效地并行化或SIMD化(这实际上是一种并行化),特别是如果它们没有被设计成这样的目标。压缩本质上涉及对流的串行数据依赖关系。

压缩算法需要考虑的另一件事是是否优先考虑压缩还是解压缩速度。如果瓶颈是服务器压缩数据所需的时间,那么你需要专注于快速压缩;但在其他情况下,例如加载游戏资源或获取静态网页时经常进行压缩和解压缩,则可能需要优先考虑解压缩速度。


谢谢,我明白了。关于这个问题,我可以问一下为什么“增量”在git中没有预压缩?据我所知,git存储库只存储压缩的对象,为什么在发送给客户端时还要进行解压缩和压缩呢? - nietras
然而,正如链接所示,通过一些修改,压缩/解压缩可以使用SIMD指令更快地完成,这就是英特尔展示的内容。 - nietras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接