关于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,通常情况下,内存是数据的读写性能最高的存储介质,但是,内存的价格昂贵,这使得系统能够配置的内存容量受到限制,不能大规模用于数据存储:并且内存是易 ...
随机推荐
- 电商业务容器化遇瓶颈,公有云Docker镜像P2P加速很安全
当前,电商平台会采用基于Docker的容器技术来承载618大促期间的一些关键业务版块,包括最简单的商品图片展示.订单详情页面等等. 通过容器化改造,电商平台的每个业务版块解耦,可以独立开发.部署和上线 ...
- Serverless: AI everywhere的下一块拼图
摘要:本文介绍华为云函数工作流(FunctionGraph)的灵活.速度,如何让开发人员提升工程效率,缩短TTM等 本文分享自华为云社区<华为云FunctionGraph函数工作流-- Serv ...
- 十大 CI/CD 安全风险(二)
在上一篇文章中,我们主要介绍了 CI/CD 中流程控制机制不足和身份及访问管理不足两大安全风险,并为企业及其开发团队在缓解相应风险时给出了一些建议.今天我们将继续介绍值得企业高度关注的 CI/CD 安 ...
- 怎么用 Solon 开发基于 undertow jsp tld 的项目?(新)
Solon 开发 jsp 项目是非常简单的,只要改用 jetty 启动器 或者 undertow 启动器,其它也没特别之处了.此文用 undertow + jsp + tld 这个套路搞一把: 一. ...
- AtCoder Regular Contest 120 AB题
比赛链接:Here A - Max Add 观察一下发现每次输出与两点有关,前缀和和当前位置最大值 int main() { cin.tie(nullptr)->sync_with_stdio( ...
- [Noip2012] 开车旅行 (倍增DP,难)
题目链接:https://ac.nowcoder.com/acm/contest/1047/A Description 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且 ...
- 3D编程模式:介绍设计原则
大家好~本文介绍6个设计原则的定义 系列文章详见: 3D编程模式:开篇 目录 单一职责原则(SRP) 依赖倒置原则(DIP) 接口隔离原则(ISP) 迪米特法则(LoD) 合成复用原则(CARP) 开 ...
- 简单实现el-dialog的拖拽功能
首先还是要明确几个概念,这里通过修改css并截图给大家介绍下,理解了这几个概念,代码写起来会得心应手许多. clientWidth,clientHeight scrollWidth,scrollHei ...
- elementUI表格单选
html代码 <el-table :data="gkbmList" max-height="264" border @selection-change=& ...
- 我让 ChatGPT 化身为全知全能的文档小助理,啥姿势她都会......
ChatGPT 虽然只是一个对话型人工智能,但已经震惊了全世界,有人甚至认为人工智能的奇点已经到来.未来一定会有很多人失业,从工业革命开始,每出现一次重大的技术变革,就必然会有一批人失业,我们要直面现 ...