我希望这里有人能明确地回答这些问题:

  • 将 VHD 文件放入主机上的 NTFS 压缩文件夹中是否会提高虚拟机的性能、降低性能,还是两者都不会?
  • 在来宾中使用 NTFS 压缩怎么样?
  • 在主机或来宾上使用压缩是否会导致读取或写入错误等问题?
  • 如果我将 VHD 放入主机上的压缩文件夹中,我会从压缩它中受益吗?

我在很多 VPC“提示和技巧”博客文章中看到过使用 NTFS 压缩的参考,其中一半人说永远不要这样做,另一半人说这不仅可以节省磁盘空间,而且实际上如果您有一个快速的 CPU 并且您的主要性能瓶颈是磁盘,则可以提高性能。

有帮助吗?

解决方案

这与权衡有关。磁盘需要一定的时间才能读取一定数量的字节。如果您可以压缩数据,使得磁盘读取数据所需的时间减少与CPU对其进行解压缩所花费的时间之和少于从磁盘读取未压缩数据所花费的时间之和,那么您就赢了性能。

问题在于其中有太多变量,无论哪种方式都可能很好。您的磁盘读取小块数据可能会变慢,或者数据的压缩性可能不高,或者CPU的速度可能真的非常快,或者(依此类推)。要确定它是否确实有所作为,唯一的方法就是尝试并进行测量。对于不同的数据/机器,您获得的答案可能会有所不同。

其他提示

您不会看到磁盘错误,但随着时间的推移或在虚拟机进行密集磁盘写入期间,您可能会看到速度变慢。不就地压缩虚拟机的原因与不就地压缩数据库的原因相同:虚拟磁盘是块设备,VM 使用块偏移对其进行寻址。它假设所有块的大小相同。如果它们被压缩,那就不再是这样了。主机文件系统必须在假定的块位置和实际(压缩)块位置之间进行转换。如果内容是只读的,那么这将是相当微不足道的开销,但块会改变,它们的可压缩性也会改变。重写压缩块可能意味着它不适合原来的位置。主机 FS 必须移动它,这是一个额外的步骤,并且会产生虚拟磁盘碎片。

当然,当您的虚拟机写入还没有物理位置的新位置时,总会出现碎片。您只能通过使用(未压缩的)全尺寸虚拟磁盘(充满空填充,即没有自动增长),并对主机和来宾进行碎片整理。

在固态存储上,碎片并不重要,压缩将有助于减少写入,从而延长磁盘的使用寿命。但您仍然受制于块转换的 CPU 和内存开销。

另请记住,您的磁盘控制器可能正在重复数据删除和/或压缩数据,因此您的操作系统级别的工作可能是多余的。

对于大量读取的虚拟机,压缩可能是值得的。不幸的是,现代操作系统做了太多的内务处理、日志记录和自我更新,以至于它们不断地写入,但您可以将此活动限制在快照中。因此,请就地压缩基础映像,但不要压缩快照。写入性能不会受到影响。警告:快照可以轻松增长到原始磁盘的大小。您仍然需要经常合并或删除它们,因此请将它们放在您可以看到的地方。

结论:把事情简单化。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top