프로파일링 (컴퓨터 프로그래밍)
프로파일링(profiling, 프로그램 프로파일링/소프트웨어 프로파일링) 또는 성능 분석은 프로그램의 시간 복잡도 및 공간(메모리), 특정 명령어 이용, 함수 호출의 주기와 빈도 등을 측정하는 동적 프로그램 분석의 한 형태이다. 프로파일링 정보는 대개가 프로그램 최적화를 보조하기 위해 사용된다. 프로파일링은 프로파일러(profiler)라는 도구를 사용하여 프로그램 소스 코드나 이진 실행 파일을 계측 분석함으로써 수행한다.
프로그램 이벤트 수집
[원본 편집]프로파일러는 다양한 기술을 이용하여 데이터를 수집하는데, 여기에는 하드웨어 인터럽트, 코드 계측, 명령어 집합 시뮬레이션, 운영 체제 후킹, 성능 카운터를 포함한다.
프로파일러의 이용
[원본 편집]프로파일러의 출력물은 다음과 같다:
- 주시되는 이벤트의 통계적 요약 (프로파일)
- 기록된 이벤트의 스트림 (추적)
- 하이퍼바이저와의 상호 작용 (이를테면 화면 디스플레이를 통한 지속적이거나 주기적인 감시)
역사
[원본 편집]성능 분석 도구는 1970년대 초 IBM/360, IBM/370에 존재했고, 일반적으로 실행 코드의 핫 스팟을 감지하기 위해 프로그램 상태 규정어(PSW)를 기록한 타이머 인터럽트에 기반을 두었다. 이는 초기 표집의 한 예이다. 1974년 초 명령어 집합 시뮬레이터는 완전한 추적 및 기타 성능 감시 기능을 허용했다.
유닉스의 프로파일러 구동 프로그램 분석은 적어도 1979년으로 거슬러 올라가는데, 이 때 유닉스 시스템에는 개별 함수뿐 아니라 얼마나 많은 프로그램 실행 시간이 사용되었는지를 나열하는 기본 도구 "prof"를 포함했다. 1982년에 gprof은 이 개념을 완전한 호출 그래프 분석으로 확장하였다.[1]
1994년에 디지털 이큅먼트 코퍼레이션(DEC)의 아미타브 스리바스타바(Amitabh Srivastava)와 앨런 유스터스는 ATOM에 대해 기술한 백서를 출판했다.[2] ATOM은 프로그램을 자신만의 프로파일러로 변환하기 위한 플랫폼이다. 즉, 컴파일 타임에서 코드를 분석 대상의 프로그램에 삽입하는 것이다. 삽입된 코드는 분석 데이터를 출력한다. 스스로 분석하여 프로그램을 수정하는 이 기술을 계측(instrumentation)이라 부른다.
2004년 grpof와 ATOM의 백서가 현 시대의 가장 영향력 있는 PLDI 백서의 50가지 목록에 등장하였다.[3]
출력 기반의 프로파일러 종류
[원본 편집]플랫 프로파일러(flat profiler)
[원본 편집]이 문단은 비어 있습니다. 내용을 추가해 주세요. |
호출 그래프 프로파일러(call-graph profiler)
[원본 편집]이 문단은 비어 있습니다. 내용을 추가해 주세요. |
입력에 민감한 프로파일러(Input-sensitive profiler)
[원본 편집]이 문단은 비어 있습니다. 내용을 추가해 주세요. |
같이 보기
[원본 편집]참조
[원본 편집]- ↑ 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
- ↑ Amitabh Srivastava and Alan Eustace, "Atom: A system for building customized program analysis tools", 1994 (download) // Proceeding PLDI '94 Proceedings of the ACM SIGPLAN 1994 conference on Programming language design and implementation. Pages 196 - 205, doi:10.1145/773473.178260
- ↑ 20 Years of PLDI (1979–1999): A Selection, Kathryn S. McKinley, Editor
외부 링크
[원본 편집]- Article "Need for speed — Eliminating performance bottlenecks" on doing execution time analysis of Java applications using IBM Rational Application Developer.
- Profiling Runtime Generated and Interpreted Code using the VTune Performance Analyzer