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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
性能测试 PTS,5000VUM额度
简介: 深聊性能测试,从入门到放弃之:如何对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进行规格选择与性能压测。
目录
相关文章
|
22天前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
40 4
|
2月前
|
测试技术 持续交付 开发者
探索自动化测试的无限可能:从入门到精通
在软件开发领域,确保产品质量是至关重要的。自动化测试作为一种高效、可靠的测试方法,正逐渐成为行业标准。本文将带你深入了解自动化测试的世界,从基础概念到实践技巧,帮助你掌握这一强大的工具。无论你是初学者还是有经验的开发者,都能从中获得宝贵的知识和启发。
|
2月前
|
Java 测试技术 开发者
初学者入门:掌握单元测试的基础与实践
【10月更文挑战第14天】单元测试是一种软件测试方法,它验证软件中的最小可测试单元——通常是单独的函数或类——是否按预期工作。单元测试的目标是确保每个模块在其自身范围内正确无误地运行。这些测试应该独立于其他模块,并且应该能够反复执行而不受外部环境的影响。
71 2
|
20天前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
71 13
|
2月前
|
监控 测试技术 PHP
性能和压力测试
【10月更文挑战第10天】性能和压力测试
121 60
|
1月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
112 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
26天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
59 1
|
1月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
38 4
|
1月前
|
监控 JavaScript 前端开发
如何在实际应用中测试和比较React和Vue的性能?
总之,通过多种方法的综合运用,可以相对客观地比较 React 和 Vue 在实际应用中的性能表现,为项目的选择和优化提供有力的依据。
36 1
|
1月前
|
Java 测试技术 Android开发
探索自动化测试的奥秘:从入门到精通
【10月更文挑战第37天】本文将带你进入自动化测试的世界,从基础知识到实战案例,逐步揭示自动化测试的神秘面纱。我们将一起探讨如何利用代码来简化测试过程,提高效率,并确保软件质量。无论你是初学者还是有经验的开发者,这篇文章都能为你提供有价值的见解和技巧。让我们一起踏上这段探索之旅吧!