# 성능 프로파일링 및 분석 도구

성능 최적화 작업에서 중요한 부분은 시스템의 현재 상태를 정확히 파악하는 것이다. 이를 위해 성능 프로파일링 및 분석 도구가 필요하다. Yocto 프로젝트에서는 여러 가지 도구를 지원하여 시스템 성능을 분석하고 병목 지점을 찾아내는 데 도움을 준다.

#### oprofile

oprofile은 시스템 전반의 성능 데이터를 수집할 수 있는 프로파일링 도구이다. CPU 사용량, 함수 호출 빈도 등 다양한 성능 데이터를 수집하고 분석할 수 있다.

**설정 방법**

1. oprofile 레시피 추가:

   ```bash
   # meta-layer/recipes-devtools/oprofile/oprofile_%.bbappend
   IMAGE_INSTALL_append = " oprofile"
   ```
2. 타겟 시스템에서 oprofile 실행:

   ```bash
   opcontrol --init
   opcontrol --start
   # 작업 수행
   opcontrol --stop
   opreport
   ```

#### perf

perf는 Linux 커널의 성능 카운터, 트레이싱, 빌드 프로파일링을 위한 도구이다. 이 도구는 다양한 하드웨어 이벤트를 측정하여 시스템 성능을 분석할 수 있다.

**설정 방법**

1. perf 레시피 추가:

   ```bash
   # meta-layer/recipes-kernel/perf/perf_%.bbappend
   IMAGE_INSTALL_append = " perf"
   ```
2. 타겟 시스템에서 perf 실행:

   ```bash
   perf record -a
   # 작업 수행
   perf report
   ```

#### gprof

gprof는 GNU 프로파일링 도구로, 프로그램의 실행 시간 통계를 수집하고 함수 호출 관계를 분석한다.

**설정 방법**

1. 프로그램 컴파일 시 `-pg` 옵션 추가:

   ```make
   CC = gcc
   CFLAGS = -pg
   ```
2. 실행 후 gprof 사용:

   ```bash
   ./a.out
   gprof a.out gmon.out > analysis.txt
   ```

#### Valgrind

Valgrind는 메모리 디버깅, 메모리 누수 탐지, 프로그램 프로파일링을 위한 도구이다. 다양한 도구 모음을 제공해서 다목적 성능 분석 작업에 유용하다.

**설정 방법**

1. Valgrind 레시피 추가:

   ```bash
   # meta-layer/recipes-devtools/valgrind/valgrind_%.bbappend
   IMAGE_INSTALL_append = " valgrind"
   ```
2. 타겟 시스템에서 Valgrind 실행:

   ```bash
   valgrind --tool=memcheck ./a.out
   ```

#### SystemTap

SystemTap은 런타임 시스템 모니터링 및 성능 프로파일링 도구로, 커널과 사용자 프로그램의 실행 시간을 분석한다.

**설정 방법**

1. SystemTap 레시피 추가:

   ```bash
   # meta-layer/recipes-kernel/systemtap/systemtap_%.bbappend
   IMAGE_INSTALL_append = " systemtap"
   ```
2. 타겟 시스템에서 SystemTap 스크립트 실행:

   ```bash
   stap -v -e 'probe kernel.function("do_fork") { printf("do_fork called\n"); }'
   ```

#### 기타 도구

이 외에도 Yocto 프로젝트에서 사용할 수 있는 다양한 성능 최적화 도구들이 있다.

* **LTTng (Linux Trace Toolkit Next Generation)**
* **Ftrace**
* **eBPF (Extended Berkeley Packet Filter)**
* **DTrace**

각 도구는 특정 목적과 특성을 가지고 있어, 사용 목적에 맞는 도구를 선택하는 것이 중요하다.
