聊聊 Linux iowait

哈喽大家好,我是咸鱼。

我们在使用 top 命令来查看 Linux 系统整体 CPU 使用情况的时候,往往看的是下面这一列:

%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  68.0 wa,  0.0 hi,  0.0 si,  0.0 st

其中,man 手册解释 wa 表示 CPU 在等待 I/O 操作(iowait)的时间百分比。

上面输出显示:CPU 有 68% 的时间消耗在等待 I/O 操作完成。按照也就是说有 68% 的 CPU 时间被浪费掉了?可是 Linux 会让 CPU 宝贵的性能白白浪费在耗时的 I/O 等待上吗?CPU 在 iowait 状态的时候能执行其他任务吗?

实际上当 CPU 处于 iowait 状态时,理论上也应该被视为处于 idle (空闲)状态,那 iowait 和 idle 之间有什么联系呢?

今天我们就来解开这些疑惑,来看看 iowait 到底是什么。

参考文章:

https://www.kawabangga.com/posts/5903https://blog.popkx.com/linux系统top命令中的iowait究竟是什么意思/https://www.linfo.org/process_state.htmlhttps://blog.pregos.info/wp-content/uploads/2010/09/iowait.txt

进程和 CPU 状态

我们首先要搞清楚进程的状态和 CPU 状态。

进程可以分为下面几种状态:

  1. R:可执行状态(runnable),表示进程正在被 CPU 执行或者处在 CPU 队列中等待分配 CPU 时间片。
  2. S:可中断睡眠状态(interrupted sleep),表示进程处于睡眠状态,当特定条件或者信号到达时,就会被唤醒,状态也由 S 变成 R。
  3. D:不可中断睡眠状态(uninterrupted sleep),跟状态 S 类似,只是进程在接收到信号时不会被唤醒。这类状态的进程一般在等待 I/O 结束。
  4. Z:僵尸状态(zombie),表示进程已经终止(死透了),但父进程还没有发出 wait4() 系统调用去读取它的结束信息。(可以理解为进程死【终止】后 父进程要给它收尸【获取该进程的终止状态】)
  5. T:暂停状态(stopped),表示进程已经暂停(还没死透),是可以恢复的(比如我们给进程发送 SIGSTOP 或者按 CTRL+Z,就可以将进程置为暂停状态,可以通过 bg/fg 命令,或者发送 SIGCONT 信号恢复。)

CPU 一共有四种状态,在任一时刻,CPU 的状态都是四种中的一种。这四种状态是:user,sys,idle,iowait 。比如 sar、top会用百分比表示 CPU 分别处于这四种状态的时间,这四种状态相加的结果是 100%。

上面提到的 4 种 CPU 状态,其实只有 2 种:

  1. 工作/忙碌(busy)
  2. 非工作/空闲(idle)

其中 busy 状态下又分成了:

  1. user:表示 CPU 目前正在执行用户空间的代码
  2. system:表示 CPU 目前正在执行内核空间的代码

idle 状态下又分成了:

  1. idle:系统中没有 R 状态的进程了
  2. iowait:系统中没有 R 状态的进程但有进程卡在 I/O 上

这里可以看到:iowait 其实可以归类到 idle 状态,本质上表示 CPU 是空闲的,只不过 iowait 表示任务中有等待 I/O 操作完成的时间。

那既然 iowait 也是一种 idle,CPU 在 iowait 状态的时候能执行其他任务吗?下面让我们来看一个例子。

举个栗子

本次例子在双核 CentOS 7 环境下实验。

我们使用 dd 命令模拟高密集 I/O 任务,并且使用 taskset 来为任务指定 CPU

# taskset 后的数字 1 并不是 CPU 的编号,而是一种掩码。
taskset 1 dd if=/dev/sda of=/dev/null bs=1MB

此时通过 top 命令查看 CPU 使用率,能够发现 CPU0 的 wa 项接近 100,这说明 CPU0 几乎所有的时间都花在等待 I/O 操作完成上。

那么,是不是此时 CPU 就没有精力处理其他任务了呢?我们再输入下面这条命令:

taskset 1 sh -c "while true; do true; done"

这条命令是在相同的 CPU 上执行一个死循环,用于模拟计算密集型任务。

