了解磁盘的性能特征

已完成

应用程序的性能通常取决于它读写数据的速度。 若要了解如何提高应用程序性能,首先必须了解性能的测量方式以及影响性能的设置和选项。

磁盘的性能特征

若要选择合适的磁盘类型,必须了解性能指标。 以下指标表示性能:

  • IOPS:IOPS 是指应用程序在 1 秒内发送到磁盘的请求数量。 IOPS 直接影响应用程序的性能。 某些应用程序(例如零售网站)需要较高的 IOPS 来管理所有小的和随机的输入/输出 (I/O) 请求,这些请求必须快速处理来确保网站快速响应。 性能较高的磁盘具有更高的 IOPS 值。
  • 吞吐量:吞吐量是指在指定时间间隔内,应用程序发送到磁盘的数据量。 吞吐量也称为“数据传输速率”,以 MB/s 为测量单位。 如果应用程序正在使用大量数据执行 I/O,则需要高吞吐量。 性能较高的磁盘具有更高的吞吐量。
  • 延迟:延迟是指应用向磁盘发送请求并获得响应所需的时间。 延迟会限制 IOPS 的效率。 例如,(队列深度为 1)如果磁盘可处理 5,000 IOPS,但处理每个操作需要 10 毫秒,那么由于处理时间,应用的上限将是每秒 100 个操作。 如果启用 ReadOnly 主机缓存,延迟时间会显著减少。

IOPS 与吞吐量

吞吐量和 IOPS 具有直接关系。 更改一个将直接影响另一个。 若要计算出理论上的吞吐量限制,可使用以下公式:IOPS × I/O 大小 = 吞吐量。 在规划应用程序时,请务必考虑这两个值。

对于超级磁盘和高级 SSD v2 托管磁盘,其工作方式略有不同,因为可以独立调整磁盘大小、IOPS 和吞吐量。 可以在运行时调整超级磁盘和高级 SSD v2 托管磁盘的 IOPS 或吞吐量,而无需从 VM 分离磁盘。

超级磁盘 IOPS

超级磁盘支持 300 IOPS/GiB 的 IOPS 限制,每个磁盘最高可达 160,000 IOPS。 若要实现磁盘的目标 IOPS,请确保选择的磁盘 IOPS 小于 VM IOPS 限制。

采用正式发布大小的单个 VM 的 IOPS 当前最大限制为 160,000。 具有更高 IOPS 的超级磁盘可以用作共享磁盘,以支持多个 VM。

每个磁盘的最低保证 IOPS 为 1 IOPS/GiB,总体基线最低为 100 IOPS。 例如,如果预配了 4 GiB 的超级磁盘,则该磁盘的最小 IOPS 为 100,而不是 4。

超级磁盘吞吐量

单个超级磁盘对应于每个预配 IOPS 的吞吐量限制为 256 KiB/秒,每个磁盘的最大吞吐量为 4000 MB/s(其中,MB/s = 每秒 10^6 字节)。 对于每个预配的 IOPS,每个磁盘的最低保证吞吐量为 4KiB/s,总体基线最低为 1 MB/s。

高级 SSD v2 IOPS

所有高级 SSD v2 磁盘都提供免费的基线 IOPS 3000。 超出 6 GiB 时,磁盘可具有的最大 IOPS 按每 GiB 500 递增,最高可达 80,000 IOPS。 因此,8 GiB 磁盘最高可具有 4,000 IOPS,10 GiB 磁盘最高可具有 5,000 IOPS。 若要能够在磁盘上设置 80,000 IOPS,该磁盘必须至少具有 160 GiB。 如果 IOPS 超过 3000,磁盘价格会增加。

高级 SSD v2 吞吐量

所有高级 SSD v2 磁盘都提供免费的基线吞吐量 125 MB/s。 超出 6 GiB 时,可设置的最大吞吐量按设置的 IOPS 递增 0.25 MB/s。 如果磁盘具有 3000 IOPS,则可设置的最大吞吐量为 750 MB/s。 若要使此磁盘的吞吐量超过 750 MB/s,必须增加其 IOPS。 例如,如果将 IOPS 增加到 4,000,则可设置的最大吞吐量为 1,000。 1,200 MB/s 是具有 5,000 IOPS 或更高的磁盘支持的最大吞吐量。 如果吞吐量超过 125 MB/s,磁盘价格会增加。

虚拟机 I/O 上限

现在你已了解 Azure 中提供的具体磁盘,接下来需要将每个 VM 与正确的磁盘类型相匹配。 VM 自带存储 IOPS 限制,与磁盘 IOPS 结合使用时,会影响应用程序的整体性能。

如果未正确调整 VM 的大小来达到应用程序所需的存储性能,则 VM 本身会成为瓶颈。

例如,假设你的应用程序发出一个需要 15,000 IOPS 的请求。 而你预配了一个 Standard_D8s_v3 VM、它附加了一个 P30 OS 磁盘和两个具有 P40 SKU 的高级 SSD 数据磁盘。 每个数据磁盘可处理 7,500 IOPS,最终可满足应用程序的需求,而 VM 本身的上限为 12,800 IOPS,这是应用程序获得的实际 IOPS。 下图说明了此示例。

