주기적으로 OProfile 데몬인 oprofiled은 샘플을 수집하여 /var/lib/oprofile/samples/ 디렉토리에 기록합니다. 데이터를 읽기 전에 다음 명령을 루트로 실행하여 이 디렉토리에 모든 데이터가 기록되었는지 확인하시기 바랍니다:
opcontrol --dump |
각 샘플 파일 이름은 실행 프로그램의 이름에서 각 슬래시 (/)를 닫는 중괄호 (})로 바꾸어 생성합니다. 파일 이름 마지막에는 우물정자 표시 (#)가 오며, 그 다음에는 해당 샘플 파일에 사용된 카운터 번호가 옵니다. 예를 들면, 다음 파일은 카운터 0를 사용하여 수집한 /sbin/syslogd 실행 프로그램에 사용된 샘플 데이터를 포함합니다:
}sbin}syslogd#0 |
데이터가 수집되면 샘플 데이터를 프로파일하기 위하여 다음과 같은 도구를 사용하실 수 있습니다:
op_time
oprofpp
op_to_source
op_merge
프로파일된 이진(binary)와 함께 이 도구를 사용하여 보다 자세한 분석을 위해 리포트를 생성할 수 있습니다.
![]() | 경고 |
|---|---|
프로파일된 실행가능 프로그램의 데이터를 분석하기 위해서는 반드시 이 도구들을 사용하셔야 합니다. 데이터가 수집된 후 변경해야 한다면, 샘플 파일 및 샘플을 생성하는데 사용되었던 실행가능 프로그램을 백업 저장하셔야 합니다. |
각 실행가능 프로그램의 샘플은 단독 샘플 파일에 기록됩니다. 동적으로 링크된 라이브러리의 샘플도 단독 샘플 파일에 기록됩니다. OProfile이 실행되는 동안 감시 중이던 실행가능 프로그램이 변경된 경우 실행가능 프로그램에 샘플 파일이 존재한다면, 기존 샘플 파일은 자동으로 삭제됩니다. 따라서 만일 기존 샘플 파일이 필요할 경우 실행가능 프로그램을 새 버전으로 대체하시기 전에 샘플 파일을 생성하는데 사용된 실행가능 프로그램과 기존 샘플 파일을 백업하셔야 합니다. 샘플 파일을 백업하는 방법에 대한 자세한 정보는 43.4 절을 참조하시기 바랍니다.
op_time 도구는 프로파일된 모든 실행가능 프로그램에 대한 개요를 보여줍니다.
다음은 예시 출력 결과의 일부입니다:
581 0.2949 0.0000 /usr/bin/oprofiled 966 0.4904 0.0000 /usr/sbin/cupsd 1028 0.5218 0.0000 /usr/sbin/irqbalance 1187 0.6026 0.0000 /bin/bash 1480 0.7513 0.0000 /usr/bin/slocate 2039 1.0351 0.0000 /usr/lib/rpm/rpmq 6249 3.1722 0.0000 /usr/X11R6/bin/XFree86 8842 4.4885 0.0000 /bin/sed 31342 15.9103 0.0000 /usr/bin/gdmgreeter 58283 29.5865 0.0000 /no-vmlinux 82853 42.0591 0.0000 /usr/bin/perl |
한 줄마다 각 실행가능 프로그램이 나타납니다. 첫번째 행은 실행가능 프로그램에 기록된 샘플의 숫자이며, 두번째 행은 총 샘플 숫자에 비교한 샘플의 비율을 나타냅니다. 세번째 행은 사용되지 않으며 네번째 행은 실행가능 프로그램의 이름입니다.
사용 가능한 명령행 옵션의 목록을 보시려면 op_time 메뉴얼 페이지를 참조하시기 바랍니다. 예를 들면 실행가능 프로그램의 출력 결과를 가장 큰 숫자의 샘플부터 가장 작은 숫자의 샘플까지 정렬하여 보여주는 -r 옵션 및 카운터 번호를 지정하는데 사용되는 -c 옵션이 유용합니다.
특정 실행가능 프로그램에 대한 보다 자세한 정보를 보시려면 oprofpp을 사용하십시오:
oprofpp <mode> <executable> |
<executable>에는 분석할 실행가능 프로그램으로의 전체 경로를 지정하셔야 하며 <mode>는 다음 중 한가지로 지정하셔야 합니다:
심볼을 사용하여 샘플 데이터를 정렬하여 보여줍니다. 예를 들면 다음은 oprofpp -l /usr/X11R6/bin/XFree86 명령을 실행 후 출력되는 결과의 일부입니다:
vma samples % symbol name ... 08195d10 4 3.0303 miComputeCompositeClip 080b9180 5 3.78788 Dispatch 080cdce0 5 3.78788 FreeResource 080ce4a0 5 3.78788 LegalNewID 080ce640 5 3.78788 SecurityLookupIDByClass 080dd470 9 6.81818 WaitForSomething 080e1360 12 9.09091 StandardReadRequestFromClient ... |
첫번째 행은 시작 가상 메모리 주소 (vma)이며 두번째 행은 심볼에 사용된 샘플의 숫자입니다. 세번째 행은 실행가능 프로그램의 총 샘플에 비교한 이 심볼의 비율이며, 네번째 행은 심볼 이름을 나타냅니다.
샘플을 가장 큰 숫자에서 가장 작은 숫자 (반대 순서)로 정렬하여 출력하시려면 -l 옵션에 -r 옵션을 함께 사용하시면 됩니다.
특정 심볼 이름에 대한 샘플 데이터를 보여줍니다. 예를 들어 oprofpp -s StandardReadRequestFromClient /usr/X11R6/bin/XFree86 명령은 다음과 같은 결과를 출력합니다:
vma samples % symbol name 080e1360 12 100 StandardReadRequestFromClient 080e1360 1 8.33333 080e137f 1 8.33333 080e13bb 1 8.33333 080e13f4 1 8.33333 080e13fb 1 8.33333 080e144a 1 8.33333 080e15aa 1 8.33333 080e1668 1 8.33333 080e1803 1 8.33333 080e1873 1 8.33333 080e190a 2 16.6667 |
첫번째 줄은 심볼/실행가능 프로그램 조합에 대한 요약 정보입니다.
첫번째 행은 샘플 수집한 가상 메모리 주소로 구성됩니다. 두번째 행은 메모리 주소의 샘플 숫자이며, 세번째 행은 심볼의 총 샘플 수와 비교한 메모리 주소의 샘플 비율을 나타냅니다.
심볼 별로 샘플 데이터를 정렬하며, -l 옵션 보다 자세한 정보를 보여줍니다. 예:
vma samples % symbol name 08083630 2 1.51515 xf86Wakeup 08083641 1 50 080836a1 1 50 080b8150 1 0.757576 Ones 080b8179 1 100 080b8fb0 2 1.51515 FlushClientCaches 080b8fb9 1 50 080b8fba 1 50 ... |
각 심볼마다 -l 옵션을 사용할 때와 동일한 데이터가 나타나지만, 사용된 가상 메모리 주소가 나타나는 차이점이 있습니다. 각 가상 메모리 주소에 대하여 샘플의 숫자와 심볼의 샘플 수에 비교한 샘플의 비율을 보여줍니다.
출력 결과를 gprof 형식인 파일로 생성합니다. 만일 생성된 파일의 이름이 gmon.out 이라면, gprof를 사용하여 데이터를 보다 자세하게 분석 가능합니다. 자세한 사항은 gprof 메뉴얼 페이지를 참조하시기 바랍니다.
데이터를 보다 제한 설정하는데 사용되는 다른 옵션은 다음과 같습니다:
지정된 샘플 파일 <file-name>을 사용합니다. 기본으로 /var/lib/oprofile/samples/의 샘플 파일이 사용됩니다. 이전 세션에서 사용된 샘플 파일을 지정하시려면 이 옵션을 사용하십시오.
<file-name>에 데이터를 검색할 실행가능 프로그램의 이름을 입력하십시오.
C++ 심볼 이름을 해독(demangle)합니다.
C++ 심볼 이름을 해독(demangle)하고 STL 라이브러리 뒤섞인 이름(mangled name)을 단순화합니다.
특정 카운터에서 정보를 수집합니다. 아무것도 지정되지 않으면 기본 카운터는 0입니다.
각 샘플에 사용되는 소스 코드의 줄 번호를 보여줍니다. 실행가능 프로그램을 컴파일시 GCC의 -g 옵션을 사용하셔야 합니다. 그렇지 않으면 이 옵션은 줄 번호를 보여줄 수 없습니다. 모든 Red Hat Enterprise Linux 실행가능 프로그램은 이 옵션을 가지고 컴파일되지 않았습니다.
vma samples % symbol name linear info 0806cbb0 0 0 _start ../sysdeps/i386/elf/start.S:47 |
출력 결과에서 콤마로 구분된 심볼 목록을 제외시킵니다.
공유 라이브러리를 포함한 추가 행을 보여줍니다. 이 옵션은 OProfile을 설정시 opcontrol 명령에 --separate=library 옵션이 지정되고 이 옵션과 함께 --dump-gprof-file 옵션이 사용되지 않은 경우에만 결과를 출력합니다.
특정 행 순서로 출력 결과를 보여줍니다. 이 옵션은 -g 옵션과 함께 사용할 수 없습니다.
다음 글자를 사용하여 행을 표시할 수 있습니다:
| 글자 | 설명 |
|---|---|
| v | 가상 메모리 주소 |
| s | 샘플 이름 |
| S | 샘플의 누적된 숫자 |
| p | 실행가능 프로그램의 총 샘플 수에 비교한 샘플의 비율 |
| P | 실행가능 프로그램의 총 샘플 수에 비교한 누적된 샘플의 비율 |
| q | 샘플 수집한 모든 실행가능 프로그램에 비교한 샘플의 비율 |
| Q | 샘플 수집한 모든 실행가능 프로그램에 비교한 누적된 샘플의 비율 |
| n | 심볼 이름 |
| l | 전체 경로를 포함한 소스 파일의 파일명 및 줄 번호 |
| L | 소스 코드 파일 이름의 기준 이름 및 줄 번호 |
| i | 전체 경로를 포함한 실행가능 프로그램의 이름 |
| I | 실행가능 프로그램의 기준 이름 |
| d | 샘플 상세 정보 |
| h | 행 헤더를 보여줌 |
표 43-4. 행 순서에 사용되는 글자
세션으로 전체 경로를 지정하거나 /var/lib/oprofile/samples/ 디렉토리로 상대 경로를 지정합니다.
분석할 실행가능 프로그램이 위치한 경로를 콤마로 구분된 목록으로 지정합니다.
op_to_source 도구는 특정 지시 사항에 따라서 소스 코드에서 상응하는 줄에 일치하는 샘플을 찾습니다. 이렇게하여 생성된 파일에는 왼쪽에 줄에 일치하는 샘플이 나타납니다. 또한 각 함수의 시작 부분에 함수의 총 샘플 목록을 보여주는 주석을 첨가합니다.
이 프로그램이 작동하기 위해서는 실행가능 프로그램을 GCC의 -g 옵션을 사용하여 컴파일해야 합니다. 디폴트 값으로 Red Hat Enterprise Linux 패키지는 이 옵션을 사용하여 컴파일되지 않았습니다.
op_to_source의 일반 구문은 다음과 같습니다:
op_to_source --source-dir <src-dir> <executable> |
분석할 소스 코드와 실행가능 프로그램이 저장된 디렉토리를 지정하셔야 합니다. 추가 명령행 옵션 목록을 보시려면 op_to_source 메뉴얼 페이지를 참조하시기 바랍니다.
만일 동일한 실행가능 프로그램이나 라이브러리에 여러 개의 샘플 파일이 존재한다면, 보다 쉽게 분석할 수 있도록 이 샘플 파일들을 합병할 수 있습니다.
예를 들어 라이브러리 /usr/lib/library-1.2.3.so의 파일들을 합병하시려면, 루트로 로그인하신 후 다음 명령을 실행하시기 바랍니다:
op_merge /usr/lib/library-1.2.3.so |
/var/lib/oprofile/samples/}usr}lib}library-1.2.3.so 파일이 생성됩니다.
샘플이 특정 카운터로 합병되도록 제한 설정하시려면 -c 옵션을 사용하여 이 옵션 다음에 카운터 번호를 입력하시면 됩니다.