[dtrace-discuss] DTrace interference

James Litchfield jlitchfield2 at netscape.net
Thu Jun 7 12:57:05 PDT 2007


I'm trying to figure out why, on rare occasions, this code (slightly simplified) takes much longer (6x) than expected:

gethrtime()
mutex_tryenter(&foo)
cv_signal(&cv)< br>mutex_exit(&foo)
gethrtime()

This is a "high-level" soft interrupt handler (IPL 6)

I use a version of this d script:

#pragma D option cleanrate=200hz
#pragma D option nspec=10
#pragma D option specsize=16M
#pragma D option bufsize=16M
::func:entry
{
       self->spec = speculate();
       self->ts = timestamp;
}
::func:return
/self->spec & ((timestamp - self->ts) > $1)/
{
           commit(self->spec);
           self->spec = 0;
}
::func:return
/self->spec & ((timestamp - self->ts) <= $1)/
{
        discard(self->spec);
        self->spec = 0;
}
:::entry,
:::return
/self->spec/
{
}

I generated a baseline profile without the speculations
to see what the behavior is normally and then added in the 
speculations and limits.

When this fires, I see this additional output, interspersed
at different places:

do_interrupt
    tlb_service (in and out)
    apic_intr_enter(in and out)
    hilevel_intr_prolog( in and out)
        the new pil is 15 and the oldpil is either 6 or 11
do_interrupt return

The CPU this is running on is in a single CPU processor set and
has interrupts turned off.

The questions is whether this is dtrace internal stuff I'm seeing 
or if it's a symptom of something else.
--
This message posted from opensolaris.org


More information about the dtrace-discuss mailing list