Dtrace CookBook

솔라리스/오픈솔라리스 2007/01/23 16:19 Posted by Sun
Sowmini Varadhan, opensolaris.org, 2007년 1월  

배경 지식

Dtrace는 네트워크의 문제점 특히 커널 내의 문제점을 디버깅할 수 있도록 도와주는 매우 간편한 툴입니다. 그리고 이 문서는 DTrace 의 간단한 소개와 기능, 그리고 다양하고 복잡한 기능을 하는 네트워크 특수한 스크립트들을 제공합니다. 이 글의 목적은 스크립트의 저장소를 제공함으로써 네트워크에 심각한 버그를 겪고 있음에도, DTrace 를 처음부터 배우기 곤란한 사람들을 도와주기 위함입니다.

이 글에 포함된 스크립트들은 어떤 특수한 문제를 완전히 해결하기 위한 것이라기 보다 갖다 붙이기를 하면서 다른 문제들을 해결 할 수 있도록 의도된 스크립트들이라는 점을 유념하여 주시기 바랍니다.

우리의 뉴스레터를 위한 모든 종류의 도움을 환영 합니다. Sowmini 에게 스크립트를 보내주세요!

여기에 몇가지 다른 유용한 문서들의 링크를 소개 합니다:


네트워크를 위한 DTrace 교재

시작하려면

가이드

DTrace는 어떻게 사용할까요? 사용자는 DTrace 스크립트를 사용하거나 혹은 직접 작성할 것입니다:

DTrace 스크립트 사용

  • DTraceToolkit 을 다운로드 함.
  • 스크립트를 다른 웹사이트 에서 다운로드 함.
  • DTrace 한줄 스크립트(OneLiner)를 확인함.
  • /usr/demo/dtrace 에 있는 스크립트나 DTrace Guide 에 있는 스크립트들을 사용 함.  
  • BigAdmin 포럼 혹은 인터넷을 검색하여 유용한 스크립트들을 찾아냄.

DTrace 스크립트 작성

여러분은 오류를 해결하거나 성능 문제를 해결하기 위해 고유의 DTrace 스크립트를 작성할 것입니다.

  • C 를 아는 것은 도움이 됨.
  • 커널에 대해 조금이라도 아는 것이 도움이 됨
  • 거의 모든 작업이 가능함

고유의 스크립트 작성을 시작하려면:

  • DTrace Guide 의 챕터 1(적어도) 을 읽을 것 
  • DTrace 한줄 스크립트(OneLiner) 를 확인해 볼 것.
  • DTrace 예제들을 읽어 볼 것.
  • 스크립트를 공부할 것.
  • 다른 웹사이트의 스크립트를 확인해 볼것.
  • DTraceToolkit 을 다운로드 받을 것
  • BigAdmin 포럼 에 참여할 것 

주의: 이 사이트 내의 스크립트 중 많은 수가 커맨드 라인 옵션을 받기 위해 본 쉘 혹은 펄로 래핑(wrapping) 되어 있습니다. 아마 앞으로 DTrace 가 직접 매개변수를 다룰 수 있을수도 있습니다. 그동안 이 코드는 미래의 순수한 DTrace 컨버젼을 용이하게 하는 방향으로 작성되어 왔습니다.


네트워크 Dtrace 스크립트

몇몇 한줄짜리 DTrace 스크립트는 usres.tpg.com.au 에서 찾아보실 수 있습니다.

추가적인 DTrace 스크립트들의 tarball (아래에서 설명됨)은 여기 서 찾을 수 있습니다.

간단한 DTrace 스크립트

bge_send.d  - bge_send 의 보내진 패킷과 실패한 패킷의 카운트를 확인. 특별한 타입(ip proto 등등) 의 패킷을 카운트 하도록 간단히 수정 가능

arp_lookup.d  - arp에서 찾고자하는 ipv4 주소를 간단히 찾아냄.

arp_snoop.d  - ar_rput()에서 가로챈 패킷의 스택 트레이스와 패킷 구조(snoop의 출력형식과 비슷하게)를 출력함.

break_in_kmdb.html - kmdb에서 breakpoint()를 호출할 수 있는 스크립트.

ctx.d  - sendto() 호출이 pswitch probe를 사용할때 컨텍스트 스위칭을 관찰.

udp.d  - UDP MIB 제공자를 이용하여 각 초당의 udp 상태를 보여줌.

ip_reass.d  - ip 패킷의 분리를 추적함; 32 비트 ip 어드레스의 보기 간편한 출력을 제공.

unknown_proto.d  는 "알수없는 IP 프로토콜" 패킷의 정체를 출력할때 사용됨. -- ipInUnknownProtos MIB/netstat 카운터에 나타난 패킷.

타이밍 드라이버를 위한 DTrace 스크립트

e1000g.d  - e1000g 드라이버의 호출 횟수 및 비싼 호출인 CleanTxInterrupts() 함수의 시간을 카운트; 집합("@") 의 사용예.

ce.d.html - ce 드라이버의 arp 모듈의 서비스 타임 측정.

jitter.d - sendto, recvfrom 에서 오류 혹은 오래 지연된 시간 측정; jitter2.d jitter.d 를 speculate() 를 이용하여 필터링.

trace_nce_res_mp.d 는 중요한 함수(예를 들어 dblk_free)에서 특정한 패킷을 집어 내도록 커스터마이즈 할 수 있는 간단한 템플릿임.


커널 프로파일링을 위한 DTrace 스크립트

prof.d  - 시스템 타임을 많이 소비하는 커널을 프로파일; 프로파일 제공자를 집합등과 사용하는 예제임. prof2.d 와 prof3.d prof.d 의 수정된 예제임.

DTrace를 이용한 프로파일링 툴

썬 스튜디오 컴파일러는 er_kernel 툴을 통해 솔라리스 커널을 프로파일링 할 수 있는 툴을 제공합니다. er_kernel 은 솔라리스10을 위한 DTrace, 그리고 솔라리스 8, 9, 10의 kpcsdrv라는 두가지의 드라이버를 통해 데이타를 수집합니다. DTrace 드라이버는 기본값입니다; kpcsdrv 드라이버는 er_kernel의 첫번째 매개변수가 -X 일때 사용됩니다.

이 툴에 대한 자세한 정보는 다음을 확인하시기 바랍니다:


좀더 정교한 스크립트들....

dtrace 토론  (http://www.open solaris.org/os/community/dtrace/scripts/) 사이트에 몇몇 스크립트들이 있습니다.

zerocopy.d (http://npt.eng/dtrace/zerocopy.d.html) - 모니터

zerocopy.d - TCP의 ZeroCopy 기능을 모니터 하여 다른 컴포넌트 들에 무슨 일이 발생했는지 보여줌(예를 들어 STREAM head, TCP, IP(ill), mblk, 같은)

다른 Dtrace 스크립트 리스트

Richard McDougall 의 Dtrace 스크립트 

네트워크를 위한 Dtrace의 제약사항

Dtrace는 사후 분석에 알맞은 툴은 아닙니다. 예를 들어 네트워크 분야에서 자주 발생하는 문제인 "내 패킷이 어느 큐에 들어갔지" 하는 질문 같은 것들 말입니다. 또 다른 문제로는 메모리 누출이 이미 발생한 후에 어떠한 이벤트가 메모리 혹은 참조카운트 누출을 발생시켰는지 분석하는 것들이 있습니다.

공헌자

Jim Carlson, Jim Fiori, Darrin Johnson, Alex Peng, Sowmini Varadhan

"오픈솔라리스" 카테고리의 다른 글

2007/01/23 16:19 2007/01/23 16:19

TRACKBACK :: http://blog.sdnkorea.com/blog/trackback/146

  1. DTrace - Chime : 새로운 Chime 디스플레이 추가시키기

    Tracked from Computer Holic  삭제

    <P>SDN Korea article</P> <P><A target='_blank' class='con_link' href="http://www.sdnkorea.com/blog/353"><STRONG><FONT color=#003366>DTrace - Chime : 새로운 Chime 디스플레이 추가시키기</FONT></STRONG></A></P> <P>&nbsp;</P>

    2007/05/09 07:48

댓글을 달아 주세요

  1. 박정숙  수정/삭제  댓글쓰기

    좋은 정보 감사해요~

    2007/09/19 03:59
  2. 박정숙  수정/삭제  댓글쓰기

    좋은 정보 감사해요~

    2007/09/19 04:00
  3. 고진구  수정/삭제  댓글쓰기

    tcp/ip에서 유용한 문제해결 도구죠. 저도 자주 써먹고 있어요. 이렇게 다양하진 않지만요.

    2007/09/19 15:49
[로그인][오픈아이디란?]

◀ Prev 1  ... 307 308 309 310 311 312 313 314 315  ... 626  Next ▶