我们在git中有一些非常大的存储库,在这些存储库中,我们观察到远程/服务器压缩是克隆/拉取时的瓶颈。考虑到git已经变得如此普及,也就是使用zlib,这个zlib压缩已经优化了吗?
英特尔的一篇论文详细介绍了它们如何在压缩比较小的情况下将放气压缩速度提高约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月发布的。有没有针对新一代处理器的SIMD优化zlib的尝试?或者在git中有没有使用zlib的替代方案?
我知道你可以在git中指定一个会影响速度和压缩比的压缩级别。然而,上面的结果表明zlib可以在不影响压缩比的情况下有相当大的性能改进。
总而言之,是否有任何现有的git实现使用了高度优化的zlib或zlib替代方案?
PS:似乎很多开发人员/服务器都会从中受益(甚至温室气体排放;)。
发布于 2015-08-08 12:21:28
事实上,英特尔对zlib的deflate的贡献还没有被整合。你可以看看this fork of zlib,它在实验中集成了英特尔和云计算在压缩方面的改进。你可以试着用git编译它,看看它是怎么做的。
zlib比你想象的要老。大部分压缩代码与20年前相比没有变化。解压大约在12年前重写。
发布于 2015-08-08 03:57:50
我不知道任何使用优化zlib或替代方案的git实现。我对压缩以及压缩级别和速度之间的权衡做了一些研究,但是,如果你的目标是显着提高性能,你通常会得到更好的结果,在设计新算法时考虑到速度,而不是试图优化现有算法。LZ4就是一个很好的例子,它是以速度优先于压缩率来设计压缩算法的。
压缩算法的本质意味着它们不倾向于非常有效地并行化或SIMDify (这实际上是一种并行性),特别是如果它们不是以此为目标设计的。压缩本质上涉及到流上的串行数据依赖性。
使用压缩算法需要考虑的另一件事是,是否优先考虑压缩或解压缩速度。如果瓶颈是服务器压缩数据所花费的时间,那么您希望专注于快速压缩,但在其他情况下,如果您只压缩一次,并且经常解压缩(例如,加载游戏资产或获取静态web页面),那么您可能希望优先考虑解压缩速度。
https://stackoverflow.com/questions/31873479
复制相似问题