Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

esp32/modesp32: Implement idf_task_stats(). #12732

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

DvdGiessen
Copy link
Sponsor Contributor

@DvdGiessen DvdGiessen commented Oct 18, 2023

This adds a new function, esp32.idf_task_stats(), that can be used to retrieve task statistics which is useful for diagnosing issues where some tasks are using up a lot of CPU time. For example, I originally found #8351 and #12728 using this function.

An animated GIF is worth a thousand words:

print_task_stats

(See also micropython/micropython-lib#822 which implements the Python function for this.)

By default the functionality is not enabled; it depends on a few extra option to be set. I have the following snippet in my sdkconfig.board files:

# Uncomment to enable esp32.idf_task_stats()
#CONFIG_FREERTOS_USE_TRACE_FACILITY=y
#CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID=y
#CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y

If the required FreeRTOS functionality is available, the idf_task_stats() function is automatically enabled.

ports/esp32/modesp32.c Outdated Show resolved Hide resolved
ports/esp32/modesp32.c Outdated Show resolved Hide resolved
@dpgeorge
Copy link
Member

This looks pretty neat! The zephyr port already has zephyr.thread_analyze() which I think just dumps all tasks, but what you have here is more useful.

I think this would be a good (optional) addition.

@DvdGiessen
Copy link
Sponsor Contributor Author

DvdGiessen commented Nov 1, 2023

Thank you for the feedback! I've updated the branch to address them.

One thing I'm not sure about is the rather large code snippet (compared to snippets elsewhere in the documentation) that implements the print_task_stats() function. I suppose is a useful example, but not sure this is the right place for it. Though it is easily discoverable this way.

@DvdGiessen DvdGiessen marked this pull request as ready for review November 1, 2023 19:44
@dpgeorge
Copy link
Member

dpgeorge commented Nov 2, 2023

One thing I'm not sure about is the rather large code snippet (compared to snippets elsewhere in the documentation) that implements the print_task_stats() function. I suppose is a useful example, but not sure this is the right place for it

It could be added to examples/... in this repo. But maybe it could make sense to put it in micropython-lib as an esp32 tool? Easy to install it then on a board.

Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
@DvdGiessen
Copy link
Sponsor Contributor Author

Updated to move the code snippet from the documentation to a separate function in micropython-lib: micropython/micropython-lib#822

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants