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.
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 

Reply via email to