磁盘性能指标--iops万兆网卡
----------------------------------------------------------
iops (inputoutput per second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。iops是指单位时间内系统能处理的io请求数量,一般以每秒处理的io请求数量为单位,io请求通常为读或写数据操作请求。
随机读写频繁的应用,如小文件存储(图片)、oltp数据库、邮件服务器,关注随机读写性能,iops是关键衡量指标。
顺序读写频繁的应用,传输大量连续数据,如电视台的视频编辑,视频点播vod(video on demand),关注连续读写性能。数据吞吐量是关键衡量指标。
iops和数据吞吐量适用于不同的场合:
读取10000个1kb文件,用时10秒 throught(吞吐量)=1mbs ,iops=1000 追求iops
读取1个10mb文件,用时02秒 throught(吞吐量)=50mbs, iops=5 追求吞吐量
磁盘服务时间
--------------------------------------
传统磁盘本质上一种机械装置,如fc, sas, sata磁盘,转速通常为5400720010k15k rpm不等。影响磁盘的关键因素是磁盘服务时间,即磁盘完成一个io请求所花费的时间,它由寻道时间、旋转延迟和数据传输时间三部分构成。
寻道时间tseek是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,io操作越快,目前磁盘的平均寻道时间一般在3-15ms。
旋转延迟trotation是指盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间。旋转延迟取决于磁盘转速,通常使用磁盘旋转一周所需时间的12表示。比如,7200 rpm的磁盘平均旋转延迟大约为60*100072002 = 417ms,而转速为15000 rpm的磁盘其平均旋转延迟为2ms。
数据传输时间ttransfer是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。目前ideata能达到133mbs,sata ii可达到300mbs的接口数据传输率,数据传输时间通常远小于前两部分消耗时间。简单计算时可忽略。
常见磁盘平均物理寻道时间为:
7200转分的stat硬盘平均物理寻道时间是9ms
10000转分的stat硬盘平均物理寻道时间是6ms
15000转分的sas硬盘平均物理寻道时间是4ms
常见硬盘的旋转延迟时间为:
7200 rpm的磁盘平均旋转延迟大约为60*100072002 = 417ms
10000 rpm的磁盘平均旋转延迟大约为60*1000100002 = 3ms,
15000 rpm的磁盘其平均旋转延迟约为60*1000150002 =2ms。最大iops的理论计算方法
--------------------------------------
iops = 1000 ms (寻道时间 + 旋转延迟)。可以忽略数据传输时间。
7200 rpm的磁盘iops = 1000(9 + 417) =76 iops
10000 rpm的磁盘iops = 1000(6+ 3) = 111 iops
15000 rpm的磁盘iops = 1000(4 + 2) = 166 iops影响测试的因素
-----------------------------------------
实际测量中,iops数值会受到很多因素的影响,包括io负载特征(读写比例,顺序和随机,工作线程数,队列深度,数据记录大小)、系统配置、操作系统、磁盘驱动等等。因此对比测量磁盘iops时,必须在同样的测试基准下进行,即便如此也会产生一定的随机不确定性。队列深度说明
ncq、scsi tcq、pata tcq和sata tcq技术解析
----------------------------------------
是一种命令排序技术,一把喂给设备更多的io请求,让电梯算法和设备有机会来安排合并以及内部并行处理,提高总体效率。
scsi tcq的队列深度支持256级
ata tcq的队列深度支持32级 (需要8m以上的缓存)
ncq最高可以支持命令深度级数为32级,ncq可以最多对32个命令指令进行排序。
大多数的软件都是属于同步io软件,也就是说程序的一次io要等到上次io操作的完成后才进行,这样在硬盘中同时可能仅只有一个命令,也是无法发挥这个技术的优势,这时队列深度为1。
随着intel的超线程技术的普及和应用环境的多任务化,以及异步io软件的大量涌现。这项技术可以被应用到了,实际队列深度的增加代表着性能的提高。
在测试时,队列深度为1是主要指标,大多数时候都参考1就可以。实际运行时队列深度也一般不会超过4iops可细分为如下几个指标:
-----------------------------------------
数据量为n字节,队列深度为k时,随机读取的iops
数据量为n字节,队列深度为k时,随机写入的iops二、举例测试:
uos公有云开放以来,一些用户反应用dd命令测试出来的1tb云硬盘的吞吐率(mbps)只有128mbs,而不是我们sla保证的170mb s ,这是为什么?下面我会简单介绍如何测试硬盘,raid,san,ssd,云硬盘等,然后再来回答上面的问题。
测试前提
我们在进行测试时,都会分清楚:
测试对象:要区分硬盘、ssd、raid、san、云硬盘等,因为它们有不同的特点
测试指标:iops和mbps(吞吐率),下面会具体阐述
测试工具:linux下常用fio、dd工具, windows下常用iometer,
测试参数: io大小,寻址空间,队列深度,读写模式,随机顺序模式
测试方法:也就是测试步骤。
测试是为了对比,所以需要定性和定量。在宣布自己的测试结果时,需要说明这次测试的工具、参数、方法,以便于比较。
测试工具 fio:
顺序读
测试命令:fio -name iops -rw=read -bs=4k -runtime=60 -iodepth 32 -filename devsda6 -ioengine libaio -direct=1
可以看到在对4kb数据包进行连续读的情况下:
ssd其速度可以达到404mbs,iops达到103ks
sas其速度可以达到190mbs,iops达到41ks
sata其速度可以达到124mbs,iops达到31ks
顺序读,sas总体表现是sata硬盘的13倍,ssd总体表现是sata硬盘的4倍。
随机读
测试命令fio -name iops -rw=randread -bs=4k -runtime=60 -iodepth 32 -filename devsda6 -ioengine libaio -direct=1
sata
jobs:1(f=1):[r][410%done][466k0ks][1140iops][eta00m:36s]
sas
jobs:1(f=1):[r][410%done][1784k0ks][4560iops][eta00m:36s]
ssd
jobs:1(f=1):[r][1000%done][505m0ks][129k0iops][eta00m:00s]
随机读,sas总体表现是sata硬盘的4倍,ssd总体表现是sata硬盘的一千多倍。
顺序写
测试命令:fio -name iops -rw=write -bs=4k -runtime=60 -iodepth 32 -filename devsda6 -ioengine libaio -direct=1
同样的4kb数据包顺序写的情况下,ssd卡的成绩为592mbs,iops为152k。而本地硬盘仅为118mbs,iops仅为30290。
随机写
测试命令:fio -name iops -rw=randwrite -bs=4k -runtime=60 -iodepth 32 -filename devsda6 -ioengine libaio -direct=1
在接下来的4kb数据包随机写操作中,ssd卡再次展示了其高超的io性能,高达549mbs的随机写速率,iops高达140k。相比之下,本地硬盘的随机读写仅为548kbs,iops为134。存储系统模型
为了更好的测试,我们需要先了解存储系统,块存储系统本质是一个排队模型,我们可以拿银行作为比喻。还记得你去银行办事时的流程吗?
去前台取单号
等待排在你之前的人办完业务
轮到你去某个柜台
柜台职员帮你办完手续1
柜台职员帮你办完手续2
柜台职员帮你办完手续3
办完业务,从柜台离开
如何评估银行的效率呢:
服务时间 = 手续1 + 手续2 + 手续3
响应时间 = 服务时间 + 等待时间
性能 = 单位时间内处理业务数量
那银行如何提高效率呢:
增加柜台数
降低服务时间
因此,排队系统或存储系统的优化方法是
增加并行度
降低服务时间
硬盘测试
硬盘原理
我们应该如何测试satasas硬盘呢?
每个硬盘都有一个磁头(相当于银行的柜台),硬盘的工作方式是:
收到io请求,得到地址和数据大小
移动磁头(寻址)
找到相应的磁道(寻址)
读取数据
传输数据