线程分析器
线程分析器模块会启用跟踪线程信息(例如线程栈使用量和其他运行时线程统计数据)所需的所有 Zephyr 选项。
当应用程序调用 thread_analyzer_run() 或 thread_analyzer_print() 时,将按需执行分析。
例如,要在启用线程分析器的情况下构建 synchronization 示例,请执行以下操作:
# From the root of the zephyr repository west build -b qemu_x86 samples/synchronization/ -- -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
在 Qemu 中运行生成的应用时,你将获得来自线程分析器的附加信息:
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!
配置
使用以下选项配置此模块。
CONFIG_THREAD_ANALYZER启用该模块。
CONFIG_THREAD_ANALYZER_USE_PRINTK使用 printk 输出线程统计信息。
CONFIG_THREAD_ANALYZER_USE_LOG使用日志记录器输出线程统计信息。
CONFIG_THREAD_ANALYZER_AUTO自动运行线程分析器。使用该选项时,无需向应用程序添加任何代码。
CONFIG_THREAD_ANALYZER_AUTO_INTERVAL在自动模式下,模块在连续两次打印线程分析结果之间的休眠时间。
CONFIG_THREAD_ANALYZER_AUTO_STACK_SIZE线程分析器自动线程使用的栈。
CONFIG_THREAD_NAME打印线程的名称而不是其 ID。
CONFIG_THREAD_RUNTIME_STATS打印线程运行时数据,例如利用率。该选项由
CONFIG_THREAD_ANALYZER自动选择。CONFIG_THREAD_ANALYZER_LONG_FRAME_PER_INTERVAL打印后重置 Longest Frame 值统计信息。当使用
SCHED_THREAD_USAGE_ANALYSIS获取平均和最长的帧线程统计信息时,请在每次打印线程统计信息后将 Longest Frame 值重置为零。这样可以观察最近一个间隔内的最长帧,而不是自启动以来的最长帧。CONFIG_THREAD_ANALYZER_PRINT_THREAD_PRIORITY打印每个线程的优先级。