web-dev-qa-db-ja.com

プロセスが実行されている特定のプロセッサーの判別

Linuxクラスターの8コアノードにアクセスできます。ノードにログインすると、次のコマンドを使用してプロセッサのリストを表示できます。

more /proc/cpuinfo

私の8コアノードでは、プロセッサの番号は0〜7です。各プロセッサはIntel Xeon CPU(E5430 @ 2.66GHz)です。

ここで、いくつかの引数fooを使用してプログラムargsを呼び出すとします。

foo args

プログラムfooの実行には時間がかかります(たとえば、数時間または数日)。 fooを呼び出した後、fooが実行されているparticularプロセッサー(つまり0から7)を特定することはできますか? topプログラムはプロセスIDと同様の情報を表示しますが、プロセッサnumberが表示されません。そのような情報はありますか?

9
Andrew

psは、psr列を要求した場合(または-Fフラグを含みます)。

例:

$ ps -F $$
UID        PID  PPID  C    SZ   RSS PSR STIME TTY      STAT   TIME CMD
me        6415  6413  0  5210  2624   2 18:52 pts/0    SN     0:00 -su

または:

$ ps -o pid,psr,comm -p $$
  PID PSR COMMAND
 6415   0 bash

私のシェルは、最初のコマンドを実行したときにCPU 2で実行され、2番目のコマンドを実行したときにCPU 0で実行されていました。プロセスがCPUを非常に迅速に変更する可能性があるので、実際に表示される情報は基本的にすでに古くなっていることに注意してください。

このスーパーユーザーの質問の回答の詳細:

Linux:プロセスがロードされているプロセッサー番号を知るコマンド?

11
Mat

コマンドtasksetはあなたが探しているものです:

taskset-プロセスのCPUアフィニティを取得または設定する

$ taskset -p 12345
pid 12345's current affinity mask: f

fのマスクは、すべてのプロセッサを意味し、0x00000001は単なるプロセッサ0です。

$ taskset -c -p 24389 
pid 24389's current affinity list: 0-3

CPUをリスト形式で表示します。この例では、ラップトップに4つのコアがあります。

manページに詳細があります を参照してください。

4
slm

topprocps(現在のLinuxディストリビューションのデフォルト)を使用して、topで、 fP = Last User CPU (SMP)に移動して、 Space 選択します(たとえば、COMMANDフィールドの前にフィールドを移動して、 Right キーを押してから上下に移動します)。 q メイン画面に戻ります(プロセスがプロセッサ間で移動することが明示的に構成されていない限り、プロセスがプロセッサ間で移動することがわかります)。押すことができます W これをデフォルトとして保存します。

押す ? 助けて。

4

この情報は/proc/[pid]/statから直接取得することもできます。これは、39番目のスペース区切りフィールドです(Linux 2.2.8以降)。

例えば。現在のシェルが(このインスタンスで)実行されているCPUプロセッサを表示するには:

cat  /proc/$$/stat | cut -d' ' -f39
1
drgnfr