0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

计算CPU使用率的核心所在的内容

lhl545545 来源:RTThread物联网操作系统 作者:RTThread物联网操作 2020-06-09 15:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

打开电脑的任务管理器,看着跳动的CPU使用率,发现很舒服。每一个线程占用了多少CPU清清楚楚,也就能针对性的确认为啥你的电脑跑的慢了。

今天这篇笔记不讲每个任务(或线程)CPU的使用情况,而是单片机整体的CPU使用情况,先易后难嘛。

为什么要知道这个呢?知道这个有啥用呢?鱼鹰看的书少,就不写官方话了,只说说自己的理解。

CPU使用率越高,意味着系统越繁忙,对于一些事情的响应也就越慢。比如你的电脑CPU使用率占到90%以上,你会发现打字变慢了,鼠标移动变慢了,这都是因为CPU占用过高,导致系统来不及处理你的键盘和鼠标数据,所以才会有慢悠悠的表现。

电脑是非实时系统,要求不高,即使电脑变慢,电脑死机,后果都不是很严重,但是如果说你的嵌入式系统是国防、医疗领域的,如果也出现了这些情况,那后果不堪设想。比如呼吸机突然出问题了,那么对于病人来说,就是灾难,所以医疗行业的产品都会经过严格的测试,否则不允许上市。

嵌入式系统使用的大部分应该都是实时操作系统,即所谓的RTOS,它必须对外界的各种情况作出非常快的响应,如果不能,那你设计的系统就是有问题的。

那么如何快速响应外界信息呢?就看CPU使用情况了,CPU平时的使用率越低,越能快速响应。怎么理解这句话?

比如一天时间里,你要上8个小时的班,其他时间才属于你自己,如果按一天来计算的话,你的CPU利用率是8/24=33.3%,其他时间可以快速响应其他事情,比如别人叫你出去吃饭,如果是在下班时间,你随叫随到,如果是上班时间,那么叫了你也没用,只能等下班之后才行。所以虽然你的CPU利用率才33.3%,但是上班的时候还是不能及时响应其他事情,因为上班是优先级最高的任务(假设上班是最高优先级任务)。

这个例子可能不是很好,换成学生的例子可能更好一些。比如一个学生,每天上7节课,课间都有休息时间,假设还是要上8小时,但是因为中间不是连续的,所以虽然你的CPU利用率还是33.3%,但是你在课间时总能对一些其他事情做出快速响应,所以整体性能可能比前一个例子好一些。

所以设计系统时,千万别让一个高优先级任务持续占用CPU太长时间,如果可能的话,尽可能拆分长任务,否则低优先级的任务很可能无法及时运行,外在表现是,系统卡了。

看完这个,很多人就会想了,我的系统该怎么计算CPU使用率呢?对了,我的系统是裸机的……

不好意思,裸机系统CPU使用率100%,算不了……

那好,带操作系统的怎么算,比如uCOSFreeRTOSRT-Thread

严格来说,如果不采用休眠等机制的话,不管是裸机还是操作系统,CPU使用率都是100%。

为什么这么说呢?你看系统的CPU使用率的计算方法就知道了(这里说的是RTOS中简单的计算方式,而不是电脑那种,那种计算应该比较复杂,鱼鹰也不清楚)。

简单的说,一个操作系统里有很多用户任务,还有一个特别的系统任务,就是空闲任务。这个任务平时啥也不敢,就在那里空跑,CPU没有其他任务执行的时候,就会跑到空闲任务中执行。

除了空跑,空闲任务还有什么特点?优先级最低,不允许挂起空闲任务,即该任务永远处于就绪状态。

正因为这些特点,它变得非常特殊,也是我们能够计算CPU使用率的核心所在。

说白了,所谓的CPU使用率计算,就是先计算空闲任务的运行时间,然后反推其他任务的运行时间。

比如说,1秒时间内,空闲任务运行了700毫秒,那么空闲任务的CPU使用率是70%,反推一下,其他任务的使用率就是30%。但是特别注意的是,这里说空闲任务运行700毫秒,不是说空闲任务持续不断的运行了700毫秒,而是中间穿插了其他任务的执行,中间穿插就是300毫秒执行其他任务的时间。

看这个图就清楚了:

计算CPU使用率的核心所在的内容

