明白:判定磁盘性能指标 —— IOPS、吞吐量及测试

[复制链接]
查看12 | 回复0 | 2021-7-22 11:45:13|发表时间:2021-7-22 11:45:13| 显示全部楼层 |阅读模式

磁盘性能指标--IOPS除了国内,服务器网卡在国际领域也崭露头角逐渐的受到更多外国友人的青睐。

----------------------------------------------------------
IOPS(IOPS)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的IO请求数量,一般以每秒处理的IO请求数量为单位,IO请求通常为读或写数据操作请求。

随机读写频繁的应用,如小文件存储(图片)、OLTP数据库、邮件服务器,关注随机读写性能,IOPS是关键衡量指标。

顺序读写频繁的应用,传输大量连续数据,如电视台的视频编辑,视频点播VOD(VOD),关注连续读写性能。数据吞吐量是关键衡量指标。

IOPS和数据吞吐量适用于不同的场合:
读取10000个1KB文件,用时10秒T(吞吐量)=1MB,IOPS=1000追求IOPS
读取1个10MB文件,用时02秒T(吞吐量)=50MB,IOPS=5追求吞吐量

磁盘服务时间
--------------------------------------
传统磁盘本质上一种机械装置,如FC,SAS,SATA磁盘,转速通常为5400720210K15K不等。影响磁盘的关键因素是磁盘服务时间,即磁盘完成一个IO请求所花费的时间,它由寻道时间、旋转延迟和数据传输时间三部分构成。

寻道时间T是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,IO操作越快,目前磁盘的平均寻道时间一般在3-15。
旋转延迟T是指盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间。旋转延迟取决于磁盘转速,通常使用磁盘旋转一周所需时间的12表示。比如,7200的磁盘平均旋转延迟大约为60*100072021=417,而转速为15000的磁盘其平均旋转延迟为2。
数据传输时间T是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。目前IDEATA能达到133MB,SATAII可达到300MB的接口数据传输率,数据传输时间通常远小于前两部分消耗时间。简单计算时可忽略。







常见磁盘平均物理寻道时间为:
7200转分的STAT硬盘平均物理寻道时间是9
10000转分的STAT硬盘平均物理寻道时间是6
15000转分的SAS硬盘平均物理寻道时间是4







常见硬盘的旋转延迟时间为:



7200的磁盘平均旋转延迟大约为60*100072021=417



10000的磁盘平均旋转延迟大约为60*1000100002=3,



15000的磁盘其平均旋转延迟约为60*1000150002=2。





最大IOPS的理论计算方法
--------------------------------------
IOPS=1000(寻道时间+旋转延迟)。可以忽略数据传输时间。

7200的磁盘IOPS=1000(9+417)=76IOPS
10000的磁盘IOPS=1000(6+3)=111IOPS
15000的磁盘IOPS=1000(4+2)=166IOPS


影响测试的因素
-----------------------------------------
实际测量中,IOPS数值会受到很多因素的影响,包括IO负载特征(读写比例,顺序和随机,工作线程数,队列深度,数据记录大小)、系统配置、操作系统、磁盘驱动等等。因此对比测量磁盘IOPS时,必须在同样的测试基准下进行,即便如此也会产生一定的随机不确定性。


队列深度说明
NCQ、SCSITCQ、PATATCQ和SATATCQ技术解析
----------------------------------------
是一种命令排序技术,一把喂给设备更多的IO请求,让电梯算法和设备有机会来安排合并以及内部并行处理,提高总体效率。
SCSITCQ的队列深度支持256级
ATATCQ的队列深度支持32级(需要8M以上的缓存)
NCQ最高可以支持命令深度级数为32级,NCQ可以最多对32个命令指令进行排序。
大多数的软件都是属于同步IO软件,也就是说程序的一次IO要等到上次IO操作的完成后才进行,这样在硬盘中同时可能仅只有一个命令,也是无法发挥这个技术的优势,这时队列深度为1。
随着I的超线程技术的普及和应用环境的多任务化,以及异步IO软件的大量涌现。这项技术可以被应用到了,实际队列深度的增加代表着性能的提高。
在测试时,队列深度为1是主要指标,大多数时候都参考1就可以。实际运行时队列深度也一般不会超过4