可以看到:CPU0 的 wa 降低为 0 了,与此同时 ussy 的时间占比接近 100% 。CPU 在 iowait 状态的时候能执行了其他任务。

但这就说明 dd 命令产生的进程没有阻塞在 I/O 上吗?并不是。

假设有一个进程需要花 70% 的时间等待 I/O 完成,把它放到一个空闲的单 CPU 的系统中,显示的 iowait 是 70%。

但是我在这个系统中增加一个非 I/O 的计算任务,iowait 就变成 0 了。而我们之前的那个进程依然需要花 70% 的时间等待 I/O。

一个是从 CPU 角度来看,一个是从进程的角度来看,iowait 是 CPU 的一个状态,它不是进程的状态。iowait 很低,不能代表进程没有阻塞在 I/O 上。

总结

最后总结一下:

1)不要搞混 CPU 状态和进程的状态。进程有 R、S、D、Z、T,5 种状态;CPU 有 4 种状态:工作(user、system 两种)和空闲(idle、iowait 两种)。

2)iowait 表示 CPU 其实是空闲的,不过 CPU 并不是严格意义上的 “空闲”,上面还有等待 I/O 操作的进程在执行。

3)系统 iowait 高:

  1. 系统存在 I/O 性能问题:系统正在做的工作,大部分时间都是在等待 I/O 了。
  2. 有进程因为等待 I/O 操作而阻塞,但这并不意味着系统不可以运行其他进程。

4)系统 iowait 低不能说明进程没有阻塞在 I/O 上。因为 CPU 在 iowait 状态的时候能执行其他进程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

异地组网、内部网络需求同时满足,贝锐企业路由器G300开箱体验

由于公司最近新增了办事处,作为IT管理员的我不仅需要搞定办事处的网络,还需要解决远程访问公司内部办公系统以及文件存储服务器的问题。 在此之前,只有少量人员出差时,我们采用了虚拟专网方案来进行远程访问。然而,新…

深度学习基础之《TensorFlow框架(15)—神经网络》

一、神经网络基础 1、什么是神经网络 人工神经网络(Artificial Neural Network,简写为ANN)。也简称为神经网络(NN) 是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)结构和功…

电脑虚拟机有免费的吗?常见的虚拟机工具软件有哪些?Parallels Desktop19最新版本好用吗

PD虚拟机,即Parallels Desktop,是一款专为Mac用户设计的虚拟机软件,由Parallels公司开发,它允许用户在Mac操作系统上无缝运行Windows、Linux以及其他操作系统,并在这些系统中安装程序或者游戏,无需重启即可…

MySQL权限管理大揭秘:用户、组、权限解析

欢迎来到我的博客,代码的世界里,每一行都是一个故事 MySQL权限管理大揭秘:用户、组、权限解析 前言用户和组的概念用户和组的概念创建和管理用户创建和管理角色 权限的类型和分配MySQL中的权限类型分配不同类型的权限给用户和组 权限验证与日…

Unity系统学习笔记

文章目录 1.基础组件的认识1.0.组件继承关系图1.1.项目工程文件结构,各个文件夹都是做什么的?1.2.物体变化组件1.2.3.三维向量表示方向1.2.4.移动物体位置附录:使用变换组件实现物体WASD移动 1.3.游戏物体和组件的显示和禁用1.3.1.界面上的操…

【Linux】实现一个进度条

我们之前也学了gcc/vim/make和makefile,那么我们就用它们实现一个进度条。 在实现这个进度条之前,我们要先简单了解一下缓冲区和回车和换行的区别 缓冲区其实就是一块内存空间,我们先看这样一段代码 它的现象是先立马打印,三秒后程…

《QT实用小工具·三十八》QT炫酷的菜单控件

1、概述 源码放在文章末尾 非常飘逸的 Qt 菜单控件,带有各种动画效果,用起来也十分方便。 无限层级,响应键盘、鼠标单独操作,支持单快捷键。 允许添加自定义 widget、layout,当做特殊的 QDialog 使用。 项目demo演示…

大数据学习第四天

文章目录 yaml 三大组件的方式交互流程hive 使用安装mysql(hadoop03主机)出现错误解决方式临时密码 卸载mysql (hadoop02主机)卸载mysql(hadoop01主机执行)安装hive上传文件解压解决版本差异修改hive-env.sh修改 hive-site.xml上传驱动包初始化元数据在hdfs 创建hive 存储目录启…

