Python

不同top的CPU模式如何相互對應?

  • February 7, 2018

我正在使用 NumPy 和 Python 的 3 池多處理在具有 4 個 Intel Xeon E5-4620 的伺服器上執行一些矩陣乘法,總共 64 個核心。

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
...

問題: 這些價值觀是如何联繫起來的?

如果 top 顯示每個核心使用率約為 80%,每個程序 Solaris 模式下顯示 25%,那麼 50% 的核心使用率在哪裡消失了?這 9 個 Python 程序(我只粘貼了 6 個)如何使用所有 64 個核心?

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 個或更多執行緒,這解釋了九個程序如何使用超過九個核心)。

您可以通過除以或乘以執行單元的數量從一種類型的計算轉到另一種類型:15 幾乎是 64 的 25%(足夠接近以匹配,因為您的螢幕“截圖”不是相同的刷新周期)。

引用自:https://unix.stackexchange.com/questions/422558