IOPS可细分为如下几个指标:
-----------------------------------------
数据量为字节,队列深度为时,随机读取的IOPS
数据量为字节,队列深度为时,随机写入的IOPS











二、举例测试:



UOS公有云开放以来,一些用户反应用命令测试出来的1TB云硬盘的吞吐率(MBPS)只有128MB,而不是我们SLA保证的170MB,这是为什么?下面我会简单介绍如何测试硬盘,RAID,SAN,SSD,云硬盘等,然后再来回答上面的问题。



测试前提

我们在进行测试时,都会分清楚:





测试对象:要区分硬盘、SSD、RAID、SAN、云硬盘等,因为它们有不同的特点




测试指标:IOPS和MBPS(吞吐率),下面会具体阐述




测试工具:L下常用F、工具,W下常用IOM,




测试参数:IO大小,寻址空间,队列深度,读写模式,随机顺序模式




测试方法:也就是测试步骤。





测试是为了对比,所以需要定性和定量。在宣布自己的测试结果时,需要说明这次测试的工具、参数、方法,以便于比较。







测试工具:



顺序读

测试命令:--=-=4-=60-32-6--=1







可以看到在对4KB数据包进行连续读的情况下:



SSD其速度可以达到404MBS,IOPS达到103KS



SAS其速度可以达到190MBS,IOPS达到41KS



SATA其速度可以达到124MBS,IOPS达到31KS



顺序读,SAS总体表现是SATA硬盘的13倍,SSD总体表现是硬盘的4倍。







随机读

测试命令--=-=4-=60-32-6--=1




SATA
J:1(=1):[][410%][466K0K][1140][00:36]
SAS
J:1(=1):[][410%][1784K0K][4560][00:36]
SSD
J:1(=1):[R][1000%][505M0K][129K0][00:00]

随机读,SAS总体表现是SATA硬盘的4倍,SSD总体表现是硬盘的一千多倍。







顺序写

测试命令:--=-=4-=60-32-6--=1






同样的4KB数据包顺序写的情况下,SSD卡的成绩为592MBS,IOPS为152K。而本地硬盘仅为118MBS,IOPS仅为30290。







随机写

测试命令:--=-=4-=60-32-6--=1






在接下来的4KB数据包随机写操作中,SSD卡再次展示了其高超的IO性能,高达549MBS的随机写速率,IOPS高达140K。相比之下,本地硬盘的随机读写仅为548KBS,IOPS为134。











存储系统模型

为了更好的测试,我们需要先了解存储系统,块存储系统本质是一个排队模型,我们可以拿银行作为比喻。还记得你去银行办事时的流程吗?





去前台取单号




等待排在你之前的人办完业务




轮到你去某个柜台




柜台职员帮你办完手续1




柜台职员帮你办完手续2




柜台职员帮你办完手续3




办完业务,从柜台离开





如何评估银行的效率呢:





服务时间=手续1+手续2+手续3




响应时间=服务时间+等待时间




性能=单位时间内处理业务数量





那银行如何提高效率呢:





增加柜台数




降低服务时间





因此,排队系统或存储系统的优化方法是





增加并行度




降低服务时间





硬盘测试

硬盘原理

我们应该如何测试SATASAS硬盘呢?



每个硬盘都有一个磁头(相当于银行的柜台),硬盘的工作方式是:





收到IO请求,得到地址和数据大小




移动磁头(寻址)




找到相应的磁道(寻址)




读取数据




传输数据





则磁盘的随机IO服务时间:



服务时间=寻道时间+旋转时间+传输时间



对于10000转速的SATA硬盘来说,一般寻道时间是7,旋转时间是3,64KB的传输时间是08,则SATA硬盘每秒可以进行随机IO操作是1000(7+3+08)=93,所以我们估算SATA硬盘64KB随机写的IOPS是93。一般的硬盘厂商都会标明顺序读写的MBPS。



