【2017年整理】IO系统性能

上传人:爱****1 文档编号:990045 上传时间:2017-05-24 格式:DOC 页数:23 大小:194.50KB
返回 下载 相关 举报
【2017年整理】IO系统性能_第1页
第1页 / 共23页
【2017年整理】IO系统性能_第2页
第2页 / 共23页
【2017年整理】IO系统性能_第3页
第3页 / 共23页
【2017年整理】IO系统性能_第4页
第4页 / 共23页
【2017年整理】IO系统性能_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《【2017年整理】IO系统性能》由会员分享,可在线阅读,更多相关《【2017年整理】IO系统性能(23页珍藏版)》请在金锄头文库上搜索。

1、【转载】IO 系统性能之一:衡量性能的几个指标(2010-02-22 15:55:08) 转载标签: io杂谈分类: HW 原文:http:/ 几个基本的概念 单个 IO的大小(IO Chunk Size) IOPS(IO per Second) 传输速度(Transfer Rate)/吞吐率(Throughput) IO响应时间(IO Response Time) 延伸阅读 注意:本系列文章中所涉及的性能都是指磁盘(Magnetic Disks)IO 性能,不考虑网络以及其他的性质的 IO性能。top前言作为一个数据库管理员,关注系统的性能是日常最重要的工作之一,而在所关注的各方面的性能只能

2、 IO性能却是最令人头痛的一块,面对着各种生涩的参数和令人眼花缭乱的新奇的术语,再加上存储厂商的忽悠,总是让我们有种云里雾里的感觉。本系列文章试图从基本概念开始对磁盘存储相关的各种概念进行综合归纳,让大家能够对 IO性能相关的基本概念,IO 性能的监控和调整有个比较全面的了解。在这一部分里我们先舍弃各种结构复杂的存储系统,直接研究一个单独的磁盘的性能问题,藉此了解各个衡量 IO系统系能的各个指标以及之间的关系。top几个基本的概念在研究磁盘性能之前我们必须先了解磁盘的结构,以及工作原理。不过在这里就不再重复说明了,关系硬盘结构和工作原理的信息可以参考维基百科上面的相关词条 Hard disk

3、drive(英文)和硬盘驱动器(中文)。读写 IO(Read/Write IO)操作 磁盘是用来给我们存取数据用的,因此当说到 IO操作的时候,就会存在两种相对应的操作,存数据时候对应的是写 IO操作,取数据的时候对应的是是读 IO操作。 单个 IO操作 当控制磁盘的控制器接到操作系统的读 IO操作指令的时候,控制器就会给磁盘发出一个读数据的指令,并同时将要读取的数据块的地址传递给磁盘,然后磁盘会将读取到的数据传给控制器,并由控制器返回给操作系统,完成一个写 IO的操作;同样的,一个写 IO的操作也类似,控制器接到写的 IO操作的指令和要写入的数据,并将其传递给磁盘,磁盘在数据写入完成之后将操

4、作结果传递回控制器,再由控制器返回给操作系统,完成一个写 IO的操作。单个 IO操作指的就是完成一个写 IO或者是读 IO的操作。 随机访问(Random Access)与连续访问(Sequential Access) 随机访问指的是本次 IO所给出的扇区地址和上次 IO给出扇区地址相差比较大,这样的话磁头在两次 IO操作之间需要作比较大的移动动作才能重新开始读/写数据。相反的,如果当次 IO给出的扇区地址与上次 IO结束的扇区地址一致或者是接近的话,那磁头就能很快的开始这次 IO 操作,这样的多个 IO操作称为连续访问。因此尽管相邻的两次 IO操作在同一时刻发出,但如果它们的请求的扇区地址相

5、差很大的话也只能称为随机访问,而非连续访问。 顺序 IO模式(Queue Mode)/并发 IO模式(Burst Mode) 磁盘控制器可能会一次对磁盘组发出一连串的 IO命令,如果磁盘组一次只能执行一个 IO命令时称为顺序 IO;当磁盘组能同时执行多个 IO命令时,称为并发 IO。并发IO只能发生在由多个磁盘组成的磁盘组上,单块磁盘只能一次处理一个 IO命令。 top单个 IO的大小(IO Chunk Size)熟悉数据库的人都会有这么一个概念,那就是数据库存储有个基本的块大小(Block Size),不管是 SQL Server还是 Oracle,默认的块大小都是 8KB,就是数据库每次读

