首页 > 解决方案 > 哪个工具可以找到嵌入式 Linux 延迟峰值的原因?

问题描述

最好的情况是,如果我有一个(调试)工具,它在后台运行并告诉我打破我对系统的延迟要求的进程或驱动程序的名称。哪种工具适合?你有一个简短的例子来说明它在以下情况下的用法吗?

测试用例:

标签: linux-kernelembedded-linuxlinux-rt

解决方案


最好的真正机会是

  1. 在内核配置中打开跟踪并构建这样的 Linux 内核:
CONFIG_FTRACE=y
CONFIG_FUNCTION_TRACER=y
CONFIG_FUNCTION_GRAPH_TRACER=y
CONFIG_SCHED_TRACER=y
CONFIG_FTRACE_SYSCALLS=y
CONFIG_STACK_TRACER=y
CONFIG_DYNAMIC_FTRACE=y
CONFIG_FUNCTION_PROFILER=y
CONFIG_DEBUG_FS=y
  1. 然后运行您的应用程序,直到使用工具发生奇怪的事情trace-cmd
trace-cmd start -b 10000 -e 'sched_wakeup*' -e sched_switch -e gpio_value -e irq_handler_entry -e irq_handler_exit /tmp/myUserApplication

并获得一个 trace.dat 文件。

trace-cmd stop
trace-cmd extract
  1. 在 KernelShark 中加载该 trace.dat 文件并分析 CPU、线程、中断、kworker 线程和用户空间线程。很高兴看到哪些阻止了系统。

推荐阅读