Jump to content

Gprof

This is a fully translated article. Click here for more information.
From DawoumWiki, the free Mathematics self-learning

Gprof유닉스 응용 프로그램에 대해 성능 분석 도구입니다. 그것은 계측과 샘플링의 하이브리드를 사용했었고[1] 오래된 "prof" 도구의 확장된 버전으로 만들어졌습니다. prof와 달리, gprof는 제한된 호출 그래프 수집 및 인쇄가 가능합니다.[1][2]

History

GPROF는 원래 버클리 유닉스 (4.2BSD)에 대해 버클리 캘리포니아 대학교에서 Susan L. Graham이 이끄는 그룹에 의해 작성되었습니다.[3] 또 다른 구현은 Jay Fenlason에 의한 1988년에 GNU Binutils에 대해 GNU 프로젝트의 일부로 작성했습니다.[4][5]

Implementation

계측 코드는 호출자-함수 데이터를 수집하기 위해 컴파일 동안 (예를 들어, gcc 컴파일러의 '-pg' 옵션 사용함으로써) 프로그램 코드에 자동으로 삽입됩니다. 각 함수 호출 전에 모니터 함수 'mcount'에 대한 호출이 삽입됩니다.[6]

샘플링 데이터는 프로그램이 종료되기 직전에 'gmon.out' 또는 'progname.gmon' 파일에 저장되고, 'gprof' 명령줄 도구로 분석될 수 있습니다. 여러 gmon 파일은 프로그램의 여러 실행에서 데이터를 축적하기 위해 'gprof -s'와 결합될 수 있습니다.

GPROF 출력은 플랫 프로파일과 호출 그래프의 두 부분으로 구성됩니다. 플랫 프로파일은 각 함수에 소요된 총 실행 시간과 총 실행 시간의 백분율을 제공합니다. 함수 호출 횟수도 역시 보고됩니다. 출력은 목록 상단에 핫 스팟을 갖는 백분율로 정렬됩니다.

출력의 두 번째 부분은 각 함수에 대해 그것을 호출한 함수 (부모)과 그것이 호출한 함수 (자식 서브루틴)을 보여주는 텍스트 호출 그래프입니다. gprof에서 호출 그래프를 그래픽 형식으로 변환할 수 있는 gprof2dot라는 외부 도구가 있습니다. [7]

Limitations and accuracy

실행-시간에, 타이밍 값은 통계적 샘플링을 통해 얻습니다. 샘플링은 운영 시스템 인터럽트 (profil(2) 또는 setitimer(2) 시스템 호출을 통해 프로그래밍됨)를 사용하여 정기적인 간격으로 대상 프로그램의 프로그램 카운터를 조사함으로써 수행됩니다. 결과 데이터는 정확하지 않고, 오히려 통계적 근사치입니다. 오차의 양은 보통 하나 이상의 샘플링 기간입니다. 만약 하나의 값이 샘플링 기간의 n배이면, 값에서 예상된 오차는 n 샘플링 기간의 제곱근입니다.[8][9] 전형적인 샘플링 주기는 0.01초 (10밀리초) 또는 0.001초 (1ms)이고, 달리 말해서 CPU 실행 시간의 초당 100개 또는 1000개 샘플입니다.

BSD와 같은 일부 버전에서, 라이브러리 함수 또는 시스템 호출로 구현될 수 있는, profil 함수의 제한때문에 공유된 라이브러리의 프로파일링이 제한될 수 있습니다. glibc에는 'sprof'라는 동적 라이브러리를 프로파일링하기 위한 유사한 유틸리티가 있었습니다.[10]

Gprof는 커널 모드 (시스템 호출, CPU에 대한 대기 또는 I/O 대기)에서 소요된 시간을 측정할 수 없고, 오직 사용자 공간 코드가 프로파일링됩니다.[9]

mcount 함수는 일부 구현에서 쓰레드로-안전이 아닐 수 있으므로, 다중-쓰레드 응용 프로그램 프로파일이 올바르지 않을 수 있습니다 (전형적으로 그것은 오직 응용 프로그램의 기본 쓰레드를 프로파일합니다).[11]

