Linuxのマルチコアプロセッサではps
、top
同様のツールを使用すると、特定のプロセスが実行されている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
すぐに使用されなくなります。コア割り当ては静的ではありません。