43.2. OProfile 설정

OProfile를 실행하기 위해서는 먼저 설정하셔야 합니다. 최소한 커널을 감시하도록 (또는 커널을 감시하지 않도록) 선택해주셔야 합니다. 다음 부분에서는 OProfile을 설정하기 위해 opcontrol을 사용하는 방법을 설명하고 있습니다. opcontrol 명령이 실행되면 설정 옵션은 /root/.oprofile/daemonrc 파일에 저장됩니다.

43.2.1. 커널 지정

먼저 OProfile이 커널을 감시해야할지 여부를 설정해 주십시오. 이 옵션만 설정하시면 OProfile을 시작할 수 있습니다. 모든 다른 옵션은 선택 사항입니다.

커널을 감시하려면 루트로 로그인하신 후 다음 명령을 실행하십시오:

opcontrol --vmlinux=/boot/vmlinux-`uname -r`

OProfile이 커널을 감시하지 않도록 설정하시려면 루트로 로그인하신 후 다음 명령을 실행하시기 바랍니다:

opcontrol --no-vmlinux

이 명령은 또한 oprofile 커널 모듈을 읽어와서 (만일 이미 읽어오지 않은 경우) /dev/oprofile/ 디렉토리를 생성합니다. 이 디렉토리에 대한 자세한 정보는 43.6 절을 참조하시기 바랍니다.

알림알림
 

OProfile이 커널을 감시하지 않도록 설정하여도 oprofile 모듈이 로딩될 수 있도록 SMP 커널은 여전히 실행 중이어야 합니다.

커널에서 샘플을 수집할지 여부를 설정하시면 어떠한 데이터가 수집될지만 변경되며, 어떻게 어디서 수집된 데이터가 저장될 것인지는 변경되지 않습니다. 커널과 응용 프로그램 라이브러리에 다른 샘플 파일을 생성하시려면 43.2.3 절을 참조하시기 바랍니다.

43.2.2. 감시기가 기록할 사건 설정하기

대부분의 프로세서에는 카운터 (counter)가 포함되어 있으며, OProfile은 이 카운터를 사용하여 특정 사건을 감시합니다. 표 43-2에서 보여지듯이 사용 가능한 카운터의 수는 프로세서에 따라서 달라집니다.

프로세서cpu_type카운터 수
Pentium Proi386/ppro2
Pentium IIi386/pii2
Pentium IIIi386/piii2
Pentium 4 (non-hyper-threaded)i386/p48
Pentium 4 (hyper-threaded)i386/p4-ht4
Athloni386/athlon4
AMD64x86-64/hammer4
Itaniumia64/itanium4
Itanium 2ia64/itanium24
TIMER_INTtimer1
IBM eServer iSeriestimer1
IBM eServer pSeriestimer1
IBM eServer S/390timer1
IBM eServer zSeriestimer1

표 43-2. OProfile 프로세서와 카운터

표 43-2를 사용하여 올바른 프로세서 유형이 검색되었는지 여부와 동시에 모니터된 사건의 수를 확인해 보십시오. 만일 프로세서에 지원되는 성능 감시 하드웨어가 없는 경우에는 timer가 프로세서 유형으로 사용됩니다.

만일 timer가 사용된다면 하드웨어가 하드웨어 성능 카운터를 지원하지 않으므로 프로세서에 기록할 사건을 설정할 수 없습니다. 대신 프로파일링을 위해 타이머 인터럽트가 사용됩니다.

timer가 프로세서 유형으로 사용되지 않은 경우 감시할 사건을 변경할 수 있으며 디폴트 값으로 프로세서의 카운터 0이 시간 기반 사건에 설정됩니다. 프로세서에 한 개 이상의 카운터가 존재한다면, 기본적으로 카운터 0 이외의 카운터는 사건에 설정되지 않습니다. 모니터되는 기본 사건은 표 43-3에서 볼 수 있습니다.

프로세서카운터 0의 기본 사건설명
Pentium Pro, Pentium II, Pentium III, Athlon, AMD64CPU_CLK_UNHALTED프로세서의 시계가 정지하지 않음
Pentium 4 (HT 및 non-HT), Intel® EM64TGLOBAL_POWER_EVENTS프로세서가 멈추지 않은 시간
Itanium 2CPU_CYCLESCPU 사이클
TIMER_INT(없음)각 타이머 인터럽트의 샘플

표 43-3. 기본 사건

한번에 감시할 수 있는 사건의 수는 프로세서에서 사용되는 카운터의 수에 의해 결정됩니다. 그러나 한개 당 한개씩 상관 관계를 갖는 것이 아니라; 일부 프로세서에서 특정 사건은 특정 카운터에 대응해야 합니다. 사용 가능한 카운터의 수를 알아보시려면 다음 명령을 실행하시기 바랍니다:

