Article Template
00 分钟
2024-9-19
2024-9-19
type
status
date
slug
summary
tags
category
icon
password

1、概述

 
在Linux系统中,iowait是一个重要的性能指标,它表示CPU在等待I/O操作(如磁盘读写)完成时处于空闲状态的时间比例。具体来说,iowait指的是在某个时间段内,CPU没有执行其他任务,而是在等待硬盘I/O请求完成的时间占总CPU空闲时间的百分比。
当系统的iowait值较高时,这通常意味着磁盘I/O操作可能是系统的性能瓶颈。但这并不一定总是问题,因为iowait高也可能是因为系统CPU资源充足,有足够的空闲时间来等待I/O操作完成。如果系统在高iowait的同时,CPU的其他使用率(如us用户空间占用率和sy系统空间占用率)较低,这可能表明系统实际上还有剩余的计算能力。
要深入了解系统的I/O性能问题,可以使用iostat命令来查看硬盘的读写情况,包括每秒的传输次数(tps)、每秒读取/写入的千字节数(kB_read/s和kB_wrtn/s)以及平均等待时间(await)等指标。这些指标可以帮助识别是否存在I/O瓶颈。
此外,iotop命令可以用来查看哪些进程正在使用I/O资源,从而可以针对性地进行优化。
总的来说,iowait是一个重要的系统性能指标,但它需要结合其他I/O相关的指标和工具一起使用,才能准确判断系统是否存在I/O性能问题。
 

2、什么是 iowait

Linux 中的解释:
Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.
iowait 指在一个采样周期内有百分之几的时间是属于以下情况:CPU处于空闲状态并且至少有一个未完成的磁盘IO请求。
 
每个CPU 可以处于以下状态之一: user, sys, idle, iowait , 我们通过 iostat工具可以看到这几个状态的值,它们都是以百分比的形式显示的,CPU 是在这几个状态之间切换,所以这几个值总和是 100%。
 

3、原理

在内核中,user, sys, idle, iowait 四种状态,每个状态都有一个计数器,一个采样周期内统计每个状态的计数器,最后计算每个计数器占总计数的百分比,结果就是每个状态所占的百分比。
当发生时钟中断的时候,内核会检查 CPU 当前的状态,如果 CPU 正在执行内核空间的指令,则 sys 的计数器加 1 ,如果是用户空间的指令,则 user 的计数器加 1。
如果 CPU 此时处于 idle 状态,内核会做以下检查:
12
1、是否存在从该 CPU 发起的一个未完成的本地磁盘IO请求;2、是否存在从该 CPU 发起的网络磁盘挂载的操作。
如果存在以上任一情况,则 iowait 的计数器加 1,如果都没有,则 idle 的计数器加 1。
当使用 iostat 工具时,它会读取上述四种计数器的值,间隔玩家指定的秒数后,再次读取计数器的值,取两次的差值就得到了采样周期内计的增量值,我们知道,Linux下每一个时钟 tick 是 10ms,根据间隔的秒数,就可以得到间隔了多少个时钟,而计数器是在每次时钟中断时进行计数,所以用每种状态的计数器的增量值除以总间隔时钟数,就能得到每种状态所占时间的百分比。
假如间隔时间是 1s,则共有 100 个时钟,假如 sys 计数为 2, user 计数为 3,iowait 计数为 0 , idle 计数为 95,则 它们的百分比依次为:2%、 3%、 0%、 95%。
 
上一篇
AMR运行环境及无线网络要求
下一篇
使用iVentoy (新一代PXE网启服务器)批量装机