Como diferentes modos de CPU do topo correspondem um ao outro?

0

Estou executando algumas multiplicações de matrizes com o NumPy e o multiprocessamento do Pool 3 do Python em um servidor com 4 Intel Xeon E5-4620, totalizando 64 núcleos.

topo no modo Solaris mostra (o):

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

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

No modo por núcleo:

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

A pergunta: Como esses valores estão conectados?

Se a parte superior mostra ~ 80% em uso por núcleo e 25% em modo Solaris por processo, onde 50% do uso principal desaparecem? Como esses 9 processos em Python (colei apenas 6) usam todos os 64 núcleos?

    
por homocomputeris 07.02.2018 / 16:12

1 resposta

0

O top manpage descreve a porcentagem da CPU da seguinte forma:

The task's share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time.

In a true SMP environment, if a process is multi-threaded and top is not operating in Threads mode, amounts greater than 100% may be reported. You toggle Threads mode with the 'H' interactive command.

Also for multi-processor environments, if Irix mode is Off, top will operate in Solaris mode where a task's cpu usage will be divided by the total number of CPUs. You toggle Irix/Solaris modes with the 'I' interactive command.

No modo Solaris, a porcentagem mostra quanto de sua capacidade total de CPU está sendo usada por cada processo; assim, o processo com o identificador 75266 usou 25% de toda a capacidade da CPU no último ciclo de atualização. No modo Irix, a porcentagem mostra o quanto de uma CPU “unidade” está sendo usada por cada processo; Assim, o processo com o identificador 75266 usou o tempo de CPU equivalente a 14,94 núcleos no último ciclo de atualização (presumivelmente, ele está executando 15 segmentos ou mais, o que explica como nove processos podem usar mais de nove núcleos).

Você pode ir de um tipo de cálculo para outro dividindo ou multiplicando pelo número de unidades de execução: 15 é quase 25% de 64 (próximo o suficiente para corresponder, já que suas “tomadas” de tela não eram do tipo mesmo ciclo de atualização).

    
por 07.02.2018 / 16:23