3e25d441a5
The following commit adds a real time stats example demonstrating how to obtain task CPU usage statistics over a period of time, as opposed to the current run time stats in FreeRTOS which measures task CPU usage as a percentage of total system run time. |
||
---|---|---|
.. | ||
main | ||
CMakeLists.txt | ||
example_test.py | ||
Makefile | ||
README.md | ||
sdkconfig.defaults |
FreeRTOS Real Time Stats Example
(See the README.md file in the upper level 'examples' directory for more information about examples.)
FreeRTOS provides the function vTaskGetRunTimeStats()
to obtain CPU usage statistics of tasks. However, these statistics are with respect to the entire runtime of FreeRTOS (i.e. run time stats). Furthermore, statistics of vTaskGetRunTimeStats()
are only valid whilst the timer for run time statistics has not overflowed.
This example demonstrates how to get CPU usage statistics of tasks with respect to a specified duration (i.e. real time stats) rather than over the entire runtime of FreeRTOS. The print_real_time_stats()
function of this example demonstrates how this can be achieved.
How to use example
Hardware Required
This example should be able to run on any commonly available ESP32 development board.
Configure the project
make menuconfig
-
Set serial port under Serial Flasher Options.
-
Enable FreeRTOS to collect run time stats under
Component Config->FreeRTOS
-
The clock source of reference timer used for FreeRTOS statistics can be configured under
Component Config->FreeRTOS
Build and Flash
Build the project and flash it to the board, then run monitor tool to view serial output:
make -j4 flash monitor
(To exit the serial monitor, type Ctrl-]
.)
See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.
Example Output
Getting real time stats over 100 ticks
| Task | Run Time | Percentage
| stats | 1304 | 0%
| IDLE0 | 206251 | 10%
| IDLE1 | 464785 | 23%
| spin2 | 225389 | 11%
| spin0 | 227174 | 11%
| spin4 | 225303 | 11%
| spin1 | 207264 | 10%
| spin3 | 225331 | 11%
| spin5 | 225369 | 11%
| Tmr Svc | 0 | 0%
| esp_timer | 0 | 0%
| ipc1 | 0 | 0%
| ipc0 | 0 | 0%
Real time stats obtained
- When compiled in dual core mode, the percentage is with respect to the combined run time of both CPUs. Thus,
50%
would indicate full utilization of a single CPU. - In single core mode, the percentage is with respect to a single CPU. Thus,
100%
would indicate full utilization of the CPU.
The unit of Run Time
is the period of the timer clock source used for FreeRTOS statistics.
Troubleshooting
Getting real time stats over 100 ticks
Error getting real time stats
If the above is output when running the example, users should check the return value of print_real_time_stats()
to determine the reason for failure.