2017-03-20 76 views
0

我正在實施某種形式的內部分析器。有什麼方法可以知道一個線程何時被切換出來?我知道windows有事件跟蹤API,我知道perf日誌有多少上下文切換髮生。有沒有辦法在Linux上做到這一點?因爲它將是一個內部工具,所以需要root權限不是問題。Linux獲取上下文切換時間

+0

如果假設分析的*目的*爲找到原因緩慢,或者等價地,如何獲得更快的速度,那麼這種時間是不是做的好方法。相反,[*抽樣狀態*](http://stackoverflow.com/a/378024/23771)效果更好。無論您如何描述它,任何出現在樣本的X部分上的東西都會導致大約一小部分時間。如果你可以避免這樣做,你可以保存一個相應的分數。與時間有關的問題是告訴你什麼是可以避免的,這更加間接。 –

+0

這很有用,因爲如果我可以知道幀緩存不是由我的代碼引起的。節省時間,在我的代碼中找不到問題時尋找問題。我希望每幀數據能夠隔離特定的實例,我發現抽樣並不是那麼好。 – Temp4890

回答

2

整理。

請參閱http://man7.org/linux/man-pages/man2/getrusage.2.html關於getrusage()函數。

請注意,它返回的結構具有自願和非自願的上下文切換數字。此外,你有用戶和系統時間。其他API返回掛鐘時間。

任何大於您的用戶和系統時間的掛鐘時間是您沒有運行的時間。

除此之外,你可以使用內核的ftrace能力。見https://www.kernel.org/doc/Documentation/trace/ftrace.txt

閱讀http://www.brendangregg.com/blog/2015-07-08/choosing-a-linux-tracer.html爲更多的選擇。

+0

謝謝。我一直在Google上搜索。我知道必須有某種方式去做。 – Temp4890