[dtrace-discuss] What am I missing in the dtrace script?

Brian D. Horn Brian.Horn at Sun.COM
Sat Jul 14 22:12:21 PDT 2007


Brian D. Horn wrote:
> Bart Smaalders wrote:
>> Brian D. Horn wrote:
>>> Wee Yeh Tan wrote:
>>>> On 7/13/07, Brian D. Horn <Brian.Horn at sun.com> wrote:
>>>>> Ok, then the question becomes "Where is documented that aggregates 
>>>>> are
>>>>> MP safe, but scalars are
>>>>> not MP safe?"
>>>> Hah... I sort of saw that coming.  I recall seeing this somewhere
>>>> though I cannot remember exactly where.  Didn't see it in Bryan's
>>>> DTrace gotchas.
>>>>
>>>> Does this warrant a bug against the documentation?  Perhaps a note in
>>>> the variables section saying that "Global variables are not MP safe."?
>>>>
>>> I don't know whether it is a bug or not yet.  I may have missed some
>>> piece of documentation or seen old documentation.  It also begs the
>>> question of "Why was it decided that scalars should not be MP safe?"
>>> (assuming that is was decided as such!).
>>
>> The question here isn't whether "scalaers are mt-safe", it's whether
>> or not the ++ and -- operators are atomic.
>>
>> Would you expect
>>
>> foo = foo + 1;
>>
>> to work safely?
>>
>> How about:
>>
>> bar = foo;
>>
>> foo = bar + 1;
>>
>> There's no implicit locking in DTrace.  Aggregations are specifically
>> designed to be safe, and are documented as such:

As far as what my expectations were, well... I wasn't sure.  I was aware 
that
some sort of locking would be required for that to work, so I asked someone
(without naming the "guilty") who I thought would know what the story was.
I was told that it should do the locking "appropriately".  I suspect that
what that person was thinking about was things like the args and
the return values (in fbt probes), but I'm guessing.  So, in short, I 
questioned
how it worked, asked and I allowed myself to be misled.
>>
>>> For performance-related questions, aggregated data is often more 
>> > useful than individual data points. DTrace provides several built-in
>>> aggregating functions. When an aggregating function is applied to 
>>> subsets of a collection of data, then applied again to the results 
>>> of the analysis of those subsets, the results are identical to the 
>>> results returned by the aggregating function when it is applied to 
>>> the collection as a whole.
>>>
>>> The DTrace facility stores a running count of data items for 
>>> aggregations. The aggregating functions store only the current 
>>> intermediate result and the new element that the function is being 
>>> applied to. The intermediate results are allocated on a per-CPU basis.
>>> Because this allocation scheme does not require locks, the 
>>> implementation is inherently scalable.
>
> Ah ha!  This statement was what I was looking for and not finding.
> I think a more clear statement should be in the documentation, but at 
> least there is something!
>
> Now, is in absolutely clear what *is* an aggregate?  I would think 
> that global dynamic arrays
> are not, correct?
>>
>>
>>
>
>



More information about the dtrace-discuss mailing list