SystemTap
SystemTap(stap)은 실행 중인 프로덕션 Linux 기반 운영 체제를 동적으로 계측(instrument)하기 위한 스크립팅 언어이자 도구이다. 시스템 관리자는 SystemTap을 사용하여 복잡한 성능 또는 기능 문제 진단을 위해 데이터를 추출, 필터링 및 요약할 수 있다.
개요
SystemTap은 GNU General Public License(GPL) 하에 배포되는 자유-오픈 소스 소프트웨어(free and open-source software)이며, Red Hat, IBM, Intel, Hitachi, Oracle, 위스콘신-매디슨 대학 및 기타 커뮤니티 구성원의 기여를 포함한다. 기존의 방식(커널 재컴파일, 재부팅 등)을 거치지 않고 실행 중인 시스템의 커널 및 사용자 공간 프로세스에 대한 동적 분석을 가능하게 한다.
주요 특징
- 단순한 명령줄 인터페이스와 스크립팅 언어를 제공하여 실행 중인 커널 및 사용자 공간 애플리케이션을 위한 계측을 작성할 수 있다.
- 내부 "tapset" 스크립트 라이브러리를 통해 재사용 및 추상화를 지원한다.
- 복잡한 추적/프로빙 작업뿐만 아니라 간단한 추적 작업도 처리할 수 있다.
- SystemTap 스크립트 파일은
.stp확장자를 사용하며,stap명령줄 도구를 통해 실행된다.
동작 방식
SystemTap은 스크립트 실행 전 여러 분석 패스(analysis passes)를 수행한다. 세 가지 백엔드 중 하나를 선택하여 실행할 수 있다:
- 로더블 커널 모듈(loadable kernel module) — 기본값. 시스템 전체를 검사 및 조작할 수 있는 가장 완전한 기능을 제공하며, 가장 높은 권한이 필요하다.
- DynInst 기반 — 동적 프로그램 분석 라이브러리 DynInst를 사용하여 사용자 공간 프로그램만을 계측하며, 최소한의 권한이 필요하다.
- eBPF 바이트코드 기반 — Linux 커널 인터프리터의 기능에 제한되며, 중간 수준의 권한이 필요하다.
스크립트 실행이 완료되면 생성된 모듈은 언로드된다.
역사
- 2005년: Red Hat Enterprise Linux 4 Update 2에서 기술 프리뷰(technology preview)로 처음 선보였다.
- 2009년: 4년간의 개발 끝에 SystemTap 1.0이 공식 출시되었다.
- 2011년: RHEL/CentOS 5, SLES 10, Fedora, Debian, Ubuntu 등 주요 Linux 배포판에서 완전히 지원되기 시작했다.
- 2009년(SystemTap 1.2): CPython VM 및 JVM의 Tracepoint 지원이 추가되었다.
- 2019년 11월(SystemTap 4.2): Prometheus 익스포터가 포함되었다.
- 최신 안정 버전: 5.5 (2026년 5월 1일 기준)
스크립트 구조
SystemTap 스크립트는 일반적으로 다음과 같은 이벤트에 초점을 맞춘다:
- 스크립트 시작 또는 종료 이벤트
- 컴파일된 프로브 포인트(예: Linux "tracepoints")
- 커널 또는 사용자 공간의 함수나 구문 실행
"guru 모드" 스크립트는 임베디드 C 코드를 포함할 수 있으며, -g 옵션으로 실행된다. Guru 모드는 계측 대상 소프트웨어의 상태를 수정(예: 긴급 보안 패치 적용)할 때 필요하지만, 사용이 권장되지는 않는다.
활용 분야
SystemTap은 netstat, ps, top, iostat 등 기존 도구와 유사한 정보를 제공하지만, 보다 세밀한 수준의 세부 정보를 제공한다. 주로 다음과 같은 상황에서 사용된다:
- 커널 및 시스템 콜 수준의 실시간 추적
- 성능 병목 지점 진단
- 복잡한 기능 문제 분석
- 애플리케이션의 소켓 옵션 설정 추적 등
관련 기술
SystemTap은 sys/sdt.h 헤더 파일의 매크로를 통해 애플리케이션에 컴파일된 DTrace 마커에도 연결(attach)할 수 있다. 관련 기술로는 DTrace, LTTng, strace, ProbeVue, eBPF 등이 있다.