我们在列出IOPS时,需要说明IO大小,寻址空间,读写模式,顺序随机,队列深度。我们一般常用的IO大小是4KB,这是因为文件系统常用的块大小是4KB。



使用测试硬盘

虽然硬盘的性能是可以估算出来的,但是怎么才能让应用获得这些性能呢?对于测试工具来说,就是如何得到IOPS和MBPS峰值。我们先用测试一下SATA硬盘的MBPS(吞吐量)。







为什么这块硬盘的MBPS只有68MB?这是因为磁盘利用率是78%,没有到达95%以上,还有部分时间是空闲的。当在前一个IO响应之后,在准备发起下一个IO时,SATA硬盘是空闲的。那么如何才能提高利用率,让磁盘不空闲呢?只有一个办法,那就是增加硬盘的队列深度。相对于CPU来说,硬盘属于慢速设备,所有操作系统会有给每个硬盘分配一个专门的队列用于缓冲IO请求。



队列深度

什么是磁盘的队列深度?

在某个时刻,有N个的IO请求,包括在队列中的IO请求、磁盘正在处理的IO请求。N就是队列深度。





加大硬盘队列深度就是让硬盘不断工作,减少硬盘的空闲时间。

加大队列深度-提高利用率-获得IOPS和MBPS峰值-注意响应时间在可接受的范围内




增加队列深度的办法有很多





使用异步IO,同时发起多个IO请求,相当于队列中有多个IO请求




多线程发起同步IO请求,相当于队列中有多个IO请求




增大应用IO大小,到达底层之后,会变成多个IO请求,相当于队列中有多个IO请求队列深度增加了。





队列深度增加了,IO在队列的等待时间也会增加,导致IO响应时间变大,这需要权衡。让我们通过增加IO大小来增加的队列深度,看有没有效果:






可以看到2MB的IO到达底层之后,会变成多个512KB的IO,平均队列长度为239,这个硬盘的利用率是97%,MBPS达到了197MB。(为什么会变成512KB的IO,你可以去使用G去查一下内核参数__的意义和使用方法)



也就是说增加队列深度,是可以测试出硬盘的峰值的。



使用测试硬盘

现在,我们来测试下SATA硬盘的4KB随机写的IOPS。因为我的环境是L,所以我使用FIO来测试。







简单介绍的参数





:负载引擎,我们一般使用,发起异步IO请求。




:IO大小




:直写,绕过操作系统C。因为我们测试的是硬盘,而不是操作系统的C,所以设置为1。




:读写模式,有顺序写、顺序读、随机写、随机读等。




:寻址空间,IO会落在[0,)这个区间的硬盘空间上。这是一个可以影响IOPS的参数。一般设置为硬盘的大小。




:测试对象




:队列深度,只有使用时才有意义。这是一个可以影响IOPS的参数。




:测试时长





下面我们做两次测试,分别=1和=4的情况。下面是=1的测试结果。






上图中蓝色方框里面的是测出的IOPS230,绿色方框里面是每个IO请求的平均响应时间,大约是43。***方框表示95%的IO请求的响应时间是小于等于9920。橙色方框表示该硬盘的利用率已经达到了9858%。



下面是=4的测试:



嘉华众力科技有限在基于I82599芯片英特尔X520卡方案的基础上退出了CEACENTAN8599-F1(万兆单口光纤卡)、CEACENTAN8599-F2(万兆双口光纤卡)、CEACENTAN8599-SR2(含模块)等产品,想了解更多存储产品需要合作与咨询搭建方案请联系上的在线客服,嘉华众力自2000年成立以来一直在络存储、传输这方面积累、沉淀;经过多年发展与全新的品牌定位,(UNICACA)嘉华众力品牌已成为国内外极具实力的数据通讯产品及方案提供商,请关注嘉华众力:




文章转自:CSNA博客
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则