Diagram that depicts virtual machine input output capping.

上述示例演示的方案称为“VM I/O 上限”。 在此方案中,应用程序请求了磁盘可管理的吞吐量和 IOPS,但 VM 无法满足这些需求。

可使用以下指标诊断因 VM I/O 上限导致的性能问题:

  • 已使用的 VM 缓存 IOPS 的百分比
  • 已使用的 VM 缓存带宽的百分比
  • 已使用的 VM 未缓存 IOPS 的百分比
  • 已使用的 VM 未缓存带宽的百分比

磁盘 I/O 上限

你可能会遇到存储解决方案无法满足应用程序需求的其他情况。 但是,如果为磁盘选择的性能层不正确,可能会导致瓶颈。

还是参考上述示例,其中应用程序需要来自 VM 的 15,000 IOPS,而你选择了以下设置:

  • 支持 25,600 IOPS 的标准 D16s_v4
  • 支持 2,300 IOPS 的 P20 OS 磁盘
  • 两个 P30 数据磁盘,每个磁盘支持 5,000 IOPS

在此方案中,将应用程序的需求划分为 3 个不同的请求:

  • 从 OS 磁盘请求 2,300 IOPS
  • 从每个数据磁盘请求 5,000 IOPS

VM 将返回到应用程序的总 IOPS 将为 12,300,这是 OS 磁盘和数据磁盘提供的所有 IOPS 的总和。

当磁盘本身无法满足应用程序需求时,此方案称为“磁盘 I/O上限”。

Diagram that depicts disk input output capping.

若要诊断磁盘 I/O 上限,请使用以下指标:

  • 已使用的数据磁盘 IOPS 的百分比
  • 已使用的数据磁盘带宽的百分比
  • 已使用的 OS 磁盘 IOPS 的百分比
  • 已使用的 OS 磁盘带宽的百分比

磁盘缓存

缓存是一种存储数据的专用组件,通常存储在内存中,使应用程序能更快访问数据。 缓存中的数据通常是以前读取的数据,或者是以前计算的结果。 其目标是使应用程序能与从磁盘访问更快地从缓存访问数据。 超级磁盘和高级 SSD v2 上不提供磁盘缓存。

缓存使用专用的(有时比较昂贵的)临时存储,此类存储的读写性能优于永久性存储。 由于缓存存储通常会受限,所以可能需要确定哪些数据操作将从缓存中受益最大。 虽然缓存可广泛使用(例如在 Azure 中),但在决定使用哪种缓存类型之前,了解每个磁盘的工作负载模式仍然很重要。

“读取缓存”尝试加快数据检索速度。 应用程序不是从永久性存储读取数据的,而是从更快的缓存中读取。

请务必注意,当读取队列具有一定的可预测性时(例如,执行一系列有序读取时),读取缓存可发挥作用。 对于随机 I/O,要访问的数据分散在存储的各处,缓存的作用很小或者毫无益处,甚至可能降低磁盘性能。

“写入缓存”尝试提高在持久性存储中“写入数据”的速度。 通过使用写入缓存,应用可考虑应保存的数据。

实际上,使用写入缓存时,数据会在缓存中排队,等待写入磁盘。 可以想像,此机制可能是一个潜在的故障点,例如在将此缓存数据写入之前关闭系统的情况下。 某些系统(例如 SQL Server)本身就可管理将缓存数据写入永久性磁盘存储的任务。

VM 的缓存和未缓存限制

现在你已了解缓存如何提高在磁盘上读写数据的性能,接下来应继续了解缓存如何影响 VM 性能。

VM 的性能取决于根据 VM 大小设置的 IOPS 和吞吐量限制。 根据缓存和未缓存的配置,高级层的所有 VM 对 IOPS 和吞吐量有不同的限制。 可通过启用 VM 主机缓存来提高 VM 性能,以满足对 IOPS 和吞吐量的更高需求。

下表列出的示例说明了缓存和未缓存磁盘吞吐量和带宽的性能差异。

VM 大小名称 最大缓存吞吐量和临时存储吞吐量:IOPS/MB/s(以 GiB 为单位的缓存大小) 最大未缓存磁盘吞吐量 IOPS/MB/s
Standard_D2s_v3 4,000/32 (50) 3,200/48
Standard_D4s_v3 8,000/64 (100) 6,400/96
Standard_D8s_v3 16,000/128 (200) 12,800/192
Standard_D64s_v3 128,000/1,024 (1,600) 80,000/1,200

主机缓存有助于避免造成 VM 瓶颈的方案。

在前面的“VM I/O 上限”示例中,应用程序需要 15,000 IOPS。 它的两个数据磁盘都能处理该需求,但 Standard_D8s_v3 VM 在未缓存状态下只能提供 12,800 IOPS。

如果在 Standard_D8s_v3 VM 上配置主机缓存,可获得 16,000 缓存 IOPS,这超出了应用程序的需求。