【io】io等待为什么引发cpu过高?

article/2025/4/26 20:34:22

                磁盘读频繁,数据量大  ---> iowait高 ---> CPU飙升

IO(input output)主要指:文件IO,网络IO。

“等待IO就绪“究竟等的什么?

你一定不止在一个地方看到类似"cpu等待IO就绪,线程挂起..."的描述,不知你有没有想过CPU到底在等待个啥,等待个寂寞吗?为什么CPU要等待呢?CPU不能参与吗?

首先,cpu有两种状态,用户态和内核态,cpu会根据需要在两种状态之间切换。

用户态和内核态的cpu有什么区别呢?

想想古时候的将军,他手里握有兵权,但是他调用军队是需要有兵符的,没有兵符,他就没办法调兵遣将。

没了兵符的将军就是一个普通老百姓,只拥有有普通公民的权利,所以一个人有没有持有兵符,拥有的权限不一样。

一个人有兵符,你就是将军(将军态,类似内核态),你就能调动军队资源;没有兵符,你就是一介布衣(布衣态,类似用户态),拥有普通权利而已。

cpu同理,内核态的cpu有较高的权限,它能调用一些高级别的资源,比如访问一些安全级别较高的地址空间。

其次,计算机中存储是分结构的。除此之外,主存(内存)这一层面内部同样进行了逻辑划分,分为用户空间和内核空间。

顾名思义,内核空间只有处于内核状态的cpu才能访问的。

一个军队里,将军不可能管理所有人,他会设立千夫长,百夫长来管理。

cpu同样将部分职责交给了另一个硬件,叫作DMA。

“读操作”时,DMA负责将数据从磁盘拷贝到内核空间,注意是拷贝不是移动,然后cpu再从内核空间拷贝到用户空间。所以,cpu等待io就绪,在“读操作”时,等的就是DMA将数据从磁盘拷贝到内核空间。

为什么CPU要将它交给DMA搞?

因为CPU处理数据的速度远远大于IO准备数据的速度。

磁盘到内核空间的拷贝太慢了(想必你也知道不同级别的存储结构读写速度不一样),CPU的时间很宝贵的,它应该去做一些价值更大的东西。

CPU :工人,干活的,判断以及逻辑处理。

内存: 车间,工人干活的地方,车间中加工原料,当车间中没有原料了,在从仓库中取原料,对原料进行加工。内存本身有一定的存储空间,对内存中的数据进行处理的速度比从硬盘取数据再处理的速度快很多。

硬盘 :仓库,原料,数据存储。

CPU对数据进行判断以及逻辑处理,本身不能存储数据,这时cpu从内存取数据进行逻辑计算,如果内存没有数据,才会从硬盘读数据到内存,再对数据进行处理。

你想象,就像人吃饭一样,cpu就是人,内存就是碗,硬盘就是饭锅。

当cpu进程等待,会造成内存开销的增加,内存不够用的时候会用到虚拟内存,导致虚拟内存的增加,这时磁盘IO开销就会增加。

IO 性能对于一个系统的影响是至关重要的。

一个系统经过多项优化以后,瓶颈往往落在数据库;而数据库经过多种优化以后,瓶颈最终会落到 IO 。而 IO 性能的发展,明显落后于 CPU 的发展。redis也好, mongoDB也好,这些流行技术的背后都在直接或者间接地回避 IO 瓶颈,从而提高系统性能。

参考

CPU、内存、磁盘IO之间的关系

http://blog.itpub.net/31397003/viewspace-2650835/

CPU和磁盘IO实战笔记总结 

https://www.cnblogs.com/zhangyjblogs/p/14163607.html

面试官问我Linux的网络IO模式怎么办?

https://juejin.cn/post/6844904170663706638


http://chatgpt.dhexx.cn/article/LgQkjMyF.shtml

相关文章

platformIO环境安装

使用Platform IO作为Arduino的交叉编译环境 文章目录 使用Platform IO作为Arduino的交叉编译环境1.1 PlatformIO简介1.2 VScode下安装PlatformIO1.3软件启动界面1.4 软件配置 2. 开发平台和固件安装 最新安装方法请查看我另一篇博文: https://blog.csdn.net/kimiyan…

文件IO、标准IO的区别及其效率

系统IO:Unix/Linux下的系统文件IO,即文件访问机制不经过操作系统内核的缓存,数据直接在磁盘和应用程序地址空间进行传输。 标准IO:带缓存的IO,又称为标准IO(C标准库中提供了标准IO库,即stdio),…

如何理解 iowait

Linux中,%iowait 过高可能是个问题,严重的时候,它能使服务停止, 但问题是,多高才算高? 什么时候应该担心呢? 本文将讨论 iowait 的含义、相关的统计数据、原理以及 iowait的瓶颈问题 什么是 i…

Mysql的IO介绍及原因详解

