SystemTap

SystemTap(stap)은 실행 중인 리눅스 커널 기반 운영 체제들을 동적으로 인스트루먼팅하기 위한 스크립트 언어이자 툴이다. 시스템 관리자들은 SystemTap을 기능적인 문제들이나 복잡한 성능에 대한 진단을 위한 데이터의 추출, 필터 그리고 요약하는데 사용할 수 있다. SystemTap은 자유-오픈 소스 소프트웨어로 이루어졌으며 레드햇, IBM, 인텔, 히타치 제작소, 오라클 그리고 다른 커뮤니티 멤버들로부터의 기여를 포함한다. SystemTap은 2005년에 기술 프리뷰로서 레드햇 엔터프라이즈 리눅스 4 업데이트 2에서 처음 도입되었다. 4년의 개발 이후, SystemTap 1.0이 2009년에 릴리즈되었다. 2011년 SystemTap은 모든 리눅스 배포판들에서 완전히 지원되고 있다. CPython VM에서 Tracepoints와 자바 가상 머신이 SystemTap 1.2에 추가되었다. SystemTap 언어로 쓰여진 SystemTap 파일들은(언어 레퍼런스에 기반한) stap 명령어로 실행되며 .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 A SystemTap update http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/release-notes/as-x86/RELEASE-NOTES-U2-x86-en.html http://sourceware.org/ml/systemtap/2009-q3/msg00831.html http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.2/html/Release_Notes/x86/ar01s03.html http://support.novell.com/techcenter/psdb/f1856527fefb7f2060aeb6907f319a09.html http://fedoraproject.org/wiki/Features/SystemtapStaticProbes http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/html/SystemTap_Tapset_Reference/index.html CompareRomans, Robb (2009). “SystemTap Language Reference: A guide to the constructs and syntax used in SystemTap scripts” (PDF). Red Hat. 4쪽. 2010년 12월 19일에 확인함. 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.  Eigler, Frank Ch. (2012년 2월 1일). “systemtap 1.7 release”. 2013년 3월 26일에 확인함. The systemtap team announces release 1.7 [...] The new group and privilege level "stapsys" has been added [...]  SystemTap Homepage SystemTap Wiki SystemTap Language Reference (PDF) SystemTap project analysis by Ohloh Archived 2012년 12월 7일 - 웨이백 머신 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 Archived 2012년 2월 22일 - 웨이백 머신, 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