我了解 IOPS 和吞吐量。吞吐量以 MB/s 为单位测量数据流,而 IOPS 表示每秒发生多少次 I/O 操作。
我不明白为什么许多存储服务只显示它们提供的 IOPS。我真的看不出有什么情况我会更愿意知道 IOPS 而不是吞吐量。
为什么 IOPS 很重要?为什么 AWS 主要以 IOPS 显示其存储配置?IOPS 在哪里比吞吐量(MB/s)更相关?
编辑:
有些人正在研究这个问题,就好像我问随机访问是什么以及它如何影响性能,或者 HDD 和 SSD 如何工作一样……虽然我认为这些信息对于刚接触存储行为的人来说很有用,但人们的注意力都集中在这上面,这不是问题的目的,问题在于“当我看到 IOPS 数字时,我会获得哪些新的信息,而当我看到吞吐量(MB/s)数字时,我不会获得这些信息?”
答案1
吞吐量
吞吐量在执行复制文件等操作时非常有用。在执行其他任何操作时,磁盘上的随机读写都会限制您的速度。
每秒输入/输出次数
IOPS 通常指定每个数据包的大小。例如,AWS gp2 可以使用 16基布有效载荷大小。这会乘以 160MiB/秒。但是,您可能不太可能一直使用完整的有效载荷大小,因此实际吞吐量可能会更低。NB KiB 是 1024 字节,KB 是 1000 字节。
因为 IOPS 指定了数据包大小,它也会提供总吞吐量。而高吞吐量并不意味着您拥有高 IOPS。
场景
请考虑以下情形:
- 启动您的 PC。考虑一下您的计算机中的 SSD 和旋转磁盘之间的差异,这是许多人都有过亲身体验的事情。使用旋转磁盘,启动时间可能长达一分钟,而使用 SSD,启动时间可能缩短至 10 - 15 秒。这是因为更高的 IOPS 会导致请求信息时的延迟更低。旋转磁盘的吞吐量相当不错,为 150MB/秒,尽管 SSD 可能更高,但这并不是它更快的原因 - 而是返回信息的延迟更低。
- 运行操作系统更新。它会遍历整个磁盘,添加和修补文件。如果 IOPS 较低,则无论吞吐量如何,它都会很慢。
- 运行数据库,例如从大型数据库中选择少量数据。它将从索引中读取,从多个文件中读取,然后返回结果。它再次遍历整个磁盘来收集信息。
- 在 PC 上玩游戏。它可能会从整个磁盘加载大量纹理。在这种情况下,可能需要 IOPS 和吞吐量。
LTO 磁带
考虑一下磁带备份系统。LTO6 可以达到 400MB/秒,但(我猜)可能甚至无法达到一个随机 IOP,可能低至每 IOP 几秒。另一方面,如果 IOPS 定义为读取或写入磁带中的一组数据,那么它可能可以执行大量的连续 IOPS。
如果您尝试从磁带启动操作系统,即使能成功,也需要很长时间。这就是为什么 IOPS 通常比吞吐量更有帮助的原因。
要了解存储设备,您可能想知道它是随机还是连续的 IOPS,以及 IO 大小。从中您可以得出吞吐量。
AWS
请注意,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 如何,您仍然需要合理的吞吐量。
答案2
这是因为顺序吞吐量并不是大多数 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。
答案3
尽管ewwhite 的回答完全正确,我想提供一些更具体的数字,只是为了帮助理解为什么差异很重要。
正如 ewwhite 已经正确指出的那样,大多数非流式应用程序主要执行非连续的磁盘操作,这就是为什么除了理论峰值吞吐量之外 IOPS 也很重要。
当我和同事第一次在我们的开发系统中安装 SSD 来替换我们之前使用的 HDD 时,我们对它们进行了一些性能测量,这些测量真正凸显了为什么这很重要:
SATA HDD 结果:
顺序读取吞吐量:~100 MB/s
非顺序读取吞吐量(2k 块,IIRC):~1 MB/s
PCIe 连接 SSD 结果:
顺序读取吞吐量:~700 MB/s
非顺序读取吞吐量(2k 块,IIRC):~125 MB/s
从示例中可以清楚看到,仅列出每个设备的最大吞吐量将无法准确反映它们的比较情况。在顺序读取大型文件时,SSD 的速度仅为 HDD 的 6-7 倍,但在从磁盘的不同部分读取小块数据时,速度却超过 100 倍。当然,对于 HDD,这种限制主要是由于 HDD 必须将读写头物理移动到所需轨道,然后等待所需数据在读写头下旋转,而 SSD 没有要移动的物理部件。
我们的编译时间改进幅度比简单比较最大吞吐量所得到的要大得多。以前需要 30 多分钟的构建现在大约一分钟即可完成,因为大型构建期间的磁盘 I/O 包括读取和写入大量单独的源文件,这些文件单个文件并不大,而且可能物理上分散在整个磁盘上。
通过提供吞吐量和 IOPS 数字,您可以更好地了解给定工作负载在给定存储设备上的表现。如果您只是传输大量未碎片化的数据,那么您将非常接近最大吞吐量。但是,如果您执行大量未按顺序存储在磁盘上的小型读取和/或写入,您将受到 IOPS 的限制。
答案4
在 IO 卷(或者实际上一般的 IO)上,您可能会遇到两种类型的瓶颈。
实际性能确实是根据移动数据量的组件来衡量的,按可用带宽或类似的单位成本*大小进行缩放,但还存在与请求相关的开销,该开销是恒定的,无论是磁盘、网络还是其他许多东西。
单位成本 * 尺寸 + 间接费用。直线方程。
如果单位成本很大,或者规模很大,那么根据这些数量收费是有意义的,例如移动电话网络,另一方面,有时管理费用要大得多。
您可以自己做一个简单的实验,创建一个包含几个 1GB 文件的目录(或任何实用的文件,足够大,需要几秒钟才能读取/写入),然后创建一个包含一百万个 100 字节文件的文件夹(请注意,这是 0.1GB 的数据),然后看看当您开始尝试在不同的分区/磁盘之间移动所有这些东西时,您的吞吐量会发生什么变化 - 大文件的吞吐量会限制您的性能,而较小文件的性能会受到文件数量的限制。
我认为亚马逊了解这两种收费模式,只是发现其中一种更能代表其基础设施的能力。
IOP 的大小是有限制的,它与商店在一个“周期”内可以传输的数量大致相关,因此大请求最终仍会花费多个 IOPS。
亚马逊自己有一篇关于 IOPS 和成本以及通过优化实现的“节省”的文章
虽然没有全部读完,但如果您对这个领域感兴趣的话,它看起来很有趣。