事实上,1秒时间内的任务切换远比上图显示的要多的多,只是为了更好的说明,才没画那么多切换过程。

真正好的系统,一个任务不会长时间占用CPU,而是会不停的主动交出使用权,像上图任务2有100毫秒的占用,如果这个是高优先级任务,那么低优先级的任务的响应肯定在100毫秒以上了。

当然,如果说这个响应时间满足设计要求,那么在系统任务数比较少的情况下,倒是无所谓的事情。

可能你还有疑惑,你怎么不说说空闲任务啊,空闲任务有长达300毫秒的CPU占用哩!

不好意思,真不需要说它,因为它的优先级任务最低,所以如果说它能在300毫秒内持续运行,那肯定是因为没有其他任务需要处理才会让空闲任务一直运行的。

为什么这么说呢?因为在操作系统中,除了主动切换任务外,还有被动切换一说。

所谓主动切换任务,就是任务本身认为自己执行完了,然后自己主动调用系统函数进行切换,比如系统延时函数等;而被动切换有所不同,被动切换是时时刻刻都在发生的,只要满足条件,那么你的任务可能还没有完全执行完毕,就可能切换到其他任务先执行了。

怎么理解呢?假如四个人组成一个小组讨论问题,其中一个是小组长(操作系统),小组长有绝对发言权,可以随时打断其他成员(任务)的发言,所以当组员发言时,他每隔几分钟都会检查一下,看看谁举手准备发言,一旦发现有等级高的成员举手,那么不管目前发言的组员是否发言完毕,小组长都会立刻让高等级的组员先发言,等他发言完毕,才会让之前未发言完成的组员继续发言。这样可能不是很人性,但是确实能保证高效!

计算CPU使用率的核心所在的内容

在上面这张图中,其实还有一个非常重要的东西没有画出来,那就是操作系统每隔一段时间对就绪任务的检查。在操作系统中,这种检查工作一般是由定时中断完成的(stm32中有专门为操作系统准备的定时中断,即SysTick)。

中断是凌驾于所有任务(或线程)之上的超级任务。

但是检查时间(即中断时间)也是有讲究的,如果检查时间过短,那么整个系统就会忙于切换任务,花费在任务切换的时间占比就会很大;而检查时间过长,那么高优先级任务就不能得到更快速的响应,所以这个时间一定要谨慎选择。

一般来说,任务切换CPU占比在1%以内应该是比较好的(这个没有理论依据哈,鱼鹰瞎写的),即如果各个任务只调用一个延时函数,如果你的CPU占用在这个范围,那么就是比较合适的。