6、写都是以 8k为单位的。那么对于数据库应用发出的固定 8k大小的单次读写到了写磁盘这个层面会是怎么样的呢,就是对于读写磁盘来说单个 IO操作操作数据的大小是多少呢,是不是也是一个固定的值?答案是不确定。首先操作系统为了提高 IO 的性能而引入了文件系统缓存(File System Cache),系统会根据请求数据的情况将多个来自 IO的请求先放在缓存里面,然后再一次性的提交给磁盘,也就是说对于数据库发出的多个 8K数据块的读操作有可能放在一个磁盘读 IO里就处理了。还有对于有些存储系统也是提供了缓存(Cache)的,接收到操作系统的 IO请求之后也是会将多个操作系统的 IO 请求合并成一个来处

7、理。不管是操作系统层面的缓存还是磁盘控制器层面的缓存,目的都只有一个,提高数据读写的效率。因此每次单独的 IO操作大小都是不一样的,它主要取决于系统对于数据读写效率的判断。当一次 IO操作大小比较小的时候我们成为小的 IO操作,比如说 1K,4K,8K 这样的;当一次IO操作的数据量比较的的时候称为大 IO操作,比如说 32K,64K 甚至更大。在我们说到块大小(Block Size)的时候通常我们会接触到多个类似的概念,像我们上面提到的那个在数据库里面的数据最小的管理单位,Oralce 称之为块(Block),大小一般为 8K,SQL Server称之为页(Page),一般大小也为 8k。在

8、文件系统里面我们也能碰到一个文件系统的块,在现在很多的 Linux系统中都是 4K(通过 /usr/bin/time -v 可以看到),它的作用其实跟数据库里面的块/页是一样的,都是为了方便数据的管理。但是说到单次 IO的大小,跟这些块的大小都是没有直接关系的,在英文里单次 IO大小通常被称为是 IO Chunk Size,不会说成是 IO Block Size的。topIOPS(IO per Second)IOPS,IO 系统每秒所执行 IO操作的次数,是一个重要的用来衡量系统 IO能力的一个参数。对于单个磁盘组成的 IO系统来说,计算它的 IOPS不是一件很难的事情,只要我们知道了系统完成

9、一次 IO所需要的时间的话我们就能推算出系统 IOPS来。现在我们就来推算一下磁盘的 IOPS,假设磁盘的转速(Rotational Speed)为 15K RPM,平均寻道时间为 5ms,最大传输速率为 40MB/s(这里将读写速度视为一样,实际会差别比较大)。对于磁盘来说一个完整的 IO操作是这样进行的:当控制器对磁盘发出一个 IO操作命令的时候,磁盘的驱动臂(Actuator Arm)带读写磁头(Head)离开着陆区(Landing Zone,位于内圈没有数据的区域),移动到要操作的初始数据块所在的磁道(Track)的正上方,这个过程被称为寻址(Seeking),对应消耗的时间被称为寻址

10、时间(Seek Time);但是找到对应磁道还不能马上读取数据,这时候磁头要等到磁盘盘片(Platter)旋转到初始数据块所在的扇区(Sector)落在读写磁头正上方的之后才能开始读取数据,在这个等待盘片旋转到可操作扇区的过程中消耗的时间称为旋转延时(Rotational Delay);接下来就随着盘片的旋转,磁头不断的读/写相应的数据块,直到完成这次 IO所需要操作的全部数据,这个过程称为数据传送(Data Transfer),对应的时间称为传送时间(Transfer Time)。完成这三个步骤之后一次 IO操作也就完成了。在我们看硬盘厂商的宣传单的时候我们经常能看到 3个参数,分别是平均寻

