SystemTap은 리눅스 커널 및 사용자 공간 프로그램의 동작을 실시간으로 관찰하고 분석할 수 있도록 설계된 동적 트레이싱 툴이다. 스크립트 기반의 언어를 사용해 특정 이벤트(예: 함수 호출, 시스템 콜, 인터럽트 등)를 지정하고, 해당 이벤트가 발생했을 때 실행할 동작을 정의함으로써 시스템 성능 분석, 디버깅, 문제 진단 등에 활용된다.
개요
SystemTap은 커널 모듈 형태로 삽입되는 프로브(probe)를 통해 대상 시스템에 최소한의 부하를 가하면서 상세한 실행 정보를 수집한다. 사용자는 stap 명령어와 함께 SystemTap 스크립트를 제공하면, 스크립트가 컴파일되어 커널 모듈로 로드되고, 지정된 프로브가 트리거될 때마다 정의된 액션이 수행된다.
역사
SystemTap은 2005년 IBM과 Red Hat을 중심으로 시작된 오픈소스 프로젝트이며, 초기에는 Linux Trace Toolkit (LTT)와 같은 기존 트레이싱 프레임워크의 한계를 보완하기 위해 개발되었다. 프로젝트는 2007년부터 정식으로 리눅스 커널에 포함되기 시작했으며, 이후 지속적인 업데이트를 통해 커널 버전과 배포판에 대한 호환성을 확대하였다.
주요 기능
- 동적 프로브 삽입: 커널 재컴파일 없이 런타임에 프로브를 삽입·제거할 수 있다.
- 고수준 스크립트 언어: C와 유사한 구문을 사용해 복잡한 조건식 및 데이터 가공이 가능하다.
- 다양한 프로브 타입: kprobe, uprobe, syscall, tracepoint, perf event 등 여러 종류의 프로브를 지원한다.
- 결과 출력 옵션: 콘솔 출력, 파일 저장, CSV 형식, 그래프 생성 등 다양한 형태로 결과를 제공한다.
- 보안·권한 관리:
staprun명령을 통해 권한이 제한된 환경에서도 안전하게 사용하도록 설계되었다.
사용 방법
- 스크립트 작성: 관찰하고자 하는 이벤트와 액션을 정의한다. 예)
probe kernel.function("do_fork") { printf("fork called by pid %d
", pid()) }
2. 컴파일 및 실행: `stap script.stp` 명령으로 스크립트를 컴파일하고 실행한다.
3. 결과 분석: 출력된 로그를 기반으로 성능 병목이나 오류 원인을 파악한다.
SystemTap은 일반 사용자보다 높은 권한(보통 root)으로 실행해야 하며, 커널에 맞는 디버깅 심볼이 필요하다.
### 지원 플랫폼
- 운영체제: 주로 GNU/Linux 배포판(Red Hat Enterprise Linux, CentOS, Fedora, Ubuntu 등)에서 사용된다.
- 커널 버전: 커널 2.6.27 이후 버전을 기본적으로 지원한다. 다만, 최신 커널 기능을 활용하려면 해당 커널에 맞는 SystemTap 패키지와 디버깅 심볼이 필요하다.
### 관련 프로젝트
- LTTng (Linux Trace Toolkit Next Generation): 커널 및 사용자 공간 트레이싱을 위한 또 다른 오픈소스 프레임워크.
- perf: 리눅스 커널에 내장된 성능 분석 도구로, 하드웨어 이벤트 기반 프로파일링을 제공한다.
- BPF (Berkeley Packet Filter) 기반 도구: eBPF와 `bpftrace` 등은 SystemTap과 유사한 목적을 갖는 최신 트레이싱 기술이다.
### 참고 문헌
- SystemTap 공식 웹사이트 및 문서(【https://sourceware.org/systemtap/】(https://sourceware.org/systemtap/))
- Red Hat Enterprise Linux 7 SystemTap 사용 가이드
- "Linux Performance" – Brendan Gregg, O'Reilly Media, 2019 (SystemTap을 포함한 다양한 트레이싱 도구 소개)