磁盘 IOPS 与 sar tps 之间的关系

磁盘 IOPS 与 sar tps 之间的关系

我正在尝试估算在 32 位 CentOS 6.2 上运行的应用程序的 IOPS 要求。我开始在装有 SATA 磁盘的机器上进行一些测量,但对 sar 测量的 IOPS 和 tps 之间的差异感到困惑。

根据维基百科SATA 磁盘应执行 75-100 IOPS。ioping 实用程序对于随机存取测试似乎证实了这一点:

# ./ioping -R /dev/sda
--- /dev/sda (device 931.0 Gb) ioping statistics ---
279 requests completed in 3.0 s, 92 iops, 371.3 kb/s
min/avg/max/mdev = 2.7 ms / 10.8 ms / 130.8 ms / 7.9 ms

但是 sar 产生的 tps 值要高得多 (/dev/sda):

# iostat 1
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
       0.17    0.00    2.02   14.86    0.00   82.96

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda             559.00         0.00    142600.00          0     142600
dm-0          18433.00         0.00    147464.00          0     147464
dm-1              0.00         0.00         0.00          0          0
dm-2              0.00         0.00         0.00          0          0

它并不介意此加载是顺序加载(dd 具有各种块大小)还是随机访问(ioping),值仍然相同。我认为 tps 实际上是 IOPS,并且我预计它会随着传输的块数增加而下降。

那么 tps 值到底是什么意思?它和 IOPS 有什么关系?

答案1

事务是写入 RAW 磁盘(在您的示例中为 dm-0)的单个 IO 命令(获取块/写入块)。Linux 内核会尝试将这些命令排序为更好的顺序,或尝试将它们压缩为更高效的命令(例如:一次获取两个块,而不是获取一个块并在获取一个块之后立即获取另一个块)。这些是发送到磁盘控制器(sda 的 tps)的事务。

好的控制器可能有自己的逻辑,可以进一步减少实际交易数量。

事务可能是 SCSI 命令“从扇区 22 开始将 2 GB 写入 crontoller 1 target 2 lun 3”。如您所见,这不能与吞吐量数字直接关联。

您追求的是持续的写入率。这里有几个限制因素:

  • 客户端连接:如果网络是千兆的,输入永远不会超过 100 MB/s
  • 磁盘控制器:如果这是一个 3 Gb 控制器,则吞吐量永远不会超过 300 MB/s
  • 磁盘:查找制造商的持续写入性能值
  • 文件系统:由于操作系统需要处理数据,因此会产生一些开销 - 在 RAM 磁盘中测试...

我对您的系统的猜测是:获得一个能够执行 raid 10 或 5 的良好硬件 raid 控制器并获得至少 6 个快速(15k)磁盘。

对于专业用途,请使用 SAS 而不是 SATA。

答案2

还请注意,TPS值代表读取和写入,您可以使用-x开关来扩展视图,其中读取和写入是分开的(r/s = 读取 IOPS,w/s = 写入 IOPS):

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
vda               0.07    24.65    0.30   18.95    30.65   330.22    18.74     0.07    3.61   0.98   1.89

答案3

iostat/sysstat 是一个非常强大的工具。通常最好查阅相关的手册页,以免您最终等待 6 年零 10 个月才得到真正正确的答案。您的问题的答案取自手册页:

iostat 命令生成的第一个报告提供了自系统启动以来的统计信息。每个后续报告都涵盖了自上一个报告以来的时间。

如果您运行类似 的程序iostat 1 2,第二个报告块将包含一秒钟的 IO 统计数据,而第一个报告块将包含一组累积的先前数据。在 cron 中运行 sar 通常会有所帮助,这样您就可以以轻量级但一致的方式收集有意义的统计数据。

在您的示例中,您看到的是累积的先前统计数据,而不是某些压力测试期间捕获的 IOPS。

相关内容