1、引言
性能这块,虽然是小鱼一直不想去触碰的地方,
但是,身在江湖漂,哪能不带刀!!
小屌丝:鱼哥,最近你得注意身体啊
小鱼:昂… 怎么突然关心起我来了?
小屌丝:还用我说嘛,最近你博文更新的慢,不是在耍妹子,就是在去耍妹子的路上。
小鱼:( ‵o′)凸…我这是在忙工作的事情
小屌丝:我差点信了!!
小鱼:…算了,我不替自己解释了, 我替IO解释吧!
小屌丝:难道,今天要整IO? 那赶紧!
在认识IO之前,我们要先了解 一下磁盘。
然后在慢慢的认识IO
2、 硬盘知识
2.1 磁盘原理
1、定义
①盘片以每分钟数千转到上万转的速度在高速旋转,15K 10k 7.5k 5.2k RPM
②磁头就能对盘片上的指定位置进行数据的读写操作
③磁头磁化磁盘记录数据
2、图片
3、HDD示意图
2.2 磁盘接口
ATA:(IDE 电子集成驱动器 16Bit总线)可达133M/s
SATA:(串行ATA 8位总线)可达300M/s,甚至600M/s
小屌丝:为什么并行的ATA没有串行的SATA快呢?
小鱼:因为时钟频率不一样,一个时钟内ATA比SATA传输的数据要多
小屌丝:那为什么ATA不反提高时钟频率?
小鱼:排线多,信息干扰与同步问题啊。
小屌丝:哦,原来是这样啊。
2.3 磁盘读写
1. 随机访问(Random Access)
本次IO所给出的扇区地址和上次IO给出扇区地址相差比较大,这样的话磁头在两次IO操作之间需要作比较大的移动动作才能重新开始读/写数据
2. 连续访问(Sequential Access)
当次IO给出的扇区地址与上次IO结束的扇区地址一致或者是接近的话,那磁头就能很快的开始这次IO操作
3. 顺序IO模式(Queue Mode)
磁盘控制器可能会一次对磁盘组发出一连串的IO命令,如果磁盘组一次只能执行一个IO命令
4. 并发IO模式(Burst Mode)
当磁盘组能同时执行多个IO命令时,称为并发IO。并发IO只能发生在由多个磁盘组成的磁盘组上,单块磁盘只能一次处理一个IO命令
2.4 磁盘KPI
IOPS(IO per Second)
定义:
IO系统每秒所执行的IO操作的次数
图片解析
计算公式
IO Time = Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate
IOPS = 1/IO Time = 1/(Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate)
2.5 计算
2.5.1 IOPS计算
为了更直观了解IOPS的计算,
老规矩,上例子
①参数举例
PRM: rpm = round per minute转/每分钟
转速:7.2K RPM
Avg寻道时间:5ms
平均旋转延时:(60s/7.2K)*1/2=4.17ms
最坏情况:转一圈才开始读数据,乘1/2是把读写分开取二分之一
单位IO:比如最大传输速度50M
8K的块,传输时间 =8/50 = 0.156ms
②计算IOPS
IOPS = 1/(5ms+4.17ms+0.156ms)=107 次
2.5.2 传输速率/吞吐率计算
①计算公式
Transfer Rate = IOPS * IO Chunk Size(块大小)
②参数举例
IOPS = 1000
Chunk Size = 8K
TR = 1000 x 8K =8M/s
2.6 IO延时
2.6.1 瓶颈表象
①定义
磁盘IO延时(IO Latency)
也称为IO响应时间,是指内核对磁盘发出一个读或者写的IO命令,到内核接收到回应的时间,IO响应时间包括IO操作在磁盘处理的时间和IO操作在IO等待队列中所花费的等待时间。
单个IO时间
仅仅指的是IO操作在磁盘内部处理的时间,而IO响应时间还要包括IO操作在IO等待队列中所花费的等待时间。
②图片解析
3、IO监控
3.1 windows系统
我们可以直接使用windows自带的监控器
在电脑打开 “性能监视器”,既可看到想看的…
由于小鱼电脑有上帝模式,所以,就直接打开 性能监视器。
3.2 windows IO性能
1. 单次IO大小
Avg.Disk Bytes/Read
AvgDisk Bytes/Write
2. IO响应时间
Avg.Disk sec/Read
Avg.Disk sec/Write
3. IOPS
Disk Reads/sec(<15ms)
Disk Writes/sec(<15ms)
Disk Transfers/sec
4. IO吞吐率
Disk Bytes/sec
Disk Read Bytes/sec
Disk Write Bytes/sec
5. Physical Disk
Physical Disk : Avg.Disk Queue Length (Q<2)
6. Page faults/sec
>>> Pages Input /sec (Read from disk pages)
>>>Pages Read/sec (Read form disk times)
7. Pages Output/sec
>>>Pages Output/sec(Write to disk)
3.3 Bi BO 流程图
3.4 磁盘性能分析
定义
1、Physical Disk : % Disk Time
2、Physical Disk : Avg.Disk Queue Length <2*盘数
3、Memory :Page Reads/secc
如果内存中没有,那么需要从磁盘中读取
列表展示
PR | Q | DT | Result |
L | H | H | 磁盘瓶颈 |
H | H | H | 内在瓶颈 |
名词解析
①PR
Memery Page Reads/sec
②Q
Physical Disk Avg.Disk Queue Length
③DT
Physical Disk Time
④L
Low
⑤H
High
4、IO调整
4.1 磁盘速度改进
改进方式,主要分两种:
①磁盘快取监控(disk cache controller)
②磁盘列阵技术
4.1.1 磁盘快取监控(disk cache controller)
定义
将从磁盘读取的数据存在快取内存(cache memory)中,以减少磁盘存储的次数。
数据的读取都在快取内存中进行,大幅增加存取的速度。
如果要读取的数据不在快取内存中,或要写数据到磁盘时,才做磁盘的存取动作。
注意点
这种方式在单工环境(single-tasking environment),如DOS之下,对大量数据的存储有很好的性能,
但是在多工环境(multi - tasking environment)或数据库(database)的存取,就不能显示其性能。
并且,这种方式,没有任何安全保障。
多工环境:要不停的做数据交换的动作
数据库:因为每一次记录都很小
4.1.2 磁盘列阵技术
定义
磁盘列阵是把多个磁盘组成一个阵列,当作单一磁盘使用,它将数据以分段(striping)的方式存储在不同的磁盘中,存取数据时,列阵中的相关磁盘一起动作,大幅降低数据的存取时间,同时有更佳的空间利用率。
磁盘阵列所利用的不同的技术,称为RAID Level,不同的Level针对不同的系统及应用,以解决数据安全的问题。
RAID Level 等级分类
1. RAID 0
①定义
将数据条带化(striping),将连续的数据分散到多个磁盘上进行存取,系统发出的IO命令(不管读/写)就可以在磁盘上被并行执行。
由于每个磁盘单独执行自己的那部分请求,故,这大大增强整个存储的系统的性能。
②图解
优点:
速度快,容量大
缺点:
无备份,安全差
③举例
一个RAID0列阵有n(≥2)个磁盘,每个磁盘的随机读写的IO能力达到100,
那么,整个磁盘阵列的IO能力就是 :100 * n。
如果传输能力允许,RAID0的吞吐率也是单个磁盘的 n倍。
2. RAID 1
①定义
在容量上, 相当于把两个磁盘合起来一起使用。
互为镜像的两个磁盘里面保存的数据时完全一样的,
因此,在并行读取的速度上将是n个磁盘速度之和,
但是,在写入的速度,就慢的多,因为要同时写入两个磁盘,故,速度就是 n/2。
②图解
优点:
有备份,安全高
缺点:
写入慢
3. RAID 3
①图解
优点:
速度快,安全高,奇偶校验,一盘故障数据可重建
适用于:视频网站
缺点:
二盘同时故障,数据全部丢失
小数据读写不适用,随机读慢
4. RAID 3 + Spare
①图解
②解析
Spare:(磁盘数 - 2)*单盘容量
热备盘:备份故障盘上的内容
5. RAID 5
①定义
RAID5支持并行IO,而磁盘上的数据呈现条带状的分布在所有的磁盘上,
因此读IO的速度相当于所有磁盘速度之和;
前提条件:磁盘没有损坏
写入速度,是所有磁盘速度总和的 1/4;
所以RAID5是不适合用在大批量写入数据的系统上。
以下几种情况,建议采用RAID5:
要求较高的空间利用率;
安全性要求不高;
大文件存储系统.
②图解
③解析
是RAID3的加强版
Spare:(磁盘数 - 1)*单盘容量
热备盘:备份故障盘上的内容
6. RAID 6
①定义
RAID6与RAID5 很类似,差别在于RAID6比RAID5多了一个用于校验的磁盘。
读取IO速度,RAID6 和RAID5 是完全一样。
写入速度,区别RAID6将一个命令分成三次读、三次写,即6次IO命令来完成。
RAID6实际写入磁盘的速度是全部磁盘的1/6
②图解
③解析
Spare:(磁盘数 - 2)*单盘容量
7. RAID 10
①定义
先镜像后条带,称为RAID10;
先条带后镜像,称为RAID01。
不管是 RAID10还是RAID01,都是组合大于2块磁盘时候的RAID1。
从性能上看, RAID10和RAID01都是一样的,都是RAID1。
区别:
RAID10在重建故障磁盘的时候,性能比RAID01要快,安全性要高,不计成本
小数据量频繁写入的系统,推荐采用RAID10。
②图解
③解析
Spare:(磁盘数 *单盘容量)/2
5、减少IO方式
5.1 系统特性(B/S)
为了能让大家更容易的理解,
我们还是老规矩,上图:
5.2 存储体系
直接上图,图中解析
5.3 存储结构演化
直接上图,图中解析
5.4 优化思路
小鱼之前有些过系列关于性能优化的文章,如:
小鱼之前有些过系列关于性能优化的文章,如:
《看过这篇《性能分析流程》后,和面试官聊天都有底气了!!!》
那么,为啥还要在唠叨一次呢,
因为小鱼今天把这个做成了图表形式,
更能通俗易懂!!!
也是煞费苦心啊 ~~
图解
6、总结
如果上面的还是不理解,
别着急,没关系,那就去看看小鱼的系列博文:深聊性能测试,从入门到放弃
保证,不能成为全栈性能测开专家,
也能成为资深测开专家!!