# 타이밍 분석 도구

실시간 시스템에서 타이밍 분석 도구는 매우 중요한 역할을 한다. 이러한 도구들은 시스템의 응답 시간을 측정하고, 잠재적인 문제를 식별하며, 시스템 성능을 최적화하는 데 도움을 준다. 이번 장에서는 실시간 리눅스 환경에서 사용할 수 있는 주요 타이밍 분석 도구들에 대해 살펴보겠다.

#### 1. Ftrace

Ftrace는 리눅스 커널에 내장된 추적 도구로서, 함수 호출을 추적하고 타이밍 정보를 수집할 수 있는 강력한 도구이다.

**설치 및 설정**

Ftrace는 리눅스 커널에 기본적으로 포함되어 있으며, `/sys/kernel/debug/tracing` 디렉토리를 통해 접근할 수 있다. 이를 활성화하려면 먼저 디버그 파일 시스템을 마운트해야 한다:

```bash
sudo mount -t debugfs none /sys/kernel/debug
```

**사용법**

다음은 Ftrace를 사용하는 기본적인 단계이다:

1. **현재 추적할 수 있는 이벤트 리스트 확인:**

   ```bash
   cat /sys/kernel/debug/tracing/available_events
   ```
2. **특정 이벤트를 선택하여 추적 활성화:**

   ```bash
   echo "sched:sched_switch" > /sys/kernel/debug/tracing/set_event
   ```
3. **추적 시작:**

   ```bash
   echo 1 > /sys/kernel/debug/tracing/tracing_on
   ```
4. **결과 확인:**

   ```bash
   cat /sys/kernel/debug/tracing/trace
   ```
5. **추적 중지:**

   ```bash
   echo 0 > /sys/kernel/debug/tracing/tracing_on
   ```

#### 2. Perf

Perf는 리눅스 커널의 성능 분석 도구로, 시스템 성능의 각종 메트릭스를 측정하고 분석할 수 있다.

**설치**

Perf는 일반적으로 `linux-tools` 패키지에 포함되어 있다. 다음 명령어를 사용하여 설치할 수 있다:

```bash
sudo apt-get install linux-tools-common linux-tools-generic
```

**사용법**

Perf의 사용 예시는 다음과 같다:

1. **CPU 사이클 및 명령어 카운터:**

   ```bash
   perf stat -e cycles,instructions ls
   ```
2. **주요 기능 프로파일링:**

   ```bash
   perf record -g ./my_program
   perf report
   ```

#### 3. LTTng (Linux Trace Toolkit: Next Generation)

LTTng는 복잡한 애플리케이션과 시스템의 성능 분석을 위해 설계된 고성능 추적 도구이다.

**설치**

LTTng는 다음 명령어로 설치할 수 있다:

```bash
sudo apt-get install lttng-tools lttng-modules-dkms babeltrace
```

**사용법**

LTTng를 사용하는 기본적인 단계는 다음과 같다:

1. **새 추적 세션 생성:**

   ```bash
   lttng create my_session
   ```
2. **추적할 이벤트 활성화:**

   ```bash
   lttng enable-event -a -k
   ```
3. **추적 시작:**

   ```bash
   lttng start
   ```
4. **추적 중지:**

   ```bash
   lttng stop
   ```
5. **결과 확인:**

   ```bash
   babeltrace /path/to/trace
   ```

#### 4. Cyclictest

Cyclictest는 실시간 커널의 응답 시간을 측정하는 도구로, 주로 RT 커널의 성능을 평가하는 데 사용된다.

**설치**

Cyclictest는 `rt-tests` 패키지에 포함되어 있다:

```bash
sudo apt-get install rt-tests
```

**사용법**

Cyclictest를 사용하여 시스템 응답 시간을 측정하는 방법은 다음과 같다:

```bash
sudo cyclictest -l100000 -m -S -p80 -i1000 -h400 -q
```

* `-l` : 테스트 루프 수
* `-m` : 메모리 잠금 (페이지 폴트 방지)
* `-S` : 스레드 우선 순위 상승
* `-p` : 스레드 우선 순위 설정
* `-i` : 주기 (마이크로초)
* `-h` : 히스토그램 출력 (마이크로초)
* `-q` : 결과 요약만 출력

#### 5. Tuna

Tuna는 리눅스 성능 조정 도구로, 실시간 태스크의 CPU 및 IRQ 애피니티를 조정하고 우선 순위를 설정할 수 있다.

**설치**

Tuna는 `tuna` 패키지에 포함되어 있다:

```bash
sudo apt-get install tuna
```

**사용법**

Tuna는 GUI와 CLI 모드 모두에서 사용할 수 있다:

* **GUI 모드 실행:**

  ```bash
  sudo tuna
  ```
* **CLI 모드 예제:** 특정 CPU에 IRQ를 할당하고 우선 순위를 설정하는 방법은 다음과 같다:

  ```bash
  sudo tuna -q -I irq9 -c 1 -m
  ```

#### 6. Trace-cmd

Trace-cmd는 Ftrace를 보다 쉽게 사용할 수 있도록 하는 커맨드 라인 도구이다.

**설치**

Trace-cmd는 다음 명령어로 설치할 수 있다:

```bash
sudo apt-get install trace-cmd
```

**사용법**

Trace-cmd를 사용하여 추적 데이터를 수집하고 분석하는 방법은 다음과 같다:

1. **추적 세션 시작:**

   ```bash
   sudo trace-cmd start -e sched_switch
   ```
2. **추적 세션 중지:**

   ```bash
   sudo trace-cmd stop
   ```
3. **결과 보기:**

   ```bash
   sudo trace-cmd report
   ```

#### 7. KernelShark

KernelShark는 Ftrace와 Trace-cmd 데이터를 시각적으로 분석할 수 있는 GUI 도구이다.

**설치**

KernelShark는 다음 명령어로 설치할 수 있다:

```bash
sudo apt-get install kernelshark
```

**사용법**

Trace-cmd와 함께 KernelShark를 사용하면 추적 결과를 보다 쉽게 분석할 수 있다:

1. **Trace-cmd로 데이터 수집:**

   ```bash
   sudo trace-cmd record -e sched_switch
   ```
2. **KernelShark로 데이터 열기:**

   ```bash
   kernelshark trace.dat
   ```

***

이 장에서는 실시간 리눅스 환경에서 사용할 수 있는 다양한 타이밍 분석 도구들에 대해 살펴보았다. 각각의 도구는 고유한 기능과 용도를 가지고 있으며, 특정 시나리오와 요구 사항에 맞게 선택하고 활용할 수 있다. 이러한 도구들을 활용하여 시스템의 성능을 모니터링하고 최적화하면, 보다 안정적이고 예측 가능한 실시간 애플리케이션을 개발할 수 있다.
