Perf Top이 예상대로 작동하지 않습니다.

Perf Top이 예상대로 작동하지 않습니다.

perf top의 출력이 완전히 혼란스러워요

저는 전체 CPU를 소비하는 sac2라는 C 프로그램을 실행하고 있습니다. 특히 1000억 바이트 이상의 배열을 반복하여 모든 바이트를 8비트 정수로 추가합니다.

기능적 관점에서 볼 때 이는 흥미로운 작업을 수행하지 않지만 다양한 단계에서 실행할 때 다양한 하드웨어 카운터를 수집하고 비교할 수 있습니다.

top을 실행하면 아래와 같이 CPU를 100% 사용하고 있다고 나옵니다.

top - 00:27:48 up 8 days, 10:10,  4 users,  load average: 0.67, 0.49, 0.58
Tasks: 1881 total,   3 running, 1878 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.4 us,  0.4 sy,  0.0 ni, 99.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 15828906+total, 79267468+free, 51445376 used, 73877056+buff/cache
KiB Swap:  4194300 total,   207800 free,  3986500 used. 97584883+avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
197713 root      20   0   93.2g  20.9g    508 R 100.0  1.4   0:25.91 sac2  
 61859 root      20   0 3875820 748664 102052 S   3.3  0.0  10:40.92 perf
258330 root      20   0  103340   9024   1524 S   2.2  0.0  80:17.05 pmdalinux
194985 root      20   0  163968   4204   1608 R   2.0  0.0   0:10.48 top
  7099 root      20   0   28504   4800    400 S   1.9  0.0 224:19.92 irqbalance
192315 pcp       20   0  125020  35180   2524 S   1.0  0.0   0:06.15 pmlogger
 71102 root      20   0  150408   6092   1584 S   0.7  0.0  25:47.99 dstat

그러나 perf top에 따르면 오버헤드(CPU 사용률로 가정)는 약 40%에 불과합니다. 그렇다면 100%가 되어야 합니다.

Samples: 68M of event 'cycles:ppp', 4000 Hz, Event count (approx.): 85009918166 lost: 0/0 drop: 0/0
Overhead  Shared Object                 Symbol
  39.63%  sac2                          [.] main
   9.18%  [kernel]                      [k] mem_cgroup_charge_common
   5.10%  [kernel]                      [k] clear_page_c_e
   3.43%  [kernel]                      [k] retint_userspace_restore_args
   3.00%  [kernel]                      [k] sysret_check

또한 sac2가 완료되면 perf top은 sac2가 25초 동안 활성 상태임을 계속 표시하며 오버헤드는 꾸준히 감소합니다.

또 다른 문제는 perf-top 매뉴얼 페이지에 설명된 거의 모든 옵션이 무시된다는 것입니다.

전체 공개에 따르면 시스템에는 96개의 Skylake 코어, 192개의 스레드 및 1.5TB의 메모리가 있습니다. 테스트를 실행하면 머신에 나 혼자만 있습니다. 저는 루트로 실행 중이고 시스템은 Linux 커널 3.10이 설치된 Centos7을 실행하고 있습니다.

한 가지 가능성은 perf top이 3.10 커널에 많은 버그를 가지고 있다는 것입니다. 또 다른 가능성은 오버헤드가 무엇인지 이해하지 못한다는 것입니다. 그럼에도 불구하고 대부분의 옵션이 작동하지 않는다는 사실은 매우 수상합니다. 누구든지 도와줄 수 있나요?

답변1

또한 sac2가 완료되면 perf top은 sac2가 25초 동안 활성 상태임을 계속 표시하며 오버헤드는 꾸준히 감소합니다.

이는 시간 평균입니다. "관찰된 샘플의 비율"은 물론 관찰된 샘플의 수에 따라 달라집니다. 그래서 이것은 완전히 예상되었습니다!

특히 1000억 바이트 이상의 배열을 반복하여 모든 바이트를 8비트 정수로 추가합니다.

그럼 100GB RAM이 있나요? 그렇지 않으면 RAM의 일부를 페이지 아웃해야 합니다. 출력 top결과에 따르면 약 16GB의 메모리가 있는 것으로 나타났습니다! 귀하의 top진술은 오해의 소지가 있으며 RAM이 1.5TB이므로 적합합니다!

perf top또한 페이지를 가져와야 하는 횟수(예: 캐시 누락)도 계산해 보세요.많은당신의 경우에는. 이는 CPU 타이머에 포함되지 않을 가능성이 높습니다!

또한 perf top없는 경우 -a모든 코어를 샘플링하는 대신 단일 CPU 코어에 연결됩니다. sac2보고 있는 동일한 코어에 프로세스를 고정 하지 않는 한 프로세스는 다른 곳에서 실행될 가능성이 높습니다.

관련 정보