【FreeRTOS】cpu利用率统计
前言
本笔记基于 stm32+FreeRTOS。
主要参考野火、安富莱。
概念
简单概要:
各任务cpu利用率:
打印出各任务在某段时间内站用cpu时长的比例。原理很简单:
- 开启一个高精度的定时器
- 让一个全局变量(如:ulCpuTraceTick)不断往上累加
- 每次切换任务时,记录上一个任务占用了多少个高精度定时器的tick
- 累加到该表示该任务的变量中(如:ulCpuTraceTaskATick)
- 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
- 自定义心跳值,高频累加即可。
【FreeRTOS】cpu利用率统计的更多相关文章
- Linux如何统计进程的CPU利用率
1.0 概述 在Linux的/proc文件系统,可以看到自启动时候开始,所有CPU消耗的时间片:对于个进程,也可以看到进程消耗的时间片.这是一个累计值,可以"非阻塞"的输出.获得一 ...
- Linux如何统计进程的CPU利用率[转]
0. 为什么写这篇博客 Linux的top或者ps都可以查看进程的cpu利用率,那为什么还需要了解这个细节呢.编写这篇文章呢有如下三个原因: * 希望在脚本中,能够以过”非阻塞”的方式获取进程cpu利 ...
- shell脚本统计多个CPU利用率
本节主要内容:top命令统计CPU的利用率 一,问题分析 MySQL在Linux下是多线程的,而且只能将多个线程分布到一个CPU上.因此,使用小型服务器,或者PC SERVER,多个CPU利用率并不高 ...
- cpu利用率和cpu 队列
SIP的第四期结束了,因为控制策略的丰富,早先的的压力测试结果已经无法反映在高并发和高压力下SIP的运行状况,因此需要重新作压力测试.跟在测试人员后面做了快一周的压力测试,压力测试的报告也正式出炉,本 ...
- Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算
目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidstat文件 procpidtasktidstat文件 系统中有关进程cpu使用率的常用命令 ps ...
- linux系统性能监控--CPU利用率
在对系统的方法化分析中,首要且最基本的工具之一常常是对系统的 CPU利用率进行简单测量. Linux以及大多数基于 UNIX的操作系统都提供了一条命令来显示系统的平均负荷(loadaverage) . ...
- CPU利用率和CPU负荷(CPU usage vs CPU load)
对于CPU的性能监测,通常用top指令能显示出两个指标:cpu 利用率和cpu负荷. 其中%Cpu相关的内容: us表示用户进程cpu利用率,sy表示系统内核进程cpu利用率,ni表示运行正常进程消耗 ...
- [转帖]震惊,用了这么多年的 CPU 利用率,其实是错的
震惊,用了这么多年的 CPU 利用率,其实是错的 2018年12月22日 08:43:09 Linuxer_ 阅读数:50 https://blog.csdn.net/juS3Ve/article/d ...
- CPU 利用率背后的真相,只有 1% 人知道【转】
导读:本文翻译自 Brendan Gregg 去年的一篇博客文章 “CPU Utilization is Wrong”,从标题就能想到这篇文章将会引起争议.文章一上来就说,我们“人人皆用.处处使用,每 ...
随机推荐
- Vue UI lib missing vue bug
Vue UI lib missing vue bug Error Uncaught TypeError: Cannot read property 'prototype' of undefined a ...
- GitHub new features 2020 All In One
GitHub new features 2020 All In One Discussions Discussions is the space for your community to have ...
- 最新 Apple iPhone 12 价格 All In One
最新 Apple iPhone 12 价格 All In One 美版价格 Apple iPhone 12 mini $699 Apple iPhone 12 $799 Apple iPhone 12 ...
- Linux directory tree
Linux directory tree https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard https://en.wikipedi ...
- Sketch & UI & PS
Sketch & UI & PS app ui https://sketchapp.com/learn https://www.sketch.com/docs/ https://ske ...
- CSS BEM
CSS BEM Block, Element, Modifier https://en.bem.info/methodology/quick-start/ BEM /* Block component ...
- React Hooks & Context API
React Hooks & Context API responsive website https://reactjs.org/docs/hooks-reference.html https ...
- js web简单的路由管理器
灵感来自此博客和此库 index.html <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- js 如何取消promise
1: 使用reject function hello() { let _res, _rej: any; const promise = new Promise((res, rej) => { _ ...
- Puppeteer: 虚拟键盘
文档 main.js const pptr = require('puppeteer'); const gotoUrl = 'http://127.0.0.1:5500/index.html'; (a ...