SystemTap

SystemTap(stap)은 실행 중인 리눅스 커널 기반 운영 체제들을 동적으로 인스트루먼팅하기 위한 스크립트 언어이자 툴이다. 시스템 관리자들은 SystemTap을 기능적인 문제들이나 복잡한 성능에 대한 진단을 위한 데이터의 추출, 필터 그리고 요약하는데 사용할 수 있다.

SystemTap은 자유-오픈 소스 소프트웨어로 이루어졌으며 레드햇, IBM, 인텔, 히타치 제작소, 오라클 그리고 다른 커뮤니티 멤버들로부터의 기여를 포함한다.A SystemTap update

 역사 
SystemTap은 2005년에 기술 프리뷰로서 레드햇 엔터프라이즈 리눅스 4 업데이트 2에서 처음 도입되었다.http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/release-notes/as-x86/RELEASE-NOTES-U2-x86-en.html

4년의 개발 이후, SystemTap 1.0이 2009년에 릴리즈되었다.http://sourceware.org/ml/systemtap/2009-q3/msg00831.html

2011년 SystemTap은 모든 리눅스 배포판들에서 완전히 지원되고 있다.http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.2/html/Release_Notes/x86/ar01s03.htmlhttp://support.novell.com/techcenter/psdb/f1856527fefb7f2060aeb6907f319a09.html

CPython VM에서 Tracepoints와 자바 가상 머신이 SystemTap 1.2에 추가되었다.http://fedoraproject.org/wiki/Features/SystemtapStaticProbes

 사용 
SystemTap 언어로 쓰여진 SystemTap 파일들은(언어 레퍼런스에 기반한http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/html/SystemTap_Tapset_Reference/index.html) stap 명령어Compare로 실행되며 .stp 파일들로 저장된다. 시스템은 실행되기 전에 스크립트에 여러 단계를 이행하는데, 이 때 스크립트는 적재 가능 커널 모듈로 컴파일되고 커널에 로드된다. 기록된 모듈들은 'stap_<UUID>' 같이 각 SystemTap 스크립트를 보여준다. 이 모듈은 tap이 실행을 끝냈을 때 언로드된다.

스크립트들은 일반적으로 이벤트(스크립트의 시작과 종료 같은), 리눅스 "tracepoints" 같은 컴파일된 프로브 포인트 또는 커널이나 사용자 공간에서의 함수나 선언의 실행에 초점을 맞춘다.

어떤 "guru mode" 스크립트들은 또한 -g 명령어 옵션과 함께 동작하는 임베디드 C를 갖는다. 그러나 guru 모드의 사용은 추천되지 않으며 각 SystemTap 릴리즈는 guru 모드 tap들의 필요를 없앨 수 있게 디자인된 더 많은 프로브 포인트들을 포함한다.

systemtap 릴리즈 1.7부터 소프트웨어는 새로운 stapsys 그룹과 권한 수준을 구현하였다.

 간단한 예시 
아래의 스크립트는 시스템에서 TCP 소켓 옵션들을 설정하는 모든 애플리케이션들과 설정된 옵션 그리고 옵션이 성공적으로 설정되었느지의 여부를 보여준다.

# Show sockets setting options

# Return enabled or disabled based on value of optval
function getstatus(optval)
{
    if ( optval == 1 )
        return "enabling"
    else
        return "disabling"
}

probe begin
{
	print ("\nChecking for apps setting socket options\n")
}

# Set a socket option
probe tcp.setsockopt
{
    status = getstatus(user_int($optval))
	printf ("  App '%s' (PID %d) is %s socket option %s... ", execname(), pid(), status, optstr)
}

# Check setting the socket option worked
probe tcp.setsockopt.return
{
    if ( ret == 0 )
        printf ("success")
    else
        printf ("failed")
    printf ("\n")
}

probe end
{
	print ("\nClosing down\n")
}

많은 다른 예시들은 SystemTap에 나와있다. 또한 War Stories page에 SystemTap 사용의 실제 예시들도 있다.

 다른 트레이싱 기술들에서 스크립트 임포팅 
SystemTap은 sys/sdt.h 헤더 파일의 매크로들을 사용해서 애플리케이션에 컴파일될 때 DTrace를 어태치할 수 있다.

 같이 보기 
 Kernel marker
 DProbes
 LTTng
 strace
 DTrace
 ProbeVue

 각주 

 외부 링크 
 SystemTap Homepage
 SystemTap Wiki
 SystemTap Language Reference (PDF)
 SystemTap project analysis by Ohloh 
 Dynamic Tracing with DTrace & SystemTap
 Systemtap tutorial Frank Ch. Eigler
 SystemTap Beginner's Guide Don Domingo, William Cohen
 Problem Solving With Systemtap, Ottawa Linux Symposium 2006
 Problem Solving with SystemTap , Eugene Teo, presented at the Red Hat Summit 2007 (scripts)
 Dynamic Tracing and Performance Analysis Using SystemTap, Joshua Stone, presented at the LinuxWorld Conference 2008
 SystemTap Tutorial, Jim Keniston, presented at the Linux Plumbers Conference 2008

분류:디버거
분류:리눅스 커널 특징
분류:C++로 작성된 자유 소프트웨어