性能调优——IOSelingChen更多性能测试资料尽在ROAD软件测试论坛内容介绍旨在与大家交流性能测试,分享知识。知识来源于网络,可以相互转载,请不要用于商业用途。RoadContents硬盘知识1IO监控2IO调整3如何减小IO4RoadContent1.硬盘知识:介绍硬盘组成原理2.IO监控:Windows,Linux磁盘监控工具及监控数据讲解3.IO调整:如何提高IO,条带化原理,条带化结构4.如何减少IO,系统如何调整Road磁盘原理(HDD)盘片以每分钟数千转到上万转的速度在高速旋转,15K10k7.5k5.2kRPM磁头就能对盘片上的指定位置进行数据的读写操作磁头磁化磁盘记录数据Road磁盘原理从外到里存储外快内慢以扇区为单位存储破碎文件读取多个扇区,时间长柱面:所有盘面上的同一磁道构成一个圆柱,一个磁道写满数据后,就在同一柱面的下一个盘面来写,一个柱面写满后,才移到下一个扇区开始写数据RoadHDD示意图Road磁盘接口ATA(IDE电子集成驱动器16Bit总线)可达133M/sSATA(串行ATA8位总线)可达300M/s,甚至600M/s为什么并行的ATA没串行的SATA快?时钟频率不一样,一个时钟内ATA比SATA传输的数据要多.为什么ATA不反提高时钟频率?排线多,信息干扰与同步问题Road常见硬盘指标Road磁盘读写随机访问(RandomAccess)本次IO所给出的扇区地址和上次IO给出扇区地址相差比较大,这样的话磁头在两次IO操作之间需要作比较大的移动动作才能重新开始读/写数据连续访问(SequentialAccess)当次IO给出的扇区地址与上次IO结束的扇区地址一致或者是接近的话,那磁头就能很快的开始这次IO操作顺序IO模式(QueueMode)磁盘控制器可能会一次对磁盘组发出一连串的IO命令,如果磁盘组一次只能执行一个IO命令并发IO模式(BurstMode)当磁盘组能同时执行多个IO命令时,称为并发IO。并发IO只能发生在由多个磁盘组成的磁盘组上,单块磁盘只能一次处理一个IO命令Road磁盘KPIIOPS(IOperSecond)IO系统每秒所执行IO操作的次数IOTime=SeekTime+60sec/RotationalSpeed/2+IOChunkSize/TransferRateIOPS=1/IOTime=1/(SeekTime+60sec/RotationalSpeed/2+IOChunkSize/TransferRate)RoadIOPS计算RPM(rpm=roundperminute转/每分钟)转速:7.2KRPMAvg寻道时间:5ms平均旋转延时:(60s/7.2K)*1/2=4.17ms(最坏情况转一圈才开始读数据,乘1/2是把读写分开取二分之一)单位IO:比如最大传输速度50M8K的块,传输时间=8/50=0.156msIOPS=1/(5ms+4.17ms+0.156ms)=107次Road传输速度/吞吐率TransferRate=IOPS*IOChunkSize(块大小)IPOS=1000ChunkSize=8KTR=1000*8K=8M/sRoadIO延时瓶颈表象——IO延时磁盘IO延时(IOLatency):也称为IO响应时间,是指内核对磁盘发出一个读或者写的IO命令,到内核接收到回应的时间,IO响应时间包括IO操作在磁盘处理的时间和IO操作在IO等待队列中所花费的等待时间。单个IO时间:单个IO时间仅仅指的是IO操作在磁盘内部处理的时间,而IO响应时间还要包括IO操作在IO等待队列中所花费的等待时间。AvgQueueLength(就是常说的Q)RoadContents硬盘1IO监控2IO调整3如何减小IO4RoadWindows工具(perfmon)RoadWindowsIO性能单次IO大小Avg.DiskBytes/ReadAvg.DiskBytes/WriteIO响应时间Avg.Disksec/ReadAvg.Disksec/WriteIOPSDiskReads/sec(15ms)DiskWrites/sec(15ms)DiskTransfers/secIO吞吐率DiskBytes/secDiskReadBytes/secDiskWriteBytes/secPhysicalDisk-Avg.DiskQueueLength(Q2)Pagefaults/sec-PagesInput/sec(ReadfromdiskPages)PageReads/Sec(Readfromdisktimes5)前一个是页数,后一个是次数PagesOutput/sec(Writetodisk)RoadBIBO磁盘:Bi(read)Bo(write)虚拟内存Swap内存:FreeCacheBi(接近于0性能良好)Bo(接近于0性能良好)Road磁盘性能分析PhysicalDisk-%DiskTimePhysicalDisk-Avg.DiskQueueLength2*盘数Memory-PageReads/sec缺页中断(内存中没有,需要从磁盘读取)名词约定:Q:PhysicalDiskAvg.DiskQueueLengthPR:MemoryPageReads/secDT:PhysicalDiskTimeL:LowH:HighPRQDTResultLHH磁盘瓶颈HHH内在瓶颈RoadLinux-iostatIostat硬盘读写性能,#查看TPS和吞吐量信息-d:显示某块具体硬盘,这里没有给出硬盘路径就是默认全部了-k:以KB为单位显示5:统计间隔为5秒2:共统计2次的tps:每秒IO次数kB_read/s:每秒从设备(driveexpressed)读取的数据量kB_wrtn/s:每秒向设备(driveexpressed)写入的数据量kB_read:读取的总数据量kB_wrtn:写入的总数据量Note:读写单位KilobytesRoadLinux-iostatiostat-x参数,查看设备使用率(%util)、响应时间(await)rrqm/s:每秒这个设备相关的读取请求有多少被合并(请求相同Block时,请求合并)wrqm/s:每秒这个设备相关的写入请求有多少被合并r/s:每秒读取请求数(rio)w/s:每秒写入请求数(wio)resc/s:每秒读扇区数(rsect)wsec/s:每秒写扇区数(wsect)rkB/s:每秒读取的数据量,单位K字节wkB/s:每秒写入的数据量,单位K字节avgrq-sz:平均每次设备I/O操作的数据大小(扇区),(rsect+wsect)*扇区大小/(rio+wio)avgqu-sz:平均I/O队列长度await:平均每次设备I/O操作的等待时间(毫秒)svctm:平均每次设备I/O操作的服务时间(毫秒)svctm越接近于await则说明等待时间少%util:DiskTime/总时间,表示了设备的繁忙程度。80%表示设备已经很忙了(如果多磁盘另算,个体不能代表全局)RoadLinux-iostatiostat-c参数,查看CPU状态信息iostat–t参数,磁盘状态统计信息Blk_read/s:每秒读多少块Blk_wrtn/s:开机到现在读了多少块Blk_wrtn/s:每秒写了多少块Blk_wrtn:开机到现在写了多少块Procsr:在运行队列中等待的进程数b:在等待io的进程数w:被交换出来的进程Memoryswpd:虚拟内存使用情况KBfree:空闲的内存buff:被用来做为缓存的内存数单位:KBSwapsi:从磁盘交换到内存的交换页数量so:从内存交换到磁盘的交换页数量单位:KB/秒IObi:发送到块设备的块数bo:从块设备接收到的块数,单位:块/秒Systemin:每秒的中断数cs:每秒(上下文)切换次数CPUus:CPU使用时间sy:CPU系统使用时间id:闲置时间r、b列一般为0,表示没有等待进程,如果不为0表示系统性能有问题si、so两列,表示内存交换的频繁程度,如果数值长期很大,表示内存不够,要和硬盘交换数据也有可能是每次读写的数据都不一样,这种机率较小bi、bo两列,表示I/O输入输出很频繁Road监控工具NmonNagiosCactiKDESystemGuardGnomeSystemMonitorRoadContents硬盘1IO监控2IO调整3如何减小IO4Road磁盘速度改进目前改进磁盘存取速度的的方式主要有两种一是磁盘快取控制(diskcachecontroller),它将从磁盘读取的数据存在快取内存(cachememory)中以减少磁盘存取的次数,数据的读写都在快取内存中进行,大幅增加存取的速度,如要读取的数据不在快取内存中,或要写数据到磁盘时,才做磁盘的存取动作。这种方式在单工环境(single-taskingenvioronment)如DOS之下,对大量数据的存取有很好的性能(量小且频繁的存取则不然),但在多工(multi-tasking)环境之下(因为要不停的作数据交换(swapping)的动作)或数据库(database)的存取(因为每一记录都很小)就不能显示其性能。这种方式没有任何安全保障。其二是使用磁盘阵列的技术。磁盘阵列是把多个磁盘组成一个阵列,当作单一磁盘使用,它将数据以分段(striping)的方式储存在不同的磁盘中,存取数据时,阵列中的相关磁盘一起动作,大幅减低数据的存取时间,同时有更佳的空间利用率。磁盘阵列所利用的不同的技术,称为RAIDlevel,不同的level针对不同的系统及应用,以解决数据安全的问题。RoadRAID0RAID0RAID0将数据条带化(striping)将连续的数据分散在多个磁盘上进行存取,系统发出的IO命令(不管读IO和写IO都一样)就可以在磁盘上被并行的执行,每个磁盘单独执行自己的那一部分请求,这样的并行的IO操作能大大的增强整个存储系统的性能。假设一个RAID0阵列有n(n=2)个磁盘组成,每个磁盘的随机读写的IO能力都达到120的话,那么整个磁盘阵列的IO能力将是120*n。同时如果在阵列总线的传输能力允许的情况下,RAID0的吞吐率也将是单个磁盘的n倍。RoadRAID0优:快速大容量缺:无备份安全性差RoadRAID1RAID1RAID1在容量上相当于是将两个磁盘合并成一个磁盘来使用了,互为镜像的两个磁盘里面保存的数据是完全一样的,因此在并行读取的时候速度将是n个磁盘速度的总和,但是写入就不一样了,每次写入都必须同时写入到两个磁盘中,因此写入速度只有n/2RoadRAID1优:备份安全性高(一个坏从另一个上恢复)缺:慢(写了两次)RoadRAID3优:快、安全,奇偶校验,一盘故障数据可重建视频网站适用(文件读写多)缺:同时二盘故障,数据全丢失小数据读写不适用,随机读慢奇偶校验盘RoadRAID3+SpareSpace=(磁盘数-2)单盘容量热备盘备份故障盘上内容热备盘RoadRAID5RAID5RAID5是支持并行IO的,而磁盘上的数据呈条带状的分布在所有的磁盘上,因此读IO的速度相当于所有磁盘速度的总和。不过这是在没有磁盘损坏的情况下,当有一个磁盘故障的时候读取速度也是会下降的,因为中间需要花时间来计算丢失磁盘上面的数据。写入速度只有所有磁盘速度总和的1/4。从这点可以看出RAID5是非常不适合用在要大批量写入数据的系统上的要求较高的空间利用率,对安全性要求不是特别高、大文件存储的系统采用RAID5比较好RoadRAID5RAID3加强版,数所相互备份Space=(磁盘数-1)*单盘容量