深聊性能测试,从入门到放弃之:如何对IO进行性能调优

简介: 深聊性能测试,从入门到放弃之:如何对IO进行性能调优

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 优化思路

小鱼之前有些过系列关于性能优化的文章,如:

小鱼之前有些过系列关于性能优化的文章,如:

性能调优怎么做,看过这一篇,菜鸟变大佬

MySQL性能监控及优化

看过这篇《性能分析流程》后,和面试官聊天都有底气了!!!

关于MySQL性能优化方式

那么,为啥还要在唠叨一次呢,

因为小鱼今天把这个做成了图表形式,

更能通俗易懂!!!

也是煞费苦心啊 ~~

图解

6、总结

如果上面的还是不理解,

别着急,没关系,那就去看看小鱼的系列博文:深聊性能测试,从入门到放弃

保证,不能成为全栈性能测开专家,

也能成为资深测开专家!!


相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
3月前
|
网络协议 安全 测试技术
手撕测试tcp服务器效率工具——以epoll和io_uring对比为例
手撕测试tcp服务器效率工具——以epoll和io_uring对比为例
45 2
|
4月前
|
存储 Java 数据安全/隐私保护
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
|
4月前
|
存储 移动开发 Java
从零开始学习 Java:简单易懂的入门指南之IO字节流(三十)
从零开始学习 Java:简单易懂的入门指南之IO字节流(三十)
|
4月前
|
存储 算法 Java
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
|
4月前
|
缓存 Java API
IO流【IO流技术介绍、 IO流的经典写法、 IO流新语法经典写法、Java中流的概念细分 】(一)-全面详解(学习总结---从入门到深化)
IO流【IO流技术介绍、 IO流的经典写法、 IO流新语法经典写法、Java中流的概念细分 】(一)-全面详解(学习总结---从入门到深化)
43 0
|
11天前
|
消息中间件 网络协议 物联网
如何入门做物联网系统压测?
【4月更文挑战第18天】物联网系统在架构、网络模式、通信协议等方面与传统的互联网系统有所区别。因此,传统的性能测试方法不能直接套用到物联网系统中。
88 13
如何入门做物联网系统压测?
|
4月前
|
分布式计算 Java 大数据
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
53 0
|
8月前
|
存储 关系型数据库 MySQL
深聊性能测试,从入门到放弃之:性能测试技术栈,看完这篇,保证刷新你对性能测试的认知~~
深聊性能测试,从入门到放弃之:性能测试技术栈,看完这篇,保证刷新你对性能测试的认知~~
156 1
|
4月前
|
存储 自然语言处理 Java
从零开始学习 Java:简单易懂的入门指南之IO缓冲流、转换流(三十二)
从零开始学习 Java:简单易懂的入门指南之IO缓冲流、转换流(三十二)
|
4月前
|
缓存 Java
IO流【Java中IO的四大抽象类、常用流详解 、 缓冲字节流、 文件字符流、缓冲字符流】(二)-全面详解(学习总结---从入门到深化)
IO流【Java中IO的四大抽象类、常用流详解 、 缓冲字节流、 文件字符流、缓冲字符流】(二)-全面详解(学习总结---从入门到深化)
38 0
IO流【Java中IO的四大抽象类、常用流详解 、 缓冲字节流、 文件字符流、缓冲字符流】(二)-全面详解(学习总结---从入门到深化)