Diff for /wikisrc/tutorials/how_to_enable_and_run_dtrace.mdwn between versions 1.1 and 1.2

version 1.1, 2011/11/20 20:55:21 version 1.2, 2012/02/05 07:14:36
Line 1 Line 1
 DTrace is a Dynamic Tracing framework developed by Sun and ported to NetBSD. It enables extensive instrumentation of the kernel and user space. See the [DTrace Community Page](http://hub.opensolaris.org/bin/view/Community+Group+dtrace/WebHome) for more information. Also see [DTrace Introduction](http://wikis.sun.com/display/DTrace/Introduction).  DTrace is a Dynamic Tracing framework developed by Sun and ported to NetBSD. It enables extensive instrumentation of the kernel and user space. See the [DTrace Community Page](http://hub.opensolaris.org/bin/view/Community+Group+dtrace/WebHome) for more information. Also see [DTrace Introduction](http://wikis.sun.com/display/DTrace/Introduction). 
   
   
 DTrace is a work-in-progress effort and it is for i386 systems only. Two providers are available; the Statically Defined Tracing (SDT) provider and the Function Boundary Tracer (FBT) provider.  DTrace is a work-in-progress effort and it is for i386 systems only. Two providers are available; the Statically Defined Tracing (SDT) provider and the Function Boundary Tracer (FBT) provider. 
   
 You can currently run a hello world DScript.  You can currently run a hello world DScript. 
   
 ##  Building DTrace  ##  Building DTrace 
   
 You need the following options in your kernel:  You need the following options in your kernel: 
          
     options         INSECURE      options         INSECURE
     options         KDTRACE_HOOKS   # DTrace support      options         KDTRACE_HOOKS   # DTrace support
     options         MODULAR      options         MODULAR
          
   
 You also need to build distribution with the options MKMODULAR=yes and MKDTRACE=yes.  You also need to build distribution with the options MKMODULAR=yes and MKDTRACE=yes. 
   
 ##  Running hello world  ##  Running hello world 
   
 Load the solaris and dtrace modules, and the SDT (Statically Defined Tracing) and FBT (Function Boundary Tracing) modules:  Load the solaris and dtrace modules, and the SDT (Statically Defined Tracing) and FBT (Function Boundary Tracing) modules: 
          
     modload solaris      modload solaris
     modload dtrace      modload dtrace
     modload sdt      modload sdt
     modload fbt      modload fbt
          
   
 Make the dtrace device node:  Make the dtrace device node: 
          
     mkdir /dev/dtrace      mkdir /dev/dtrace
     mknod /dev/dtrace/dtrace c dtrace 0      mknod /dev/dtrace/dtrace c dtrace 0
          
   
 List the dtrace probes  List the dtrace probes 
          
     dtrace -l      dtrace -l
          
        ID   PROVIDER            MODULE                          FUNCTION NAME         ID   PROVIDER            MODULE                          FUNCTION NAME
         1     dtrace                                                     BEGIN          1     dtrace                                                     BEGIN
         2     dtrace                                                     END          2     dtrace                                                     END
         3     dtrace                                                     ERROR          3     dtrace                                                     ERROR
         4        fbt            netbsd             AcpiAcquireGlobalLock entry          4        fbt            netbsd             AcpiAcquireGlobalLock entry
         5        fbt            netbsd             AcpiAcquireGlobalLock return          5        fbt            netbsd             AcpiAcquireGlobalLock return
         6        fbt            netbsd             AcpiAllocateRootTable entry          6        fbt            netbsd             AcpiAllocateRootTable entry
         7        fbt            netbsd                    AcpiAttachData entry          7        fbt            netbsd                    AcpiAttachData entry
         .          . 
         .          .
     29129        fbt           solaris                   zfs_vop_getattr entry      29129        fbt           solaris                   zfs_vop_getattr entry 
     29130        fbt           solaris                   zfs_vop_getattr return      29130        fbt           solaris                   zfs_vop_getattr return
     29131       proc                                                     create      29131       proc                                                     create
     29132       proc                                                     exec      29132       proc                                                     exec 
         .          .
         .          .
     29140       proc                                                     lwp_start      29140       proc                                                     lwp_start
     29141       proc                                                     lwp_exit      29141       proc                                                     lwp_exit
          
   
      
   
   
 Put the following into the file hello.d  Put the following into the file hello.d 
          
     BEGIN      BEGIN
     {      {
         trace("Hello world");          trace("Hello world");
         exit(0);          exit(0);
     }      }
          
   
 Run the hello world script:  Run the hello world script: 
          
     dtrace -s hello.d      dtrace -s hello.d
          
     dtrace: script './hello.d' matched 1 probe      dtrace: script './hello.d' matched 1 probe
     CPU     ID                    FUNCTION:NAME      CPU     ID                    FUNCTION:NAME
       0      1                           :BEGIN   Hello world        0      1                           :BEGIN   Hello world
          
   
 A more complex example that traces the execution of a sleep operation in the kernel:  A more complex example that traces the execution of a sleep operation in the kernel: 
          
     #pragma D option flowindent      #pragma D option flowindent
          
     fbt::syscall:entry      fbt::syscall:entry
     /execname == "sleep" && guard++ == 0/      /execname == "sleep" && guard++ == 0/
     {      {
             self->traceme = 1;              self->traceme = 1;
             printf("fd: %d", arg0);              printf("fd: %d", arg0);
     }      }
          
     fbt:::      fbt:::
     /self->traceme/      /self->traceme/
     {}      {}
          
     fbt::syscall:return      fbt::syscall:return
     /self->traceme/      /self->traceme/
     {      {
             self->traceme = 0;              self->traceme = 0;
             exit(0);              exit(0);
     }      }
          
   
 Start the script running (dtrace -s <scriptname.d>) and then execute a sleep 2 in another shell.  Start the script running (dtrace -s <scriptname.d>) and then execute a sleep 2 in another shell. 
   

Removed from v.1.1  
changed lines
  Added in v.1.2


CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb