그프로프
GprofGprop은 Unix 애플리케이션을 위한 성능 분석 툴이다.그것은 계측과 샘플링의[1] 혼합물을 사용했으며, 오래된 "프로" 도구의 확장 버전으로 만들어졌다.프로파일과 달리 gprop은 제한된 통화 그래프 수집과 인쇄가 가능하다.[1][2]
역사
GPROP은 원래 버클리 유닉스(4.2BSD[3]) 버클리 캘리포니아 대학의 수잔 L. 그레이엄이 이끄는 그룹에 의해 쓰여졌다.1988년 제이 펜라손에 의해 GNU 비뉴틸스에 대한 GNU 프로젝트의 일환으로 또 다른 구현이 작성되었다.[4][5]
실행
컴파일하는 동안(예를 들어 '을 사용하여) 계측 코드가 프로그램 코드에 자동으로 삽입됨-pg'gcc 컴파일러 옵션)를 사용하여 호출자 기능 데이터 수집각 기능 호출 전에 모니터 기능 'mcount'에 대한 호출을 삽입한다.[6]
샘플링 데이터는 프로그램이 종료되기 직전에 'gmon.out' 또는 'progname.gmon' 파일에 저장되며, '로 분석할 수 있다.gprof' 명령줄 도구.여러 gmon 파일을 '와 결합할 수 있다.gprof -s' 프로그램의 여러 실행에서 데이터를 수집한다.
GPROP 출력은 평면 프로파일과 통화 그래프 두 부분으로 구성된다.평면 프로파일은 각 기능에 소요된 총 실행 시간과 총 실행 시간의 백분율을 제공한다.함수 호출 카운트도 보고된다.출력은 백분율별로 정렬되며, 핫스팟은 목록의 맨 위에 있다.
출력의 두 번째 부분은 텍스트 통화 그래프인데, 누가 (상위)라고 불렀는지 그리고 누가 (하위 서브루틴)이라고 불렀는지를 각 기능에 대해 보여준다.통화 그래프를 gprop에서 그래픽 형태로 변환할 수 있는 gp2dot이라는 외부 도구가 있다.[7]
한계 및 정확도
런타임에 타이밍 값은 통계 샘플링을 통해 얻는다.샘플링은 운영체제 인터럽트(프로필 (2) 또는 setitimer(2) syscalls를 통해 프로그래밍됨)를 사용하여 대상 프로그램의 프로그램 카운터를 정기적으로 프로빙함으로써 이루어진다.결과 데이터는 정확하지 않고 오히려 통계적 근사치가 된다.오차의 양은 보통 두 개 이상의 표본 추출 기간이다.값이 표본 추출 기간의 n배인 경우 값에서 예상되는 오차는 n 표본 추출 기간의 제곱근이다.[8][9]일반적인 샘플링 주기는 0.01초(10밀리초) 또는 0.001초(1ms) 또는 즉 CPU 실행 시간의 초당 100 또는 1000 샘플이다.
BSD와 같은 일부 버전에서 공유 라이브러리의 프로파일링은 프로파일 함수의 제한 때문에 제한될 수 있으며, 프로파일 함수는 라이브러리 기능 또는 시스템 호출로 구현될 수 있다.glibc에는 동적 라이브러리를 프로파일링하기 위해 'sprof'라고 불리는 유사한 효용이 있었다.[10]
Gprop은 커널 모드에서 보낸 시간(시콜, CPU 또는 I/O 대기 중)을 측정할 수 없으며 사용자 공간 코드만 프로파일링된다.[9]
mcount 기능은 일부 구현에서는 스레드 안전하지 않을 수 있으므로 다중 스레드 애플리케이션 프로파일이 부정확할 수 있다(일반적으로 그것은 애플리케이션의 주요 스레드만 프로파일링).[11]
고차 또는 객체 지향 프로그램의 경우 계측 오버헤드가 높을 수 있다([12]추정 30%-260%).[13]상호 재귀와 비독점 주기는 전체 통화 체인이 아닌 호 통과만을 기록하기 때문에 gprop 접근법(콘텍스트 민감성 통화 그래프)으로 확인할 수 없다.[13][14][15]
콜그래프 수집을 하는 gprop은 GCC, clang/LLVM 및 기타 다른 컴파일러와 같이 호환 가능한 컴파일러에만 사용할 수 있다.
리셉션
2004년에 GPROP 논문은 1982년의 4개 논문 중 하나로 역사상 가장 영향력 있는 50개 PLDI 논문의 목록에 올랐다.[16]
Thiel에 따르면,[6] "GPROP ...은 성능 분석 분야에 혁명을 일으켰고, 빠르게 전 세계 개발자들에게 선택의 도구가 되었다.그 도구는 여전히 ...을 많이 따르고 있다.그 도구는 여전히 활발하게 유지되고 있으며 현대 세계에서 여전히 관련성이 있다."
참고 항목
참조
- ^ a b Susan L. Graham, Peter B.케슬러, 마샬 K.Mckusick. gprof: Call Graph Execution Profiler // SIGPlan '82 컴파일러 건설 심포지엄, SIGPlan Notice, Vol. 17, No. 6, 페이지 120-126; doi: 10.1145/800230806987
- ^ gprof --- 통화 그래프 // Ping Huang, MIT AI 연구소, 컴퓨팅 혁신
- ^ History 그 gprofiler는 4.2에 나타났다.BSD
- ^ GNU gpf 매뉴얼 : "GNU gpf는 Jay Fenlason에 의해 작성되었다.
- ^ GNU's Bulletin, vol. no. 5(1988) : "GProf 대체재단의 직원 제이 펜라손은 최근 버클리 유닉스의 'GPROP'과 호환되는 GNU C와 어울리는 프로파일러를 완성했다."
- ^ a b Justin Thiel, 소프트웨어 성능 분석 도구 및 기술 개요: GProf에서 DTrace(2006) "2.1.1 GProf 개요"
- ^ GProf 콜 그래프 시각화 // 과학 컴퓨팅용 Cookbook파이톤 요리책.에콜 폴리테크니크 페데랄 데 로잔(EPFL)
- ^ 웨이백 머신에 보관된 gprop 출력의 통계적 부정확성 2012-05-29
- ^ a b 2013-12-21 Wayback Machine에 보관된 BG/P 시스템의 gpf 프로파일링 도구, Argonne Leadership Computing Facility의 "프로파일 데이터 해석 문제"
- ^ http://www.hpl.hp.com/research/linux/qprof/
- ^ HowTO: 다중 스레드 응용프로그램에 gpf 사용 // Sam Hocevar, 2004-12-13
- ^ GNU gp 프로파일러 2015-12-08년 웨이백머신에 보관된 국립대만대 수학과 유카이홍, 2008년 7월 19일
- ^ a b 수정되지 않고 최적화된 코드, ACM 1-5593-167/8/06/2005의 오버헤드 통화 경로 프로파일링.
- ^ J. M. Spivey Fast, 정확한 통화 그래프 프로파일 2003년 9월 3일//Wayback Machine에서 보관된 2012-02-07년 자료 보관, Volume 34 Event 3, 2004년 3월, 페이지 249 - 264Spivey, 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. S2CID 17866706.
- ^ 요시 크레이닌, 프로파일러들의 거짓말 : gpf와 KCachegrind // 2013년 2월 2일
- ^ PLDI 20년(1979~1999):A Selection, Kathryn S.맥킨리, 에디터
추가 읽기
- Susan L. Graham, Peter B.케슬러, 마샬 K.Mckusick. gprof: Call Graph Execution Profiler // SIGPlan '82 컴파일러 건설 심포지엄, SIGPlan Notice, Vol. 17, No. 6, 페이지 120–126; doi: 10.1145/800230806987
- Graham, S. L., Kessler, P. B. 및 McKusick, M. K. (1983) 모듈형 프로그램에 대한 실행 프로파일러.소프트w: 연습.Experience, 13: 671–685. doi: 10.1002/speer.4380130803
외부 링크
- Vinayak Hegde Programmer's Toolkit: grep을 사용한 프로파일링 프로그램, Linux Gazette, 2004
- 마틴 허니포드, GNU 프로파일러로 코드 속도 올려 2006년 4월 3일 // IBM DeveloperWorks, Technical Library에서 가장 많은 시간이 걸리는 애플리케이션 부분 공략
- GNU GProf 문서