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%了

相关推荐
ALGO阿狗6 天前
SimpleDateFormat(“YYYY-MM-dd“)格式化时间出现了bug?
bug
爱学习的小可爱卢7 天前
JavaSE基础-Java异常体系:Bug定位终极指南
java·bug·javase
GeekyGuru7 天前
代码诊疗室——疑难Bug破解战
bug
mftang8 天前
Zephyr RTOS中的k_stack相关函数
zephyr·k_stack
嵌入式×边缘AI:打怪升级日志10 天前
9.2.3 UART 驱动严重 Bug(保姆级讲解)
bug
qq_242188633212 天前
代码诊疗室——疑难Bug破解战
bug
Moshow郑锴14 天前
Java SpringBoot 疑难 Bug 排查思路解析:从“语法正确”到“行为相符”
java·spring boot·bug
人间花海14 天前
BUG终结者:挑战你的调试极限
bug
2401_8582861114 天前
OS54.【Linux】System V 共享内存(3) “共享内存+管道“修bug记录
linux·运维·服务器·算法·bug
Kurbaneli15 天前
代码诊疗室——疑难Bug破解战
bug