Linuxクラスタの8コアノードにアクセスできます。ノードにログインすると、以下を使用してプロセッサのリストを表示できます。
more /proc/cpuinfo
私の8コアノードでは、プロセッサ番号は0から7までです。各プロセッサはIntel Xeon CPU(E5430 @ 2.66 GHz)です。
foo
さて、いくつかのパラメータを使ってこのプログラムを呼び出すとしましょうargs
。
foo args
プロシージャfoo
の実行には長い時間がかかります(例:数時間または数日)。電話後にfoo
確認できますか?特別などのプロセッサ(例:0〜7)がfoo
実行されていますか?プログラムtop
にプロセスIDと同様の情報が表示されますが、プロセッサは表示されません。数字。そんな情報がありますか?
答え1
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を非常に迅速に変更できるため、実際に表示される情報は本質的に古い情報です。
このスーパーユーザーの質問に対する回答には、より多くの情報があります。
答え2
top
from procps
(通常は現在のLinuxディストリビューションのデフォルト)を使用し、inをtop
押してfに移動し、次にクリックP = Last User CPU (SMP)
を選択します(たとえば、フィールドの前と上または下にSpaceキーを使用してフィールドを移動することもできます)。メイン画面に戻ります。あるプロセッサに留まるように明示的に設定しない限り、プロセスがあるプロセッサから別のプロセッサに移動することがわかります。を押すとデフォルトで保存できます。COMMAND
RightqW
助けが必要な場合はタップしてください?。
答え3
このコマンドはtaskset
あなたが探しているものです:
ワークセット - プロセスの CPU アフィニティを取得または設定します。
はい
$ taskset -p 12345
pid 12345's current affinity mask: f
マスクは、プロセッサ0のみを含むf
すべてのプロセッサを表します0x00000001
。
$ taskset -c -p 24389
pid 24389's current affinity list: 0-3
CPUをリスト形式で表示します。この例では、私のラップトップには4つのコアがあります。
答え4
この情報はから直接入手することもできます/proc/[pid]/stat
。これはスペースで区切られた39番目のフィールドです(Linux 2.2.8以降)。
たとえば、現在シェルが実行されているCPUプロセッサを表示するには(この場合):
cat /proc/$$/stat | cut -d' ' -f39