不同top的CPU模式如何对应?

不同top的CPU模式如何对应?

我正在一台具有 4 个 Intel Xeon E5-4620(总共 64 个核心)的服务器上使用 NumPy 和 Python 的 3 Pool 多处理运行一些矩阵乘法。

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%,每进程 Solaris 模式为 25%,那么 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 的进程在上一个刷新周期中使用的 CPU 时间相当于 14.94 个内核(大概它正在运行 15 个或更多线程,这解释了 9 个进程如何可以使用超过 9 个内核)。

您可以通过除或乘以执行单元的数量来从一种计算类型转换为另一种计算类型:15 几乎是 64 的 25%(足够接近以匹配,因为您的屏幕“截图”不属于同一刷新周期) )。

相关内容