哪种工具可以找到导致嵌入式Linux延迟高峰的原因?

时间:2019-02-27 13:44:42

标签: linux-kernel embedded-linux linux-rt

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

测试用例:

  • 示波器测量GPIO输入的触发与GPIO输出的响应之间的时间。通常,响应时间为150µs。我每25毫秒触发一次。
  • 我的linux用户测试程序使用poll()和read()+ write()来镜像检测到的输入信号,作为对输出的响应。
  • Linux内核已通过Preempt_rt补丁进行了修补。
  • 在小时维度上,我可以看到响应时间最高可达20ms。

1 个答案:

答案 0 :(得分:0)

最好的机会是

  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
  2. 发生奇怪的事情为止
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. 将trace.dat文件加载到KernelShark中,并分析CPU,线程,中断,kworker线程和用户空间线程。很高兴看到哪个阻止了系统。