Linux2.6.30で8コアのPowerPCプロセッサを実行しているマルチスレッドアプリがあります。スレッドの起動時にどのCPUが使用されているかを確認したいと思います。明白な答えは、PID(プロセッサID専用レジスタ)を出力することです。PIDレジスタには、mfspr命令を使用してアクセスします。Cプログラムで次のasmを使用してアクセスしようとしています。
asm(" mfspr %0, 286 " : "=r" (cpu_no));
問題は、それmfspr
が特権命令であり、このアプリがrootとして実行されている場合でも、不正な命令エラーで障害が発生することです。この命令は、ベアメタルアプリで実行すると正常に機能します。
カーネル空間でこの命令を実行するドライバーを作成することは可能ですが、回答がスレッドに戻るまでに、別のコアに移動した可能性があります。
Linuxユーザーレベルのプロセスから、現在のスレッドが実行されているコアのIDを取得する方法はありますか?