2016-04-29 145 views
2

我試圖用Linux上的pthreads調試一些性能問題,我認爲sched_getcpu()可能對我說謊。它會爲每個線程報告一個持續的CPU,而剖析實驗似乎表明這些線程實際上正在從一個核心遷移到另一個核心。sched_getcpu()在Linux上可靠嗎?

我想知道sched_cpu()只是報告線程開始運行的第一個CPU,並且不知道線程遷移嗎?有沒有其他人注意到這一點,或看到任何證據表明sched_getcpu()的返回值可能會改變?如果它不可靠,有沒有其他方法可以跟蹤當前的CPU(使用CPUID也許?)?

回答

2

http://man7.org/linux/man-pages/man2/getcpu.2.html指示sched_getcpu()只是getcpu()的包裝。

http://man7.org/linux/man-pages/man2/getcpu.2.html表明,所提供的信息是準確的,因爲舊的緩存選項不再使用:

的tcache說法是因爲Linux 2.6.24未使用...它指定一個 指針呼叫者線程本地存儲中分配的緩衝區,用於爲getcpu()提供緩存機制,該緩衝區爲 。使用高速緩存 可以加速getcpu()調用,但代價是返回的信息過期的可能性非常小。在CPU之間遷移線程 時,高速緩存 機制被認爲會導致問題,因此該參數現在被忽略。

所以,除非你使用2.6.24之前的內核,否則你可能看不到舊的/緩存的信息。

+0

感謝您的全面解答 - 我的內核版本似乎是3.10,所以它聽起來像我不應該看到這種行爲。我將不得不深入一點... –