传输速度(Transfer Rate)/吞吐率(Throughput)
  现在我们要说的传输速度(另一个常见的说法是吞吐率)不是磁盘上所表明的最大传输速度或者说理想传输速度,而是磁盘在实际使用的时候从磁盘系统总线上流过的数据量。有了IOPS数据之后我们是很容易就能计算出对应的传输速度来的
   Transfer Rate = IOPS * IO Chunk Size
  还是那上面的第一组IOPS的数据我们可以得出相应的传输速度如下
  4K: 140 * 4K = 560K / 40M = 1.36%
  8K: 139 * 8K = 1112K / 40M = 2.71%
  16K: 135 * 16K = 2160K / 40M = 5.27%
  32K: 116 * 32K = 3712K / 40M = 9.06%
  可以看出实际上的传输速度是很小的,对总线的利用率也是非常的小。
  这里一定要明确一个概念,那就是尽管上面我们使用IOPS来计算传输速度,但是实际上传输速度和IOPS是没有直接关系,在没有缓存的情况下它们共同的决定因素都是对磁盘系统的访问方式以及单个IO的大小。对磁盘进行随机访问时候我们可以利用IOPS来衡量一个磁盘系统的性能,此时的传输速度不会太大;但是当对磁盘进行连续访问时,此时的IOPS已经没有了参考的价值,这个时候限制实际传输速度却是磁盘的最大传输速度。因此在实际的应用当中,只会用IOPS来衡量小IO的随机读写的性能,而当要衡量大IO连续读写的性能的时候就要采用传输速度而不能是IOPS了。
  IO响应时间(IO Response Time)
  最后来关注一下能直接描述IO性能的IO响应时间。IO响应时间也被称为IO延时(IO Latency),IO响应时间就是从 操作系统内核发出的一个读或者写的IO命令到 操作系统内核接收到IO回应的时间,注意不要和单个IO时间混淆了,单个IO时间仅仅指的是IO操作在磁盘内部处理的时间,而IO响应时间还要包括IO操作在IO等待队列中所花费的等待时间。
  计算IO操作在等待队列里面消耗的时间有一个衍生于利托氏定理(Little’s Law)的排队模型M/M/1模型可以遵循,由于排队模型算法比较复杂,到现在还没有搞太明白(如果有谁对M/M/1模型比较精通的话欢迎给予指导),这里就罗列一下最后的结果,还是那上面计算的IOPS数据来说:
  8K IO Chunk Size (135 IOPS, 7.2 ms)
  135 => 240.0 ms
  105 => 29.5 ms
  75 => 15.7 ms
  45 => 10.6 ms
  64K IO Chunk Size(116 IOPS, 8.6 ms)
  135 => 没响应了……
  105 => 88.6 ms
  75 => 24.6 ms
  45 => 14.6 ms
  从上面的数据可以看出,随着系统实际IOPS越接近理论的最大值,IO的响应时间会成非线性的增长,越是接近最大值,响应时间就变得越大,而且会比预期超出很多。一般来说在实际的应用中有一个70%的指导值,也就是说在IO读写的队列中,当队列大小小于最大IOPS的70%的时候,IO的响应时间增加会很小,相对来说让人比较能接受的,一旦超过70%,响应时间就会戏剧性的暴增,所以当一个系统的IO压力超出最大可承受压力的70%的时候就是必须要考虑调整或升级了。
  另外补充说一下这个70%的指导值也适用于 CPU响应时间,这也是在实践中证明过的,一旦 CPU超过70%,系统将会变得受不了的慢。很有意思的东西。