检测Linux调度程序中的长等待时间
我一直在试图找到一种方法来检测特定线程何时在CPU上运行,何时不在CPU上运行。理想情况下,我希望直接连接到内核,以跟踪线程的调度时间、产生时间以及被上下文切换中断的时间。有没有现成的工具可以准确地报告这些信息?我会使用检测Linux调度程序中的长等待时间,linux,scheduler,Linux,Scheduler,我一直在试图找到一种方法来检测特定线程何时在CPU上运行,何时不在CPU上运行。理想情况下,我希望直接连接到内核,以跟踪线程的调度时间、产生时间以及被上下文切换中断的时间。有没有现成的工具可以准确地报告这些信息?我会使用 这将是查看系统性能的最简单的现成方法,可能足以满足您的需要。如果您需要其他超级定制的东西,那么您可能最终会做一些事情,比如构建一个定制内核,在调度感兴趣的事件期间切换GPIO,并使用逻辑分析器查看信号。我不推荐这种方法,因为它不值得您花费时间。您需要“perf sched”实用
这将是查看系统性能的最简单的现成方法,可能足以满足您的需要。如果您需要其他超级定制的东西,那么您可能最终会做一些事情,比如构建一个定制内核,在调度感兴趣的事件期间切换GPIO,并使用逻辑分析器查看信号。我不推荐这种方法,因为它不值得您花费时间。您需要“perf sched”实用程序,或者如果运行的是较旧的内核,“ftrace” “perf sched”当前有五个子命令: perf sched{record | latency | map | replay | script}
- 记录-任意工作负载的低开销记录
- 延迟-每个任务的输出延迟度量
- 映射-显示上下文切换的摘要/映射
- replay—使用模拟线程重播捕获的工作负载
- 脚本-查看记录的工作负载的详细跟踪
另外,向内核中的调度代码添加额外的逻辑可能会扭曲结果,特别是因为它被称为ALOT:)
man perf-sched