Re: To John Birrell: weird behaviors of DTrace on amd64

2009-02-06 Thread Robert Watson


On Thu, 5 Feb 2009, Klapper Zhu wrote:

I am exploring DTrace on 7.1-STABLE FreeBSD amd64 and I found several 
weird behaviors:


1) Not all kernel functions show up in fbt provider. Take isp(4) as example:
  dtrace -l shows
  static void isp_freeze_loopdown(ispsoftc_t *, int, char *);
___but not___
  static void isp_handle_platform_atio2(ispsoftc_t *, at2_entry_t *);

  Both are static functions. But one shows up in fbt, another not.
  What's the rational behind it ? Any way to fix it ?


Possibly gcc decided to inline one but not the other; you could try disabling 
inlining and see if the other function appears.  fbt is sensitive to a number 
of compiler choices, so generally if there's a long-term desire to trace at 
that point, we should add explicit trace points.  (Solaris makes similar 
recommendations -- that fbt is a useful but unstable interface).



2) The symptom described below only shows in 64-bit platform (amd64).

Here is the D Code:

fbt::isp_handle_platform_atio2:entry
{
self-cdb =args[1]-at_cmnd.cdb_dl.sf.fcp_cmnd_cdb[0];
printf(%s(%x, %x, cdb_cmd %x)\n, probefunc, arg0, arg1, self-cdb);
}

It will never fire.

I have to add another 2 probes on top of it, then it
(fbt::isp_handle_platform_atio2:entry) will trace.
Even the 2 probes on top of it never fire.


I've seen a number of cases where entry fbt points fire but return fbt points 
don't; for example, in 8.x I've noticed that fbt::softclock:enter fires each 
time the softclock loop runs, even though the function is only entered once 
when the kernel thread starts, and that it never fires the return.  This 
suggests fbt may be putting the probe in the wrong spot, perhaps the beginning 
of the block where local variables are used rather than the beginning of the 
function itself.  I've reported this problem to John also.


Robert N M Watson
Computer Laboratory
University of Cambridge
___
freebsd-stable@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to freebsd-stable-unsubscr...@freebsd.org


Re: To John Birrell: weird behaviors of DTrace on amd64

2009-02-06 Thread Klapper Zhu
Hi Robert,

I rebuilt kernel with -fno-inline and I got all isp(4) functions listed in fbt.

I noticed that there are other inline related flags
--finline-limit=8000 -param inline-unit-growth=100  -Winline. should
I get rid of them OR -fno-inline
will just overide them ?

Thanks,

anyone has suggestion for problem 2 ?

On Fri, Feb 6, 2009 at 7:46 AM, Robert Watson rwat...@freebsd.org wrote:

 On Thu, 5 Feb 2009, Klapper Zhu wrote:

 I am exploring DTrace on 7.1-STABLE FreeBSD amd64 and I found several
 weird behaviors:

 1) Not all kernel functions show up in fbt provider. Take isp(4) as
 example:
  dtrace -l shows
  static void isp_freeze_loopdown(ispsoftc_t *, int, char *);
 ___but not___
  static void isp_handle_platform_atio2(ispsoftc_t *, at2_entry_t *);

  Both are static functions. But one shows up in fbt, another not.
  What's the rational behind it ? Any way to fix it ?

 Possibly gcc decided to inline one but not the other; you could try
 disabling inlining and see if the other function appears.  fbt is sensitive
 to a number of compiler choices, so generally if there's a long-term desire
 to trace at that point, we should add explicit trace points.  (Solaris makes
 similar recommendations -- that fbt is a useful but unstable interface).

 2) The symptom described below only shows in 64-bit platform (amd64).

 Here is the D Code:

 fbt::isp_handle_platform_atio2:entry
 {
 self-cdb =args[1]-at_cmnd.cdb_dl.sf.fcp_cmnd_cdb[0];
 printf(%s(%x, %x, cdb_cmd %x)\n, probefunc, arg0, arg1, self-cdb);
 }

 It will never fire.

 I have to add another 2 probes on top of it, then it
 (fbt::isp_handle_platform_atio2:entry) will trace.
 Even the 2 probes on top of it never fire.

 I've seen a number of cases where entry fbt points fire but return fbt
 points don't; for example, in 8.x I've noticed that fbt::softclock:enter
 fires each time the softclock loop runs, even though the function is only
 entered once when the kernel thread starts, and that it never fires the
 return.  This suggests fbt may be putting the probe in the wrong spot,
 perhaps the beginning of the block where local variables are used rather
 than the beginning of the function itself.  I've reported this problem to
 John also.

 Robert N M Watson
 Computer Laboratory
 University of Cambridge

___
freebsd-stable@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to freebsd-stable-unsubscr...@freebsd.org


To John Birrell: weird behaviors of DTrace on amd64

2009-02-05 Thread Klapper Zhu
Hi John Birrell,

I am exploring DTrace on 7.1-STABLE FreeBSD amd64 and I found several
weird behaviors:

1) Not all kernel functions show up in fbt provider. Take isp(4) as example:
   dtrace -l shows
   static void isp_freeze_loopdown(ispsoftc_t *, int, char *);
___but not___
   static void isp_handle_platform_atio2(ispsoftc_t *, at2_entry_t *);

   Both are static functions. But one shows up in fbt, another not.
   What's the rational behind it ? Any way to fix it ?

2) The symptom described below only shows in 64-bit platform (amd64).

 Here is the D Code:

 fbt::isp_handle_platform_atio2:entry
{
 self-cdb =args[1]-at_cmnd.cdb_dl.sf.fcp_cmnd_cdb[0];
 printf(%s(%x, %x, cdb_cmd %x)\n, probefunc, arg0, arg1, self-cdb);
}

It will never fire.

I have to add another 2 probes on top of it, then it
(fbt::isp_handle_platform_atio2:entry) will trace.
Even the 2 probes on top of it never fire.
---
dtrace:::BEGIN
{
tr = 0;
}
fbt:::entry
/tr == 1/
{
   @a[probefunc] = count();
}
fbt::isp_handle_platform_atio2:entry
{
 self-cdb =args[1]-at_cmnd.cdb_dl.sf.fcp_cmnd_cdb[0];
 printf(%s(%x, %x, cdb_cmd %x)\n, probefunc, arg0, arg1, self-cdb);
}

Thanks,

K. Zhu
___
freebsd-stable@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to freebsd-stable-unsubscr...@freebsd.org