실시간 시스템 개발을 위해 여러 도구와 툴체인이 활용된다. 다음은 Preempt RT 패치와 함께 사용하기 유용한 실시간 개발 도구들을 소개한다.

1. cyclictest

cyclictest는 리눅스 시스템에서 실시간 성능을 측정하기 위한 도구이다. 주로 타이머 지연과 스케줄링 지연을 측정하는 데 사용된다.

sudo cyclictest --mlockall --priority=99 --interval=1000 --distance=0 -n -m -a 0

위 명령어는 프로세스를 메모리에 고정하고, 우선순위 99로 설정하여 1000 마이크로초마다 타이머 이벤트를 발생시키도록 설정한다.

2. rt-tests

rt-tests는 다양한 실시간 테스트 유틸리티 모음이다. 여기에는 cyclictest 외에도 signaltest, hwlatdetect 등이 포함된다. 이러한 테스트는 실시간 특성을 평가하고 시스템의 성능을 검증하는 데 유용하다.

3. latencytop

latencytop은 리눅스 커널의 지연(latency) 문제를 식별하고 분석하는 도구이다. 실시간 시스템에서 발생할 수 있는 지연을 분석하고 원인을 추적하는 데 유용하다.

sudo latencytop

이 명령을 실행하면 실시간으로 시스템의 지연 원인을 분석할 수 있다.

4. trace-cmd & KernelShark

trace-cmd는 리눅스 커널의 트레이싱 데이터를 수집하는 도구이다. KernelShark는 이러한 데이터를 시각화하는 도구이다. 두 도구를 함께 사용하면 실시간 시스템의 동작을 분석하고, 병목 지점을 파악할 수 있다.

sudo trace-cmd record -e sched_switch
sudo trace-cmd report

이 명령어는 스케줄링 이벤트를 기록하고 보고서를 생성한다.

5. ftrace

ftrace는 리눅스 커널에 내장된 트레이싱 프레임워크로, 시스템 콜, 함수 호출, 스케줄링 이벤트 등을 추적하는 데 사용된다. Preempt RT 패치가 적용된 커널에서도 매우 유용하게 사용할 수 있다.

echo function > /sys/kernel/debug/tracing/current_tracer
echo ':mod:your_module_name' > /sys/kernel/debug/tracing/set_ftrace_filter
cat /sys/kernel/debug/tracing/trace

위 명령어는 특정 모듈에서 함수 호출을 추적하는 설정이다.

6. perf

perf는 리눅스 성능 분석 도구로, 다양한 성능 데이터를 수집하고 분석할 수 있다. 실시간 시스템에서의 CPU 사용률, 메모리 접근 패턴 등을 분석하는 데 유용하다.

sudo perf stat -e cycles,instructions,cache-references,cache-misses -p <pid>

이 명령어는 특정 프로세스의 성능 카운터를 수집한다.

7. rtprio

rtprio는 리눅스 시스템에서 실시간 우선순위를 설정하는 도구이다. 실시간 태스크의 우선순위를 조정하여 스케줄링을 최적화할 수 있다.

sudo chrt -f 99 ./your_real_time_task

위 명령어는 특정 태스크를 실시간 우선순위 99로 실행한다.

8. tuna

tuna는 CPU 및 IRQ 친화성을 관리하는 도구로, 실시간 성능 최적화를 위해 특정 CPU에 태스크 및 인터럽트를 바인딩하는 데 사용된다.

sudo tuna --cpus=1 --irqs=all --threads=all

이 명령어는 모든 인터럽트와 태스크를 CPU 1에 바인딩한다.

9. oslat

oslat은 운영 체제 지연을 측정하는 도구이다. 주로 시스템 콜과 커널의 응답성을 평가하는 데 사용된다.

sudo oslat --runtime=60 --cpu-list=0-3

이 명령어는 60초 동안 CPU 0부터 3까지의 지연을 측정한다.


이와 같은 도구들은 Preempt RT 패치가 적용된 실시간 시스템의 성능을 평가하고 최적화하는 데 중요한 역할을 한다. 실시간 시스템을 개발할 때는 이러한 도구들을 활용하여 지연 시간을 최소화하고, 시스템의 안정성을 높이는 것이 중요하다.