硬盘基础参数

IOPS:每秒的IO读写次数。一般来说,一块15K转速的SATA盘一次IO平均大约5.5ms,包括2ms的寻道时间和3.5毫秒的磁头读写时间,这样IOPS大概180左右

Bandwith Per Second:每秒的读/写的数据量

RPM:每秒转速,当然越大说明硬盘越快咯

LUN,HBA:这些都是SAN的概念,普通硬盘可以无视

TCQ:Tagged Command Queuing,这种技术让OS可以一次向硬盘发出多个读写请求,而不用去管这些请求如何在内核queue和merge。我们都知道,内核是通过类似电梯算法来处理IO请求的,VFS把IO Request发给Block Device,块设备接着对请求做一些merge优化,然后直接物理读写硬盘。

NCQ:SATA硬盘中TCQ的升级版。NCQ可以对IO请求根据硬盘的位置进行排序,尽可能优化磁头的传动次数和距离。需要硬件支持,具体的我就不提了http://en.wikipedia.org/wiki/Native_Command_Queuing

IO Queue Depth:IO队列深度,IO队列深度是内核里的IO队列大小,和IO的吞吐和latency都有关系。对于上述支持NCQ的SATA硬盘而言,queue越深,一次性丢给硬盘的请求越多,可以充分利用硬盘的队列特性和寻址优化,提高硬盘的throughput和IOPS。但是队列越深,会造成IO latency越高,因为单个IO请求从进入队列到被物理读写的时间变长了。一般情况下,Iatency = depth/IOPS,随着depth不断变长,IOPS是有个极限的(为什么呢?想像一下,我们之前的结论都是基于硬盘一次读写一个请求和一次读写多个请求所花去的时间是差不多的,这个假设随着depth变大,不同的IO请求在硬盘上的分布越来越分散,即使有NCQ这种优化,也不可能不带来更多的损耗,所以IOPS必定会有一个极限值),或者说IOPS的增长会越来越缓慢,这时latency就会暴涨。从网上一些实验结果来看,latency一开始时变化不大,一旦过了queue depth的临界值,IOPS的增长明显力不从心,这是latency将会以指数级别被放大。



你可能感兴趣的:(算法,优化,IO,OS,command,merge)