HaaS100 开发调试系列 之 CPU利用率(cpuusage)的原理与使用
来源 | HaaS技术社区
1、cpuusage是什么
cpuusage(即CPU利用率,本文均用cpuusage指代CPU利用率)通常是指:CPU从事任何工作的时间比例。 如:90%的cpuusage表示CPU处于90%忙碌状态和10%空闲状态。当CPU空闲时,它什么也不做,在嵌入式实时操作系统RTOS上,它会进入idle状态,idle本身也是一个task,它只是在等待中断,消耗CPU。
在RTOS上,CPU 都是分时间片使用的。比如:任务A运行了10ms,然后切换到任务B,B运行了30ms,然后空闲60ms(即进入idle task运行60ms),接着切换回任务A周期这样运行。如果在一段时间内都是如此,那么这段时间内的cpuusage为40%(其中任务A的cpuusage为10%,任务B的cpuusage为30%)。
(福利推荐:阿里云、腾讯云、华为云服务器最新限时优惠活动,云服务器1核2G仅88元/年、2核4G仅698元/3年,点击这里立即抢购>>>)
cpuusage可以反映当前cpu的繁忙程度,cpuusage 越高,说明在设备上运行了很多程序,反之较少。如果cpuusage在一段时间内一直过高,可能是高优先级的任务一直占据着CPU来运行,导致了低优先级的任务始终无法获得CPU来运行,这样的设计可能存在问题。因此,cpuusage的统计可以帮助我们优化应用程序。
2、AliOS Things上cpuusage如何被统计出来
2.1、cpuusage统计原理
任务cpuusage: 任务在统计周期内的执行时间除以统计周期即为任务的cpuusage。
总cpuusage:除idle任务外,所有任务在统计周期内的累计执行时间/统计周期,这时可以通过100%-idle任务cpuusage来计算。
举例说明:
以上述执行时序为例,在统计周期内,task1被调度执行1次,task2被调度执行2次,其余时间均为idle任务运行。
2.2、任务运行时间的累计
单个任务的单次统计时间确定好后,那么在一段时间内,任意任务的运行时间就可以确定下来——只需将这段时间内这个任务的运行时间进行累计。
以上图中的任务切换为例:
假设 Task1的在 t1 时刻已经运行的时间为 total_task1,Task2的在 t1 时刻已经运行的时间为 total_task2;
那么在 t2 时刻,total_task1更新为
total_task1 += t2 - t1;
在 t3 时刻,total_task2更新为
total_task2 += t3 - t2;
如此累计下去,就可以获得一段时间内,需要统计任务的运行时间总和。
3、HaaS100上cpuusage如何使用
3.1、打开平台配置
在相应平台的 k_config.h 文件中配置如下宏:
RHINO_CONFIG_SYS_STATS配置为1,启用统计功能;
RHINO_CONFIG_HW_COUNT配置为1,使用硬件计时器(该计时器需要适配)。
#ifndef RHINO_CONFIG_SYS_STATS #define RHINO_CONFIG_SYS_STATS 1 #endif #ifndef RHINO_CONFIG_HW_COUNT #define RHINO_CONFIG_HW_COUNT 1 #endif
3.2、适配硬件定时器
cpuusage的时间统计,是通过板卡上自带的高精度的硬件定时器来实现的,这个硬件定时器的主频一般是几MHz~几十MHz不等。
这个定时器值的获取依赖硬件厂商提供的bsp接口,为了屏蔽这些底层硬件的差异,AliOS Things提供了一个统一的接口来获取这个定时器的值,如下:
hr_timer_t soc_hr_hw_cnt_get(void);
在HaaS100开发板上,如果有开发者对定时基准细节感兴趣,可以参考定时器的获取接口的实现细节,代码位于:
platform/board/haas100/config/board.c
AliOS Things 代码下载及说明
注意: 我们在HaaS100上已经打开了平台配置开关,同时适配好了硬件定时器。
也就是说,在HaaS100上cpuusage的功能是默认打开的,可以直接使用!
3.3、使用方法——通过cli命令cpuusage
cpuusage是kernel 自带的一个命令,不依赖任何app,也就是说,只要在编译时加上cli 组件,在cli shell下执行一个命令cpuusage,即可开始统计系统内所有任务的cpuusage。
注意:关于cli 组件如何打开使用,请参考另外一篇文章——见文尾链接“传送门”《一文轻松入门HaaS100诊断调试系统》。
3.3.1、命令使用说明
cpuusage [-d n] [-t m] 命令启动CPU利用率统计 其中:-d选项用于指定统计周期,单位为ms,默认为1 s; -t选项用于指定统计时长,单位为ms,默认为连续运行。 举例说明: cpuusage -- 启动一个cpuusage任务,该任务默认每隔1s执行一次统计; cpuusage -d 3000 -- 启动一个cpuusage任务,该任务默认每隔3s(3000ms)执行一次统计; cpuusage -d 2000 -t 10000 -- 启动一个cpuusage任务,该任务默认每隔2s(2000ms)执行一次统计, 统计到10s(10000ms)后停止; ctrl+c 结束统计
3.3.2、命令运行截图
可以看到执行了cpuusage 命令后,每秒打印出一次当前系统内所有task的CPU利用率,当前系统内没有跑应用,idle_task的运行时间占据了99.99%。
希望开发者也可以动手尝试,创建几个任务,观察下cpuusage有什么变化。
4、传送门
一文轻松入门HaaS100诊断调试系统
5、开发者技术支持
如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号
更多技术与解决方案介绍,请访问阿里云AIoT首页https://iot.aliyun.com/
你还在原价购买阿里云、腾讯云、华为云、天翼云产品?那就亏大啦!现在申请成为四大品牌云厂商VIP用户,可以3折优惠价购买云服务器等云产品,并且可享四大云服务商产品终身VIP优惠价,还等什么?赶紧点击下面对应链接免费申请VIP客户吧:
相关文章
- Jgit的使用笔记
- 利用Github Action实现Tornadofx/JavaFx打包
- 叹息!GitHub Trending 即将成为历史!
- 微软软了?开源社区讨论炸锅,GitHub CEO 亲自来答
- GitHub Trending 列表频现重复项,前后端都没去重?
- Photoshop Elements 2021版本软件安装教程(mac+windows全版本都有)
- (ps全版本)Photoshop 2020的安装与破解教程(mac+windows全版本都有)
- (ps全版本)Photoshop cc2018的安装与破解教程(mac+windows全版本,包括2023
- 环境搭建:Oracle GoldenGate 大数据迁移到 Redshift/Flat file/Flume/Kafka测试流程
- 每个开发人员都要掌握的:最小 Linux 基础课
- 来撸羊毛了!Windows 环境下 Hexo 博客搭建,并部署到 GitHub Pages
- 超实用!手把手入门 MongoDB:这些坑点请一定远离
- 【GitHub日报】22-10-09 zustand、neovim、webtorrent、express 等4款App今日上新
- 【GitHub日报】22-10-10 brew、minio、vite、seaweedfs、dbeaver 等8款App今日上新
- 【GitHub日报】22-10-11 cobra、grafana、vue、ToolJet、redwood 等13款App今日上新
- Photoshop 2018 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2017 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2020 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2023 资源免费下载(mac+windows全版本都有,包括最新的2023)
- 最新版本Photoshop CC2018软件安装教程(mac+windows全版本都有,包括2023