https://github.com/apache/trafficserver/pull/7452

This PR changes TS API.  It introduces this new type:

typedef struct TSFDbgCtl_s {
  char volatile on; // Flag
  char const *tag;
} TSFDbgCtl;

And this function:

tsapi TSFDbgCtl const *TSFDbgCtlCreate(char const *tag);

And this new printf-like macro:

#define TSFDbg(ctlp, ...)

Where the first parameter is a pointer returned by TSFDbgCtlCreate(), the
second a printf format string, and the rest the parameters referenced the
format string.

In my performance test, enabling the new type of debug output resulted in a
10% reduction in requests per second handled, versus a 95% reduction due to
enabling the old type of debug output. (See
https://gist.github.com/ywkaras/4b0386341a4a6ce0afacaf46dcce79d6 )

If we decide to proceed with this, I think we have two options:


   1.  Proceed with the approach where enabling low-overhead debug output
   will only work for Debug()/TSFDbg calls that use a DbgCtl/TSDbgCtl instance
   rather than a simple tag string.  This would include adding doc changes and
   Au testing.
   2. Switch to an approach similar to what I used for testing.  Where
   Debug() calls and is_debug_tag_set() will (each) generate a hidden instance
   of DbgCtl.  I think I can also make TSDebug() generate a hidden pointer to
   TSFDbgCt.

Reply via email to