cpu使用率分析

各位好!
在近在用RT的时候需要在里面添加查看CPU使用率,找到了rt自带的cpu使用率的历程,自己对比源码分析了一下其实现的思路,如有不对的地方欢迎指正,再次谢谢各位!

RT里面提供的CPU使用率函数,
首先把cpu_usage_idle_hook函数添加到RT空闲钩子函数上,通过rt_thread_idle_sethook(cpu_usage_idle_hook); 函数实现,在添加钩子函数之后只有在进入空闲线程的时候才会执行此钩子函数cpu_usage_idle_hook,
然后在钩子函数里面,首先在进入  rt_enter_critical(); (关闭中断和调度)相当于CPU全速模式,计算total_count  在一个相对时间 rt_tick_get() - tick < CPU_USAGE_CALC_TICK  10个时钟周期(100ms) 累加的数值, 把这个累加出来的数值作为CPU在100ms 关闭中断和调度的情况下能够处理数据的”标准“ ,

这部分源码:
  1. if (total_count == 0)
  2.      {
  3.           /* get total count */
  4.           rt_enter_critical();//进入临界区
  5.          
  6.           tick = rt_tick_get(); //得到当前系统时钟节拍
  7.          
  8.           //10个时钟周期 100ms
  9.           while(rt_tick_get() - tick < CPU_USAGE_CALC_TICK)
  10.           {
  11.                total_count ++;
  12.                loop = 0;
  13.                while (loop < CPU_USAGE_LOOP)
  14.                     loop ++;
  15.           }
  16.          
  17.           rt_exit_critical();//离开临界区
  18.      }
复制代码

接着计算 count 数据,这个count 数据每个调度周期都是变化的,根据空闲线程被调度的时间,同样是在10个系统时钟周期100ms的时间,计算出在不关闭中断和调度的情况下,count数据能够累加的数据,通过这个累加的数值反映出空闲线程的执行时间,然后通过total_count数值就可以计算出系统在一个相对时间的使用率, 
  1. count = 0;
  2.    
  3.      tick = rt_tick_get();//得到当前系统时钟节拍
  4.      //10个时钟周期 100ms
  5.      while (rt_tick_get() - tick < CPU_USAGE_CALC_TICK)
  6.      {
  7.           count ++;
  8.           loop  = 0;
  9.           while (loop < CPU_USAGE_LOOP)
  10.                loop ++;
  11.      }
复制代码

最后根据total_count   和count数值计算cpu使用率
计算公式:
  1. count = total_count - count;
  2. cpu_usage_major = (count * 100) / total_count;
  3. cpu_usage_minor = ((count * 100) % total_count) * 100 / total_count;
复制代码

如total_count  = 100;count = 80;

则可以计算出CPU在一个相对时间内占用率是20%.
主要思路是根据在一个相对时间(100ms)空闲线程执行的时间来计算,空闲线程执行的时间越长,证明CPU使用率越低,反之亦然。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值