IOPS 与吞吐量

Posted

技术标签:

【中文标题】IOPS 与吞吐量【英文标题】:IOPS versus Throughput 【发布时间】:2013-03-23 11:30:20 【问题描述】:
    大数据存储中 IOPS 和吞吐量之间的主要区别是什么? 文件大小对 IOPS 有影响吗?为什么?

【问题讨论】:

【参考方案1】:

IOPS 衡量每秒读取和写入操作的数量,而吞吐量衡量每秒读取或写入的位数。

虽然它们测量不同的东西,但它们通常相互跟随,因为 IO 操作的大小大致相同。

如果你有大文件,你只需要更多的 IO 操作来读取整个文件。文件大小对 IOPS 没有影响,因为它衡量的是读取或写入的集群数量,而不是文件数量。

如果您有小文件,则会有更多开销,因此虽然 IOPS 和吞吐量看起来不错,但您可能会遇到较低的实际性能。

【讨论】:

谢谢,假设我有一个 100TB 的磁盘,里面有 200KB 的文件。 Chuck 大小为 32KB,每秒传输 4GB 数据。我如何计算这个系统的 IOPs @halilenver:你无法计算它,你测量它。您可以通过将吞吐量除以块大小来计算理论最大值,但实际 IOPS 会更低,因为不同的 IO 操作需要不同的时间。如果您考虑平均寻道时间,您可以有根据地猜测您可以合理地接近理论最大值。 我想更多地了解iops和吞吐量之间的区别。是否有任何优化可以增加 iops 但不能增加吞吐量?或相反亦然?就像减少延迟不一定会增加吞吐量一样? @ErbenMo:降低延迟对 IOPS 和吞吐量的影响大致相同,因为它只是消除了等待时间。例如,如果您更改块大小,这通常会极大地影响 IOPS,但只会轻微影响吞吐量。如果 IOPS 乘以块大小接近吞吐量,那么对于您拥有的文件的大小,您就有一个很好的块大小。如果块大小太小或太大,则会产生大量开销。 不一定是以下情况,例如,如果需要读取/写入文件的小块分散在许多块中,那么您可能需要大量的IOPS,而吞吐量却没有跟随IOPS。考虑到 HDD 上昂贵的寻轨工作,随机但小块的读/写会造成很大的麻烦,并且吞吐量不会跟随 IOPS。【参考方案2】:

IOPS - 读写操作的数量,主要用于 AWS 中用于 Cassandra 等数据库的 OLTP 事务。

吞吐量 - 是每秒传输的位数。即每秒传输的数据。 主要是大数据hadoop、kafka流等高数据传输应用的单元

【讨论】:

【参考方案3】:

磁盘 IOPS 描述了磁盘上每秒输入/输出操作的计数,与块大小无关。

磁盘吞吐量描述了每秒可以传输多少数据,因此块大小在计算应用程序所需的吞吐量时起着巨大的作用

让我们以 3000 IOPS 和 SQL 数据库引擎为例,数据库引擎的块大小称为page size,对于 SQL Server,它等于 8 KB。如果您想计算实际吞吐量,如果定义了 IOPS,您将得到以下公式:

throughput = [IOPS] * [block size] = 3000 * 8 = 24 000 KB/s = 24 MB/s

【讨论】:

因此它们是相关的。请注意一件事:单个 IO 操作是否总是“大”作为一个块大小?【参考方案4】:

这是我在谈论吞吐量和 IOPS 时想到的类比。

把它想象成:

    您有 4 个大小相同的水桶(磁盘块),您想装满或清空水。

    您将使用水壶将水转移到水桶中。现在你的问题是:

在给定的时间(每秒),你可以倒(写)或取出(读)多少壶水?这是 IOPS。

在给定时间(每秒),水壶可以连续进出水桶的水量(bit、kb、mb 等)是多少?这是吞吐量。

此外,您倒水和/或取水的过程存在延迟。这是延迟。

在谈论 IOPS 和吞吐量时需要考虑 3 件事:

大小(文件大小/块大小) 模式(随机/顺序) 混合(读/写)百分比

【讨论】:

举个例子,如果你需要高吞吐量,你总是需要更高的IOPS?或者在队列之间是否有任何其他机制 @kuhajeyan 我认为如果块大小更大(在本例中为大罐子),更少的 IOPS 也可以从高吞吐量中受益。

以上是关于IOPS 与吞吐量的主要内容,如果未能解决你的问题,请参考以下文章

磁盘IOPS计算与测量

硬盘IOPS与读写速度

[yj]磁盘的iops和吞吐量(Throught)指标

不同的是在分析 blktrace 时队列深度、磁盘偏移量、iops、吞吐量的数据

MySQL性能调优与诊断

块存储性能