cat /dev/oprofile/cpu_type

사용 가능한 사건은 프로세서 유효에 따라 다릅니다. 프로파일링 가능한 사건을 알아보시려면 루트로 로그인하신 후 다음 명령을 실행하시면 됩니다 (목록은 시스템의 프로세서 유형에 따라 다릅니다):

op_help

각 카운터에 사용될 사건은 명령행이나 그래픽 인터페이스를 사용하여 설정할 수 있습니다. 만일 카운터를 특정 사건에 설정할 수 없다면 오류 메시지가 나타날 것입니다.

명령행을 통하여 각 설정 가능한 카운터에 사건을 설정하시려면 opcontrol을 사용하십시오:

opcontrol --ctrlN-event=<event-name>

N을 0에서 시작하는 카운터 수로 대체하시고 <event-name>을 op_help으로 알아낸 정확한 사건 이름으로 변경하십시오.

43.2.2.1. 샘플 수집 속도

기본으로 시간 기반 사건 설정이 선택되며, 이 설정은 프로세서마다 약 1 초마다 2000여개의 샘플을 수집합니다. 만일 타이머 인터럽트를 사용하면 타이머는 이미 정해진 속도로 설정되며 사용자 설정할 수 없습니다. 만일 cpu_type이 timer가 아니라면, 각 사건마다 샘플링 속도(sampling rate)를 설정하실 수 있습니다. 샘플링 속도는 다시 샘플링 수집하기 전에 기다릴 사건의 숫자를 나타냅니다.

카운터에 사건을 설정할 때 샘플 속도도 지정 가능합니다:

opcontrol --ctrN-event=<event-name> --ctrN-count=<sample-rate>

<sample-rate>를 다시 샘플링하기 전에 기다릴 사건의 숫자를 지정하십시오. 숫자가 작을수록 더욱 자주 샘플링하게 됩니다. 자주 발생하지 않는 사건을 샘플링하실 때에는 적은 숫자를 사용하여 카운터가 사건 인스턴스를 수집하도록 설정하십시오.

주의주의
 

샘플링 속도를 설정하실때 매우 주의하셔야 합니다. 너무 자주 샘플링하게되면 시스템의 작업 부하가 높아져서 시스템이 정지한 것처럼 나타나거나 실제로 멈출 수도 있습니다.

43.2.2.2. 유닛 마스크 (Unit Masks)

만일 cpu_type이 timer로 설정되지 않은 경우 사건을 보다 자세하게 정의하기 위하여 유닛 마스크(unit masks)를 사용하셔야할 경우도 있습니다.

op_help 명령을 사용하여 각 사건에 사용되는 유닛 마스크 목록을 보실 수 있습니다. 각 유닛 마스크 목록 값은 16진수 입니다. 한 개 이상의 유닛 마스크를 지정하시려면 비트 단위의 or 연산자를 사용하여 16진수 값을 함께 지정하실 수 있습니다.

opcontrol --ctrN-event=<event-name> --ctrN-count=<sample-rate> --ctrN-unit-mask=<value>

43.2.3. 커널과 사용자 영역 프로파일 분리하기

기본적으로 각 사건에 대한 커널 모드와 사용자 모드 정보를 수집합니다. 특정 카운터에서 커널 모드의 사건을 계산하지 않도록 OProfile을 설정하시려면 다음 명령을 실행하시면 됩니다 (N를 카운터 번호로 대체하십시오):

opcontrol --ctrN-kernel=0

해당 카운터에서 커널 모드를 다시 프로파일링하도록 설정하시려면 다음 명령을 실행하시기 바랍니다:

opcontrol --ctrN-kernel=1

특정 카운터에서 사용자 모드의 사건을 계산하지 않도록 OProfile을 설정하시려면 다음 명령을 실행하시면 됩니다 (N를 카운터 번호로 대체하십시오):

opcontrol --ctrN-user=0

해당 카운터에서 사용자 모드를 다시 프로파일링하도록 설정하시려면 다음 명령을 실행하시기 바랍니다:

opcontrol --ctrN-user=1

OProfile 데몬이 프로파일 데이터를 샘플 파일에 기록시 커널 데이터와 라이브러리 프로파일 데이터를 별개의 샘플 파일에 분리하여 기록할 수 있습니다. 데몬이 샘플 파일을 기록하는 방식을 설정하시려면, 루트 사용자로 로그인하신 후 다음 명령을 실행하십시오:

opcontrol --separate=<choice>

<choice>은 다음 중 한가지를 입력하십시오:

만일 --separate=library 옵션이 사용된다면 라이브러리의 이름을 비롯하여 실행 파일의 이름을 입력하십시오.