{{위키데이터 속성 추적}}
{{소프트웨어 정보
| name                   = SystemTap
| logo                   = Smileytap.svg|150px
| screenshot             =
| caption                = "surgery with improvised tools, leading to a mixture of horror and delight"
| developer              = 다수
| released               = {{시작 날짜|2005}}
| latest release version = 3.0
| programming language   = [[C (프로그래밍 언어)|C]], [[C++]], 커스텀 스크립팅
| operating system       = [[리눅스 커널]]
| genre                  = [[트레이싱]] [[프로그래밍 언어]]
| license                = [[GNU 일반 공중 사용 허가서]]
| website                = {{URL|http://sourceware.org/systemtap/}}
}}

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

SystemTap은 자유-오픈 소스 소프트웨어로 이루어졌으며 [[레드햇]], [[IBM]], [[인텔]], [[히타치 제작소]], [[오라클 (기업)|오라클]] 그리고 다른 커뮤니티 멤버들로부터의 기여를 포함한다.<ref>[http://lwn.net/Articles/315022/ A SystemTap update]</ref>

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

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

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

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

== 사용 ==
SystemTap 언어로 쓰여진 SystemTap 파일들은(언어 레퍼런스에 기반한<ref>http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/html/SystemTap_Tapset_Reference/index.html
</ref>) <code>stap</code> 명령어<ref>Compare{{웹 인용
 |url=http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.172.5186&rep=rep1&type=pdf
 |title=SystemTap Language Reference: A guide to the constructs and syntax used in SystemTap scripts
 |first=Robb
 |last=Romans
 |year=2009
 |publisher=Red Hat
 |page=4
 |format=PDF
 |accessdate=2010-12-19
 |quote=SystemTap [...] requires root privileges to actually run the kernel objects it builds using the sudo command, applied to the staprun program.[...] staprun is a part of the SystemTap package, dedicated to module loading and unloading and kernel-touser data transfer.
}}</ref>로 실행되며 <code>.stp</code> 파일들로 저장된다. 시스템은 실행되기 전에 스크립트에 여러 단계를 이행하는데, 이 때 스크립트는 [[적재 가능 커널 모듈]]로 컴파일되고 커널에 로드된다. 기록된 모듈들은 'stap_<UUID>' 같이 각 SystemTap 스크립트를 보여준다. 이 모듈은 tap이 실행을 끝냈을 때 언로드된다.

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

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

systemtap 릴리즈 1.7부터 소프트웨어는 새로운 ''stapsys'' 그룹과 권한 수준을 구현하였다.<ref>{{웹 인용
 |url=http://sourceware.org/ml/systemtap/2012-q1/msg00097.html
 |title=systemtap 1.7 release
 |last1=Eigler
 |first1=Frank Ch.
 |date=2012-02-01
 |accessdate=2013-03-26
 |quote=The systemtap team announces release 1.7 [...] The new group and privilege level "stapsys" has been added [...]
}}</ref>

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

<pre>
# 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")
}
</pre>

많은 다른 예시들은 [https://web.archive.org/web/20160312144834/https://sourceware.org/systemtap/examples/ SystemTap]에 나와있다. 또한 [http://sourceware.org/systemtap/wiki/WarStories War Stories page]에 SystemTap 사용의 실제 예시들도 있다.

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

== 같이 보기 ==
* [[Kernel marker]]
* [[DProbes]]
* [[LTTng]]
* [[strace]]
* [[DTrace]]
* [[ProbeVue]]

== 각주 ==
{{각주|30em}}

== 외부 링크 ==
* [http://sourceware.org/systemtap/ SystemTap Homepage]
* [http://sourceware.org/systemtap/wiki/ SystemTap Wiki]
* [http://sourceware.org/systemtap/langref/ SystemTap Language Reference] ([http://sourceware.org/systemtap/langref.pdf PDF])
* [http://www.ohloh.net/p/systemtap SystemTap project analysis by Ohloh] {{웨이백|url=http://www.ohloh.net/p/systemtap |date=20121207150015 }}
* [http://myaut.github.io/dtrace-stap-book Dynamic Tracing with DTrace & SystemTap]
* [http://sourceware.org/systemtap/tutorial.pdf ''Systemtap tutorial''] Frank Ch. Eigler
* [http://sourceware.org/systemtap//SystemTap_Beginners_Guide.pdf ''SystemTap Beginner's Guide''] Don Domingo, William Cohen
* [http://www.kernel.org/doc/ols/2006/ols2006v1-pages-261-268.pdf ''Problem Solving With Systemtap''], [https://web.archive.org/web/20080913185728/http://www.linuxsymposium.org/ Ottawa Linux Symposium] 2006
* [http://sources.redhat.com/systemtap/wiki/RedHatSummit2007?action=AttachFile&do=get&target=RHSummit07-ETSystemTap.pdf ''Problem Solving with SystemTap''] {{웨이백|url=http://sources.redhat.com/systemtap/wiki/RedHatSummit2007?action=AttachFile&do=get&target=RHSummit07-ETSystemTap.pdf |date=20120222005620 }}, Eugene Teo, presented at the [http://www.redhat.com/summit/ Red Hat Summit] 2007 ([http://sourceware.org/systemtap/wiki/RedHatSummit2007?action=AttachFile&do=get&target=RHSummit07-ETSystemTapScripts.bz2 scripts])
* [http://sourceware.org/systemtap/wiki/LW2008SystemTapTutorial?action=AttachFile&do=get&target=jistone-systemtap-linuxworld08.pdf ''Dynamic Tracing and Performance Analysis Using SystemTap''], Joshua Stone, presented at the [https://web.archive.org/web/19990117025510/http://linuxworldexpo.com/ LinuxWorld Conference] 2008
* [http://sourceware.org/systemtap/wiki/LPC2008SystemTapTutorial?action=AttachFile&do=get&target=LPC_2008_stap.pdf SystemTap Tutorial], Jim Keniston, presented at the [http://linuxplumbersconf.org/ Linux Plumbers Conference] 2008

{{리눅스 커널}}

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