IOPS为什么重要?


32

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

我不明白的是为什么许多存储服务仅显示其提供的IOPS。我真的看不到希望了解IOPS而不是吞吐量的任何情况。

IOPS为什么重要?为什么AWS主要在IOPS中显示其存储规定?IOPS在哪些方面比吞吐量(MB / s)更重要?


编辑:

有些人正在研究这个问题,就像我问什么是随机访问以及它如何影响性能或HDD和SSD如何工作...尽管我认为此信息对于刚接触存储行为的人们很有用,但仍在关注很多问题。为此,这不是问题的目的,问题是关于“当我看到IOPS编号时,我看不到吞吐量(MB / s)编号时会得到什么新信息?”



3
如果要移动大数据,则需要考虑吞吐量。如果您需要读/写大量小数据,则需要更多的IOPS。eg1如果有一个操作可以从设备读取MB数据,则只需执行1个操作即可获得高吞吐量。eg2如果您需要读取数十个文件属性,则不必每次都查看大量数据,而需要执行大量操作来获取少量数据。吞吐量会很低,但是您需要进行大量操作。
TafT

Answers:


32

通量

在执行诸如复制文件之类的操作时,吞吐量非常有用。当您执行几乎所有其他操作时,它在磁盘上的随机读写会限制您的工作。

IOPS

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

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

情境

请考虑以下情形:

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

LTO胶带

考虑一下磁带备份系统。LTO6可以达到400MB / sec,但是(我在这里猜)可能甚至不能做一个随机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调配可获得30IOPS,因此,要获得10,000 IOPS,则需要333.33GB卷。我不记得io1卷是否有类似的限制(自从我参加了测试这类事情的联考以来已经有一段时间了),但是我怀疑它们确实如此,如果是的话,则大概是每GB 60IOPS。

结论

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


我知道IOPS会衡量随机访问性能,但实际上并没有显示出您执行操作的速度...您可能正在执行10000 IOPS,但这可能会变慢或变快,唯一的方法就是知道有多少MB / s操作耗时。
mFeinstein '17

IOPS通常指定数据有效负载大小。AWS说16KiB。因此,以16KiB / s的速度10,000 IOPS可提供160MB /秒的速度。
蒂姆(Tim)

2
但是,在16KB时10000 IOPS不会在8KB时转换为20000 IOPS(也许〜11000)。这意味着需要了解IOPS和吞吐量才能评估驱动器/工作负载。
boot4life

4
只是为了学究,它仍然是1 IOPS,而不是1 IOP。s不是复数
Matthew Steeples

1
我想不出其他任何人。高IOPS的大多数事物都具有相当高的吞吐量,但是在大多数情况下还是有用的,因为IOPS而非吞吐量。另一个示例可能是关系数据库,尽管它不是软件存储设备。我不确定您还想从这个问题中得到什么,我认为这个概念已经彻底向您解释了。寻道时间或等待时间较长的任何事物都可能具有较低的IOPS,但是在某些情况下,吞吐量可以解耦并且较高。
蒂姆(Tim)

57

这是因为顺序吞吐量不是大多数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。


您能否举个例子,IOPS可以让我了解系统性能,而MB / s将无用?
mFeinstein's

@mFeinstein参见上面的色情示例。
ewwhite

33
色情示例+1大声笑
mFeinstein's

2
同样,操作系统可能会进行一些小的随机访问。Seq吞吐量无济于事。这就是至少在PC上在SSD上运行OS的原因。
sudo

3
我经常看到完全利用的磁盘以每秒2MB的速度运行。那是因为它是100%随机IO。有时,通过在磁盘上顺序地放置数据(例如,删除碎片,在数据库中建立索引),可能会获得令人难以置信的性能提升。
boot4life

6

尽管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倍,但是从磁盘的不同部分读取小块数据时,其速度却是HDD的100倍以上。当然,对于HDD,此限制主要是由于以下事实:HDD必须将读/写磁头物理地移动到所需的轨道,然后等待所需的数据在磁头下旋转,而SSD却没有物理部分要移动。

与简单比较最大吞吐量相比,我们的编译时间大大改善。以前耗时30分钟的构建现在大约需要一分钟才能完成,因为大型构建过程中的磁盘I / O包含读写大量单独的源文件,这些文件并不是很大,可能会分散在整个磁盘上。

通过提供吞吐量和IOPS数量,您可以更好地了解给定工作负载在给定存储设备上的性能。如果您只是在传输大量不零碎的数据,那么您将接近最大吞吐量。但是,如果您要进行大量小的读取和/或写入,而这些读取和/或写入没有顺序存储在磁盘上,则将受到IOPS的限制。


您是否还测量了IOPS?
mFeinstein's

3

要执行IO操作,驱动器必须进行一系列操作。对于机械硬盘,他们需要这样做。

  1. 寻找正确的轨道并选择正确的头部。
  2. 等待盘子旋转到正确的位置。
  3. 实际传输数据。

3花费的时间取决于数据块的大小,但是1和2花费的时间与请求的大小无关。

