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 ~ 생략