磁盘IOPS和sar tps之间的关系

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

据维基百科 SATA磁盘应该执行75-100 IOPS。 Ioping实用程序似乎证实了这个随机访问testing:

# ./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有什么关系?

事务是写入RAW磁盘的单个IO命令(取块/写块)(在你的例子dm-0中)。 Linux内核试图将这些命令sorting成更好的序列,或者试图将它们压缩成更高效的命令(比如:一次获得两个块,而不是获得一个块,并在这个之后获得另一个块)。 这些是交给磁盘控制器的交易(tps for sda)。

好的控制器migth拥有自己的逻辑,进一步减less事务的实际数量。

一个事务可能是SCSI命令“从22开始写入2 GB到Crontoller 1 target 2 lun 3”,正如你所看到的,这不能和吞吐量数直接相关。

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

  • 客户端连接:如果networking是千兆位,则永远不会有超过100MB / s的input
  • 磁盘控制器:如果这是一个3 Gb控制器,则永远不会有超过300 MB / s的吞吐量
  • 磁盘:查看制造商的价值,以获得持续的写入性能
  • 文件系统:由于操作系统需要处理数据,所以有一点点的开销 – testing在RAM磁盘上…

我对你的系统的猜测是:获得一个好的硬件RAID控制器,能够做RAID 10或5,至less有6个快速(15K)磁盘。

专业使用使用SAS而不是SATA。

请注意, TPS值表示读取和写入,您可以使用-x开关进行读取和写入分离的扩展视图(r / s =读取IOPS,w / s =写入IOPS):

 Device: rrqm/s wrqm/sr/sw/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