Just as a follow up, it appears that calling speculate with a value
that does not represent a currently active speculation buffer
terminates the current probe clause. No error, just ends the clause at
that point.
Brian Utterback wrote:> After my last foray into speculations while diagnosing a hang, I
> decided to write up some things I learned. While checking these things
> some more, I did a couple of test programs and discovered some really
> weird things. I wanted to ask if what I am seeing is normal or not.
>
> Here are some things I discovered:
>
> 1. Speculation variables are just integers, nothing special about
> them. Zeroing the variable as in the common commit or discard idiom
> just resets it to zero so that you can test whether a speculation is
> available in the boolean to a probe.
>
> 2. Speculation buffers are "per cpu". This is documented in the
user''s
> guide but is easy to miss. A commit will copy each cpu''s
speculation
> buffer to the output, but this is done over a short period of time,
> not instantly, starting with the speculation buffer that the commit is
> running on. If you do a commit in an END clause, you will only get the
> speculation buffer from that cpu and none of the others, since DTrace
> exits before doing the others (CR 6714341).
>
> 3. As you might expect, you cannot speculate on a buffer before it has
> done a speculation call on that buffer, nor can you speculate on one
> after a commit or discard until a new speculation call.
>
> 4. Calling speculate with a number that is not a currently valid
> speculation buffer number seems to have no ill effects, except for one
> odd thing:
>
> 5. Did I say that speculation variables are not special? Well, they
> are not, except in a clause after a speculation, if the variable does
> not designate a valid speculation buffer. In that case the variable
> cannot be changed. If you increment it, or reassign it, it has no
> effect. You exit the clause with the variable having the same value as
> when speculate was called. This seems really weird to me, since this
> is not the case if the variable specifies a valid buffer.
>
> Any comments?
--
blu
There are two rules in life:
Rule 1- Don''t tell people everything you know
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom