What do you mean by "exposing diags"? On Wed, Jun 12, 2019 at 11:50 AM Bryan Call <bc...@apache.org> wrote:
> I would rather see TSDebug be optimized and exposing diags instead of > creating a new type of debug. > > -Bryan > > > > On Jun 12, 2019, at 9:44 AM, Walt Karas <wka...@verizonmedia.com.INVALID> > wrote: > > > > I don't believe so. The issue I'm trying to address is that there is > still > > significant execution time overhead for debug output calls when > > proxy.config.diags.debug.enabled is 0. This change would make the > > execution time overhead negligible (if TSFastDbg is used or TSDebug is > > changed to be like the proposed TSFastDbg). Another way of putting it > is, > > I want to clean up the existing TSDEBUG alternative to TSDebug. > > > > On Wed, Jun 12, 2019 at 11:31 AM Bryan Call <bc...@apache.org> wrote: > > > >> How would this be controlled on the command line when running > >> trafic_server -T? > >> > >> It looks like it is a departure from how debug tags and controlled now. > >> > >> -Bryan > >> > >> > >>> On Jun 11, 2019, at 1:21 PM, Walt Karas <wka...@verizonmedia.com > .INVALID> > >> wrote: > >>> > >>> Any +1's for simply replacing TSDebug with the proposed TSFastDbg ? > >>> > >>> On Mon, Apr 8, 2019 at 6:20 PM Leif Hedstrom <zw...@apache.org> wrote: > >>> > >>>> > >>>> > >>>> On Apr 4, 2019, at 8:05 AM, Walt Karas <wka...@verizonmedia.com > >> .INVALID> > >>>> wrote: > >>>> > >>>> Because senility. probably "on" should be a non-pointer of type const > >>>> volatile char, and InkAPI in the core can just keep a pointer to the > >> whole > >>>> structure for updating. > >>>> > >>>> But I'm leaning more to fixing up the capability that already kinda > >> there. > >>>> Which is optimizimg only for the case when all debug output is > disabled. > >>>> Especially since maybe zwoop would be on my side for once :o) . > >>>> > >>>> > >>>> > >>>> My bad, whatever Walt said, I take the opposite stance. > >>>> > >>>> — leif > >>>> > >>>> P.s > >>>> J/K! > >>>> > >>>> > >>>> On Thu, Apr 4, 2019 at 8:51 AM Alan Carroll > >>>> <solidwallofc...@verizonmedia.com.invalid> wrote: > >>>> > >>>> This could enable a significant speed up for debug tags. One point is > >> that > >>>> when the debug tag string is set, at that point the debug objects > could > >> be > >>>> updated to the correct state according to the debug tag string, rather > >> than > >>>> checking it every time a debug message is logged. > >>>> > >>>> I have to ask, why is there a pointer to the enable flag, instead of > >> just > >>>> the enable flag? Your logic doesn't even check that flag, it checks > >> whether > >>>> the pointer is null. > >>>> > >>>> On Wed, Apr 3, 2019 at 11:52 AM Leif Hedstrom <zw...@apache.org> > wrote: > >>>> > >>>> > >>>> > >>>> On Apr 3, 2019, at 10:47 AM, Walt Karas <wka...@verizonmedia.com > >>>> > >>>> .INVALID> > >>>> > >>>> wrote: > >>>> > >>>> > >>>> It looks like the TS API already has less granular version of this: > >>>> > >>>> extern int diags_on_for_plugins; > >>>> > >>>> #define TSDEBUG \ > >>>> > >>>> if (diags_on_for_plugins) \ > >>>> > >>>> TSDebug > >>>> > >>>> > >>>> A problem with this is if you write: > >>>> > >>>> > >>>> if (flag) > >>>> > >>>> TSDEBUG(yadayada); > >>>> > >>>> else > >>>> > >>>> do_something(); > >>>> > >>>> > >>>> then the else will be associated with the if hidden in the macro. I'd > >>>> prefer to change to something like: > >>>> > >>>> > >>>> extern const volatile char TS_detail_dbg_output_enabled; > >>>> > >>>> > >>>> #define TSFastDbg(_TAG, ...) \ > >>>> do { \ > >>>> if (TS_detail_dbg_output_enabled) \ > >>>> TSDebug(_TAG, __VA_ARGS__); \ > >>>> > >>>> } while(0) > >>>> > >>>> > >>>> Yeh, that kinda sounds like a bug, doesn’t it? > >>>> > >>>> > >>>> The negative is that we'd only see the benefit when all debug output > >>>> > >>>> was > >>>> > >>>> disabled. But, in any case, that is the main benefit, to avoid > impacts > >>>> during normal operation. > >>>> > >>>> > >>>> Right, we should always optimize for the common cases, obviously. When > >>>> there’s a decision to make, where you can either make it “equally” > >>>> expensive always, or more expensive in a rare case, but cheaper in the > >>>> common case, we should likely chose the latter. > >>>> > >>>> > >>>> > >>>> > >>>> Looking in src/tscore/Diags.cc, it looks like the debug enable flag is > >>>> > >>>> only > >>>> > >>>> set at startup time. So we wouldn't be able to enable TSFastDbg using > >>>> traffic_cntl without adding complexity. > >>>> > >>>> On Tue, Apr 2, 2019 at 5:48 PM Walt Karas <wka...@verizonmedia.com> > >>>> > >>>> wrote: > >>>> > >>>> > >>>> Add this new structure to apidefs.h: > >>>> > >>>> typedef struct TSFastDbgCntl_ > >>>> { > >>>> const char * const tag; // nul-terminated string > >>>> const volatile char * const on; // pointer to 1-byte flag > >>>> } > >>>> TSFastDbgCntl; > >>>> > >>>> Add this new API function, that returns a pointer to an instance of > >>>> > >>>> the > >>>> > >>>> above structure: > >>>> > >>>> TSFastDbgCntl * TSCreateFastDbgCntl(const char *tag); > >>>> > >>>> Add this macro, which would be used in place of direct use of > >>>> > >>>> TSDebug(). > >>>> > >>>> > >>>> #define TSFastDbg(_FD_CNTL, ...) \ > >>>> do { \ > >>>> if ((_FD_CNTL)->on) \ > >>>> TSDebug((_FD_CNTL)->tag, __VA_ARGS__); \ > >>>> } while(0) > >>>> > >>>> The first parameter to TSFastDbg() is a pointer that was returned by > >>>> TSCreateFastDbgCntl(). The remaining parameters are printf parameters > >>>> (format string and values matching format specifiers). The core would > >>>> > >>>> be > >>>> > >>>> responsible for changing the value of the 'on' fields in the > >>>> > >>>> TSFastDbgCntl > >>>> > >>>> instances. For direct calls to TSDebug(), even if the tag is > >>>> > >>>> disabled, > >>>> > >>>> all > >>>> > >>>> the parameters have to be prepared and pushed onto the stack. As was > >>>> discussed in IRC, you have to feel guilty about doing converting a > >>>> string_view to a string and outputting it with c_str(). Because the > >>>> > >>>> code > >>>> > >>>> to do this will be executed even if the debug tag is disabled. > >>>> Furthermore, for each call to TSDebug, it's necessary to do an > >>>> > >>>> associative > >>>> > >>>> lookup on the tag string to determine that output for the tag is > >>>> > >>>> disabled. > >>>> > >>>> > >>>> We would want to put equivalent capabilities in Diags.h in the core > >>>> > >>>> for > >>>> > >>>> debug output. The implementation is non-trivial, but I think it would > >>>> > >>>> take > >>>> > >>>> at most a week including the Au test additions. > >>>> > >>>> I looked at making TSFastDbg() an inline function rather than a macro: > >>>> https://godbolt.org/z/IfVbBk > >>>> The opitimization works well if you compile the code with the inline > >>>> function as C, but the optimization is poor if you compile it as C++. > >>>> > >>>> This > >>>> > >>>> difference exists for both gcc and clang. It's weird. > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >> > >> > >