Zephyr 获取 cpu 占用率异常bug分析

  1. 问题现象

基本公式:total cycle是各种非idle线程使用cycle数的统计,exec是所有cpu cycle

复制代码
CPU 占用 = total cycle / exec cycle
exec cycle = total cycle + idle cycle

每隔1s去采样cycle数然后做差,再用除法就可以得到最近1s的cpu占用率了

但是我在使用这个方法的时候算出了超过100%的利用率,下面来看一下到底是怎么回事

  1. 基本原理

    每个cpu上都会有一个硬件上稳定递增的syscounter,每个cycle+1,这是记录时间的基本接口

    Kernel cycle命令可以获取这个信息

    1. cpu cycle

    2. 线程调度到cpu的记录

    3. 线程调出cpu的记录

    4. 从cpu视角统计

    5. 从thread视角统计

  1. 社区的修复

遇事不决就找一下社区的修复

https://github.com/zephyrproject-rtos/zephyr/commit/b5363d5ffffcec2693cd88dcb8262f2d2152a773

这里有一个坑:

修复后获取cpu占用率再也没有超过100%了

相关推荐
ScilogyHunter1 小时前
Zephyr串口驱动开发及构建完全指南
驱动开发·uart·zephyr
ScilogyHunter4 小时前
Zephyr Hello World应用开发构建完全指南
zephyr·hello world
ScilogyHunter1 天前
west init 命令详解
init·zephyr·west
ScilogyHunter1 天前
使用Kconfig配置Zephyr工程完全指南
kconfig·zephyr
ScilogyHunter1 天前
Zephyr设备树完全指南
zephyr
callJJ2 天前
Volta + Claude Code 在 Windows 上的路径 Bug 复盘
windows·bug
ScilogyHunter2 天前
Zephyr项目按需配置完全指南
zephyr
ScilogyHunter2 天前
Zephyr最简工程配置指南
zephyr
ScilogyHunter2 天前
Zephyr主仓库目录结构完全指南
zephyr
xsc-xyc2 天前
记一次RK3568搭建NAS BUG:开发板插上 USB 移动硬盘没反应
bug