当前位置:  开发笔记 > 人工智能 > 正文

压缩以提高硬盘写入性能

如何解决《压缩以提高硬盘写入性能》经验,为你挑选了1个好方法。

在现代系统上,通过压缩输出流可以提高本地硬盘写入速度吗?

这个问题源于我正在使用的一个案例,其中一个程序连续生成并将1-2GB的文本记录数据转储到硬盘上的原始文本文件中,我认为它是IO绑定的.我希望能够通过在数据进入磁盘之前压缩数据来减少运行时间,还是压缩的开销会占用我可以获得的任何增益?有空闲的第二个核心会影响这个吗?

我知道这将受到用于生成数据的CPU数量的影响,因此需要多少空闲CPU时间的经验法则是好的.


我记得一个视频谈话,有人使用压缩来提高数据库的读取速度,但IIRC压缩比解压缩更加耗费CPU.



1> Crashworks..:

是的,是的,是的,绝对的.

以这种方式看待它:以每秒兆字节为单位获取最大连续磁盘写入速度.(继续测量它,计算一个巨大的fwrite或其他东西.)让我们说100mb/s.现在以CPU为单位,以兆赫为单位; 让我们说3Ghz = 3000mhz.将CPU速度除以磁盘写入速度.这是CPU占用空闲的周期数,您可以在压缩时每字节消耗.在这种情况下,每个字节3000/100 = 30个周期.

如果你有一个算法可以将你的数据压缩25%以获得有效的125mb/s写入速度,那么每个字节就有24个周期来运行它并且它基本上是免费的,因为CPU无论如何都不会做任何事情.在等待磁盘流失时.每字节24个周期=每个128字节高速缓存线3072个周期,轻松实现.

我们在阅读光学媒体时一直这样做.

如果你有一个闲置的第二个核心,那就更容易了.只需将日志缓冲区移交给该核心的线程,只要它喜欢压缩数据就可以,因为它没有做任何其他事情!唯一棘手的一点是你想要实际拥有一个缓冲区环,这样你就没有生成器线程(生成日志的那个)在互斥锁上等待消费者线程(将其写入磁盘的那个)的缓冲区持有.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有