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

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 深聊性能测试,从入门到放弃之:如何对IO进行性能调优(一)

1、引言


性能这块,虽然是小鱼一直不想去触碰的地方,

但是,身在江湖漂,哪能不带刀!!


小屌丝:鱼哥,最近你得注意身体啊

小鱼:昂… 怎么突然关心起我来了?

小屌丝:还用我说嘛,最近你博文更新的慢,不是在耍妹子,就是在去耍妹子的路上。

小鱼:( ‵o′)凸…我这是在忙工作的事情

小屌丝:我差点信了!!

小鱼:…算了,我不替自己解释了, 我替IO解释吧!

小屌丝:难道,今天要整IO? 那赶紧!


在认识IO之前,我们要先了解 一下磁盘。

然后在慢慢的认识IO


2、 硬盘知识


2.1 磁盘原理

1、定义

①盘片以每分钟数千转到上万转的速度在高速旋转,15K 10k 7.5k 5.2k RPM

②磁头就能对盘片上的指定位置进行数据的读写操作

③磁头磁化磁盘记录数据


2、图片

image.png

image.png


3、HDD示意图

image.png


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操作的次数


图片解析

image.png

计算公式


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等待队列中所花费的等待时间。


②图片解析

image.png


3、IO监控


3.1 windows系统

我们可以直接使用windows自带的监控器

在电脑打开 “性能监视器”,既可看到想看的…


image.png

由于小鱼电脑有上帝模式,所以,就直接打开 性能监视器。


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 流程图

image.png


3.4 磁盘性能分析

定义

1、Physical Disk : % Disk Time


2、Physical Disk : Avg.Disk Queue Length <2*盘数


3、Memory :Page Reads/sec


如果内存中没有,那么需要从磁盘中读取


列表展示

image.png


名词解析

①PR

Memery Page Reads/sec


②Q

Physical Disk Avg.Disk Queue Length


③DT

Physical Disk Time


④L

Low

⑤H

High



相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
25天前
|
Java 测试技术 API
Java 新手入门:Java单元测试利器,Mock详解
Java 新手入门:Java单元测试利器,Mock详解
69 1
|
22天前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
2天前
|
存储 Java 关系型数据库
“代码界的魔法师:揭秘Micronaut框架下如何用测试驱动开发将简单图书管理系统变成性能怪兽!
【9月更文挑战第6天】Micronaut框架凭借其轻量级和高性能特性,在Java应用开发中备受青睐。本文通过一个图书管理系统的案例,介绍了在Micronaut下从单元测试到集成测试的全流程。首先,我们使用`@MicronautTest`注解编写了一个简单的`BookService`单元测试,验证添加图书功能;接着,通过集成测试验证了`BookService`与数据库的交互。整个过程展示了Micronaut强大的依赖注入和测试支持,使测试编写变得更加高效和简单。
12 4
|
13天前
|
消息中间件 Kafka 测试技术
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
|
16天前
|
监控 网络协议 安全
在Linux中,如何进行系统性能的峰值测试?
在Linux中,如何进行系统性能的峰值测试?
|
20天前
|
NoSQL Java Linux
Redis6入门到实战------ 六、Redis_Jedis_测试
这篇文章介绍了如何使用Jedis客户端连接Redis,并进行基本的数据类型操作测试,包括字符串、列表、集合、哈希和有序集合的相关API使用示例。
Redis6入门到实战------ 六、Redis_Jedis_测试
|
29天前
|
测试技术 开发者
软件测试的艺术:从入门到精通
在数字化时代的浪潮中,软件已成为我们日常生活和工作不可或缺的一部分。然而,高质量的软件并非偶然产生,它背后隐藏着一门科学——软件测试。本文将深入浅出地探讨软件测试的基本原则、方法和技术,旨在为初学者提供一个清晰的学习路径,同时为经验丰富的测试人员提供一些深入的思考和启示。无论你是软件开发者还是测试工程师,这篇文章都将为你打开一扇通往高质量软件世界的大门。
38 2
|
1月前
|
监控 Java 测试技术
实战派必看!Python性能测试中,JMeter与Locust如何助力性能调优
【8月更文挑战第6天】性能优化是软件开发的关键。本文介绍JMeter与Locust两款流行性能测试工具,演示如何用于Python应用的性能调优。JMeter可模拟大量用户并发访问,支持多种协议;Locust用Python编写,易于定制用户行为并模拟高并发。根据场景选择合适工具,确保应用在高负载下的稳定运行。
76 4
|
1月前
|
关系型数据库 MySQL OLTP
性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
【8月更文挑战第6天】使用 pt-query-digest 工具分析 MySQL 慢日志性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
124 0
性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
|
15天前
|
缓存 NoSQL 测试技术
【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能
【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能
下一篇
DDNS