pytorch-MNIST测试实战

目录 1. 为什么test2. 如何做test3. 什么时候做test4. 完整代码 1. 为什么test 如下图:上下两幅图中蓝色分别表示train的accuracy和loss,黄色表示test的accuracy和loss,如果单纯看train的accuracy和loss曲线就会认为模型已经train的很好了&a…

23年新算法,SAO-SVM,基于SAO雪消融算法优化SVM支持向量机回归预测(多输入单输出)-附代码

SAO-SVM是一种基于SAO雪消融算法优化的支持向量机(SVM)回归预测方法,适用于多输入单输出的情况。下面是一个简要的概述,包括如何使用SAO-SVM进行回归预测的步骤: 步骤: 1. 数据准备: 收集并准…

勾八头歌之RNN

一、RNN快速入门 1.学习单步的RNN:RNNCell # -*- coding: utf-8 -*- import tensorflow as tf# 参数 a 是 BasicRNNCell所含的神经元数, 参数 b 是 batch_size, 参数 c 是单个 input 的维数,shape [ b , c ] def creatRNNCell(a,b,c):# 请在此添加代码…

sprinboot+人大金仓配置

1. .yml 配置 spring:datasource:type: com.alibaba.druid.pool.DruidDataSource#driverClassName: dm.jdbc.driver.DmDriver## todo 人大金仓driverClassName: com.kingbase8.Driverdruid:## todo 人大金仓master:url: jdbc:kingbase8://111.111.111.111:54321/dbname?cu…

粘合聚酰亚胺PI塑料材料使用UV胶的优势有哪些? (三十四)

聚酰亚胺PI难于粘接,在PI粘接方法中使用UV胶粘剂粘接PI的优势有哪些? 聚酰亚胺(PI)是一种具有耐高低温性能、高绝缘性、耐化性、低热膨胀系数的材料,广泛用于FPC基材和各种耐高温电机电器的绝缘材料。然而,…

MySQL常见的约束

什么是约束? 限制,限制我们表中的数据,保证添加到数据表中的数据准确和可靠性!凡是不符合约束的数据,插入时就会失败,插入不进去的! 比如:学生信息表中,学号就会约束不…

Java | Leetcode Java题解之第45题跳跃游戏II

题目&#xff1a; 题解&#xff1a; class Solution {public int jump(int[] nums) {int length nums.length;int end 0;int maxPosition 0; int steps 0;for (int i 0; i < length - 1; i) {maxPosition Math.max(maxPosition, i nums[i]); if (i end) {end maxP…

POP —— 简介

目录 Emitting Applying forces Reacting to surfaces Limiting particle speed Following a leader or leaders Swirling particles around vortex filaments Visualizing Forces Collisions Instancing and Rendering Sprite Particles Streams Writing particle…

编程基础“四大件”

基础四大件包括&#xff1a;数据结构和算法,计算机网络,操作系统,设计模式 这跟学什么编程语言,后续从事什么编程方向均无关&#xff0c;只要做编程开发&#xff0c;这四个计算机基础就无法避开。可以这么说&#xff0c;这基础四大件真的比编程语言重要&#xff01;&#xff0…

色温的介绍

文章目录 色温的概念照明领域显示技术领域 色温的概念 色温是描述光源色彩特性的一个重要参数&#xff0c;通常用来表征光的暖冷程度。它以开尔文&#xff08;Kelvin&#xff0c;K&#xff09;为单位来表示&#xff0c;通常简写为K。色温越高&#xff0c;光线看起来就越接近于…

如何用PHP语言实现远程语音播报

如何用PHP语言实现远程语音播报呢&#xff1f; 本文描述了使用PHP语言调用HTTP接口&#xff0c;实现语音播报。通过发送文本信息&#xff0c;来实现远程语音播报、语音提醒、语音警报等。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称1…

比特币之路:技术突破、创新思维与领军人物

比特币的兴起是一段充满技术突破、创新思维和领军人物的传奇之路。在这篇文章中&#xff0c;我们将探讨比特币发展的历程&#xff0c;以及那些在这一过程中发挥重要作用的关键人物。 技术突破与前奏 比特币的诞生并非凭空而来&#xff0c;而是建立在先前的技术储备之上。在密码…