11、址时间、盘片旋转速度以及最大传送速度,这三个参数就可以提供给我们计算上述三个步骤的时间。第一个寻址时间,考虑到被读写的数据可能在磁盘的任意一个磁道,既有可能在磁盘的最内圈(寻址时间最短),也可能在磁盘的最外圈(寻址时间最长),所以在计算中我们只考虑平均寻址时间,也就是磁盘参数中标明的那个平均寻址时间,这里就采用当前最多的 10krmp硬盘的5ms。第二个旋转延时,和寻址一样,当磁头定位到磁道之后有可能正好在要读写扇区之上,这时候是不需要额外额延时就可以立刻读写到数据,但是最坏的情况确实要磁盘旋转整整一圈之后磁头才能读取到数据,所以这里我们也考虑的是平均旋转延时,对于 10krpm的磁盘就是(6

12、0s/15k)*(1/2) = 2ms。第三个传送时间,磁盘参数提供我们的最大的传输速度,当然要达到这种速度是很有难度的,但是这个速度却是磁盘纯读写磁盘的速度,因此只要给定了单次 IO 的大小,我们就知道磁盘需要花费多少时间在数据传送上,这个时间就是 IO Chunk Size / Max Transfer Rate。现在我们就可以得出这样的计算单次 IO时间的公式:IO Time = Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate于是我们可以这样计算出 IOPSIOPS = 1/IO Time = 1/(

13、Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate)对于给定不同的 IO大小我们可以得出下面的一系列的数据4K (1/7.1 ms = 140 IOPS)5ms + (60sec/15000RPM/2) + 4K/40MB = 5 + 2 + 0.1 = 7.18k (1/7.2 ms = 139 IOPS)5ms + (60sec/15000RPM/2) + 8K/40MB = 5 + 2 + 0.2 = 7.216K (1/7.4 ms = 135 IOPS)5ms + (60sec/15000RPM/2)

14、 + 16K/40MB = 5 + 2 + 0.4 = 7.432K (1/7.8 ms = 128 IOPS)5ms + (60sec/15000RPM/2) + 32K/40MB = 5 + 2 + 0.8 = 7.864K (1/8.6 ms = 116 IOPS)5ms + (60sec/15000RPM/2) + 64K/40MB = 5 + 2 + 1.6 = 8.6从上面的数据可以看出,当单次 IO越小的时候,单次 IO所耗费的时间也越少,相应的 IOPS也就越大。上面我们的数据都是在一个比较理想的假设下得出来的,这里的理想的情况就是磁盘要花费平均大小的寻址时间和平均的旋转延时,

15、这个假设其实是比较符合我们实际情况中的随机读写,在随机读写中,每次 IO操作的寻址时间和旋转延时都不能忽略不计,有了这两个时间的存在也就限制了 IOPS的大小。现在我们考虑一种相对极端的顺序读写操作,比如说在读取一个很大的存储连续分布在磁盘的的文件,因为文件的存储的分布是连续的,磁头在完成一个读 IO操作之后,不需要从新的寻址,也不需要旋转延时,在这种情况下我们能到一个很大的 IOPS值,如下4K (1/0.1 ms = 10000 IOPS)0ms + 0ms + 4K/40MB = 0.18k (1/0.2 ms = 5000 IOPS)0ms + 0ms + 8K/40MB = 0.21

16、6K (1/0.4 ms = 2500 IOPS)0ms + 0ms + 16K/40MB = 0.432K (1/0.8 ms = 1250 IOPS)0ms + 0ms + 32K/40MB = 0.864K (1/1.6 ms = 625 IOPS)0ms + 0ms + 64K/40MB = 1.6相比第一组数据来说差距是非常的大的,因此当我们要用 IOPS来衡量一个 IO系统的系能的时候我们一定要说清楚是在什么情况的 IOPS,也就是要说明读写的方式以及单次 IO的大小,当然在实际当中,特别是在 OLTP的系统的,随机的小 IO的读写是最有说服力的。top传输速度(Transfer Rate)/吞吐率(Throughput)现在我们要说的传输速度(另一个常见的说法是吞吐率)不是磁盘上所表明的最大传输速度或者说理想传输速度,而是磁盘在实际使用的时候从磁盘系统总线上流

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号