WIPIVERSE

SystemTap

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)를 수행한다. 세 가지 백엔드 중 하나를 선택하여 실행할 수 있다:

  1. 로더블 커널 모듈(loadable kernel module) — 기본값. 시스템 전체를 검사 및 조작할 수 있는 가장 완전한 기능을 제공하며, 가장 높은 권한이 필요하다.
  2. DynInst 기반 — 동적 프로그램 분석 라이브러리 DynInst를 사용하여 사용자 공간 프로그램만을 계측하며, 최소한의 권한이 필요하다.
  3. 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 등이 있다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기