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
_______________________________________________
dtrace-discuss mailing list
[email protected]

Reply via email to