CPU自适应压缩


10

假设我需要通过相当快速的网络将一些数据从一台计算机发送到另一台计算机,例如标准的100Mbit连接(〜10MB / s)。我的磁盘驱动器是标准HDD,因此它们的速度介于30MB / s和100MB / s之间。因此,我认为即时压缩数据可能会有所帮助。

但是...我不想受到CPU的限制。如果选择占用大量CPU资源的算法,则传输实际上会比没有压缩时慢。

对于GZIP和BZIP2之类的压缩器而言,这很困难,因为您通常为整个传输设置一次压缩强度,而且我的数据流有时很容易,有时很难压缩-这使处理过程不是最佳的,因为有时我不使用完整的CPU,有时带宽利用不足。

是否有一个压缩程序可以适应当前的CPU /带宽并达到最佳状态,从而使传输达到最佳状态?最适合Linux,但我对所有解决方案仍然感到好奇。我希望看到与GZIP / BZIP2解压缩器兼容的东西,但这不是必需的。

因此,我想优化总传输时间,而不仅仅是发送字节数。

我也不需要实时解压缩...实时压缩就足够了。目标主机可以在其空闲时间稍后处理数据。我知道这不会有太大变化(压缩通常比解压缩要占用更多的CPU资源),但是如果有一种可以利用这一事实的解决方案,那就更好了。

每次传输不同的数据时,我真的想尽快进行一次一次性传输。因此,由于压缩效果更强,我无法从更快地进行多次传输中受益。

谢谢,


1
+1有趣且可能有用的想法。如果您找到一些实现此目的的好方法,那么我想听听。
大卫·卡里

Answers:


3

这是当前的研究主题,主要是在传感器网络领域,其目标是最大程度地减少功耗,而不是最大吞吐量。但是,自适应压缩的原理是相同的。

南加州大学教授的最新论文。

也许您可以尝试实现他的算法?我敢肯定会有很多人对一个好的实现感兴趣。


如果可以的话,我很乐意……这里通常会受到人类时间的限制。我仍然可以首先测试它;-)感谢您提供论文的链接,我可能会尝试寻找其他可能感兴趣的人。
liori

2

哼,这个问题已经超过一年了,所以这个问题可能没有引起注意:

无论如何,Google最近发布了Snappy,它可能正是您所需要的,即:

[...]并非旨在最大程度地压缩或与任何其他压缩库兼容;相反,它的目标是非常高的速度和合理的压缩。例如,与zlib的最快模式相比,Snappy对于大多数输入而言要快一个数量级,但是生成的压缩文件要大20%至100%[...]

它以C ++实现,具有可用于C和其他语言的绑定。


哦,不,至少我不会注意到它;-)在我所寻找的意义上,它似乎不是自适应的,它只是很快。
liori 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.