我正在尝试估计在32位CentOS 6.2上运行的应用程序的IOPS要求.我开始在带有SATA磁盘的机器上进行一些测量,我对由IO测量的IOPS和tps之间的差异感到困惑.
根据wikipedia SATA磁盘应该执行75-100 IOPS. ioping utility似乎证实这是随机访问测试:
# ./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-kernel尝试将这些命令排序为更好的序列,或者尝试将它们压缩成更有效的命令(例如:一次获取两个块而不是获取一个块,并在此之后立即获得另一个块).这些是发送到磁盘控制器的事务(tps为sps).
良好的控制器迁移具有自己的逻辑,可进一步减少实际的事务数.
事务可能是SCSI命令“从扇区22开始向crontoller 1目标2 lun 3写入2 GB.”正如您所看到的,这不能与吞吐量数量直接相关.
你所追求的是持续的写入率.这里有几个限制因素:
>客户端连接:如果网络是千兆位,您将永远不会有超过100 MB / s的输入
> disk-controller:如果这是一个3 Gb控制器,你的吞吐量永远不会超过300 MB / s
> disk:查看制造商的持续写入性能值
>文件系统:由于操作系统需要处理数据,因此有一点开销 – 在RAM磁盘中测试…
我对你的系统的猜测是:获得一个好的硬件raid控制器,能够执行raid 10或5并获得至少6个快速(15k)磁盘.
对于专业用途,请使用SAS而不是SATA.