My (attached) dtrace script tries to trace a tcp packet and report the time spent in each processing function subtracting the time spent in called functions. However when I run it I get -ve quantize distribution. I do not see any -ve values being generated. Any ideas what might be causing this. Is there is a better way to get the information that I am trying to get.

Thanks,

Rao.

CPU     ID                    FUNCTION:NAME
  2  16938                    putnext:entry putnext recursive call 

  0      2                             :END 

  ip_tcp_input                                      
           value  ------------- Distribution ------------- count    
            1024 |                                         0        
            2048 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 163146   
            4096 |                                         58       
            8192 |                                         1        
           16384 |                                         0        

  socket_uc_queue_msg                               
           value  ------------- Distribution ------------- count    
            1024 |                                         0        
            2048 |@@@@@@                                   18835    
            4096 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@       108811   
            8192 |                                         43       
           16384 |                                         0        

  mac_rx                                            
           value  ------------- Distribution ------------- count    
            2048 |                                         0        
            4096 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 142877   
            8192 |                                         6        
           16384 |                                         0        

  i_dls_link_rx                                     
           value  ------------- Distribution ------------- count    
            2048 |                                         0        
            4096 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 142850   
            8192 |                                         31       
           16384 |                                         1        
           32768 |                                         0        
           65536 |                                         0        
          131072 |                                         0        
          262144 |                                         1        
          524288 |                                         0        

  bge_receive                                       
           value  ------------- Distribution ------------- count    
             512 |                                         0        
            1024 |@                                        2402     
            2048 |                                         514      
            4096 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@     131322   
            8192 |@@@                                      11561    
           16384 |                                         2        
           32768 |                                         0        

  tcp_rput_data                                     
           value  ------------- Distribution ------------- count    
          -16384 |                                         0        
           -8192 |                                         1        
           -4096 |                                         10       
           -2048 |                                         707      
           -1024 |@                                        4550     
            -512 |                                         206      
            -256 |                                         0        
            -128 |                                         0        
             -64 |                                         0        
             -32 |                                         0        
             -16 |                                         0        
              -8 |                                         0        
              -4 |                                         0        
              -2 |                                         0        
              -1 |                                         0        
               0 |                                         0        
               1 |                                         0        
               2 |                                         0        
               4 |                                         0        
               8 |                                         0        
              16 |                                         0        
              32 |                                         0        
              64 |                                         0        
             128 |                                         1        
             256 |                                         3        
             512 |                                         1        
            1024 |                                         14       
            2048 |@@                                       6943     
            4096 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@     147377   
            8192 |@                                        3387     
           16384 |                                         2        
           32768 |                                         1        
           65536 |                                         0        
          131072 |                                         0        
          262144 |                                         1        
          524288 |                                         0        

  bge_intr                                          
           value  ------------- Distribution ------------- count    
            2048 |                                         0        
            4096 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@         115768   
            8192 |@@@@@@@@                                 30023    
           16384 |                                         3        
           32768 |                                         0        
           65536 |                                         0        
          131072 |                                         0        
          262144 |                                         7        
          524288 |                                         0        

  ip_input                                          
           value  ------------- Distribution ------------- count    
            4096 |                                         0        
            8192 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@      126283   
           16384 |@@@@                                     12540    
           32768 |@                                        4041     
           65536 |                                         0        
          131072 |                                         0        
          262144 |                                         19       
          524288 |                                         0        

#!/usr/sbin/dtrace -s


::bge_intr:entry
{
	self->trace = 1;
	self->prev = 0;
	self->bge_intr = timestamp;
	self->tcp_rput = 0;
	self->so_queue_msg = 0;
	self->putnext = 0;
}

::putnext:entry
/self->trace == 1/
{
	self->putnext = timestamp;
}

::putnext:entry
/self->trace == 1 && self->putnext != 0/
{
        /*
         * recursive call
         */
        printf ("putnext recursive call \n");

	self->putnext_recr++;
}

::socket_uc_queue_msg:entry
/self->trace == 1/
{
	self->so_queue_msg = timestamp;
}

::ip_input:entry
/self->trace == 1/
{
	self->ip_input = timestamp;
}
::ip_tcp_input:entry
/self->trace == 1/
{
	self->ip_tcp_input = timestamp;
}

