2016-04-29 10 views
2

Linuxでpthreadsのパフォーマンスの問題をデバッグしようとしていますが、sched_getcpu()が私に嘘をついている可能性があります。プロファイリング実験では、スレッドが実際にあるコアから別のコアに移動中であることを示唆しているようです。Linuxではsched_getcpu()が信頼できますか?

sched_cpu()が、スレッドの実行を開始した最初のCPUを報告してスレッドの移行を知らないのではないかと思いますか?他の誰かがこれに気付いたか、または返品価値sched_getcpu()が変更される可能性があるという証拠は見当たりませんか?現実的でない場合は、現在のCPUを追跡する他の方法がありますか(かもしれませんか?)

答えて

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と思われるので、私はこの動作が見られないはずです。私は少し深く掘り下げなければならないでしょう... –

関連する問題