2011-08-02 35 views
3

全部,有沒有什麼辦法或者工具可以顯示線程切換的進程,也就是我可以知道在任何特定時間,CPU是由哪個線程以及時間上下文切換的花費,謝謝任何顯示線程切換的方法?

+0

有趣的問題。我想知道這是否可能。可以想象一些你需要知道這種行爲的場景。 –

+0

我覺得有時候對程序分析很方便,我只是想更好地理解我的程序執行,從技術上講,我認爲這是可能的 – thisEric

回答

2

SystemTap對於這類事情很有用。有一個罐頭的例子sched_switch.stp爲此。

雖然它並不測量開關的經過時間。這似乎很棘手,至少有幾個原因。首先,你必須爲進入和退出決定一個適當的探測器來衡量一個三角洲,我現在沒有找到任何東西。 (在相關進程中輸入/退出內核可能是一個體面的近似值?可能有些東西是爲了這個,儘管我現在沒有看到它。)其次,如果你想知道在多大程度上值得避免上下文切換,如果您沒有考慮更頻繁地切換任務的額外CPU緩存未命中,那麼這將是一個不完整的圖片,而那些更新會隨後出現。我認爲獲得答案的唯一好方法可能是實驗性的。尤其是,您可能會嘗試調整計劃參數(請參閱cfs-tuning.pdf),以瞭解更頻繁的上下文切換會如何影響程序的速度。

1

如果您已將ftrace編譯到您的內核中,則可以使用sched_switch跟蹤器輸出進程喚醒和上下文切換蹤跡。如果您的任務是RT預定的,您還可以使用wakeup跟蹤器瞭解任務喚醒和調度之間的最大延遲時間。有關更多信息,請參見Documentation/trace/ftrace.txt