HaaS100开发调试系列 之 CPU利用率(cpuusage)的原理与使用

简介: 什么,你的CPU又跑到了100%?太烫了担心烧掉,不知道如何排查问题?快来看看CPU利用率是如何统计,问题如何排查的吧HaaS100开发调试系列第二弹,助力问题排查,更助力操作系统学习

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%)。

cpuusage可以反映当前cpu的繁忙程度,cpuusage 越高,说明在设备上运行了很多程序,反之较少。如果cpuusage在一段时间内一直过高,可能是高优先级的任务一直占据着CPU来运行,导致了低优先级的任务始终无法获得CPU来运行,这样的设计可能存在问题。因此,cpuusage的统计可以帮助我们优化应用程序。

## 2、AliOS Things上cpuusage如何被统计出来
### 2.1、cpuusage统计原理
任务cpuusage: 任务在统计周期内的执行时间除以统计周期即为任务的cpuusage。
20201222080745476.png
总cpuusage:除idle任务外,所有任务在统计周期内的累计执行时间/统计周期,这时可以通过100%-idle任务cpuusage来计算。
20201222080804176.png
举例说明:
0680bee5c94401c3bfcc6108e5c25976.png
以上述执行时序为例,在统计周期内,task1被调度执行1次,task2被调度执行2次,其余时间均为idle任务运行。
20201222080838546.png
20201222080855536.png

2.2、任务运行时间的累计

单个任务的单次统计时间确定好后,那么在一段时间内,任意任务的运行时间就可以确定下来——只需将这段时间内这个任务的运行时间进行累计。
93f8b3374dada1c2f53f765ba1f299e8.png
以上图中的任务切换为例:

假设 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

puusage是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、命令运行截图

e4cb1bd247158a2a2792fdd5799412ea.png

可以看到执行了cpuusage 命令后,每秒打印出一次当前系统内所有task的CPU利用率,当前系统内没有跑应用,idle_task的运行时间占据了99.99%。

希望开发者也可以动手尝试,创建几个任务,观察下cpuusage有什么变化。

4、开发者技术支持

如需更多技术支持,可加入钉钉开发者群

test

更多技术与解决方案介绍,请访问阿里云AIoT首页https://iot.aliyun.com/

目录
相关文章
|
存储 网络安全 网络架构
网络技术基础(5)——VRP和telnet
VRP(Versatile Routing Platform)是其数据通信产品的操作系统,支持路由器和交换机的高效运行,提供统一用户界面和控制平面功能。VRP通过组件化结构实现功能裁剪和扩展。设备初始化时,BootROM先启动,然后运行系统软件,从默认路径读取配置文件。管理设备可通过命令行或Web网管,命令行包括用户界面和级别控制,提供权限管理。文件系统管理涉及存储设备如SDRAM、Flash、NVRAM等。用户可使用 PuTTY 工具通过Console口本地登录,或通过SSH远程登录。VRP命令行具有编辑和在线帮助功能,提供undo命令恢复默认设置。
|
数据可视化 物联网 PyTorch
双卡3090消费级显卡 SFT OpenBuddy-LLaMA1-65B 最佳实践
OpenBuddy继接连开源OpenBuddy-LLaMA1-13B、OpenBuddy-LLaMA1-30B后,8月10日,一鼓作气发布了650亿参数的大型跨语言对话模型 OpenBuddy-LLaMA1-65B。
|
存储 人工智能 Prometheus
ML 模型监控最佳工具(上)
如果您迟早将模型部署到生产环境,那么您将开始寻找 ML 模型监控工具。 当您的 ML 模型影响业务时,您只需要了解“事物是如何工作的”。 当事物停止工作时,你真正感受到这一点的第一刻。如果没有设置模型监控,您可能不知道哪里出了问题以及从哪里开始寻找问题和解决方案。
|
11月前
|
存储 NoSQL 关系型数据库
为什么MySQL不使用红黑树做索引
本文详细探讨了MySQL索引机制,解释了为何添加索引能提升查询效率。索引如同数据库的“目录”,在数据量庞大时提高查询速度。文中介绍了常见索引数据结构:哈希表、有序数组和搜索树(包括二叉树、平衡二叉树、红黑树、B-树和B+树)。重点分析了B+树在MyISAM和InnoDB引擎中的应用,并讨论了聚簇索引、非聚簇索引、联合索引及最左前缀原则。最后,还介绍了LSM-Tree在高频写入场景下的优势。通过对比多种数据结构,帮助理解不同场景下的索引选择。
341 6
|
9月前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
851 139
|
7月前
|
人工智能 运维 机器人
《深度剖析:人工智能与人类协作模式的未来演变》
人工智能与人类的协作正经历从辅助工具到平等伙伴、特定领域到多领域融合、静态协作到动态自适应、工作场景到全场景渗透的演变。初期,AI作为高效助手处理重复任务;中期成为得力伙伴,参与医疗、科研等领域的深度协作;未来将作为平等团队成员,在智慧城市、智能家居等多领域实现跨模态协作,动态调整任务分配,全面融入生活和工作,创造更多可能性。
443 15
|
11月前
|
存储 运维 前端开发
如何自己搭建一个网站?
‌确定需求和目标‌:在开始搭建网站之前,明确网站的需求和核心,网站主要是什么途径:展示产品或服务、提供信息和资源、增加销售、提升品牌形象等。
516 3
|
存储 传感器 人工智能
AliOS Things 系统架构介绍(一)
AliOS Things 系统架构介绍(一)
631 0
|
缓存 安全 Java
Spring高手之路21——深入剖析Spring AOP代理对象的创建
本文详细介绍了Spring AOP代理对象的创建过程,分为三个核心步骤:判断是否增强、匹配增强器和创建代理对象。通过源码分析和时序图展示,深入剖析了Spring AOP的工作原理,帮助读者全面理解Spring AOP代理对象的生成机制及其实现细节。
286 0
Spring高手之路21——深入剖析Spring AOP代理对象的创建
|
JavaScript Java Serverless
理解Serverless技术—FaaS和BaaS
Serverless技术—FaaS和BaaS
3264 1