zoukankan      html  css  js  c++  java
  • 【FreeRTOS】cpu利用率统计


    前言

    本笔记基于 stm32+FreeRTOS。
    主要参考野火安富莱


    概念

    简单概要:

    • 各任务cpu利用率:
      打印出各任务在某段时间内站用cpu时长的比例。

    • 原理很简单:

      1. 开启一个高精度的定时器
      2. 让一个全局变量(如:ulCpuTraceTick)不断往上累加
      3. 每次切换任务时,记录上一个任务占用了多少个高精度定时器的tick
      4. 累加到该表示该任务的变量中(如:ulCpuTraceTaskATick
      5. ulCpuTraceTaskATick/ulCpuTraceTick 即可计算出该任务的CPU占用率。

    作用

     阔以清晰地看出各个任务的cpu利用率,验证一个系统好坏的方法之一。
     如,一个系统总任务cpu利用率经常 大于80%,会造成一些紧急事件无法及时得到响应,同时,峰值可能超出100%,导致任务滞后。
     又如,一个系统总任务cpu利用率经常 小于 10%,导致资源浪费。
     再如,阔以监测各个任务 cup 占用率,发现某些任务经常 大于70%,便去优化优化该任务。
    注:以上数值标准均为个人习惯,并非标准答案!

    必看点

    • 影响
       该功能在调试时启用,在产品发布时务必关闭
       因为监测cpu利用率也是消耗cpu资源的。

    • 时钟精度
       一般为系统时钟节拍的 10-20 倍
       如,当前系统节拍为 1000 Hz,那么定时器节拍则为 10000-20000 Hz。按20000 Hz 计算,即 50us 计算一次。由于FreeRTOS没有对其进行溢出保护,所以最大支持计数时间为:2^32 * 50us / 3600s = 59.6 分钟。超出后结果将不准确。

    实现

    添加几个宏定义

    源码

    FreeRTOS
    /*
     * 当前文件为 FreeRTOSConfig.h
    */
    
    #define configUSE_TRACE_FACILITY	1      /* cpu task */
    
    /* Run time and task stats gathering related definitions. */
    #define configGENERATE_RUN_TIME_STATS                1      /* cpu task */
    #define configUSE_STATS_FORMATTING_FUNCTIONS         1      /* cpu task */
    #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()     (ulCpuTraceTick = 0ul)
    #define portGET_RUN_TIME_COUNTER_VALUE()             ulCpuTraceTick
    
    STM32 定时器

    (待写)

    简要说明

    • configUSE_TRACE_FACILITY

      • 启用FreeRTOS可视化追踪调试功能
    • configGENERATE_RUN_TIME_STATS

      • 启用FreeRTOS运行时间统计功能
    • configUSE_STATS_FORMATTING_FUNCTIONS

      • 启用FreeRTOS格式化函数功能
    • portCONFIGURE_TIMER_FOR_RUN_TIME_STATS

      • 重置自定义心跳值
    • portGET_RUN_TIME_COUNTER_VALUE

      • 宏定义自定义心跳变量
    • ulCpuTraceTick

      • 自定义心跳值,高频累加即可。
  • 相关阅读:
    java核心学习笔记(三) java集合框架
    java核心学习笔记(二) 学习环境与学习的方法以及java几个包的作用
    java核心学习笔记(一) javaJDK目录阐述
    版本控制工具git的配置
    linux系统管理员之自动化检测工具 nagios及其插件配置
    运维工程师需要的技能
    在线求中位数(优先队列实现) POJ3784
    并查集 poj1308
    stack HDU1022
    hash数组 POJ1840
  • 原文地址:https://www.cnblogs.com/lizhuming/p/13787573.html
Copyright © 2011-2022 走看看