当你学会了CPU使用率计算,不如尝试着修改中断时间,你会发现不同的中断时间,CPU使用情况是不同的,原因就在于操作系统本身的消耗!
责任编辑:pj

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11378

    浏览量

    226514
  • 鼠标
    +关注

    关注

    6

    文章

    599

    浏览量

    41974
  • 管理器
    +关注

    关注

    0

    文章

    266

    浏览量

    19569
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    2026汽车软件发展现状报告(Perforce公司出品,第十一章)

    根据调研结果,与去年相比,C 语言使用率上升了6%,略微超过 C++,但两者仍然是汽车软件开发中最主流的编程语言。 值得注意的是,在本次调研中,Python 的使用率首次超过 C++。作为 AI
    的头像 发表于 05-12 08:55 769次阅读
    2026汽车软件发展现状报告(Perforce公司出品,第十一章)

    Linux服务器CPU飙高的排查思路

    CPU 飙高是 Linux 服务器最常见的性能问题之一。典型表现为:监控告警触发(CPU 使用率超过 90%)、业务响应变慢、用户投诉接口超时、ssh 操作卡顿。很多运维同学遇到 CPU
    的头像 发表于 05-11 16:54 386次阅读

    【米尔TI AM62L开发板试用】+基本性能测试

    内存使用率 查看内存使用率的操作及结果见图4所示,其指令为: free -m。 注:-m 参数代表计量单位为MByte。 图4 操作及显示内存使用率 查看系统时间 查看系统时间的操作及结果见图5所示
    发表于 05-11 09:39

    Linux系统负载Load Average的计算机制

    对 Linux Load Average 的理解是模糊的——3 个数字到底什么意思?数值到多少算高?和 CPU 使用率是什么关系?为什么 top 显示 CPU 使用率不高,但 Load
    的头像 发表于 05-08 14:24 200次阅读

    ASPICE 3.1 与 4.0 版本的核心差异:从软件专属到全系统覆盖(四)

    AI 密集型场景的研发需求; 2.新增 VAL 验证过程组,完善了系统级验证的过程规范,填补了 3.1 版本在产品最终验证环节的规范空白; 3.精简冗余过程,删除了 10 个行业使用率极低、内容
    发表于 04-08 09:48

    基于Arm架构服务器释放更高CPU用率

    在大型云服务提供商的数据中心中,CPU用率长期偏低,造成了大量资源闲置。根据 CAST AI 的分析,超过 1,000 个 CPU 的大型集群平均占用率仅约 17%[1],不同云服
    的头像 发表于 03-24 10:19 671次阅读

    深入解析MAX17410:IMVP6+ CPU核心电源的理想控制器

    深入解析MAX17410:IMVP6+ CPU核心电源的理想控制器 在当今的电子设备中,CPU的性能不断提升,对电源的要求也越来越高。对于笔记本电脑等设备的IMVP6+ CPU
    的头像 发表于 03-17 14:30 237次阅读

    为何CPU是AI基础设施的核心

    人工智能 (AI) 并非一种具有单一理想基础设施的单一工作负载。AI 涵盖了多样化的工作负载,需要系统层面的协同策略,才能高效且可扩展地提供性能。而在这一策略中,CPU 扮演着核心角色,它作为系统的智能层,统筹协调云端、数据中心、边缘乃至新兴物理 AI 系统中的各类
    的头像 发表于 03-11 10:35 1479次阅读

    Typecho博客搭建与公网访问指南

    、 Typecho采用GPL v2开源协议,基于PHP5+开发,支持MySQL、PostgreSQL和SQLite等多种数据库。其核心优势包括: a) 轻量高效:CPU和内存使用率极低 b) 原生
    的头像 发表于 12-26 17:13 952次阅读
    Typecho博客搭建与公网访问指南

    ATK_XCM.exe是什么?

    这是一张计算机硬件监控系统界面的截图,主要用于实时显示设备的核心硬件状态及提供基础操作功能。以下是具体内容解析: 核心功能分区 硬件状态监测区(表格部分) 项目 说明
    发表于 10-24 09:37

    CPU 到 GPU,渲染技术如何重塑游戏、影视与设计?

    渲染技术是计算机图形学的核心内容之一,它是将三维场景转换为二维图像的过程。渲染技术一直在不断演进,从最初的CPU渲染到后来的GPU渲染,性能和质量都有了显著提升。从CPU到GPU:技术
    的头像 发表于 09-01 12:16 1212次阅读
    从 <b class='flag-5'>CPU</b> 到 GPU,渲染技术如何重塑游戏、影视与设计?

    探索CPU架构的奥秘,揭秘高性能计算的隐形引擎

    的深海,揭开那些隐藏在高性能计算背后的神秘面纱。1.取指令(Fetch)程序计数器(PC):CPU通过程序计数器获取下一条指令的内存地址。指令读取:从存储器或缓存中读
    的头像 发表于 08-13 11:58 1036次阅读
    探索<b class='flag-5'>CPU</b>架构的奥秘,揭秘高性能<b class='flag-5'>计算</b>的隐形引擎

    单核CPU网关和双核CPU网关有什么区别

    单核CPU网关与双核CPU网关的核心区别在于处理能力、多任务效率、性能表现及适用场景,双核CPU网关在多任务处理、复杂计算和响应速度上具有显
    的头像 发表于 07-05 14:37 1431次阅读

    智能安防边缘计算的技术解析

    维度,剖析核心板如何推动安防从"被动记录"到"主动决策"的升级,并给出选型建议。   --- 一、核心板的硬件架构创新**   1. 异构计算架构:算力与能效的平衡  以SSD2351为例,其采用**"
    的头像 发表于 06-26 11:56 858次阅读

    飞凌嵌入式ElfBoard ELF 1板卡-文件系统常用命令之磁盘管理与维护常用命令

    使用的磁盘空间;Available:剩余可用的磁盘空间大小;Use%:磁盘的使用率使用率过高时,需要注意,因空间不足造成系统问题。/dev/root 为文件系统根目录。当Use% 高达90%以上
    发表于 06-24 11:26