반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

/var/log/messages

perf로 프로세스와 cpu 분석해보기 본문

카테고리 없음

perf로 프로세스와 cpu 분석해보기

로만로만 2023. 8. 27. 16:00
반응형

perf는 sar -f -P ALL의 %idle 필드보다 더 자세하게 cpu의 사용량을 확인할 수 있습니다.

 

1. CPU 코어의 중요성:

현대의 대부분의 시스템은 멀티코어 프로세서를 사용합니다. 각 코어는 독립적으로 연산을 수행할 수 있으므로, 소프트웨어는 병렬 처리를 통해 성능 향상을 꾀할 수 있습니다.
하지만, 모든 스레드나 프로세스가 고르게 코어를 사용하지 않는 경우 성능 저하의 원인이 될 수 있습니다.

 

2. perf와 CPU 코어:

코어별 분석 perf를 사용하면 각 CPU 코어에서 어떤 이벤트가 발생하는지 모니터링할 수 있습니다. 
예를 들면, 특정 코어에서의 CPU 캐시 미스, 분기 예측 실패 등의 이벤트를 측정할 수 있습니다.
스레드/프로세스 추적 perf로 특정 프로세스나 스레드가 어느 코어에서 실행되는지, 
얼마나 많은 CPU 시간을 사용하는지 등의 정보를 얻을 수 있습니다.
병목 지점 식별 모든 코어가 균일하게 사용되지 않는 경우, perf를 통해 해당 코어에서 발생하는 병목 지점을 식별할 수 있습니다.

 

3. 사용 예시:

perf stat <명령어>를 입력해봐서 예시를 확인해보겠습니다.

0.75 msec task-clock #0.664 CPUs utilized ls 명령이 실행되는 동안 CPU는 약 0.75 밀리초 동안 사용되었으며, 이는 약 66.4%를 사용하였음을 나타냅니다.
0      context-switches          #    0.000 /sec
0      cpu-migrations            #    0.000 /sec
ls 명령의 실행 동안 컨텍스트 스위치나 CPU 마이그레이션은 발생하지 않았습니다.
86      page-faults               #  118.167 K/sec 페이지 폴트는 메모리 접근 중 발생하는 것으로, ls 명령이 실행되는 동안 86회의 페이지 폴트가 발생했습니다. 초당 평균 118.167K의 페이지 폴트 발생률을 가졌습니다.
<not supported>      cycles
<not supported>      instructions
<not supported>      branches
<not supported>      branch-misse
일부 성능 카운터는 해당 시스템에서 지원되지 않거나, 모니터링하기 위한 권한이 없어서 값을 가져올 수 없습니다. 여기서는 cycles, instructions, branches, branch-misses에 해당하는 값들이 지원되지 않습니다.
0.001277509 seconds time elapsed ls 명령의 전체 실행 시간은 약 0.001277509초였습니다.
0.001318000 seconds user
0.000000000 seconds sys
사용자 시간은 약 0.001318초로, 이는 ls 명령이 사용자 모드에서 소비한 시간입니다. 시스템 시간은 0초로, ls 명령이 커널 모드에서 소비한 시간은 없습니다.

4. ls의 사용률이 66%?

1. 시작 및 종료 오버헤드: 
모든 프로세스나 명령어는 시작할 때와 종료할 때 일정한 양의 오버헤드를 가집니다. 프로세스를 스케줄링하거나 필요한 메모리나 리소스를 준비하고, 작업 완료 후 리소스를 해제하는 과정 등이 포함됩니다. 이러한 오버헤드는 작업의 전체 실행 시간과 관계없이 거의 일정합니다. 따라서 작업의 실제 실행 시간이 매우 짧을 경우, 이 오버헤드가 전체 CPU 사용 시간의 큰 부분을 차지하게 됩니다.

2. 상대적 측정: 
CPU 사용률은 주어진 시간 동안의 CPU 활동을 측정하는 것입니다. 짧은 작업의 경우, 그 작업 동안 CPU가 바쁜 상태로 있었을 가능성이 높습니다. 예를 들어, 1 밀리초 동안의 작업이 CPU의 100%를 사용했다면, 그 작업이 1초 동안 실행되는 더 긴 작업과 비교했을 때 상대적으로 CPU 사용률이 높게 나올 것입니다.