磁盘IOPS与sar tps之间的关系


13

我试图估计在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有何关系?


2
我相信您会因为磁盘缓存而在TPS值中看到更高的IOPS。
ceejayoz

1
好的,我尝试通过dd用256kB块通过dd提取一个10GB的文件来实际填充缓存,并且〜90秒后,tps降至〜200,所以也许您是对的。但是80和200还是有很大的区别...读写IOPS是否可能不同?是否有任何方法可以从此值中找出所需的IOPS?
pystole 2013年

1
您能描述一下为什么要进行IOPS吗?读和写是一双完全不同的鞋子,它们被扔进了同一个锅里。
Nils 2013年

原因是我需要描述最低硬件要求。我有一台服务器,它通过网络接收数据(我们可以在这里假设恒定的比特率)并将接收到的数据写入磁盘。数据被顺序地写入文件,但是可以并行地有数百个(例如800个)。我已经发现,当客户数量达到一定程度时,我就会开始获得大量的iowait。我可以实现的实际磁盘吞吐量约为25MB / s,这是相当低的,具有较高比特率的客户端较少的可以达到35MB / s,纯顺序的约为130MB / s。所以我想IOPS在这里很重要...
pystole 2013年

Answers:


6

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

优秀的控制者有自己的逻辑,可以进一步减少实际交易数量。

事务可能是SCSI命令“从扇区22开始将2 GB写入crontoller 1目标2 lun 3)。您可以看到,这不能与吞吐量编号直接相关。

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

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

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

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


好的,您是对的,因为涉及很多缓存,重新排序和合并,所以IOPS对于写入没有任何意义。结束...谢谢。
pystole 2013年

5

还请注意,该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

是啊,你说得对。但就我而言,几乎有100%的写入,而读取则几乎没有。
pystole 2013年
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.