为什么 IOPS 很重要?

mFe*_*ein 34 performance storage iops amazon-web-services

我了解什么是 IOPS 和吞吐量。吞吐量以 MB/s 为单位衡量数据流,IOPS 表示每秒发生的 I/O 操作数。

我不明白的是为什么许多存储服务只显示它们提供的 IOPS。我真的看不到任何我更愿意知道 IOPS 而不是吞吐量的情况。

为什么 IOPS 很重要?为什么 AWS 主要以 IOPS 显示其存储配置?IOPS 在哪些方面比吞吐量 (MB/s) 更相关?


编辑:

有些人正在研究这个问题,就好像我问什么是随机访问以及它如何影响性能或 HDD 和 SSD 的工作原理......对此,这不是问题的目标,问题是关于“当我看到 IOPS 数字时,我会获得哪些新信息,而我不会看到吞吐量 (MB/s) 数字?”

eww*_*ite 58

这是因为顺序吞吐量并不是大多数 I/O 活动发生的方式。

随机读/写操作更能代表正常的系统活动,这通常受 IOPS 的约束。

我的一台服务器向我们的客户流式传输色情内容(或上传到我们的 CDN)本质上更具顺序性,您会在那里看到吞吐量的影响。

但是维护用于对色情内容进行分类并通过站点跟踪用户活动的数据库本质上将是随机的,并且受到底层存储能够进行的每秒小 I/O 操作数量的限制。

我可能需要 2,000 IOPS 才能在使用高峰期运行数据库,但由于活动类型的原因,在磁盘级别可能只看到 30MB/s 的吞吐量。磁盘能够达到 1200MB/s,但 IOPS 是环境中的限制。

这是描述存储系统容量潜力的一种方式。SSD 可能有能力实现 80,000 IOPS 和 600MB/s 的吞吐量。您可以使用 6 个常规 10k SAS 磁盘获得该吞吐量,但只能产生大约 2,000 IOPS。

  • +1 色情示例 哈哈 (33认同)
  • 我经常看到充分利用的磁盘大约为 2MB/秒。那是因为它是 100% 随机 IO。有时,令人难以置信的性能提升可能是通过在磁盘上按顺序排列数据(例如删除碎片、在数据库中建立索引)。 (3认同)
  • 此外,操作系统可能会进行一些小的随机访问。序列吞吐量无济于事。这就是在 SSD 上运行操作系统的原因,至少在 PC 上是这样。 (2认同)

Tim*_*Tim 36

吞吐量

当您执行复制文件等操作时,吞吐量非常有用。当你在做几乎任何其他事情时,磁盘上的随机读写会限制你。

IOPS

IOPS 通常指定每个数据包的大小。例如,AWS gp2 可以执行 10,000 次 IOPS,负载大小为 16 KiB。这乘以 160MiB/秒。但是,您可能不太可能一直使用完整的有效负载大小,因此实际吞吐量可能会更低。NB KiB 为 1024 字节,KB 为 1000 字节。

因为 IOPS 指定的数据包大小也可以为您提供总吞吐量。而高吞吐量并不意味着您具有高 IOPS。

场景

考虑以下场景:

  • 启动你的电脑。考虑一下计算机中 SSD 和旋转磁盘之间的区别,这是许多人的第一手经验。使用旋转磁盘,启动时间可能是一分钟,而使用 SSD,这可以缩短到 10 - 15 秒。这是因为在请求信息时,更高的 IOPS 会导致更低的延迟。旋转磁盘的吞吐量非常好,为 150MB/秒,尽管 SSD 可能更高,但这并不是它更快的原因——这是返回信息的延迟更低。
  • 运行操作系统更新。它遍布整个磁盘,添加和修补文件。如果您的 IOPS 较低,无论吞吐量如何,它都会很慢。
  • 运行数据库,例如从大型数据库中选择少量数据。它将从索引中读取,从多个文件中读取,然后返回结果。它再次遍历整个磁盘以收集信息。
  • 在您的 PC 上玩游戏。它可能从整个磁盘加载大量纹理。在这种情况下,可能需要 IOPS 和吞吐量。

