检测Linux调度程序中的长等待时间

检测Linux调度程序中的长等待时间,linux,scheduler,Linux,Scheduler,我一直在试图找到一种方法来检测特定线程何时在CPU上运行,何时不在CPU上运行。理想情况下,我希望直接连接到内核,以跟踪线程的调度时间、产生时间以及被上下文切换中断的时间。有没有现成的工具可以准确地报告这些信息?我会使用 这将是查看系统性能的最简单的现成方法,可能足以满足您的需要。如果您需要其他超级定制的东西,那么您可能最终会做一些事情,比如构建一个定制内核,在调度感兴趣的事件期间切换GPIO,并使用逻辑分析器查看信号。我不推荐这种方法,因为它不值得您花费时间。您需要“perf sched”实用

我一直在试图找到一种方法来检测特定线程何时在CPU上运行,何时不在CPU上运行。理想情况下,我希望直接连接到内核,以跟踪线程的调度时间、产生时间以及被上下文切换中断的时间。有没有现成的工具可以准确地报告这些信息?

我会使用


这将是查看系统性能的最简单的现成方法,可能足以满足您的需要。如果您需要其他超级定制的东西,那么您可能最终会做一些事情,比如构建一个定制内核,在调度感兴趣的事件期间切换GPIO,并使用逻辑分析器查看信号。我不推荐这种方法,因为它不值得您花费时间。

您需要“perf sched”实用程序,或者如果运行的是较旧的内核,“ftrace”

“perf sched”当前有五个子命令:

perf sched{record | latency | map | replay | script}

  • 记录-任意工作负载的低开销记录
  • 延迟-每个任务的输出延迟度量
  • 映射-显示上下文切换的摘要/映射
  • replay—使用模拟线程重播捕获的工作负载
  • 脚本-查看记录的工作负载的详细跟踪


另外,向内核中的调度代码添加额外的逻辑可能会扭曲结果,特别是因为它被称为ALOT:)
    man perf-sched