25.2. Perf 사용
프로그램 실행의 통계 또는 샘플을 수집하기 위해 기본 PCL 인프라를 사용하는 것은 상대적으로 간단합니다. 이 섹션에서는 전체 통계 및 샘플링의 간단한 예를 제공합니다.
make
및 해당 하위 항목에 대한 통계를 수집하려면 다음 명령을 사용합니다.
# perf stat -- make all
perf
명령은 다양한 하드웨어 및 소프트웨어 카운터를 수집합니다. 그런 다음 다음 정보를 출력합니다.
Performance counter stats for 'make all': 244011.782059 task-clock-msecs # 0.925 CPUs 53328 context-switches # 0.000 M/sec 515 CPU-migrations # 0.000 M/sec 1843121 page-faults # 0.008 M/sec 789702529782 cycles # 3236.330 M/sec 1050912611378 instructions # 1.331 IPC 275538938708 branches # 1129.203 M/sec 2888756216 branch-misses # 1.048 % 4343060367 cache-references # 17.799 M/sec 428257037 cache-misses # 1.755 M/sec 263.779192511 seconds time elapsed
perf
도구는 또한 샘플을 기록할 수 있습니다. 예를 들어 make
명령과 해당 하위 항목에 대한 데이터를 기록하려면 다음을 사용합니다.
# perf record -- make all
이렇게 하면 샘플이 저장되는 파일과 수집된 샘플 수가 출력됩니다.
[ perf record: Woken up 42 times to write data ] [ perf record: Captured and wrote 9.753 MB perf.data (~426109 samples) ]
PCL(Linux용 성능 counter) 도구는 OProfile과 충돌
OProfile과 PCP for Linux (PCL) 모두 동일한 하드웨어 성능 모니터링 장치 (PMU)를 사용합니다. PCL perf
명령을 사용하려는 동안 OProfile이 실행 중인 경우 OProfile을 시작할 때 다음과 같은 오류 메시지가 발생합니다.
Error: open_counter returned with 16 (Device or resource busy). /usr/bin/dmesg may provide additional information. Fatal: Not all events could be opened.
perf
명령을 사용하려면 먼저 OProfile을 종료합니다.
# opcontrol --deinit
그런 다음 perf.data
를 분석하여 샘플의 상대적 빈도를 확인할 수 있습니다. 보고서 출력에는 샘플에 대한 명령, 오브젝트 및 기능이 포함됩니다. perf 보고서를 사용하여
분석을 출력합니다. 예를 들어 다음 명령은 가장 많은 시간을 사용하는 실행 파일에 대한 보고서를 생성합니다.
perf
.data
# perf report --sort=comm
결과 출력:
# Samples: 1083783860000 # # Overhead Command # ........ ............... # 48.19% xsltproc 44.48% pdfxmltex 6.01% make 0.95% perl 0.17% kernel-doc 0.05% xmllint 0.05% cc1 0.03% cp 0.01% xmlto 0.01% sh 0.01% docproc 0.01% ld 0.01% gcc 0.00% rm 0.00% sed 0.00% git-diff-files 0.00% bash 0.00% git-diff-index
왼쪽의 열에는 샘플의 상대적 양이 표시되어 있습니다. 이 출력은 xsltproc
및cabundle xmltex에서 대부분의 시간을 소비한다는
것을 보여줍니다. 완료하는 데 걸리는 시간을 줄이려면
xsltproc
및 rhcos xmltex
에 집중하십시오.
xsltproc
에서 실행한 함수를 나열하려면 다음을 실행합니다.
# perf report -n --comm=xsltproc
이 경우 다음을 생성합니다.
comm: xsltproc # Samples: 472520675377 # # Overhead Samples Shared Object Symbol # ........ .......... ............................. ...... # 45.54%215179861044 libxml2.so.2.7.6 [.] xmlXPathCmpNodesExt 11.63%54959620202 libxml2.so.2.7.6 [.] xmlXPathNodeSetAdd__internal_alias 8.60%40634845107 libxml2.so.2.7.6 [.] xmlXPathCompOpEval 4.63%21864091080 libxml2.so.2.7.6 [.] xmlXPathReleaseObject 2.73%12919672281 libxml2.so.2.7.6 [.] xmlXPathNodeSetSort__internal_alias 2.60%12271959697 libxml2.so.2.7.6 [.] valuePop 2.41%11379910918 libxml2.so.2.7.6 [.] xmlXPathIsNaN__internal_alias 2.19%10340901937 libxml2.so.2.7.6 [.] valuePush__internal_alias