To John Birrell: weird behaviors of DTrace on amd64

From: Klapper Zhu <klapperzhu_at_gmail.com>
Date: Thu, 5 Feb 2009 11:31:52 -0500
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/
{
        _at_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,

Z. Zhu
Received on Thu Feb 05 2009 - 16:04:17 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:41 UTC