3

all,有没有什么办法或者工具可以展示线程切换的过程,即我可以知道在任何特定的时间,CPU被哪个线程占用,以及上下文切换的时间成本,谢谢

4

2 回答 2

2

SystemTap 对这种事情很有用。有一个罐头示例sched_switch.stp

但是,它不会测量开关的经过时间。这似乎很棘手,至少有几个原因。首先,您必须为入口和出口确定一个合适的探针来测量增量,而我现在没有找到任何东西。(在相关进程中进入/退出内核可能是一个不错的近似值?可能有一些东西,虽然我现在看不到。)其次,如果你想知道在多大程度上避免上下文切换是值得的,它如果您不考虑更频繁地切换任务而导致额外的 CPU 缓存未命中,那么这将是一幅不完整的画面,而这些会在之后出现。我认为获得答案的唯一好方法可能是实验性的。特别是,您可以尝试调整调度参数(参见cfs-tuning.pdf) 查看更频繁的上下文切换如何影响程序的速度。

于 2011-09-13T16:48:18.097 回答
1

如果您将 ftrace 编译到内核中,则可以使用sched_switch跟踪器输出进程唤醒和上下文切换的跟踪。如果您的任务是 RT 调度的,您还可以使用wakeup跟踪器来了解任务唤醒和调度之间的最大延迟。有关更多信息,请参见Documentation/trace/ftrace.txt

于 2011-09-14T09:10:51.213 回答