深入理解IOPS(本章主要讲基于传统机械磁盘-HDDs的存储系统)

来源:互联网 发布:统计汇总报表软件 编辑:程序博客网 时间:2024/05/21 06:28

先简单描述一下基础概念,内容翻译自维基百科。http://en.wikipedia.org/wiki/IOPS

IOPS (Input/Output Operations Per Second),即每秒的输入输出操作数量,是衡量机械磁盘HDD、固态硬盘SSD、存储区域网络SAN性能的一个通用性能度量方式。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。硬盘厂商宣传其产品时,主要提到3个参数,分别是平均寻址时间、盘片旋转速度以及最大传送速度。

--------------------------------------------------------------------

  • 单块磁盘中的IOPS

机械硬盘内部原理

   磁盘速率

一块机械磁盘包含一些驱动电子元件,一个旋转盘片和机械臂上众多的读写磁头。参见下图:

Disk Platter(盘片)

   盘片本身是一个硬介质,可以是铝、玻璃或者陶瓷构成,在其表面会有一层磁表层,用于存储代表数据的磁位。盘片格式化为不同圆柱形的磁道,每一个磁道又分为固定512字节的扇区(或者4K字节)。因为不同厂商对单盘磁信息的记录密度的定义不同,所以针对客户需求的存储容量,硬盘制造商就会在单一磁盘中放置多块盘片来满足。

Drive Head (驱动器磁头)

磁头主要是从磁盘的磁信息区域读取或者写入信息位。通常磁盘的每一个面有两个磁头。

Actuator Arm(驱动器臂)

驱动器臂主要是取保磁盘定位到正确的磁道上空。

Average Latency(平均时延)

    代表盘片旋转半周的时间。国内文章称旋转延时,和寻址一样,当磁头定位到磁道之后有可能正好在要读写扇区之上,这时候是不需要额外额延时就可以立刻读写到数据,但是最坏的情况确实要磁盘旋转整整一圈之后磁头才能读取到数据,所以这里我们也考虑的是平均旋转延时,对于10krpm的磁盘就是(60s/15k)*(1/2) = 2ms。

Average Seek Time(平均寻址时间)

代表驱动器臂上的磁头横跨磁盘半径一半的时间。考虑到被读写的数据可能在磁盘的任意一个磁道,既有可能在磁盘的最内圈(寻址时间最短),也可能在磁盘的最外圈(寻址时间最长),所以在计算中我们只考虑平均寻址时间,也就是磁盘参数中标明的那个平均寻址时间,这里就采用当前最多的10krmp硬盘的5ms。

The Response Time (平均响应时间)

平均时延和平均寻址时间的总和。

Disk Transfer Rates (磁盘传输速率)

大多数磁盘驱动制造商在它们的产品规格中一般会提到响应时间和尖峰传输速率。这个尖峰传输速率就是全顺序读场景下的IOPS。国内文章描述:磁盘参数提供我们的最大的传输速度,当然要达到这种速度是很有难度的,但是这个速度却是磁盘纯读写磁盘的速度,因此只要给定了单次 IO的大小,我们就知道磁盘需要花费多少时间在数据传送上,这个时间就是IO Chunk Size / Max Transfer Rate。

盘片数据密度

除了上面提到的盘片的旋转速率(通常以RPM标示),我们还需要关注盘片的数据密度,看下图:

从上图我们得知每一英寸磁道的存储数据位是1490000.因为这个是2.5英寸磁盘,所以,我们可以计算出磁盘最大磁道的长度为:

      lmax=∏ * D ≈ 3.14 × 2.5 = 7.87 英寸

     DataPerTrack= 7.87 ×1490000 bits =11734000 bits=11734000/(8 × 1024)≈ 1432 KB

      RPM =7200 ,即 RPS =120

故,MB/s = RPS × DataPerTrack = 120*1432 KB = 167 MB

考虑磁盘存储的信息位大约90%左右是实际的数据,所以,167 × 90% = 150.3 MB 。这个数值与希捷规格书描述值相近。

按照相同计算方法,我们可以得到最内道的MB/s 差不多为60MB/s。我们可以看出,最内道的传输速率为最外道的2/5。如果这是一块3.5英寸的磁盘,那么这个数值将会是2/7。

Zone Bit Recording

通常来讲,外层磁道容纳的数据要比内层磁道要多。这个似乎是一个再简单不多的“常识”。但这并不是完全正确。在磁盘发展的早期,磁盘控制器的技术约束很大。这造成了每一个磁道被固定一定数量的扇区可以用于数据存储,也就是说内外磁道记录的数据量相同。后来伴随磁盘控制器的发展,制造商逐渐增加盘片表层的复杂度来增加磁道的可用扇区数。一种理想的方案就是尽可能利用磁道的长度,尽可能全部用于数据记录的扇区。但是这带来一个问题:磁盘控制器需要维护一张庞大的检索表来记录不同磁盘上扇区信息,以便磁头可以精确定位到指定的扇区。

后来,一个折中的方案就是ZONE Bit Recording。盘片被划分一系列ZONE。每一个ZONE包含指定数量的磁道。这既减轻了检索的复杂性,同时又显著增加了有效数据存储容量。见下图:

IOPS 的计算方式

首先,我们来看一下希捷磁盘的IOPS数据图表:

以5400 RPM为例:

    IOPSMax=(1/(5.5+7))×1000=80

    IOPSMin=(1/(5.5+14.4))×1000=50

