본문 바로가기
개발

Visual Studio 2008 Profiler

by esstory 2008. 3. 25.


 

서진호님이 보내주신 Visual Studio Team System 2008 Team Suite (90일 평가판) CD 덕분에 Team Suite에만 있는 좋은 기능들을 미리 엿볼 수 있는 기회가 생겼습니다.

프로파일링 기능은 Visual Studio 2005 Team Suite에서도 역시 제공되던 기능이었는데 여태 사용법을 모르다가 얼마 전 MSDN Magazine의 기사를 보고 이제야 발견하게 되었습니다.

사용해 보니 상용 프로파일링 프로그램보다는 기능은 못하지만, 아무래도 Visual Studio IDE 에 결합되어 있다 보니 사용성은 좋은 편입니다.

 

프로파일링을 시작하려면 먼저 분석 메뉴에 있는 성능 마법사 시작메뉴를 선택하면 됩니다.

 

 

사용자 삽입 이미지


성능마법사를 시작하면, 어떤 방법으로 계측을 할 것인지 물어 보는 창이 나옵니다. (아래 그림 참조)

여기서샘플링은 일정한 주기마다 계측하는 방식을 의미하고 (말 그대로 성능을 샘플링 해서 측정) ‘계측은 모든 함수 호출을 호출 때마다 측정하는 방식입니다.

아무래도 모든 함수에 대해 계측을 하게 되면, 그만큼 원래 프로그램 수행에 지장을 주기 때문에 실사용과 비슷하게 작동하도록 하면서도 가끔가다 성능을 측정하는 샘플링방식이 디폴트로 되어 있는 것 같습니다.

 

사용자 삽입 이미지

 

얼마 전에 만든 SourceCount 프로그램을 가지고 테스트를 해 봤습니다. 이 프로그램의 경우 짧은 시간 CPU를 소모하고 끝나기 때문에 샘플링으로는 측정이 불가능했습니다.(샘플링 하려고 하면 프로그램이 이미 종료됨)

그래서 계측을 사용하여 SourceCount 의 성능을 측정을 한 결과 아래와 같은 요약 정보가 표시되었습니다.

 

사용자 삽입 이미지

 

그림이 조금 잘렸는데 요약 정보에는

 

  • 가장 많이 호출된 함수
  • 개별 작업이 가장 많은 함수
  • 시간이 가장 오래 걸리는 함수

 

에 대한 요약 정보가 보입니다.

윈도우 어플리케이션이다 보니 가장 많은 시간을 보낸 함수에 메시지 루프와 같은 원하지 않는 결과가 나오네요. 요건 별 도움 안됩니다.

프로파일링 결과는 아래와 같이 요약, 호출 트리, 모듈, 호출자/호출 수신자, 함수, 표시, 프로세스 뷰로 나뉘어 지고, 각각의 뷰는 서로 연동되도록 되어 있습니다.

 

 

사용자 삽입 이미지


함수 뷰에서는 각 함수 별로 처리하는 데 걸린 시간, 호출 횟수, 경과된 시간과 이에 대한 백분율 정보를 표시합니다. 각 함수에 대해 자세한 정보를 얻으려면 마우스 우측 버튼을 통해 소스로 바로 이동하거나, 함수를 호출하는 호출자/호출 수신자 뷰로 이동할 수 있습니다. 일반적으로 사용빈도가 비정상적으로 많거나, 수행시간이 긴 함수들이 프로파일링의 타켓으로 삼아 수정하면 됩니다.

 

 

사용자 삽입 이미지


프로파일링 속성 창에서는 계측에 사용되는 몇 가지 옵션이 있는데, “계측에서 작은 함수 제외와 같이 리포트 양을 줄이기 위한 옵션이 있습니다(디폴트로 선택 됨) 확인하고자 하는 성능에 이 부분도 빠짐없이 체크하고 싶다면 이 옵션을 풀어 줘야 합니다.

 

사용자 삽입 이미지

 

마지막으로 설명드릴 부분은 프로파일링 결과를 통해 확인된 병목지점을 수정하고 이를 이전과 비교해서 얼마나 나아졌는지 확인하는 방법입니다.

 

테스트 프로젝트로 삼고 있는 SourceCount 프로그램은 폴더 내 모든 소스 파일을 읽어 들여 라인 수를 측정하는 프로그램입니다. 이 프로그램에서 가장 시간을 많이 먹는 작업은 역시 파일을 열고, 파일의 라인 수를 구하는 부분인데요. 이 부분을 2가지 버전으로 만들어서 성능을 비교해 봤습니다.

 

첫 번째 버전은 MFC CStdioFile을 사용해서 파일을 한 줄씩(ReadString)읽어 들여 처리하는 방식이고 두 번째 버전은 CreateFile API를 통해 파일을 연 다음 ReadFile API 로 파일의 모든 내용을 한번에 읽어와 strtok 함수로 new line 을 잘라내는 방식을 사용했습니다. (소스 내용이 길어 접어 놓았습니다. 굳이 보실 분들은 펼쳐서 보세요 ^^)

 

두 소스 모두 테스트를 위해 만든 소스이니 태클은 사양입니다 ^^;

 

요 두 가지 버전으로 각각을 성능을 계측한 후 성능을 비교해 보기로 했습니다.

성능 보고서 비교는 아래와 같이 분석 메뉴에서 선택할 수 있습니다.

 

사용자 삽입 이미지


 

성능 분석 작업은 성능 파일의 크기에 비례해서 꽤 오래 걸립니다. 10분 정도 경과 후 아래와 같은 결과내용을 확인할 수 있었습니다. (당연히 2번째 버전이 약 1.6배 빠른 것으로 나옵니다)

 

 

사용자 삽입 이미지

 

Visual Studio 2008 성능 분석은 분명 개발자의 가려운 부분을 긁어주는 훌륭한 도구입니다.

하지만, 이미 상용으로 판매되고 있는 여타 툴에 비해 기능이 많이 떨어지는 느낌입니다. 예를 들면 메모리 사용량에 대한 성능 분석은 찾을 수가 없었습니다.(요건 이미 있는 데 제가 못 찾은 거라면 누구든 괘념치 마시고 알려주세요 ^^)

CPU사용량만큼 이 부분도 성능 분석에 중요한 요소인데 아쉽네요.

그리고 분석 작업에 너무 많은 시간이 걸립니다 특히 계측으로 측정할 경우 수행하는 프로그램에 비해서 너무 많은 작업량이 따라 붙어 거의 프로그램이 꼼짝 하지 못하는 경우도 생기네요.  그리고 계측 후 분석 보고서를 만드는 작업도 때에 따라 거의 30분씩 걸리는 경우가 있어 이런 부분에 대한 개선이 있었으면 하는 아쉬움으로 남았습니다.

 

사용자 삽입 이미지

 

분석작업의 결과로 생기는 성능 보고서 파일(.vsp)은 파일 사이즈가 수백메가에서 기가 바이트까지 파일 사이즈가 제법 큽니다. 성능 측정을 몇번 하다 보면 하드 디스크가 꽤 괴로워하는데 이 점도 주의 하시기 바랍니다. ^^

 

 관련글 : Visual Studio 프로파일러를 사용한 응용 프로그램 병목 지점 찾기


댓글