3

Linux2.6.30で8コアのPowerPCプロセッサを実行しているマルチスレッドアプリがあります。スレッドの起動時にどのCPUが使用されているかを確認したいと思います。明白な答えは、PID(プロセッサID専用レジスタ)を出力することです。PIDレジスタには、mfspr命令を使用してアクセスします。Cプログラムで次のasmを使用してアクセスしようとしています。

asm(" mfspr %0, 286 " : "=r" (cpu_no));

問題は、それmfsprが特権命令であり、このアプリがrootとして実行されている場合でも、不正な命令エラーで障害が発生することです。この命令は、ベアメタルアプリで実行すると正常に機能します。

カーネル空間でこの命令を実行するドライバーを作成することは可能ですが、回答がスレッドに戻るまでに、別のコアに移動した可能性があります。

Linuxユーザーレベルのプロセスから、現在のスレッドが実行されているコアのIDを取得する方法はありますか?

4

2 に答える 2

3

pthread_getaffinity_npまたはsched_getcpu十分ですか?

于 2010-10-13T21:06:08.440 に答える
-1

もう1つの方法は、WHOAMIレジスタを使用することです。WHOAMIレジスタは、それを読み取るコアのCPUIDを返します。

于 2014-08-13T13:46:20.373 に答える