프로파일링 (컴퓨터 프로그래밍)

프로파일링(profiling, 프로그램 프로파일링/소프트웨어 프로파일링) 또는 성능 분석은 프로그램의 시간 복잡도 및 공간(메모리), 특정 명령어 이용, 함수 호출의 주기와 빈도 등을 측정하는 동적 프로그램 분석의 한 형태이다. 프로파일링 정보는 대개가 프로그램 최적화를 보조하기 위해 사용된다. 프로파일링은 프로파일러(profiler)라는 도구를 사용하여 프로그램 소스 코드나 이진 실행 파일을 계측 분석함으로써 수행한다.

프로그램 이벤트 수집 
프로파일러는 다양한 기술을 이용하여 데이터를 수집하는데, 여기에는 하드웨어 인터럽트, 코드 계측, 명령어 집합 시뮬레이션, 운영 체제 후킹, 성능 카운터를 포함한다.

프로파일러의 이용 

프로파일러의 출력물은 다음과 같다:
 주시되는 이벤트의 통계적 요약 (프로파일)
 기록된 이벤트의 스트림 (추적)
 하이퍼바이저와의 상호 작용 (이를테면 화면 디스플레이를 통한 지속적이거나 주기적인 감시)

역사 
성능 분석 도구는 1970년대 초 IBM/360, IBM/370에 존재했고, 일반적으로 실행 코드의 핫 스팟을 감지하기 위해 프로그램 상태 규정어(PSW)를 기록한 타이머 인터럽트에 기반을 두었다. 이는 초기 표집의 한 예이다. 1974년 초 명령어 집합 시뮬레이터는 완전한 추적 및 기타 성능 감시 기능을 허용했다.

유닉스의 프로파일러 구동 프로그램 분석은 적어도 1979년으로 거슬러 올라가는데, 이 때 유닉스 시스템에는 개별 함수뿐 아니라 얼마나 많은 프로그램 실행 시간이 사용되었는지를 나열하는 기본 도구 "prof"를 포함했다. 1982년에 gprof은 이 개념을 완전한 호출 그래프 분석으로 확장하였다.

1994년에 디지털 이큅먼트 코퍼레이션(DEC)의 아미타브 스리바스타바(Amitabh Srivastava)와 앨런 유스터스는 ATOM에 대해 기술한 백서를 출판했다. ATOM은 프로그램을 자신만의 프로파일러로 변환하기 위한 플랫폼이다. 즉, 컴파일 타임에서 코드를 분석 대상의 프로그램에 삽입하는 것이다. 삽입된 코드는 분석 데이터를 출력한다. 스스로 분석하여 프로그램을 수정하는 이 기술을 계측(instrumentation)이라 부른다.

2004년 grpof와 ATOM의 백서가 현 시대의 가장 영향력 있는 PLDI 백서의 50가지 목록에 등장하였다.

출력 기반의 프로파일러 종류

플랫 프로파일러(flat profiler)

호출 그래프 프로파일러(call-graph profiler)

입력에 민감한 프로파일러(Input-sensitive profiler)

같이 보기 
 성능 공학

참조

외부 링크 
 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

소프트웨어 최적화