Since I'm still relatively new to this application, there are limits to
what I can take on on my own initiative.  I don't see how anything I've
proposed would interfere with any higher-priority work.

On Wed, Jun 12, 2019 at 12:41 PM Leif Hedstrom <zw...@apache.org> wrote:

> Also, I’d like to reiterate my call to arms on v9.0.0:
>
>    Please, everyone lets focus on the things that are critical to ATS
> v9.0.0 readiness!
>
>
> This includes:
>
>         1) Fixing all the critical bugs (and there’s a lot of them)
>
>         2) Testing “master"
>
>         3) Doing the incompatible changes that needs to be done before we
> can release
>
>         4) Removing features that we do not want to support for the next
> 3+ years
>
>         5) Make sure that v9.0.0 has the functionality that you
> *absolutely* need to be able
>         to use it
>
>
> I kinda feel that several of these recent proposal do not fit into this,
> and in fact, are a fair amount of distraction. I urge everyone to not go
> down this route until we’ve got v9.0.0 stable and functional, and instead
> focus on the v9.0.0 tasks at hand.  I don’t think this one for example fits
> into any of those 5 points above.
>
> My $.01.
>
> — Leif
>
> P.s
>    https://github.com/apache/trafficserver/issues/5457
>
>
> > On Jun 12, 2019, at 11:30 AM, Walt Karas <wka...@verizonmedia.com.INVALID>
> wrote:
> >
> > I would guess the performance increase would be well under 1%.  But it's
> a
> > fairly simple change.  The biggest performance increase I think would
> come
> > from avoiding a PCRE match, to see if the specific debug tag was enabled.
> > For some TSDebug calls, there can be many arguments to push, and perhaps
> a
> > fair amount of calculation to generate the correct arguments.
> >
> > On Wed, Jun 12, 2019 at 12:21 PM Bryan Call <bc...@apache.org> wrote:
> >
> >> I am surprised you are seeing this as a performance issue.  Looking at
> the
> >> code it looks like 1 function call and a couple pointer dereferences.
> >>
> >> If you wanted to speed up TSDebug and make the code harder to maintain
> you
> >> could create a structure that looks like like DiagsConfig in ts.h and
> then
> >> set a pointer used in the API to look at the gobal DiagsConfig.  Then
> you
> >> could have a macro that would do basically what on() does.  This would
> >> bypass a function call and would have 1 more pointer dereference than
> your
> >> example.
> >>
> >> -Bryan
> >>
> >>
> >>> On Jun 12, 2019, at 10:00 AM, Walt Karas <wka...@verizonmedia.com
> .INVALID>
> >> wrote:
> >>>
> >>> 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.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>
> >>>>>>
> >>>>
> >>>>
> >>
> >>
>
>

Reply via email to