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

简介: cpuusage(即CPU利用率,本文均用cpuusage指代CPU利用率)通常是指:CPU从事任何工作的时间比例。 如:90%的cpuusage表示CPU处于90%忙碌状态和10%空闲状态。当CPU空闲时,它什么也不做,在嵌入式实时操作系统RTOS上,它会进入idle状态,idle本身也是一个task,它只是在等待中断,消耗CPU。
来源 | 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%)。

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

2、AliOS Things上cpuusage如何被统计出来

2.1、cpuusage统计原理

任务cpuusage: 任务在统计周期内的执行时间除以统计周期即为任务的cpuusage。

image.png

总cpuusage:除idle任务外,所有任务在统计周期内的累计执行时间/统计周期,这时可以通过100%-idle任务cpuusage来计算。

image.png

举例说明:

image.png

以上述执行时序为例,在统计周期内,task1被调度执行1次,task2被调度执行2次,其余时间均为idle任务运行。

image.png
image.png

2.2、任务运行时间的累计

单个任务的单次统计时间确定好后,那么在一段时间内,任意任务的运行时间就可以确定下来——只需将这段时间内这个任务的运行时间进行累计。

image.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

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

image.png

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

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

4、传送门

一文轻松入门HaaS100诊断调试系统

5、开发者技术支持

如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号

image.png

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

相关文章
|
2月前
|
安全 Linux KVM
倚天产品介绍|倚天虚拟化:CPU虚拟化原理介绍
虚拟化技术中最关键的技术之一就是CPU虚拟化。在没有硬件辅助虚拟化技术出来之前,通常都是通过TCG(软件进行指令翻译)的方式实现CPU虚拟化。但是由于TCG方式的虚拟化层开销太大,性能太差,因此引入了硬件辅助虚拟化技术。
|
2月前
|
消息中间件 SQL Kafka
Flink CPU问题之CPU利用率低如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
9月前
|
SQL Java 数据库连接
联表查询 && 索引 && 事务 && JDBC使用 &&CPU工作原理 && 线程概念 && Thread类的用法
联表查询 && 索引 && 事务 && JDBC使用 &&CPU工作原理 && 线程概念 && Thread类的用法
140 0
|
23天前
|
Prometheus 监控 Cloud Native
grafana展示的CPU利用率与实际不符的问题探究
观察到`mpstat`命令显示单核CPU的`%usr`和`%sys`分别持续在70%和20%,而Grafana监控数据显示较低。问题源于Grafana表达式计算的是CPU时间增量而非利用率。`mpstat`通过`/proc/stat`获取数据并计算CPU利用率,而`node-exporter`直接导出原始数据。调整Grafana表达式以匹配`mpstat`的计算方式后,两者结果一致。解决方案是修正Grafana查询以准确反映CPU占用率。
68 1
grafana展示的CPU利用率与实际不符的问题探究
|
12天前
|
监控 算法 Java
聊聊性能指标CPU利用率如何计算的
**摘要:** CPU 利用率衡量了CPU被程序占用的程度,反映了一段时间内CPU忙碌的程度。在多任务操作系统中,CPU通过时间片分配给各进程实现“并发”。Linux命令如`uptime`、`top`、`w`和`vmstat`可用来监控CPU利用率。`vmstat`中的`%us`、`%sy`、`%id`等指标揭示了不同状态的CPU使用情况。`top`命令则实时显示进程资源占用。CPU利用率过高可能表明系统负载过大或程序问题,需要优化。Java应用中,CPU飙高可能由内存泄漏或死循环引起,需使用jstack等工具排查。
|
17天前
|
缓存 前端开发 JavaScript
高性能Web动画和渲染原理系列(2)——渲染管线和CPU渲染
高性能Web动画和渲染原理系列(2)——渲染管线和CPU渲染
|
25天前
|
Python
python3获取内存和cpu利用率记录日志文件psutil
python3获取内存和cpu利用率记录日志文件psutil
32 1
|
2月前
|
存储 算法 Linux
【计算机操作系统】深入探究CPU,PCB和进程工作原理
【计算机操作系统】深入探究CPU,PCB和进程工作原理
|
2月前
|
监控 Shell
Shell脚本监控CPU、内存和硬盘利用率
Shell脚本监控CPU、内存和硬盘利用率
|
2月前
|
存储 缓存 并行计算
【软件设计师备考 专题 】CPU和存储器的组成、性能和基本工作原理
【软件设计师备考 专题 】CPU和存储器的组成、性能和基本工作原理
72 0

热门文章

最新文章