IOPS 与Block Size 关系

随着Block Size 增大,IOPS 降低,并且写操作下降程度要大于读操作。

IOPS 与 Partial Stroking

从上面章节我们可以看出,如果要增大IOPS,通过减小磁盘的盘片的物理英寸可以办到。那么如何实现呢?这就是磁盘分区,这强制驱动器臂仅在小范围内移动,缩短了寻址时间。当然,这牺牲了未分区的剩余磁盘空间。见下图:

我们通过IOmeter,可以看到更加直观的数据图:

  • 磁盘阵列中的IOPS 

磁盘阵列,理所当然,磁盘数不唯一,那么如何有效管理这些分散的磁盘呢,一种RAID 概念被引入进来,在确保容错性的同时,也可以增加整个系统的IOPS。

RAID 概念被引入存储之后,如何要统计系统的IOPS,这里就需要再引入写惩罚概念(Write Penalty)

写惩罚

在RAID 机制的存储系统中,与校验相关信息写入相关的所有IO操作就是写惩罚。

下面是几种常见RAID的写惩罚:

RAID 0 :无校验,但是为了统一,表示为1

RAID 1 :写操作场景下,存在两个写同时写入镜像磁盘中,故为2

RAID 5 :写操作场景下,首先会读取待写入原分条数据Data_OLD,与新写入数据Data_NEW做XOR操作等到数值Data_TEMP1,再读取原校验信息Parity_OLD,它与前面XOR后的数值Data_TEMP1进行XOR操作得到Data_TEMP2,最后将新数据Data_NEW写入,再将Data_TEMP2写入校验盘。故为4

RAID 6 :有两个校验位存在,故需要两次校验位读取和两次校验位写入。故,为6.

RAID 10:与RAID 1 一样存在镜像盘,存在两次写操作,故为2.

IOPS 计算方式

第一种算法(该算法错误,但是传播比较广,负面影响较大):

来源于:http://theithollow.com/2012/03/understanding-raid-penalty/

IOPStotal=IOPSsingle × n

IOPSsingle:单磁盘IOPS数值

n:磁盘数

IOPSeffective=(IOPStotal × %_Write / RAID Penalty ) + (IOPStotal × %_Read )

%_Write:写IO比例

%_Read:读IO比例

RAID Penalty :RAID 级别写惩罚数值

示例: 10000 RPM 磁盘(假设IOPSsingle为125),5盘RAID 5 ,50%写&50%读

IOPStotal= 125 ×5 =725

IOPSeffective=(725 × 50%/4)+(725 ×50%)= 453.125

国内文章如:http://www.enet.com.cn/article/2013/0827/A20130827307148.shtml

第二种算法:

IOPSeffective= (n × IOPSsingle )/ (%_Read + %_Write × RAID Penalty )

示例: 10000 RPM 磁盘(假设IOPSsingle为125),5盘RAID 5 ,50%写&50%读

IOPStotal= 125 ×5 =725

IOPSeffective=(725 )/(4 ×50% + 50%)= 290

第三种算法:

IOPSeffective= (n × IOPSsingle )/ (1 + %_Write × (RAID Penalty -1) )

示例: 10000 RPM 磁盘(假设IOPSsingle为125),5盘RAID 5 ,50%写&50%读

IOPStotal= 125 ×5 =725

IOPSeffective=(725 )/(1 + 50% * (4-1))= 290

国内文章(华为存储论坛)如:http://www.huawei.com/ecommunity/bbs/10164767.html

总结:第一种算法是错误的,其余两种是正确的!

----------------------------------

IOPS 有效比

从上面的公式,我们可以看出,IOPS 有效比,直接影响存储阵列的设计,以及决定RAID 选择。

p= IOPSeffective/(n × IOPSsingle )  = 1/(%_Read + %_Write × RAID Penalty )

p :IOPS 有效比

上图我们可以看出:

1、VDI  IO读写类型为20% Write;Exchange (SQL Server)则大约是33%,symantec ITMS 几乎100% Write。

2、考虑容错性的情况下,RAID 1或者RAID 10的IOPS 有效比最高。但是,选择它,意味着需要“浪费”一半空间。

3、随着写操作比例增加,所有RAID 级别的IOPS 有效比衰减程度趋于平缓。

磁盘配置数

从上面的公式,我们还可以计算出磁盘配置数:

n = ( (%_Read + %_Write × RAID Penalty )× IOPSeffective / IOPSsingle

示例:10000 RPM SAS 磁盘,~125 IOPS ,如果是EXchange 业务应用程序需要500 Write IOPS。那么

RAID 5 级别下,n = (67% + 33 % ×4)×  500 / 125 ≈ 7.96 ,那么合理的nmin 为 8 块磁盘。

参考:

http://www.symantec.com/connect/articles/getting-hang-iops-v13

http://theithollow.com/2012/03/understanding-raid-penalty/

http://www.techrepublic.com/blog/the-enterprise-cloud/calculate-iops-in-a-storage-array/

http://www.cmdln.org/2010/04/22/analyzing-io-performance-in-linux/

http://stor.zol.com.cn/222/2223038_all.html#p2223042

http://www.storageonline.com.cn/storage/storage-fundamental/about-iops/

http://www.enet.com.cn/article/2013/0827/A20130827307148.shtml

http://blog.csdn.net/liuaigui/article/details/6168186

http://storage.chinaunix.net/a2011/0323/1169/000001169755_2.shtml

0 0
原创粉丝点击