티스토리 뷰

프로그래밍

gprof로 프로파일링하기

야라바 2022. 10. 17. 13:51


요즘은 지상파 TV에서도 범죄 심리를 다루는 프로파일링을 자주 접할 수 있어서 일반인들은 프로파일링이란 용어를 접하면 범죄 심리를 다루는 전문가를 연상하지만, 프로그래밍 영역에서도 프로파일링은 상당히 중요한 부분이다. 입력, 처리, 출력으로 이어지는 단순한 흐름의 개발로 손을 털 수 있는 프로그램이라면 프로파일링을 접할 기회는 거의 없겠지만 데이터베이스 관리 시스템이나 다양한 저작 도구와 같은 "도구"성의 덩치가 있는 프로그램들은 처리하는 데이터 용량이나 기타 환경에 따라 성능을 개선해야 하는 상황에 직면할 수밖에 없다.

 

성능 개선의 방법으로 설계를 바꾸는 즉, 프로그램의 구조를 대대적으로 변경하는 재구조화도 있지만, 일정한 영역이 자주 호출되거나, 특정 부분에서 시간을 오래 소모하는 경우를 찾아서 각개 격파하는 방법을 적용할 수도 있다. 이렇게 자주 호출되거나 시간이 오래 지체되는 구간을 찾기 위한 방법이 프로파일링인 것이다.

 

위의 그림은 비주얼 스튜디오에서 성능 프로파일러를 가동해서 프로그램 수행 중 가장 많은 시간을 점유한 곳과 부하가 많은 부분을 확인하고 있는 장면이다. 가장 많은 시간이나 부하를 가졌던 곳을 집중적으로 격파하면 당연히 프로그램의 전체 성능도 급격히 개선될 것이다.

 

리눅스에서 C/C++ 프로젝트에 대한 프로파일링을 수행하려면 프로그램을 다시 필드 해야 한다. 컴파일러가 함수의 호출 빈도와 시간을 분석할 수 있는 장치를 프로그램에 삽입하도록 자동으로 지시하기 때문이다. 위의 그림은 빌드 자동화가 적용되어 있는 프로젝트에서 configure 파일에 프로파일링 옵션인 "-pg"를 추가하고 있는 모습이다. configure 가 아니더라도 컴파일러에게 -pg 옵션을 전달할 수 있도록 makefile 등에 적용하고 빌드하면 된다.

 

-pg 옵션을 추가하여 새롭게 빌드한 프로그램을 일단 실행시키고 일정한 수행 시간 후에 프로그램을 종료시키면 위의 그림처럼 프로그램의 현재 디렉터리에 gmon.out에 생성된다.

 

gmon.out 파일 생성이 확인되면 "gprof 실행 파일명 gmon.out > rst.txt"로 프로파일링 보고서를 위의 그림과 같이 텍스트 파일로 만들 수 있다. 파일을 열어보면 항목 하단에 필드의 의미가 무엇인지 설명하고 있으므로 참조한다.  이제 범인을 찾아서 어떻게 하면 호출 횟수나 수행 시간을 줄일 수 있을지 머리를 굴려야겠다.ㅎㅎ 

 

보고서에 포함된 내용의 예제는 아래와 같다.

함수별 시간 점유도 순 분석
콜 그래프 분석

 

 


댓글
댓글쓰기 폼
«   2023/01   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함