关于IO性能的一些学习与了解
关于IO性能的一些学习与了解
摘要
最近心气不高.
学习进度也拖的比较慢.
以后想能够多为自己着想.自己有自己的节奏, 不能只为别人考虑.
要改变一下自己的做事风格. 一些事情想帮则帮, 不想帮就当看不见.
互勉.
磁盘IO的指标
IOPS
RT
BW
部分监控指标的解释
iowait
await
util%
iowait
Percentage of time that the CPU or CPUs were idle during
which the system had an outstanding disk I/O request.
其实 iowait计算的标准就是 CPU在idle时存在IO操作的比率
第一点必须是CPU属于idle的
第二点是进行了io操作
需要说明一下.所有的监控指标都是基于采样的.
所以如果CPU的压力很大, 是不会有太多 iowait的.
如果是单线程专用的情况可能存在io不足导致CPU在等待的情况
但是大多数情况可能就是CPU比较闲,没有太多工作要做.
await
每个I/O的平均耗时,
包括在内核 IO 队列内的时间和在存储设备上执行此 IO 的时间,
所以 await 高可能有两个原因,
一是 IO 在 IO queue 里耗时较长,
二个就是由于 IO 在存储设备上执行的时间比较长,
而 IO 在 IO queue 里耗时较长可能是由于程序一次并发了过多的 IO, 让 IO 在 queue 排队,
IO 在存储设备上执行的时间比较长也有可能时 IO 本身就比较大,
例如在硬盘上写 1KB 文件, 耗时一定是比 1MB的时间短的,
所以 await 高, 还要结合业务本身的特点判断 await 高的原因
来源: https://blog.csdn.net/MrSate/article/details/105372924
util%
这个反映 IO queue, 中存在 IO 在采样周期里的占比,
只要 IO queue 中存在 IO, 就会被计入到 %util 的时间内,
无论是 1 个 IO 或者 100 个IO, 并且也只计算 IO 存在于 queue 里面的时间,
所以此时即使磁盘压力较大, 但是 IO queue 中并没有排队的 IO 那么 %util 也不会高(例如每次 IO size 都比较大),
或者有些程序进行顺序 IO, 完成几个再发下一个, 并且 IO size 并不大, 此时即使磁盘压力较小 %util 也会比较高
一些自己的理解
IO性能虽然有三个比较大的指标, 吞吐量, 响应时间, 每秒IO次数
但是能够进行磁盘优化的地方也很多
需要说明一下. 监控指标是基于很早的机械磁盘来的
但是现阶段因为raid卡以及固态磁盘的飞速发展, 现在再看着三个监控指标的意义其实已经脱离了实际情况.
磁盘是通过磁头的寻道来进行IO块的寻找和基于磁头对盘面进行磁性读取进行数据读取.
早期的磁盘其实磁头比较少, 但是随着现在硬盘技术的发展, 磁头的数量越来越多.
现阶段的硬盘都是盘面旋转, 磁头在旋转带起来的气流将磁头升起来. 然后由步进电机进行寻址和读取写入.
所以理论上的最大寻址时间是 60/转速(rpm), 比如 15000rpm的磁盘,平均寻址时间就是最时间的一半约为 2ms的时间.
前期操作系统的一些调度算法主要是 电梯算法 也是为了将就磁盘磁头进行位置选择来提高寻址和读取的速度.
这里就有了 IO队列数量和IO队列深度的两个概念.
IO对列数量和深度
按照机械磁盘的理解.
IO队列可以理解为 磁头的数量.
队列深度可以理解为 操作系统一次给这个磁头想要读取和写入的任务数量.
基于机械磁盘的一些设置在raid卡的大容量缓存,以及固态硬盘面前变的越来越难以发挥他的性能.
最开始的ACHI 其实只允许一个队列, 并且队列深度是32最大.
但是NVME的存储协议下, 可以有 64000个对列, 并且每个队列都可以有64000的深度.
如果队列深度不够, 就算是磁盘的性能足够好, 也会导致磁盘喂不饱. 显得性能比较弱一些.
关于USE, 利用率 错误率 饱和度
操作系统最容易观测的是自己的行为, 所以很多监控其实更多的考虑的是操作系统层的
到底硬件层的监控其实不是非常多.
比如
%util
表示采样期间, 队列里面有没有IO的请求, 其实并没有考虑多少个队列.
如果可以支持较多的队列,但是仅用了一个队列, 导致利用率很高, 但是实际上磁盘的艳丽并不是很大.
如果提高IO对列数量, 加深队列深度, 还是能够提高性能的
相反, 如果磁盘有压力, 就不能提高太多, 这一块可以通过RT时间来排查,
如果使用率很高, 但是RT时间很短,可以适当加大, 如果RT时间很长, 则需要考虑升级存储.
%iowait
寿命采样期间, CPU没有压力,或者是在等磁盘的返回
这个时候可以采用比如epoll 后者是其他的IO非阻塞模型来提高吞吐量
也可以使用异步模式来提高产品的性能. 当然, 如果此时IOPS和吞吐量都已经到达协议的上限
说明机器磁盘的确存在并且, 需要升级.
await
如果await时间较长, 说明要么硬盘不够快, 要么队列不合理, 需要进行调整
调整也是需要根据 磁盘的吞吐量, IOPS, 以及RT来记性
如果吞吐量低, 速度快, 可能跟队列数量有关系, 或者是调度算法有关, 需要进行处理.
总结
任何事物都要从多个角度来进行查看
不能就一个指标就得出结论
需要辩证的完整的去查看系统性能.
共勉.
关于IO性能的一些学习与了解的更多相关文章
- Performance Monitor4:监控SQL Server的IO性能
SQL Server的IO性能受到物理Disk的IO延迟和SQL Server内部执行的IO操作的影响.在监控Disk性能时,最主要的度量值(metric)是IO延迟,IO延迟是指从Applicati ...
- SQL Server中一个隐性的IO性能杀手-Forwarded record
简介 最近在一个客户那里注意到一个计数器很高(Forwarded Records/Sec),伴随着间歇性的磁盘等待队列的波动.本篇文章分享什么是forwarded record,并从原理上谈一 ...
- Linux的IO性能监控工具iostat详解
Linux系统出现了性能问题,一般我们可以通过top.iostat.free.vmstat等命令来查看初步定位问题.其中iostat可以提供更丰富的IO性能状态数据. . 基本使用 $iostat - ...
- 磁盘IO性能监控(Linux 和 Windows)
磁盘IO性能监控(Linux 和 Windows) 作者:终南 <li.zhongnan@hotmail.com> 磁盘的IO性能是衡量计算机总体性能的一个重要指标.Linux提供了i ...
- 磁盘工作原理与IO性能分析
最近,在研究如何优化产品设备的磁盘IO性能,需要深入研究磁盘及文件系统原理和工作机制,下面简要总结下关于磁盘方面的东西,下篇文章再分享文件系统的. 机械磁盘结构: 无论哪种机械硬盘,都主要由盘片.磁头 ...
- 性能调优之访问日志IO性能优化
性能调优之访问日志IO性能优化 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821 ...
- Centos硬盘IO性能检测命令iostat[转]
Centos硬盘IO性能检测命令iostat[转] 在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都 ...
- Linux如何查看与测试磁盘IO性能
1. 查看磁盘 IO 性能 1.1 top 命令 top 命令通过查看 CPU 的 wa% 值来判断当前磁盘 IO 性能,如果这个数值过大,很可能是磁盘 IO 太高了,当然也可能是其他原因,例如网络 ...
- Linux IO性能分析blktrace/blk跟踪器
关键词:blktrace.blk tracer.blkparse.block traceevents.BIO. 本章只做一个记录,关于优化Block层IO性能方法工具. 对Block层没有详细分析,对 ...
- 性能调优3:硬盘IO性能
数据库系统严重依赖服务器的资源:CPU,内存和硬盘IO,通常情况下,内存是数据的读写性能最高的存储介质,但是,内存的价格昂贵,这使得系统能够配置的内存容量受到限制,不能大规模用于数据存储:并且内存是易 ...
随机推荐
- 复杂查询so easy ,GaussDB(for Cassandra)推Lucene引擎全新解决方案
摘要:复杂查询so easy!GaussDB(for Cassandra)新特性来袭. 本文分享自华为云社区<来了!GaussDB(for Cassandra)新特性亮相>,作者:Gaus ...
- 从1天到10分钟的超越,华为云DRS在背后做了这些
摘要:华为云DRS助力一汽-大众BI平台实时查看报表,提升数字化决策能力. 本文分享自华为云社区<分钟级查看报表,华为云&一汽-大众,让商机时刻被洞见>,作者:GaussDB 数据 ...
- SDK设计与封装:从基础概念入门到架构设计落地笔记
什么是 SDK? SDK 全称 Software Development Kit,广义上的 SDK 是为特定的软件包.软件框架.硬件平台.操作系统等建立应用程序时所使用的开发工具的集合(在 iOS 项 ...
- iOS描述文件(.mobileprovision)一键申请
转载:IOS描述文件制作教程 iOS描述文件(.mobileprovision)一键申请 在主界面上点击描述文件按钮. 编辑切换为居中 添加图片注释,不超过 140 字(可选) 新建ios ...
- AI Studio 基本操作
https://aistudio.baidu.com/aistudio/projectdetail/6182202 项目启停 执行和调试 添加代码或文件 运行代码 %cd /home/aistudio ...
- 引用 AspNetCoreRateLimit => StatusCode cannot be set because the response has already started.
app.UseIpRateLimiting(); #需要放在前面,否则抓去不准,还有可能会出现下列错误 本次出现这个错误,是因为 .Net Core 跨域 里面的这行:httpContext.Res ...
- Docker SpringBoot Skywalking 8.1 agent
下载源码包:https://archive.apache.org/dist/skywalking/8.1.0/ -- 创建存放目录 mkdir -p /opt/skywalking -- 进入目录 c ...
- Mysql--between
between 用于where 表达式中,选取介于两个值之间的数据范围,同and一起搭配使用 语法: expr [NOT] BETWEEN begin_expr AND end_expr; 在整个表达 ...
- CO40/CO41转生产订单下达时不能创建采购申请
一.配置 CO01创建生产订单,创建时生成采购申请,改为下达时创建采购申请.通过配置,将预留/采购申请 更改为2即可. 但是CO41和CO40通过配置,并不能达到更改预留/采购申请 为2. 二.调试源 ...
- Spring 学习笔记(1)文章导读
<Spring 学习笔记>系列文章是博主在学习过 Spring 后对其进行总结的入门系列博文,适合初入 Spring 的小白,如果你最近正在学习或者打算学习 Spring 的话,不妨随着本 ...