Oprofile

- 실행중인 프로세스의 CPU Usage를 프로파일링

- 실행중인 프로세스의 어떤 함수가 CPU 자원을 많이 사용하는지를 식별

- Database 개발자에게 자주 사용됨

- 특정 함수가 많은 자원을 사용할 경우, 프로그램은 그 함수 콜을 줄일 수 있는 방법으로 재설계될 수 있음

- CPU 사용률이 낮은 장비(I/O 바운딩 서버나 Mutex 대기와 같은)에서는 별로 쓸모가 없음

- How to use

$ opcontrol --start (--no-vmlinux)

   -> 여기에서 실제 벤치마킹 수행

$ opcontrol --dump

$ opcontrol --shutdown

$ opreport -l /usr/local/bin/mysqld

 

 

RHEL5 에서 프로파일링

1. RHEL5.tar.gz 파일 서버 업로드

해당 RHEL5.tar.gz 파일을 RHEL 5 시스템 특정 디렉토리에 업로드 합니다.

2. RHEL5.tar.gz 압축 해제 및 kernel-debuginfo,gcc-debuginfo 패키지 설치

- 아래 명령어로 압축을 해제 한 후 해당 패키지를 설치 합니다.

[root@rhel56-test01 ~]# tar xvfz RHEL5.tar.gz
RHEL5/
RHEL5/kernel-debuginfo-2.6.18-238.el5.x86_64.rpm
RHEL5/kernel-debuginfo-common-2.6.18-238.el5.x86_64.rpm
RHEL5/gcc-debuginfo-4.1.2-50.el5.x86_64.rpm

[root@rhel56-test01 ~]# cd RHEL5
[root@rhel56-test01 RHEL5]# rpm -ivh gcc-debuginfo-4.1.2-50.el5.x86_64.rpm
 Preparing...                ########################################### [100%]
   1:gcc-debuginfo          ########################################### [100%]


[root@rhel56-test01 RHEL5]# rpm -ivh kernel-debuginfo-2.6.18-238.el5.x86_64.rpm  kernel-debuginfo-common-2.6.18-238.el5.x86_64.rpm
Preparing...                ########################################### [100%]
   1:kernel-debuginfo-common########################################### [ 50%]
   2:kernel-debuginfo       ########################################### [100%]

3. oprofile 시작

3.1 다음 명령을 사용하여 oprofile를 시작합니다.

[root@rhel56-test01 ~]# opcontrol --start --vmlinux=/usr/lib/debug/lib/modules/`uname -r`/vmlinux --separate=library
Using 2.6+ OProfile kernel interface.
Reading module info.
Using log file /var/lib/oprofile/samples/oprofiled.log
Daemon started.
Profiler running.
  • 만약 커널관련 프로파일링을 배제한다면 --vmlinux 옵션은 빼고 --no-vmlinux을 넣는다. (RHEL 6도 동일)

 

3.2 다음과 같이 프로파일러를 종료합니다.

[root@rhel56-test01 ~]# opcontrol --shutdown
Stopping profiling.
Killing daemon.
  • 상황에 따라 다르지만 대략 30분 가량 수집을 한다. 아래와 같이 sleep으로 1800초(30분)간 진행 후 shutdown
[root@rhel56-test01 ~]# opcontrol --start --vmlinux=/usr/lib/debug/lib/modules/`uname -r`/vmlinux --separate=library ; sleep 1800 ; opcontrol --shutdown

 

3.3 디버깅에 필요한 디렉토리 tar 파일의 제출을 위해 tar 파일을 저장합니다.

-아래 명령어로 특정디렉토리를 생성 합니다.

[root@rhel56-test01 ~]# mkdir /home/oprofile

-아래 명령어로 디버깅에 필요한 파일을 수집합니다.

[root@rhel56-test01 ~]# oparchive --output-directory /home/oprofile/

 

3.4  opreport 명령어를 사용하여 아래 2개 명령어 수행 결과를 수집합니다.

[root@rhel56-test01 home]# opreport --long-filenames > /home/oprofile/opreport_filenames

[root@rhel56-test01 home]# opreport --demangle=smart --symbols `which lyx` > /home/oprofile/opreport_demangle

 

3.5 수집 된 정보를 압축하여 메일로 보내주시면 됩니다.

[root@rhel56-test01 ~]# cd /home/
[root@rhel56-test01 home]# ls -al
total 36
drwxr-xr-x  6 root     root     4096 Oct  1 15:24 .
drwxr-xr-x 25 root     root     4096 Oct  1 14:05 ..
drwxr-xr-x  8 root     root     4096 Oct  1 15:26 oprofile

