- 问题现象
基本公式:total cycle是各种非idle线程使用cycle数的统计,exec是所有cpu cycle
CPU 占用 = total cycle / exec cycle
exec cycle = total cycle + idle cycle
每隔1s去采样cycle数然后做差,再用除法就可以得到最近1s的cpu占用率了
但是我在使用这个方法的时候算出了超过100%的利用率,下面来看一下到底是怎么回事
-
基本原理
每个cpu上都会有一个硬件上稳定递增的syscounter,每个cycle+1,这是记录时间的基本接口
Kernel cycle命令可以获取这个信息
-
cpu cycle

-
线程调度到cpu的记录


-
线程调出cpu的记录


-
从cpu视角统计


-
从thread视角统计
-


- 社区的修复
遇事不决就找一下社区的修复
https://github.com/zephyrproject-rtos/zephyr/commit/b5363d5ffffcec2693cd88dcb8262f2d2152a773

这里有一个坑:


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