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が表示されません。そのような情報はありますか?
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を非常に迅速に変更する可能性があるので、実際に表示される情報は基本的にすでに古くなっていることに注意してください。
このスーパーユーザーの質問の回答の詳細:
コマンド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ページに詳細があります を参照してください。
top
のprocps
(現在のLinuxディストリビューションのデフォルト)を使用して、top
で、 f、P = Last User CPU (SMP)
に移動して、 Space 選択します(たとえば、COMMAND
フィールドの前にフィールドを移動して、 Right キーを押してから上下に移動します)。 q メイン画面に戻ります(プロセスがプロセッサ間で移動することが明示的に構成されていない限り、プロセスがプロセッサ間で移動することがわかります)。押すことができます W これをデフォルトとして保存します。
押す ? 助けて。
この情報は/proc/[pid]/stat
から直接取得することもできます。これは、39番目のスペース区切りフィールドです(Linux 2.2.8以降)。
例えば。現在のシェルが(このインスタンスで)実行されているCPUプロセッサを表示するには:
cat /proc/$$/stat | cut -d' ' -f39