一段时间以来,CPU 的增幅似乎超过了磁盘速度。假设一台台式机或笔记本电脑配备了现代双核 Intel/AMD CPU 和一个普通的 SATA 磁盘,那么对大部分磁盘进行压缩是否会提高整体性能?基本上,减少的磁盘带宽是否足以弥补增加的 CPU 负载?我相信真正的答案是“这取决于你在做什么”。通过提出这个问题,我希望有人能回答这个问题,并给出一些例子或陷阱。
答案1
是的,磁盘压缩可以在特定情况下提供更好的性能:
- 您的应用程序受磁盘吞吐量限制:现代 CPU 和(解)压缩算法在长传输中可以以比现代磁盘高得多的带宽运行。在这种情况下,减少移入或移出磁盘盘片的数据量是一种胜利
- 压缩(解压缩)到磁盘的数据所需的时间比传输时间的差异要少,而且还有空闲的 CPU 周期
ZFS 和 Btrfs(均为近期的绿地设计)都包含压缩规定,这是有原因的。
在 HPC 领域,当应用程序从内存到磁盘执行检查点时,CPU 通常不会执行任何有用的操作。这段时间基本上是纯粹的开销。使用 CPU 来减少这段时间是一种胜利。
答案2
磁盘压缩将绝不为您提供更好的表现。
它可能给你几乎没有任何惩罚这得益于快速的现代 CPU,但那是完全不同的事情。
你认为从磁盘传输更少的数据可以提高性能;但大数据传输几乎从来不是 I/O 瓶颈:真正的瓶颈是寻道时间和延迟。现代硬盘真的对大文件的持续数据传输速度很快,而对整个磁盘上的小传输则会使传输速度变慢。
一些场景:
- 媒体文件。这些文件通常已经经过压缩(JPEG、MPEG、MP3),因此在文件系统级别压缩它们根本无济于事;相反,这会使情况变得更糟,因为对它们进行编码/解码已经需要 CPU 资源。
- 数据库。这些通常是以随机突发的方式读取/写入的,因此压缩它们不仅没有任何好处,而且还会降低性能,因为 DBMS 无法正确识别它需要访问的物理数据存储在磁盘上的位置。
- 页面文件。这通常很大,但操作系统需要处理其中很小的数据块,并且需要这样做非常准确地说(“在物理地址 X 处读取 4K”);压缩它通常是不可能的,但即使可以,也会完全浪费时间和资源:由于此文件的“完全随机数据”性质,它几乎不会提供任何压缩。
答案3
某些特定情况已在每个应用程序级别执行此操作,例如视频压缩 - 无法从 dsk 快速读取原始高清质量视频的系统可以改为读取压缩信息并使用内存和 CPU 能力对其进行扩展。其他特定情况没有理由不能这样做,但最好在应用程序级别处理,以便使用的压缩方法针对其目的进行优化。
请记住,如果整个吞吐量增加,解压缩的性能开销是值得的,因此不应轻易否定这个想法 - 我认为我们还没有为通用性能提升压缩做好准备,但理论上可以用过剩的资源(CPU 和内存)来换取其他地方的性能提升(从硬盘读取的总数据)
答案4
CPU 速度始终比磁盘速度快。恕我直言,压缩会增加开销,从而降低性能。