关于IO性能的一些学习与了解

关于,io,性能,一些,学习,了解 · 浏览次数 : 240

小编点评

## IO性能监控指标总结 **IOPSRTBW:** * 指的是 CPU 在 idle 状态时存在 I/O 请求的占比。 * CPU 处于 idle 状态时,如果有 outstanding I/O 请求,就会计入到 %util 的时间。 * %util 越高,说明 I/O 请求占用的比例越高,性能越差。 **await:** * 指的是 I/O 操作平均耗时的占比。 * 等待每个 I/O 的平均耗时包括内核 IO 队列内的时间和存储设备上执行此 IO 的时间。 * 等待时间越长,说明 I/O 操作越拖延,性能越差。 **IO queue 和 IO深度:** * IO queue 是指 I/O 操作队列的长度。 * IO 深度是指一次 I/O 操作对列的数量。 * IO queue 和 IO 深度都是基于机械磁盘的理解。 * 队列深度设置为 32,表示一个队列最多可以处理 32 个 I/O 操作。 **IO对列和深度:** * IO 对列数和深度是指一个磁盘上的磁片可以处理的最大 I/O 请求数量。 * IO 对列数指的是队列中可处理的最大 I/O 请求数量。 * IO 对深度指的是一个队列可以处理的最大 I/O 请求数量。 **其他指标:** * USE、利用率、错误率、饱和度:针对操作系统层和硬件层监控的指标。 * IOPS、吞吐量、RT:针对磁盘性能的指标。 **结论:** * 监控指标可以帮助我们了解系统性能,但我们需要结合具体的业务场景进行分析。 * 不同指标之间存在相互依赖,需要根据不同的指标进行分析。 * 优化系统性能需要从多个角度进行处理,例如提高 IOPS、降低 IO wait时间、优化 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性能的一些学习与了解相似的内容:

关于IO性能的一些学习与了解

关于IO性能的一些学习与了解 摘要 最近心气不高. 学习进度也拖的比较慢. 以后想能够多为自己着想.自己有自己的节奏, 不能只为别人考虑. 要改变一下自己的做事风格. 一些事情想帮则帮, 不想帮就当看不见. 互勉. 磁盘IO的指标 IOPS RT BW 部分监控指标的解释 iowait await

CPU算力提升与实际性能提升的关系

## 关于SPEC2006CPU和RedisBenchmark的理解 ``` 最近研究过硬件CPU的性能和Redis这样单线程重IO服务 突然想对比一下CPU算力提升占Redis性能提升的比率情况 性能很大程度由CPU决定,但是其他部分的提升也会有一些促进作用. 比如内存带宽,IO调度算法优化等.

[转帖]硬盘IO性能

https://juejin.cn/post/6844904088715411463 我们大部分时间都是在开发应用系统,当我们的功能实现时和实现后,我们可能会经常的思考或者讨论关于性能方面的问题,性能优化也有很多个方面,那么我们今天主要来一起探讨一下IO性能。 谈到IO性能,我们就会联想到我们电脑的

[转帖]性能案例-Linux下解决time_wait连接过多(Linux内核优化)

一、性能测试的主要概念和计算公式 系统吞度量要素: 一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。 单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。 系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间

[转帖]Jmeter插件之ServerAgent服务器性能监控工具的安装和使用

https://www.cnblogs.com/pachongshangdexuebi/p/13354201.html 一、前言 性能测试时我们关注的重要指标是:并发用户数,TPS,请求成功率,响应时间,服务器的CPU,memory, I/O disk等。Jmeter的聚合报告可以查看并发数、吞吐量

[转帖]如何提高Linux下块设备IO的整体性能?

http://www.yunweipai.com/6989.html 运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维 作者介绍 邹立巍 Li

[转帖]Nginx性能优化-CPU篇

性能优化方法论 软件层面提升硬件使用率 增大CPU的利用率 增大内存的利用率 增大硬盘IO的利用率 增大网络带宽的利用率 提升硬件 网卡:万兆网卡 硬盘:固体硬盘,关注IOPS和BPS指标 CPU:更快主频,更多核心,更大缓存,更优架构 内存:更快访问速度 超出硬件性能上限后使用DNS CPU基本知

[转帖]nginx性能和软中断

https://plantegg.github.io/2022/11/04/nginx%E6%80%A7%E8%83%BD%E5%92%8C%E8%BD%AF%E4%B8%AD%E6%96%AD/ 问题 如何调整软中断才能达到最优性能? 通过 top 观察软中断 和 si%、sy% 的关系 测试机型

[转帖]Nginx性能优化-TCP篇

https://www.cnblogs.com/Otiger/p/16220187.html 性能优化方法论 软件层面提升硬件使用率 增大CPU的利用率 增大内存的利用率 增大硬盘IO的利用率 增大网络带宽的利用率 提升硬件 网卡:万兆网卡 硬盘:固体硬盘,关注IOPS和BPS指标 CPU:更快主频

Python:对程序做性能分析及计时统计

如果只是想简单地对整个程序做计算统计,通常使用UNIX下的time命令就足够了。由于我用的是Mac系统,和Linux系统的输出可能有不同,不过关键都是这三个时间:user: 运行用户态代码所花费的时间,也即CPU实际用于执行该进程的时间,其他进程和进程阻塞的时间不计入此数字;system: 在内核中执行系统调用(如I/O调用)所花费的CPU时间。total(Linux下应该是real):即挂钟时间