고차원 또는 객체 지향 프로그램에 대해 계측 오버헤드가 높을 수 있습니다 (30%[12]-260%[13]로 추정됩니다). 상호 재귀 및 비-자명한 주기는 전체 호출 체인이 아닌 오직 호 순회를 기록하기 때문에 gprof 접근 방식 (컨텍스트-둔감한 호출 그래프)에 의해 해결할 수 없습니다.[13][14][15]

호출 그래프 수집 기능을 갖는 Gprof는 GCC, clang/LLVM 및 기타와 같은 호환 가능한 컴파일러에서만 사용될 수 있습니다.

Reception

2004년 GPROF 논문은 1982년의 4편의 논문 중 하나로 역사상 가장 영향력 있는 50개의 가장 영향력 있는 PLDI 논문의 목록에 등장했습니다.[16]

Thiel에 따르면,[6] "GPROF는 ... 성능 분석 분야에 혁명을 일으켰고 빠르게 전 세계 개발자들이 선택하는 도구가 되었습니다 ... 그 도구는 여전히 많은 후속 버전을 유지하고 있습니다 ... 그 도구는 여전히 적극적으로 유지 관리되고 현대 세계와 관련되어 있습니다."

See also

References

  1. ^ a b Susan L. Graham, Peter B. Kessler, and Marshall K. Mckusick. gprof: a Call Graph Execution Profiler // Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, SIGPLAN Notices, Vol. 17, No 6, pp. 120-126; doi: 10.1145/800230.806987
  2. ^ gprof --- Call Graph // Ping Huang, Reinventing Computing, MIT AI Lab
  3. ^ HISTORY The gprof profiler appeared in 4.2BSD
  4. ^ GNU gprof manual: "GNU gprof was written by Jay Fenlason."
  5. ^ GNU's Bulletin, vol. 1 no. 5 (1988): "Gprof replacement Foundation staffer Jay Fenlason has recently completed a profiler to go with GNU C, compatible with `GPROF' from Berkeley Unix. "
  6. ^ a b Justin Thiel, An Overview of Software Performance Analysis Tools and Techniques: From GProf to DTrace (2006) "2.1.1 Overview of GProf"
  7. ^ Gprof call graph visualization // Cookbook for scientific computing. Python cookbook. École polytechnique fédérale de Lausanne (EPFL)
  8. ^ Statistical Inaccuracy of gprof Output Archived 2012-05-29 at the Wayback Machine
  9. ^ a b gprof Profiling Tools on BG/P Systems Archived 2013-12-21 at the Wayback Machine, "Issues in Interpreting Profile Data", Argonne Leadership Computing Facility
  10. ^ http://www.hpl.hp.com/research/linux/qprof/
  11. ^ HOWTO: using gprof with multithreaded applications // Sam Hocevar, 2004-12-13
  12. ^ GNU gprof Profiler Archived 2015-12-08 at the Wayback Machine, Yu Kai Hong, Department of Mathematics at National Taiwan University; July 19, 2008
  13. ^ a b Low-Overhead Call Path Profiling of Unmodified,Optimized Code, ACM 1-59593-167/8/06/2005 .
  14. ^ J. M. Spivey Fast, accurate call graph profiling Archived 2012-02-07 at the Wayback Machine, September 3, 2003 // Software—Practice & Experience archive, Volume 34 Issue 3, March 2004, Pages 249 - 264 Spivey, J. M. (2004). "Fast, accurate call graph profiling". Software: Practice and Experience. 34 (3): 249–264. CiteSeerX 10.1.1.62.1032. doi:10.1002/spe.562.
  15. ^ Yossi Kreinin, How profilers lie: the cases of gprof and KCachegrind // February 2nd, 2013
  16. ^ 20 Years of PLDI (1979–1999): A Selection, Kathryn S. McKinley, Editor

Further reading

  • Susan L. Graham, Peter B. Kessler, and Marshall K. Mckusick. gprof: a Call Graph Execution Profiler // Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, SIGPLAN Notices, Vol. 17, No 6, pp. 120–126; doi: 10.1145/800230.806987
  • Graham, S. L., Kessler, P. B. and McKusick, M. K. (1983), An execution profiler for modular programs. Softw: Pract. Exper., 13: 671–685. doi: 10.1002/spe.4380130803

External links