LTO胶带

考虑一下磁带备份系统。LTO6 可以做到 400MB/秒,但是(我在这里猜测)可能甚至无法执行一次随机 IOP,它可能低至每个 IOP 秒。另一方面,如果 IOPS 被定义为在磁带上读取或写入数据包,它可能会执行大量顺序 IOPS。

如果您尝试从磁带启动操作系统,它会花费很长时间,如果它真的有效的话。这就是 IOPS 通常比吞吐量更有帮助的原因。

要了解存储设备,您可能想知道它是随机的还是顺序的 IOPS,以及 IO 大小。从中您可以得出吞吐量。

自动售货机

请注意,AWS 确实在此页面上发布了其所有存储类型的 IOPS 和吞吐量数据。通用 SSD (gp2) 可以执行 10,000 次 16KiB IOPS,最高可达 160MB/秒。预配置的 IOPS (io1) 为 20,000 16KiB IOPS,最高可达 320MB/秒。

请注意,使用 gp2 卷时,每 GB 提供 3 IOPS,因此要获得 10,000 IOPS,您需要 3.33TB 卷。我不记得 io1 卷是否有类似的限制(自从我进行了测试此类事情的相关考试以来已经有一段时间了),但我怀疑他们有,如果是这样,每 GB 可能是 60IOPS。

结论

高顺序吞吐量很有用,在某些情况下是性能的限制因素,但在大多数情况下,高 IOPS 可能更为重要。无论 IOPS 如何,您当然仍然需要合理的吞吐量。

  • 只是为了迂腐,它仍然是 1 IOPS,而不是 1 IOP。s 不是复数 (4认同)
  • 不过,16KB 的 10000 IOPS 不会转换为 8KB 的 20000 IOPS(可能约为 11000)。这意味着需要了解 IOPS 和吞吐量才能评估驱动器/工作负载。 (2认同)

rei*_*rab 6

虽然ewwhite 的回答是完全正确的,但我想提供一些更具体的数字,以帮助理解为什么差异很重要。

正如 ewwhite 已经正确指出的那样,大多数非流应用程序主要执行非顺序磁盘操作,这就是为什么 IOPS 除了理论峰值吞吐量之外也很重要。

当我和一位同事首次在我们的开发系统中安装 SSD 以替换我们之前使用的 HDD 时,我们对它们进行了一些性能测量,真正强调了为什么这很重要:

SATA 硬盘结果:

顺序读取吞吐量:~100 MB/s
非顺序读取吞吐量(2k 块,IIRC):~1 MB/s

PCIe 连接 SSD 结果:

顺序读取吞吐量:~700 MB/s
非顺序读取吞吐量(2k 块,IIRC):~125 MB/s

从示例中您可以清楚地看到,仅列出每个设备的最大吞吐量会给出它们如何比较的极其不准确的图片。在顺序读取大文件时,SSD 的速度仅为 HDD 的 6-7 倍左右,但在从磁盘的不同部分读取小块数据时,速度是 HDD 的 100 倍以上。当然,对于 HDD,这种限制主要是因为 HDD 必须将 r/w 磁头物理移动到所需磁道,然后等待所需数据在磁头下方旋转,而 SSD 没有物理部件可移动。

与最大吞吐量的简单比较所建议的相比,我们的编译时间得到了显着改善。以前需要超过 30 分钟的构建现在大约在一分钟内完成,因为大型构建期间的磁盘 I/O 包括读取和写入大量单独的源文件,这些源文件每个都不是很大,可能分散在整个磁盘上.

通过提供吞吐量和 IOPS 数字,您可以更好地了解给定工作负载在给定存储设备上的执行情况。如果您只是流式传输大量没有碎片的数据,您将非常接近最大吞吐量。但是,如果您正在执行大量未按顺序存储在磁盘上的小型读取和/或写入操作,您将受到 IOPS 的限制。