谈谈IOPS

前两天去一个客户那里,在欢乐愉快的交流气氛中谈到了CDP技术关于IO捕获,增加时间戳的技术细节。今天想详细谈谈IOPS的问题。

IOPS,IO per seconds。每秒的IO个数。这个性能指标通常是硬盘的指标,咱们在存储上经常看到这个指标。百度下朋友们,SAS盘的IOPS指标是多少,200吧。SSD硬盘呢2500吧。那动不动上万,上十万,上百万的存储IOPS是个什么鬼?它们能超越硬盘的性能?答案是否定的,且听小弟慢慢道来。

IO可以分为读/写IO、大/小块IO、连续/随机IO、顺序/并发IO、稳定/突发IO、持续/间断IO和实/虚IO。下面来分别介绍这几种IO。

(1)读/写IO:这个就不用多说了,读IO就是发指令从磁盘读取某段序号连续的扇区的内容。指令一般是通知磁盘开始扇区位置,然后给出需要从这个初始扇区往后读取的连续扇区的个数,同时给出动作是读还是写。磁盘收到这条指令就会按照指令的要求读或者写数据。控制器发出这种指令加数据并得到对方回执的过程就是一次IO读或IO写。注意,一个IO所要提取的扇区段一定是连续的,如果想提取或写入两段不连续的扇区段,只能将它们放入两个IO中分别执行,这也就是为何随机IO对设备的IOPS指标要求较高的原因。

(2)大/小块IO:指控制器的指令中给出的连续读取扇区数目的多少。如果数目很大,如128、64等,就应该算是大块IO;如果很小,比如1、4、8等,就应该算是小块IO。大块和小块之间没有明确的界限。

(3)连续/随机IO:连续和随机是指本次IO给出的初始扇区地址和上一次IO的结束扇区地址是不是完全连续的或者相隔不多的。如果是,则本次IO应该算是一个连续IO;如果相差太大,则算一次随机IO。连续IO因为本次初始扇区和上次结束扇区相隔很近,则磁头几乎不用换道或换道时间极短。如果相差太大,则磁头需要很长的换到时间。如果随机IO很多,会导致磁头不停换道,效率大大降低。

(4)顺序/并发IO:意思是,磁盘控制器如果可以同时对一个RAID系统中的多块磁盘同时发送IO指令(当然这里的同时是宏观的概念,如果所有磁盘都在一个总线或者环路上,则这里的同时就是向一块磁盘发送一条指令后不必等待它回应,接着向另一块磁盘发送IO指令),并且这些最底层的IO数据包含了文件系统级下发的多个IO的数据,则为并发IO。如果这些直接发向磁盘的IO只包含了文件系统下发的一个IO的数据,则此时为顺序IO,即控制器缓存中的文件系统下发的IO队列,只能一个一个来。并发IO模式在特定的条件下可以很大程度地提高效率和速度。

(5)持续/间断IO:持续不断地发送或者接受IO请求数据流,这种情况为持续IO;IO数据流时断时续则为间断IO。

(6)稳定/突发IO:某存储设备或者某程序在一段时间内接收或者发送的IOPS以及Throughput(吞吐量)保持相对稳定和恒定,则称为稳定IO;如果单位时间的IOPS或者Throughput突然猛增,则为突然IO。

(7)实/虚IO:某IO请求中包含对应实际数据地址的,比如磁盘LBA地址,或者文件偏移量,请求读或者写实际文件或者磁盘扇区数据的,称为实IO;而应用程序针对文件元数据操作的(在文件系统层以上没有文件主体数据操作),或者针对磁盘发送的非实体数据IO请求,比如Report LUN、SCSI Sense Request等控制性IO,称为虚IO。

(8) IO并发几率:单盘,IO并发几率为0,因为一块磁盘同时只可以进行一次IO。对于RAID 0,在2块盘情况下,条带深度比较大的时候(条带太小不能并发IO),并发两个IO的几率为1/2。其他情况请自行运算。

(9) IOPS:
完成一次IO所用的时间=寻道时间+旋转延迟时间+数据传输时间
IOPS=IO并发系数/(寻道时间+旋转延迟时间+数据传输时间)
由于寻道时间相对于传输时间要大几个数量级,所以影响IOPS的关键因素就是降低寻道时间。在连续IO的情况下,寻道时间很短,仅在换磁道时候需要寻道。在这个前提下,传输时间越少,IOPS就越高。

(10)每秒IO吞吐量:显然,每秒IO吞吐量=IOPSx平均IO SIZE。IO SIZE越大,IOPS越高,每秒IO吞吐量就越高。设磁头每秒读写数据速度为V,V为定值。则IOPS=IO并发系数/(寻道时间+旋转延迟时间+IO SIZE/V)。代入得每秒IO吞吐量=IO并发系数xIO SIZEV/(V寻道时间+V*旋转延迟时间+IO SIZE)。可以看出影响没秒IO吞吐量的最大因数就是IO SIZE和寻道时间以及旋转延迟时间。IO SIZE越大,寻道时间越小,吞吐量越高。相比能显著影响IOPS的因素只有一个,就是寻道时间。

OK,硬盘的寻道时间能提高不?显然不能最快不过3ms~5ms,单个硬盘最多也不过200IOPS,为啥存储能有几十万的IOPS呢?
首先,测试数据即实验环境,所有数据状态理想环境下,性能最高值。

其次,做RAID。既然单块盘的寻道时间没法突破,那就多块盘一起并发。那问题来了,RAID几并发最快?实验环境测试IO,用屁股想都晓得是RAID0 最快啦。以后有空再絮叨絮叨RAID技术。简单来说,N块盘做RAID,测试环境中我的IOPS简单粗暴就是单块盘的N倍。

再次,数据是经过处理,即实验环境中的数据要用连续的数据。为啥呢?因为寻道时间啊,连续的数据寻道时间最短呀。

最后,全闪硬盘,精简线路,高性能RAID卡。最后整个输出传输的吞吐量是不可能突破RAID卡接口的速度的,SATA极限600MB/S,512B一个扇区,4KB一个块。每秒最多读1200个扇区吧,那也就只能说高性能RAID卡,RAID通道也要并发。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值