磁盘IOPS与sar tps的关系

pys*_*ole 13 linux performance hard-drive iops sar

我正在尝试估计在 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
Run Code Online (Sandbox Code Playgroud)

但是 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
Run Code Online (Sandbox Code Playgroud)

如果这个加载是顺序的(dd 具有各种块大小)或随机访问(ioping),它并不真正介意,值仍然相同。我认为 tps 实际上是 IOPS,我希望它会随着传输的更大块而下降。

那么tps值究竟是什么意思呢?它与 IOPS 有何关系?

Nil*_*ils 6

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

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

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

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

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

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

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


HTF*_*HTF 5

另请注意,TPSvalue 代表读取和写入,您可以使用-xswitch 扩展视图,其中读取和写入分开(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
Run Code Online (Sandbox Code Playgroud)