SystemTap

위키백과, 우리 모두의 백과사전.

SystemTap
개발자다수
발표일2005년 (2005)
안정화 버전
3.0
저장소
프로그래밍 언어C, C++, 커스텀 스크립팅
운영 체제리눅스 커널
종류트레이싱 프로그래밍 언어
라이선스GNU 일반 공중 사용 허가서
웹사이트sourceware.org/systemtap/

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

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

역사[편집]

SystemTap은 2005년에 기술 프리뷰로서 레드햇 엔터프라이즈 리눅스 4 업데이트 2에서 처음 도입되었다.[2]

4년의 개발 이후, SystemTap 1.0이 2009년에 릴리즈되었다.[3]

2011년 SystemTap은 모든 리눅스 배포판들에서 완전히 지원되고 있다.[4][5]

CPython VM에서 Tracepoints와 자바 가상 머신이 SystemTap 1.2에 추가되었다.[6]

사용[편집]

SystemTap 언어로 쓰여진 SystemTap 파일들은(언어 레퍼런스에 기반한[7]) stap 명령어[8]로 실행되며 .stp 파일들로 저장된다. 시스템은 실행되기 전에 스크립트에 여러 단계를 이행하는데, 이 때 스크립트는 적재 가능 커널 모듈로 컴파일되고 커널에 로드된다. 기록된 모듈들은 'stap_<UUID>' 같이 각 SystemTap 스크립트를 보여준다. 이 모듈은 tap이 실행을 끝냈을 때 언로드된다.

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

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

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

간단한 예시[편집]

아래의 스크립트는 시스템에서 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를 어태치할 수 있다.

같이 보기[편집]

각주[편집]

  1. A SystemTap update
  2. http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/release-notes/as-x86/RELEASE-NOTES-U2-x86-en.html
  3. http://sourceware.org/ml/systemtap/2009-q3/msg00831.html
  4. http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.2/html/Release_Notes/x86/ar01s03.html
  5. http://support.novell.com/techcenter/psdb/f1856527fefb7f2060aeb6907f319a09.html
  6. http://fedoraproject.org/wiki/Features/SystemtapStaticProbes
  7. http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/html/SystemTap_Tapset_Reference/index.html
  8. 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. 
  9. 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 [...] 

외부 링크[편집]