所有,是否有任何方法或工具来显示线程切换的过程,也就是说,我可以知道在任何特定时间CPU占用哪个线程,以及时间上下文切换成本,谢谢
答案 0 :(得分:2)
SystemTap对于这种事情非常有用。这有一个固定示例sched_switch.stp。
但它并不测量开关的经过时间。至少有几个原因,这似乎很棘手。首先,您必须为进入和退出决定适当的探测以测量增量,而我现在没有找到任何东西。 (在相关进程中输入/退出内核可能是一个不错的近似值?虽然我现在还没有看到它,但可能还有一些东西。)其次,如果你要知道在多大程度上值得避免上下文切换,那么如果你没有考虑更频繁地切换任务的额外CPU缓存未命中,那么这将是一个不完整的图片。我认为获得答案的唯一好方法可能是实验性的。特别是,您可以尝试调整调度参数(请参阅cfs-tuning.pdf),以了解更频繁的上下文切换如何影响程序的速度。
答案 1 :(得分:1)
如果已将ftrace编译到内核中,则可以使用sched_switch
跟踪器输出一系列进程唤醒和上下文切换。如果您的任务是RT计划的,您还可以使用wakeup
跟踪器来了解任务唤醒和调度之间的最大延迟。有关详细信息,请参阅Documentation/trace/ftrace.txt