Hey James,

This is all working as intended.

As you know, a DTrace probe is identified by the four-tuple of provider,
module, function, and name. Two locations for a USDT probe will differ only
in the function components. This is true of is-enabled probes as well as
normal probes.

There are two things we could do to make the case you describe less confusing.
One is to indicate that a given probe is exclusively an is-enabled site. That
seems like a questionable practice, but I could imagine an implementation
where that arrangement might be the most logical.
The second thing we could do is have a mode for dtrace -l in which we only
listed the components of the probe that were relevant. For example, it's
unusual for a user to enable only _some_ SDT or USDT probes so in this mode
those would be coalesced into a single listing.

What do you think?

Adam

On Wed, Aug 13, 2008 at 03:03:44PM -0700, James McIlree wrote:
> 
>       I have a user that was adding some rather expensive probes to library  
> code.
> Their code ended up factoring in such a way that the main line code  
> had IS_ENABLED()
> tests guarding calls to another function that did the real work of  
> argument construction
> and calling the actual dtrace probe.
> 
>       Somewhat unusually, when run, dtrace reports multiple probes instead  
> of just one.
> 
>       I boiled the test case down into these two functions:
> 
> void functionA(int value) {
>       if (SIMPLE_MYSIMPLEPROBE_ENABLED()) {
>               printf("No probe called, but mySimpleProbe() is enabled\n");
>       }
> }
> 
> void functionB(int value) {
>       if (SIMPLE_MYSIMPLEPROBE_ENABLED()) {
>               SIMPLE_MYSIMPLEPROBE(value);
>       }
> }
> 
>       On both Solaris and OS X, when an app containing these functions is  
> run, dtrace
> reports:
> 
> /home/ovrskeek# dtrace -l -n "Simple*:::"
>     ID   PROVIDER            MODULE                          FUNCTION  
> NAME
>    512 Simple15950            simple                         functionB  
> mySimpleProbe
>    513 Simple15950            simple                         functionA  
> mySimpleProbe
> 
>       It seems to me like we're missing something here. If I have both an  
> is-enabled
> and a regular probe in the same function, dtrace reports finding one  
> probe. If I have
> either separately, dtrace reports finding one probe. Somehow, I'm  
> either losing a probe
> in the "both" case, or gaining one in the IS_ENABLED() only case.
> 
>       This is a bit confusing to consumers as well, consider the case of
> 
> /home/ovrskeek# dtrace -l -n "Simple*:::"
>     ID   PROVIDER            MODULE                          FUNCTION  
> NAME
>    512 Simple15950            simple                         functionB  
> mySimpleProbe
>    513 Simple15950            simple                         functionA  
> mySimpleProbe
> /home/ovrskeek# dtrace -n "Simple*::functionA:"
> dtrace: description 'Simple*::functionA:' matched 1 probe
> 
>       DTrace told me I had a probe in functionA, I *know* functionA is  
> being called, but
> no output?
> 
>       Of course, if we eliminate all IS_ENABLED probes, then they cannot be  
> used stand-alone.
> 
>       Darned if we do, darned if we don't :-).
> 
>       I'm thinking perhaps we need a visual clue that a given probe is is- 
> enabled only?
> 
>       Is there a better way to convey to consumers the type & number of  
> probes at a given point?
> It seem like there are usage scenarios where you need information that  
> isn't available (today)
> without inspecting the source.
> 
>       James M
> 
> _______________________________________________
> dtrace-discuss mailing list
> [email protected]

-- 
Adam Leventhal, Fishworks                     http://blogs.sun.com/ahl
_______________________________________________
dtrace-discuss mailing list
[email protected]

Reply via email to