1 / 20

GPROF 으로 프로파일링 하기

2003 Fall. GPROF 으로 프로파일링 하기. 주 홍 택 컴퓨터공학과 계명대학교. 도입 . 프로그램 실행 시간이 적정한가 ? 프로그램 실행 시간을 측정하는 방법 ? 수행 시간 단축을 위해서 어느 곳을 개선 해야 하는가 ?  프로파일링 프로그램의 동작를 기록하여 분석하여 보여 주는 도구. 단순 프로그램 성능 측정. 총 수행 시간 CPU 시간 입출력 수행 시간 루틴 또는 코드 세그먼트 호출 횟수 및 시간 시간 측정 명령어 사용 프로파일링에 걸리는 프로그램 성능 영향 없음

karma
Télécharger la présentation

GPROF 으로 프로파일링 하기

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2003 Fall GPROF으로 프로파일링 하기 주 홍 택 컴퓨터공학과 계명대학교

  2. 도입 • 프로그램 실행 시간이 적정한가? • 프로그램 실행 시간을 측정하는 방법? • 수행 시간 단축을 위해서 어느 곳을 개선 해야 하는가?  프로파일링 • 프로그램의 동작를 기록하여 분석하여 보여 주는 도구

  3. 단순 프로그램 성능 측정 • 총 수행 시간 • CPU 시간 • 입출력 수행 시간 • 루틴 또는 코드 세그먼트 호출 횟수 및 시간 • 시간 측정 명령어 사용 • 프로파일링에 걸리는 프로그램 성능 영향 없음 • 모든 실행 가능한 프로그램에 적용 가능 • 간간한 분석 결과만 제공

  4. 시간 측정 명령어 • 쉘 명령어 $time analyzer inputdata outputdata 22.3 real 7.1 user 4.5 sys • Bash 쉘 명령어인 time 이용 • Time 명령어는 anlayzer 프로그램을 수행하고 시간측정 결과를 출력 • 전체 수행 시간(CPU) 22.3초이고 사용자 공간에서 수행 시간은 7.1초 그리고 시스템 콜을 수행(시스템 시간)하는데 4.5초임을 표시 • 시스템 시간에는 입출력 및 프로세스 대기 시간 포함 • Unix 명령어 $ /bin/time analyzer inputdata outputdata 9.0u 6.7s 0:30 18% 23+24k 285+148io 625pf+0w • 사용자 시간, 시스템 시간, 총 수행 시간, CPU 사용 시간 비욜, 공유 메모리 사용량, 입출력 시간 그리고 page fault와 swap 횟수  수행시간이 만족스럽지 못하다면…

  5. gprof 소개 • 함수 단위(줄 단위)로 수행 시간을 분석하여 보고서를 만들어 줌 • 어떤 함수가 전체 수행 시간의 대부분을 사용하는지 알 수 있음 • 많은 수행 시간을 갖는 함수의 실행시간을 단축함 • 불필요한 함수 호출을 줄일 수 있음 • 다음 3단계를 거처서 성능 측정 • 프로파일링을 위한 프로그램 컴파일 • 프로파일 데이터 생성을 위한 프로그램 실행 • 프로파일 데이터 분석을 위한 gprof 실행 • 두 가지 데이터 분석 유형 • 평면 프로파일 • 호출 그래프 프로파일

  6. 프로파일링 프로그램 컴파일 • gcc 옵션으로 –pg 사용 • 컴파일시에는 프로파일링에 필요한 코드를 오브젝트 코드에 삽입 $ gcc –g –c myprog.c -pg • 링크시에는 프로파일링에 필요한 라이브러리와 링크 $ ld –o myprog /usr/lib/gcrt0.o myprog.o -lc_p • 링크와 컴파일 동시에하려면 $ gcc –o myprog myprog.c –g –pg • 줄 단위로 프로파일링시 –g 옵션 사용 • gcc 옵션 중 –a 을 같이 사용하면 블록 수행횟수 측정 가능

  7. 프로파일링 데이터 생성 • 프로파일링 데이터 생성을 위하여 프로그램을 수행함 • 다소 수행 시간이 늦어짐 • 프로그램이 프로파일 데이터를 수집하고 기록하는 시간 • 프로그램의 입력 및 출력에 프로그램의 수행에 많은 영향을 미침 • 프로파일링 데이터는 gmon.out 이라는 파일에 기록함 • 데이터 기록은 반드시 main 함수가 정상적으로 종료되거나 exit 함수에 의하여 종료되어야 함

  8. 프로파일링 데이터 분석 • gprof 명령어 사용으로 분석함 • 명령어 형식 • $ gprof optins [exe-file] [prof-files] [> outfile] • 옵션은 출력의 형식 지정, 분석 형태, 심볼 규정을 위한 옵션이 있음 • 실행 파일이 없으면 a.out 사용 • 프로파일링 데이터 파일이 없으면 gmon.out 사용 • 여러 개 프로파일링 데이터 파일이 주어지면 총합을 계산 함

  9. gprof 중요 옵션(1) • 출력 형식 관련 옵션 • 옵션 –A • 소스 코드에 분석 결과를 삽입하여 보여 줌 • 옵션 –C symspec • 지정된 심볼만 함수 분석에 사용함 • 옵션 –J symspec • 지정된 심볼만 소스 코드에 분석 결과를 삽입함 • 옵션 –p symspec • 평면 프로파일 생성, symspec 지정시 지정된 심볼만 생성 • 옵션 –q symspec • 호출 그래프 프로파일 생성, symspec 지정시 지정된 심볼만 생성 * 책의 내용은 오래된 옵션으로 사용 안 함

  10. gprof 중요 옵션(2) • 분석 옵션들 • 옵션 –a • static으로 선언된 함수에 대하여 분석을 하지 않음 • 옵션 –c • 프로파일링 옵션으로 컴파일 되지 않은 함수에 대하여 짐작하여 호출관계를 추정하여 분석함 • 옵션 –l • 줄 단위 프로파일링을 실시 함 • 옵션 –s • 프로파일링 데이터 파일들을 읽어서 gnom.sum에 합산하여 기록함

  11. 심볼 규격( symspec ) • 심볼 규격을 사용하여 특정 함수나 파일을 분석에서 제외하거나 포함시킬 수 있음 • 일반적인 심볼은 함수 이름으로 간주함 • 점(.)을 포함한 모든 이름은 파일로 간주함 • 만약 파일이름에 점이 포함되어 있지 않으면 마지막에 콜론(:)을 삽입함 • 특정 파일의 특정 함수는 콜론으로 분리하여 지정함 • 숫자는 파일의 줄을 의미함

  12. 프로파일링 데이터 분석 • 두가지 분석 유형 • 평면 프로파일 (flat profile) • 호출 그래프 프로파일 (call graph profile) • 평면 프로파일 • 함수마다 총 수행 시간, 평균 수행 시간 등을 분석함 • 함수 사이의 호출 관계는 없음 • 옵션 –z와 -c를 사용하면 호출되지 않은 함수를 찾는데 도움을 줌(프로그램 코드 사이즈 줄이기) • 호출 그래프 프로파일 • 각 함수의 호출 관계에 따라서 수행 시간을 분석함 • 평면 프로파일링 보다 자세한 분석이 가능함 • 일반적으로 평면 프로파일링을 먼저하고 호출 그래프 프로파일링을 수행함

  13. 평면 프로파일링 출력 분석 • 함수 수행 시간(self seconds), 호출된 횟 수(calls), 함수 이름(name) 순으로 정렬되어 있음 • 함수 mcount와 profil은 프로파일링을 위함 함수 임 • 분석 테이블 위에 프로파일링 데이터 수집을 위한 데이터 수집 주기를 보여 줌 • 수집 주기 보다 작은 시간 단위는 모두 0으로 표시됨 ( 짧은 수행 시간에 대하여 부 정확성을 인정 해야 함) • 총 수행시간은 합산 수행 시간 열의 마지막에 표시됨

  14. 평면 프로파일링 출력 분석 • % time • 함수에서 사용한 시간의 백분율 • Self second • 함수의 총 수행 시간 • Calls • 함수가 호출된 총 횟수 • Self ms/call • 호출 당 사용한 시간 • 다른 함수 호출에 의하여 사용된 시간 포함하지 않음 • Total ms/call • 호출 당 사용한 시간 • 다른 함수 호출에서 사용한 시간 포함 • Name • 함수의 이름

  15. 성능 개선을 위한 조언 • 가장 많은 시간을 사용하는 함수를 개선 • 함수에 쓰인 알고리즘을 개선 • 함수 호출 횟수를 줄임 • 함수 호출을 inline 함수로 대치

  16. 호출 그래프 프로파일링 분석 • 각 함수를 호출한 함수와 함수가 호출한 함수 관점에서 각 함수의 수행 시간을 분석함 • 어떤 함수가 특정 함수를 호출하였는지 알 수 있으며 수행 시간도 알 수 있음 • 특정 함수가 어떤 함수를 호출하여 사용하였는지 알 수 있으며 수행 시간도 알 수 있음

  17. 호출 그래프 프로파일링 분석 • 각 함수에 대하여 한 줄을 대쉬(-)로 채워서 분석된 결과를 제시 함 • 함수의 순서는 각 함수에서 사용한 시간(호출한 함수의 실행 시간 포함)에 대하여 정렬되어 있음 • 각 항목에는 분석 대상 함수의 위에는 분석 대상 함수를 호출한 함수 그리고 아래에는 호출된 함수가 나타남

  18. 호출 그래프 프로파일링 분석 • 분석 대상 함수 • Index: 각 함수 마다 유일하게 지정된 번호 • % time: 함수 수행 시간 중 차지하는 비율 • Self: 대상 함수의 순수 수행 시간 • Children: 다른 함수를 호출하는데 사용한 시간 • Called: 총 함수 호출 횟수와 분석 함수에 의한 호출 횟 수 표시순환 함수 호출은 + 표시 • Name: 함수의 이름과 인덱스

  19. 호출 그래프 해석하는 팁 • Self가 children 보다 큰 것이 프로그램 개선의 대상이 되는 경우가 많이 있음 • Children이 크다면 호출 횟수를 줄이는 방법을 알아 봄 • 이 때 called 값을 활용하여 주로 호출하는 함수를 알아냄 • 호출 그래프는 성능측정 뿐만 아니라 프로그램을 이해하는데 도움을 줌 • 좀더 세밀한 성능 분석을 위해서는 줄 단위 프로파일링 이나 소스 파일에 분석 정보를 추가하는 방법도 사용함

  20. 질의 및 토의

More Related