::tcp_rput_data:entry
/self->trace == 1 && self->tcp_rput != 0/
{
	/*
	 * recursive call
	 */
	printf ("tcp_rput_data recursive call \n");
	self->tcp_rput_recr++;
}

::tcp_rput_data:entry
/self->trace == 1 && self->tcp_rput == 0/
{
	self->tcp_rput = timestamp;
}

::bge_receive:entry
/self->trace == 1/
{
	self->bge_recv = timestamp;
}

::bge_receive_ring:entry
{
	self->bge_rring = timestamp;
}
::copymsgchain:entry
{
	self->cmsg = timestamp;
}
::mac_rx:entry
/self->trace == 1/
{
	self->mac_rx = timestamp;
}
::i_dls_link_rx:entry
{
	self->dls_link_rx = timestamp;
}
::dld_str_rx_fastpath:entry
/self->trace == 1/
{
	self->dls_rx_fast = timestamp;
}

::tcp_rput_data:return
/self->tcp_rput < 0/
{
	printf ("self->tcp_rput < 0");
}

::tcp_rput_data:return
/self->prev < 0/
{
	printf ("tcp_rput self->prev < 0");
}

::tcp_rput_data:return
/self->trace == 1 && self->tcp_rput_recr == 0/
{
	@time[probefunc] = quantize(timestamp - self->tcp_rput - self->prev);
	self->prev = timestamp - self->tcp_rput;
	self->tcp_rput = 0;
}

::tcp_rput_data:return
/self->trace == 1 && self->tcp_rput_recr != 0/
{
	self->tcp_rput_recr--;
}
::bge_intr:return
/self->trace == 1/
{
	@time[probefunc] = quantize(timestamp - self->bge_intr - self->prev);
	self->bge_intr = 0;
	self->trace = 0;
	self->prev = 0;
}
::bge_receive:return
/self->trace == 1/
{
	@time[probefunc] = quantize(timestamp - self->bge_recv - self->prev);
	self->prev = (timestamp - self->bge_recv);
	self->bge_recv = 0;
}
::bge_receive_ring:return
/self->trace == 1/
{
	@time[probefunc] = quantize(timestamp - self->prev - self->bge_rring);
	self->prev = timestamp - self->bge_rring;
	self->bge_rring = 0;
}
::copymsgchain:return
/self->trace == 1/
{
	@time[probefunc] = quantize(timestamp - self->cmsg - self->prev);
	self->prev = timestamp - self->cmsg;
	self->cmsg = 0;
}
::mac_rx:return
/self->trace == 1/
{
	@time[probefunc] = quantize(timestamp - self->mac_rx - self->prev);
	self->prev = timestamp - self->mac_rx;
	self->mac_rx = 0;
}
::i_dls_link_rx:return
/self->trace == 1/
{
	@time[probefunc] = quantize(timestamp - self->dls_link_rx - self->prev);
	self->prev = timestamp - self->dls_link_rx;
	self->dls_link_rx = 0;
}
::dld_str_rx_fastpath:return
/self->trace == 1/
{
	@time[probefunc] = quantize(timestamp - self->dls_rx_fast - self->prev);
	self->prev = timestamp - self->dls_rx_fast;
	self->dls_rx_fast = 0;
}
::ip_input:return
/self->trace == 1/
{
	@time[probefunc] = quantize(timestamp - self->ip_input - self->prev - self->ip_tcp_input);
	self->prev = timestamp - self->ip_input;
	self->ip_input = 0;
}

::socket_uc_queue_msg:return
/self->trace == 1/
{
	@time[probefunc] = quantize(timestamp - self->so_queue_msg);
	self->prev = (timestamp - self->so_queue_msg);
	self->so_queue_msg = 0;
}
::ip_tcp_input:return
/self->trace == 1/
{
	@time[probefunc] = quantize(timestamp - self->ip_tcp_input);
	self->ip_tcp_input = timestamp - self->ip_tcp_input;
}
::putnext:return
/self->trace == 1 && self->putnext_recr == 0 /
{
	@time[probefunc] = quantize(timestamp - self->putnext);
	self->prev = timestamp - self->putnext;
}

::putnext:return
/self->trace == 1 && self->putnext_recr != 0 /
{
	self->putnext_recr--;
}
END
{
	trunc(@time,10);
}
_______________________________________________
dtrace-discuss mailing list
[email protected]

Reply via email to