突然のシャットダウンを実行しているプロセスのCPUコアIDを取得します。

突然のシャットダウンを実行しているプロセスのCPUコアIDを取得します。

Linuxのマルチコアプロセッサではpstop同様のツールを使用すると、特定のプロセスが実行されているCPU論理コアIDを表示できます。特定の時間にわたってプロセスが実行された場合は、プロセスのリストから簡単に識別できます。

RDPID代わりに、CPUアセンブリ(コマンド)で検出された論理コアの数とともに「hello world」を印刷するスタンドアロンプ​​ログラムがあります。

$ ./hello_world
hello world
1
$

すぐに終了します。この数字を提供されたまたは類似の数字とps比較したいと思いますtop。それでは、この場合、同じ情報(CPU論理コアID)をどのように取得できますか?プロセスの実行中にプロセス情報を取得する方法は?

答え1

プロセスによるコアIDの割り当ては一時的であり(特にロックされていない場合)、ツールは一時的な値のみを表示できます。

スレッドはいつでも別のコアで再予約できます(通常はシステム呼び出し中または時間分割を超えた場合)。マルチスレッドプロセスは、複数のコアで同時に実行できます。

安定性を維持するためにいくつかの最適化(キャッシュの改善など)があるかもしれませんが、信頼できません。

さらに、echoこれは組み込みシェルです。つまり、既存のシェルプロセス内で「実行」されます。

答え2

Linuxシステムコールがあります。getcpu、システムコールを実行すると、スレッドがスケジュールされたCPUを返します。

そのマニュアルページの説明を読んで、Paulの言葉がどれほど正しいかをご覧ください。システムコールの後に戻ると、他のCPUコアに予約される可能性が高くなります。したがって、getcpuは過去の特定時点のスレッドCPUコアに対してのみ保証されたステートメントを作成します。今ではありません。

簡単に言えば、

プロセスの実行中にプロセス情報を取得する方法は?

スレッドは実行中のCPUコアを取得するために使用できますが、getcpuすぐに使用されなくなります。コア割り当ては静的ではありません。

関連情報