[root@rhel56-test01 home]# tar cvfz RHEL5_oprofile.tar.gz oprofile/
oprofile/
oprofile/lib64/
oprofile/lib64/libglib-2.0.so.0.1200.3
oprofile/lib64/libpthread-2.5.so
oprofile/lib64/libc-2.5.so
oprofile/lib64/ld-2.5.so
~ 생략

 

RHEL 6 에서 프로파일링

1. RHEL6.tar.gz 파일 서버 업로드

해당 RHEL6.tar.gz 파일을 RHEL 6 시스템 특정 디렉토리에 업로드 합니다.

2. RHEL6.tar.gz 압축 해제 및 kernel-debuginfo,gcc-debuginfo 패키지 설치

- 아래 명령어로 압축을 해제 한 후 해당 패키지를 설치 합니다.
[root@rhel66-test01 ~]# tar xvfz RHEL6.tar.gz
RHEL6/
RHEL6/kernel-debuginfo-2.6.32-504.23.4.el6.x86_64.rpm
RHEL6/kernel-debuginfo-common-x86_64-2.6.32-504.23.4.el6.x86_64.rpm
RHEL6/gcc-debuginfo-4.4.7-11.el6.x86_64.rpm

[root@rhel66-test01 ~]# cd RHEL6

[root@rhel66-test01 RHEL6]# rpm -ivh kernel-debuginfo-2.6.32-504.23.4.el6.x86_64.rpm  kernel-debuginfo-common-x86_64-2.6.32-504.23.4.el6.x86_64.rpm
warning: kernel-debuginfo-2.6.32-504.23.4.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                ########################################### [100%]
   1:kernel-debuginfo-common########################################### [ 50%]
   2:kernel-debuginfo       ########################################### [100%]


[root@rhel66-test01 RHEL6]# rpm -ivh gcc-debuginfo-4.4.7-11.el6.x86_64.rpm
warning: gcc-debuginfo-4.4.7-11.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key I                                   D fd431d51: NOKEY
Preparing...                ########################################### [100%]
   1:gcc-debuginfo          ########################################### [100%]

 

3.oprofile 시작

3.1 다음 명령을 사용하여 oprofile를 시작합니다.

[root@rhel66-test01 ~]# opcontrol --start --vmlinux=/usr/lib/debug/lib/modules/`uname -r`/vmlinux --separate=library ; sleep 600 ; opcontrol --shutdown
Using 2.6+ OProfile kernel interface.
Reading module info.
Using log file /var/lib/oprofile/samples/oprofiled.log
Daemon started.
Profiler running.

3.2 다음과 같이 프로파일 러를 종료합니다.

[root@rhel66-test01 ~]# opcontrol --shutdown
Stopping profiling.
Killing daemon.

 

3.3 디버깅에 필요한 디렉토리 tar 파일의 제출을 위해 tar 파일을 저장합니다.

-아래 명령어로 특정디렉토리를 생성 합니다.

[root@rhel66-test01 ~]# mkdir /home/oprofile

-아래 명령어로 디버깅에 필요한 파일을 수집합니다.

[root@rhel66-test01 ~]# oparchive --output-directory /home/oprofile/

 

3.4 opreport 명령어를 사용하여 아래 2개 명령어 수행 결과를 수집합니다.

[root@rhel66-test01 ~]#  opreport --long-filenames > /home/oprofile/opreport_filenames

[root@rhel66-test01 ~]#  opreport --demangle=smart --symbols `which lyx` > /home/oprofile/opreport_demangle

3.5 수집 된 정보를 압축하여 메일로 보내주시면 됩니다.

[root@rhel66-test01 oprofile]#   cd /home/
[root@rhel66-test01 home]# ls -al
total 12
drwxr-xr-x.  3 root root 4096 Oct  1 16:25 .
dr-xr-xr-x. 25 root root 4096 Oct  1 14:51 ..
drwxr-xr-x.  6 root root 4096 Oct  1 16:28 oprofile

[root@rhel66-test01 home]# tar cvfz RHEL6_oprofile.tar.gz oprofile/
oprofile/
oprofile/opreport_filenames
oprofile/usr/
oprofile/usr/lib/
oprofile/usr/lib/debug/
oprofile/usr/lib/debug/lib/
oprofile/usr/lib/debug/lib/modules/
oprofile/usr/lib/debug/lib/modules/2.6.32-504.23.4.el6.x86_64/
oprofile/usr/lib/debug/lib/modules/2.6.32-504.23.4.el6.x86_64/vmlinux
~ 생략

 

 

Linux - oprofile 이용한 CPU 자원 사용 프로파일링

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다