88 lines
3.7 KiB
ReStructuredText
88 lines
3.7 KiB
ReStructuredText
.. _thread_analyzer:
|
|
|
|
Thread analyzer
|
|
###################
|
|
|
|
The thread analyzer module enables all the Zephyr options required to track
|
|
the thread information, e.g. thread stack size usage and other runtime thread
|
|
runtime statistics.
|
|
|
|
The analysis is performed on demand when the application calls
|
|
:c:func:`thread_analyzer_run` or :c:func:`thread_analyzer_print`.
|
|
|
|
For example, to build the synchronization sample with Thread Analyser enabled,
|
|
do the following:
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/synchronization/
|
|
:board: qemu_x86
|
|
:goals: build
|
|
:gen-args: -DCONFIG_QEMU_ICOUNT=n -DCONFIG_THREAD_ANALYZER=y \
|
|
-DCONFIG_THREAD_ANALYZER_USE_PRINTK=y -DCONFIG_THREAD_ANALYZER_AUTO=y \
|
|
-DCONFIG_THREAD_ANALYZER_AUTO_INTERVAL=5
|
|
|
|
|
|
When you run the generated application in Qemu, you will get the additional
|
|
information from Thread Analyzer::
|
|
|
|
|
|
thread_a: Hello World from cpu 0 on qemu_x86!
|
|
Thread analyze:
|
|
thread_b : STACK: unused 740 usage 284 / 1024 (27 %); CPU: 0 %
|
|
thread_analyzer : STACK: unused 8 usage 504 / 512 (98 %); CPU: 0 %
|
|
thread_a : STACK: unused 648 usage 376 / 1024 (36 %); CPU: 98 %
|
|
idle : STACK: unused 204 usage 116 / 320 (36 %); CPU: 0 %
|
|
thread_b: Hello World from cpu 0 on qemu_x86!
|
|
thread_a: Hello World from cpu 0 on qemu_x86!
|
|
thread_b: Hello World from cpu 0 on qemu_x86!
|
|
thread_a: Hello World from cpu 0 on qemu_x86!
|
|
thread_b: Hello World from cpu 0 on qemu_x86!
|
|
thread_a: Hello World from cpu 0 on qemu_x86!
|
|
thread_b: Hello World from cpu 0 on qemu_x86!
|
|
thread_a: Hello World from cpu 0 on qemu_x86!
|
|
Thread analyze:
|
|
thread_b : STACK: unused 648 usage 376 / 1024 (36 %); CPU: 7 %
|
|
thread_analyzer : STACK: unused 8 usage 504 / 512 (98 %); CPU: 0 %
|
|
thread_a : STACK: unused 648 usage 376 / 1024 (36 %); CPU: 9 %
|
|
idle : STACK: unused 204 usage 116 / 320 (36 %); CPU: 82 %
|
|
thread_b: Hello World from cpu 0 on qemu_x86!
|
|
thread_a: Hello World from cpu 0 on qemu_x86!
|
|
thread_b: Hello World from cpu 0 on qemu_x86!
|
|
thread_a: Hello World from cpu 0 on qemu_x86!
|
|
thread_b: Hello World from cpu 0 on qemu_x86!
|
|
thread_a: Hello World from cpu 0 on qemu_x86!
|
|
thread_b: Hello World from cpu 0 on qemu_x86!
|
|
thread_a: Hello World from cpu 0 on qemu_x86!
|
|
Thread analyze:
|
|
thread_b : STACK: unused 648 usage 376 / 1024 (36 %); CPU: 7 %
|
|
thread_analyzer : STACK: unused 8 usage 504 / 512 (98 %); CPU: 0 %
|
|
thread_a : STACK: unused 648 usage 376 / 1024 (36 %); CPU: 8 %
|
|
idle : STACK: unused 204 usage 116 / 320 (36 %); CPU: 83 %
|
|
thread_b: Hello World from cpu 0 on qemu_x86!
|
|
thread_a: Hello World from cpu 0 on qemu_x86!
|
|
thread_b: Hello World from cpu 0 on qemu_x86!
|
|
|
|
|
|
Configuration
|
|
*************
|
|
Configure this module using the following options.
|
|
|
|
* ``THREAD_ANALYZER``: enable the module.
|
|
* ``THREAD_ANALYZER_USE_PRINTK``: use printk for thread statistics.
|
|
* ``THREAD_ANALYZER_USE_LOG``: use the logger for thread statistics.
|
|
* ``THREAD_ANALYZER_AUTO``: run the thread analyzer automatically.
|
|
You do not need to add any code to the application when using this option.
|
|
* ``THREAD_ANALYZER_AUTO_INTERVAL``: the time for which the module sleeps
|
|
between consecutive printing of thread analysis in automatic mode.
|
|
* ``THREAD_ANALYZER_AUTO_STACK_SIZE``: the stack for thread analyzer
|
|
automatic thread.
|
|
* ``THREAD_NAME``: enable this option in the kernel to print the name of the
|
|
thread instead of its ID.
|
|
* ``THREAD_RUNTIME_STATS``: enable this option to print thread runtime data such
|
|
as utilization (This options is automatically selected by THREAD_ANALYZER).
|
|
|
|
API documentation
|
|
*****************
|
|
|
|
.. doxygengroup:: thread_analyzer
|