哪种方法可以找到嵌入式 Linux 上延迟峰值的原因? [已关闭]

问题描述 投票:0回答:1

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

测试用例:

  • 示波器测量 GPIO 输入触发和 GPIO 输出响应之间的时间。通常响应时间为150μs。我每 25 毫秒触发一次。
  • 我的 Linux 用户测试程序使用 poll() 和 read()+write() 将检测到的输入信号作为响应镜像回输出。
  • Linux 内核已使用 Preempt_rt 补丁进行了修补。
  • 在小时维度中,我可以看到响应时间峰值高达 20 毫秒。
linux-kernel embedded-linux linux-rt
1个回答
2
投票

最好的真正机会是

  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 线程和用户空间线程。很高兴看到哪些内容阻止了系统。
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.