有输入输出类型的交互系统都可以认为是I/O系统。 目录 一、IO操作 二、IO成本 三、IO分类 四、Mysql网络层IO(网络IO) 五、Mysql存储IO(磁盘IO) 一、IO操作 在计算机系统中I/O就是输入(Input)和输出(Outp…

IO概念

IO概念和五种IO模型 一、什么是IO? 我们都知道unix世界里、一切皆文件、而文件是什么呢?文件就是一串二进制流而已、不管socket、还是FIFO、管道、终端、对我们来说、一切都是文件、一切都是流、在信息交换的过程中、我们都是对这些流进行数据的收发操…

顺序IO和随机IO

顺序IO和随机IO 什么是顺序IO和随机IO如何解决随机IO造成的性能损失?问题什么是IOPS?机械硬盘和固态硬盘在随机IO上性能的影响因素?SSD作为随机存储设备,其访问任意一块的时间应该是相等的,为什么顺序IO还是快于随机IO? 什么是顺…

绘图工具-draw.io

draw.io是一个可配置的图表/白板可视化应用程序。draw.io 由英国软件公司JGraph Ltd拥有和开发。这是一个开源项目(但对贡献是封闭的),github链接:https://github.com/jgraph,可以绘制流程图、UML、类图、组织结构图、…

什么是IO Pad?

1.什么是IO pad? IO pad是一个芯片管脚处理模块,即可以将芯片管脚的信号经过处理送给芯片内部,又可以将芯片内部输出的信号经过处理送到芯片管脚。输入信号处理包含时钟信号,复位信号等,输出信号包含观察时钟、中断等…

Drawio使用简介(慢慢更新中)

drawio是一款强大、免费的绘图工具(基本可以替代收费的visio等),使用起来非常方便。支持网页版使用(网页版可以自己部署一套)以及客户端使用(支持windows,MacOS以及Linux)。 该项目…

计算机io接口主要功能,io接口的功能是什么

IO接口又称为输入输出接口,是信息处理系统与外部世界之间的通信。输入是系统接收的信号或数据,输出是从其发送的信号或数据。该术语也可以用作行动的一部分; 到“执行I / O”是执行输入或输出操作。 IO 接口,又称为输入输出接口,是信息处理系统(例如计算机)与外部世界(可能是人…

到底什么是IO

IO 作为操作系统的核心知识之一, 无论是在本机、传统的单体应用、还是分布式系统中,都有非常重要的地位. 今天就和大家系统地聊一聊 IO 相关的东西. IO IO,Input/Output 简写,是指内存和外设之间的数据复制的过程. 输入是指数据从外设复制到内存中, 输…

一文掌握 IO 基础知识与概念

💞哈喽!大家好,我是HappyGirl快乐女孩💞 😜是一位爱好技术的【技术Fans】!😜 💞💞💞 如果有对技术感兴趣的宅友,欢迎关注💞&#x1f4…

韦东山freeRTOS系列教程之【第三章】任务管理

文章目录 系列教程总目录概述3.1 基本概念3.2 任务创建与删除3.2.1 什么是任务3.2.2 创建任务3.2.3 示例1: 创建任务3.2.4 示例2: 使用任务参数3.2.5 任务的删除3.2.6 示例3: 删除任务 3.3 任务优先级和Tick3.3.1 任务优先级3.3.2 Tick3.3.3 示例4: 优先级实验3.3.4 示例5: 修改…

FreeRTOS教程——定时器(二)

Free RTOS定时器 一、概念 一、概论 软件定时器允许设置一段时间,当设置的时间到达之后就执行指定的功能函数,被定时器 调用的这个功能函数叫做定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期, 简而言之,当定时…

韦东山freeRTOS系列教程之【第二章】内存管理

文章目录 教程目录2.1 为什么要自己实现内存管理2.2 FreeRTOS的5种内存管理方法2.2.1 Heap_12.2.2 Heap_22.2.3 Heap_32.2.4 Heap_42.2.5 Heap_5 2.3 Heap相关的函数2.3.1 pvPortMalloc/vPortFree2.3.2 xPortGetFreeHeapSize2.3.3 xPortGetMinimumEverFreeHeapSize2.3.4 malloc…

FreeRTOS学习记录(安富莱FreeRTOS教程摘录)

FreeRTOS学习资料: 安富莱论坛FreeRTOS教程 FreeRTOS源码下载链接 第1章 为什么选用FreeRTOS 1.1 FreeRTOS优势 FreeRTOS优势 最大的优势就是开源免费,商业使用的话不需要用户公开源代码,也不存在任何版权问题,是当前小型嵌入…

STM32 FreeRTOS系列教程(一)FreeRTOS简介

参考资料:《正点原子STM32F4 FreeRTOS开发手册_V1.1》《野火FreeRTOS 内核实现与应用开发实战—基于STM32》 学习RTOS的意义 当我们进入嵌入式这个领域的时候,往往首先接触的都是单片机编程,单片机编程又 首选51 单片机来入门。这里面说的单…

FreeRTOS使用教程(配合CubeMX)

FreeRTOS使用教程(配合CubeMX) 一、CubeMX配置 在选择后单片机芯片后,在Middleware中选择FREERTOS的CMSIS_V1版本即可在工程开启FreeRTOS。 关于FreeRTOS的具体配置一般集中在Kernel Setting中。具体参数一般可以默认,有特殊需求…

【STM32】STM32CubeMX使用FreeRTOS教程1----定时器学习

【STM32】STM32CubeMX使用FreeRTOS教程1----定时器学习 前言 本教程将对应外设原理,HAL库、STM32CubeMX和FreeRTOS结合在一起讲解,分析学习过程中遇到的问题和一些注意事项。 知识概括: SMT32定时器原理 STM32CubeMX创建定时器例程 HAL库…

[FreeRTOS系列教程]学习FreeRTOS前的准备工作-----初学者必看

转自:http://bbs.armfly.com/read.php?tid1552 转载说明:本文仅为转载,下面有几位同学询问对应的教程,教程请参考下面的链接,是以帖子的形式分章节说明。 http://bbs.armfly.com/thread.php?fid14&type29&…