标题吞吐量和IOP数据代表极端情况。标题吞吐率数字表示每次操作都涉及大量数据的情况,因此驱动器大部分时间都在实际移动数据上。

标题IOP表示数据块很小的情况,因此大部分时间都花在寻找磁头和等待盘片旋转上。

对于许多工作负载,块足够小,以至于要传输的块数比块的大小重要得多。


2

您可以在IO卷(实际上通常是IO)上遇到两种类型的瓶颈。

实际上,实际性能是根据所移动的数据量(包括可用带宽或类似带宽,单位成本*大小)进行缩放来衡量的,以包括一个组件,但是与请求相关的开销也是恒定的,无论是磁盘,网络还是磁盘。许多其他事情。

单位成本*大小+开销。直线方程。

如果单位成本很大或大小很大,则根据这些数量(例如移动电话网络)进行充电是有意义的,另一方面,有时间接费用则更为重要。

您可以自己做一个简单的实验,创建一个包含几个1GB文件的目录(或者实际的东西,它足够大,需要几秒钟的时间来读取/写入它),然后创建一个包含100万个100字节文件的文件夹(请注意,那是0.1GB的数据),然后查看当您开始尝试在不同的分区/磁盘之间移动所有这些内容时,吞吐量发生了什么变化-您将受到大型文件吞吐量的限制,性能的降低较小文件的文件数。

我想亚马逊会意识到这两种收费模式,只是发现一个更好地代表其基础设施功能的设备。

IOP的大小有一个限制,该限制与商店无论如何都可以在一个“周期”中传输的数量有很大关系,因此,大的请求最终仍然会花费您多个IOPS。

亚马逊自己在这方面有一篇很好的文章,介绍了IOPS和成本,它们通过优化传递了“节省”

I / O特性和监控

如果您对这方面感到好奇,请不要全部阅读,但看起来很有趣。


2

回答你的问题

“看到IOPS编号后,我看不到吞吐量(MB / s)编号会得到什么新信息?”

直接来说,每秒可以存储多少个指定队列深度和文件大小的IO操作。您可以使用以下公式在给定条件下计算吞吐量:

IOPS *文件大小=吞吐量

根据文件大小和队列深度,存储测试可能会生成不同数量的IOPS。在队列深度= 1或2时,控制器将不会利用缓存,而在队列深度为32、256、512时,其数目会增加几次,并且变化不大。在文件大小为128KB的情况下,IOPS数量可能会比4KB的文件少,但吞吐量会更高。

评估存储性能的最佳方法是在几种不同的块大小和队列深度下进行IOPS和吞吐量测试。


我相信您可能会使IOPS与吞吐量有些混淆。吞吐量不是连续访问的代名词,而是存储在给定时间能够处理的总MB / s。...所以当您说HDD和SSD具有相同的吞吐量,用于连续访问...由于也存在用于随机访问的吞吐量...由于寻道时间的原因,一般来说,HDD的吞吐量要少得多。
mFeinstein's

因此,您应该在回答中包括在开始时指的是连续访问,而在结束时指的是随机访问,因为IOPS也不是随机访问的同义词。测量
mFeinstein's

@mFeinstein我已经编辑了答案,看看。
尤金(Eugene)

1

一般来说,IOPS比吞吐量更难获得。如果您有很多IOPS,则大多数时候您将具有足够的吞吐量。

对于经典硬盘驱动器,轴数是您的限制因素,因为必须在每个驱动器上物理移动磁头:而且速度非常慢。SSD具有更好的IOPS容量。

如果您只有一个用户,将一个大文件复制到网络,则可能只有十几次尝试来获取数据,其余的将仅从磁盘流式传输。

但是,如果您要访问数据库或有大量并发用户,那么您将不得不同时访问存储的不同部分,并且IOPS急剧上升。

在关系数据库上并行更新10行可能最终会生成数百个IO:读取索引,读取数据,附加日志文件,更新索引和数据。大多数操作系统和数据库都非常努力地通过在可能的情况下缓存和延迟/分组IO来限制IO的数量。


1

我也将回答我自己的问题,因为我认为大多数答案都与主题无关,而且答案可能会简单得多:

如果仅查看存储设备的吞吐量,则可能会错过正在发生的事情...如果吞吐量(低MB / s)低,则设备速度可能很慢,或者HDD或某些其他设备中的随机访问量很大不能很好地处理随机访问。

通过查看IOPS并了解每个I / O操作的块大小,您可以知道存储设备可以处理多少次访问,以及这些IOPS的吞吐量是多少(块大小* IOPS)。

因此,查看高IOPS,您可以得出结论,存储设备正在处理大量随机访问,即使这带来了低吞吐量。...或者您正在寻找具有相同低吞吐量的低IOPS,这意味着您的设备只是闲。

因此,通过查看IOPS,我们可以了解吞吐量的实际含义,它们彼此互补。


IOPS =每秒输入/输出,不是整数,尾随S不应省略。:)
尤金(Eugene)

1
这与复数无关,我看到有些人将IOP称为“ I / O OPeration”的缩写,听起来好像...但是,是的,这可能会导致混乱,所以我将其替换,谢谢
mFeinstein
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.