저는 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%입니다(화면 "샷"이 동일한 새로 고침 주기에 속하지 않기 때문에 일치하기에 충분히 가깝습니다).