私は、4つのIntel Xeon E5-4620(合計64コア)を持つサーバーで、NumPyとPythonの3プール多重処理を使用していくつかの行列乗算を実行しています。
Solarisモードのトップディスプレイ(the):
top - 16:00:55 up 7 days, 16:42, 2 users, load average: 292.74, 295.09, 297.44
Tasks: 704 total, 8 running, 696 sleeping, 0 stopped, 0 zombie
%Cpu(s): 76.6 us, 23.4 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 52830358+total, 52306323+free, 3022900 used, 2217456 buff/cache
KiB Swap: 6553596 total, 6553596 free, 0 used. 52376304+avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
75266 splitti+ 20 0 3050540 294912 10808 R 25.0 0.1 27649:20 python3
75264 splitti+ 20 0 3050028 292448 10936 R 21.7 0.1 27750:10 python3
75286 splitti+ 20 0 3006504 325704 10668 R 20.3 0.1 26831:30 python3
75598 splitti+ 20 0 3006820 326264 11164 R 20.2 0.1 27221:56 python3
75288 splitti+ 20 0 3006504 325696 10660 R 10.5 0.1 26351:29 python3
75265 splitti+ 20 0 3050028 294292 10728 R 1.6 0.1 22889:05 python3
...
Irixモードでは:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
75266 splitti+ 20 0 3050028 292292 10808 R 1494 0.1 27712:54 python3
75264 splitti+ 20 0 3050540 295028 10936 R 1390 0.1 27803:50 python3
75288 splitti+ 20 0 3006504 325696 10660 R 1305 0.1 26395:29 python3
75598 splitti+ 20 0 3006820 326112 11164 R 1240 0.1 27275:08 python3
75286 splitti+ 20 0 3006504 325628 10668 R 752.6 0.1 26874:41 python3
75265 splitti+ 20 0 3050028 294292 10728 R 153.9 0.1 22893:03 python3
...
コア固有モード:
top - 16:03:40 up 7 days, 16:45, 2 users, load average: 299.56, 297.12, 297.83
Tasks: 704 total, 8 running, 696 sleeping, 0 stopped, 0 zombie
%Cpu0 : 76.9 us, 23.1 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 71.9 us, 28.1 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 70.4 us, 29.6 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 74.6 us, 25.4 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu4 : 73.9 us, 26.1 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu5 : 79.9 us, 20.1 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu6 : 80.9 us, 19.1 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu7 : 78.9 us, 21.1 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu8 : 80.3 us, 19.7 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu9 : 78.9 us, 21.1 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu10 : 80.2 us, 19.8 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
...
質問: これらの値はどのような関係がありますか?
上部にコア使用率が約80%、プロセスあたり25%が表示されたら、Solarisモードでは50%のコア使用量はどこから消えますか?この9つのPythonプロセス(6つだけ貼り付け)はどのように64のコアをすべて使用しますか?
答え1
top
マンページCPU パーセントは次のように記述されます。
最後の画面更新以降、ジョブで費やしたCPU時間の割合で、合計CPU時間の割合として表示されます。
実際のSMP環境では、プロセスがマルチスレッドでtopがスレッドモードで実行されていない場合、100%を超える数値が報告されることがあります。 「H」インタラクティブコマンドを使用してスレッドモードを切り替えることができます。
さらに、マルチプロセッサ環境では、Irixモードがオフになると、topはSolarisモードで実行されます。ここで、ジョブの CPU 使用量は CPU の総数に分けられます。 「I」インタラクティブコマンドを使用して、Irix / Solarisモードを切り替えることができます。
Solaris モードでは、パーセンテージは各プロセスが使用する CPU 容量の合計を示します。したがって、識別子が75266のプロセスは、最後のリフレッシュサイクル中にCPU容量全体の25%を使用しました。 Irixモードでは、パーセンテージはどのくらい一つ各プロセスはCPU「単位」を使用します。したがって、識別子75266のプロセスは、最後のリフレッシュサイクル中に14.94コアに対応するCPU時間を使用しました(おそらく15以上のスレッドを実行していた可能性があります。9コア)。
実行単位の数を分割または乗算して、ある計算タイプから別の計算タイプに変換できます。 15は64のほぼ25%です(画面の「ショット」が同じリフレッシュサイクルに属していないため、一致するのに十分近い)。