I'm not familiar with the reasoning for the current setup, but
pacemaker's crm_crit(), crm_error(), etc. use qb_logt(), while
crm_debug() and crm_trace() (which won't be used in ordinary runs) do
something similar to what you propose.

Pacemaker has about 1,700 logging calls that would be affected (not
counting another 2,000 debug/trace). Presumably that means Pacemaker
currently has about +16KB of memory overhead and binary size for
debug/trace logging static pointers, and that would almost double using
them for all logs. Not a big deal today? Or meaningful in an embedded
context?

Not sure if that overhead vs runtime trade-off is the original
motivation or not, but that's the first thing that comes to mind.

On Wed, 2019-01-16 at 16:20 +0100, Lars Ellenberg wrote:
> On Wed, Jan 16, 2019 at 03:44:22PM +0100, Lars Ellenberg wrote:
> > Back then when this "dynamic" logging was introduced,
> > I thought the whole point was that "quiet" callsites
> > are "cheap".
> > 
> > So I think you want to
> > qb_log_callsite_get() only *once* per callsite,
> > assign that to a static pointer (as you say in the commit message).
> > And do the actual qb_log_real_() function call
> > only conditionally based on if (cs->targets). 
> > 
> > That way, a disabled trace logging boils down to a
> > if (cs && cs->targets)
> >     ;
> > Much cheaper than what you have now.
> > 
> > Or was always calling into both qb_log_callsite_get() and
> > qb_log_real_()
> > intentional for some obscure (to me) reason,
> > even for disabled call sites?
> > 
> > Below I also added a test for (cs->tags & QB_LOG_TAG_LIBQB_MSG),
> > in case someone used qb_util_set_log_function().
> > If that special tag flag could be folded into cs->targets (e.g. bit
> > 0),
> > I'd like it even better.
> > 
> > Cheers,
> >     Lars
> > 
> > 
> > diff --git a/include/qb/qblog.h b/include/qb/qblog.h
> > index 1943b94..f63f4ad 100644
> 
> Oops, that patch was against *before* the 633f262 commit :-)
> and that's why I did not notice the clash in macro argument "tags"
> and struct member "tags" when compile testing...
> I forgot I jumped between checkouts :-(
> 
> anyways, the (now even make check testet)
> patch for *after* 633f262 commit:
> 
> diff --git a/include/qb/qblog.h b/include/qb/qblog.h
> index 31981b8..ae1d25c 100644
> --- a/include/qb/qblog.h
> +++ b/include/qb/qblog.h
> @@ -340,11 +340,17 @@ void qb_log_from_external_source_va(const char
> *function,
>   * @param fmt usual printf style format specifiers
>   * @param args usual printf style args
>   */
> -#define qb_logt(priority, tags, fmt, args...) do {   \
> -     struct qb_log_callsite* descriptor_pt =         \
> -     qb_log_callsite_get(__func__, __FILE__, fmt,    \
> -                         priority, __LINE__, tags);  \
> -     qb_log_real_(descriptor_pt, ##args);            \
> +#define qb_logt(priority, tags_, fmt, args...) do {          \
> +     static struct qb_log_callsite* descriptor_pt;           \
> +     if (!descriptor_pt) {                                   \
> +             descriptor_pt =                                 \
> +             qb_log_callsite_get(__func__, __FILE__, fmt,    \
> +                                 priority, __LINE__, tags_); \
> +     }                                                       \
> +     if (descriptor_pt && (descriptor_pt->targets ||         \
> +         qb_bit_set(descriptor_pt->tags,                     \
> +                 QB_LOG_TAG_LIBQB_MSG_BIT)))                 \
> +             qb_log_real_(descriptor_pt, ##args);            \
>      } while(0)
>  
> _______________________________________________
> Developers mailing list
> Developers@clusterlabs.org
> https://lists.clusterlabs.org/mailman/listinfo/developers
-- 
Ken Gaillot <kgail...@redhat.com>

_______________________________________________
Developers mailing list
Developers@clusterlabs.org
https://lists.clusterlabs.org/mailman/listinfo/developers

Reply via email to