public inbox for linux-rdma@vger.kernel.org
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
To: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Cc: Tatyana Nikolova
	<tatyana.e.nikolova-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	e1000-rdma-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: Re: [PATCH RFC rdma-core 1/3] util: Add common code for provider debug
Date: Wed, 18 Jan 2017 11:44:11 -0700	[thread overview]
Message-ID: <20170118184411.GA5020@obsidianresearch.com> (raw)
In-Reply-To: <20170118183104.GH32481-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>

On Wed, Jan 18, 2017 at 08:31:04PM +0200, Leon Romanovsky wrote:
> On Wed, Jan 18, 2017 at 09:44:44AM -0700, Jason Gunthorpe wrote:
> > On Wed, Jan 18, 2017 at 07:31:30AM +0200, Leon Romanovsky wrote:
> > > > +#define PRINT_ERR(fmt, ...)								\
> > > > +do {											\
> > > > +	fprintf(stderr, "[%s:%d]" fmt, __func__, __LINE__, ##__VA_ARGS__);		\
> > > > +} while (0)
> > > > +
> > > > +#define PRINT_DBG(dbg_mask, dbg_level, fmt, ...)					\
> > > > +do {											\
> > > > +	if ((rdma_dbg_mask & dbg_mask) && (rdma_dbg_level >= dbg_level))		\
> > > > +		fprintf(stderr, "[%s:%d]" fmt, __func__, __LINE__, ##__VA_ARGS__);	\
> > > > +} while (0)
> > > > +
> > > > +#define LOG_DBG(dbg_fp, dbg_mask, dbg_level, fmt, ...)					\
> > > > +do {											\
> > > > +	if ((rdma_dbg_mask & dbg_mask) && (rdma_dbg_level >= dbg_level))		\
> > > > +		fprintf(dbg_fp, "[%s:%d]" fmt, __func__, __LINE__, ##__VA_ARGS__);	\
> > > > +} while (0)
> > > > +
> > > > +#define LOG_DBG_FLUSH(dbg_fp, dbg_mask, dbg_level, fmt, ...)				\
> > > > +do {											\
> > > > +		LOG_DBG(dbg_fp, dbg_mask, dbg_level, fmt, ##__VA_ARGS__);		\
> > > > +		if (dbg_fp != stderr)							\
> > > > +			fflush(dbg_fp);							\
> > > > +} while (0)
> > >
> > > IMHO, these macros should be inline functions, and better to avoid global variables.
> >
> > It is more expensive at the call site to inline something that calls
> > via va_args than via ..., so these should remain as macros.
> 
> These macros/functions need to be compiled in for DEBUG mode only, in
> such case you can pay extra CPU cycles.

One of the reasonable ways to use this is to always compile in *error
case* debug prints, as these are intrinsically on the slow error path
already - however for that use we certainly want to minimize icache
consumption at the call site.

If we don't want to micro-optimize the DEBUG enabled case then I
recommend this approach for the macro:

#define LOG_DBG(dbg_fp, dbg_mask, dbg_level, fmt, ...)
    ({
      static const struct verbs_log_loc loc = {
       .dbg_mask = dbg_mask,
       .dbg_level = dbg_level,
       .fmt = fmt,
       .line = __LINE__,
       .func = __func__ };
    __check_fmt_args(fmt, ## __VA_ARGS__);
    verbs_log_dbg(dbg_fp, &loc, ## __VA_ARGS__);
   })

verbs_log_dbg would be implemented out of line.

That has the lowest call-site icache overhead as most of the required
data is pushed into the .rodata pointer (instead of in .text) and we
can continue to use the register calling convention for the va_args.

We can probably also eliminate dbg_fp as an argument, there is no
reason to have the providers store that, IHMO.

Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2017-01-18 18:44 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-17 19:46 [PATCH RFC rdma-core 1/3] util: Add common code for provider debug Tatyana Nikolova
     [not found] ` <1484682413-56580-1-git-send-email-tatyana.e.nikolova-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-01-17 20:47   ` Jason Gunthorpe
2017-01-18  5:31   ` Leon Romanovsky
     [not found]     ` <20170118053130.GS32481-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-01-18 16:44       ` Jason Gunthorpe
     [not found]         ` <20170118164444.GA14198-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-01-18 18:31           ` Leon Romanovsky
     [not found]             ` <20170118183104.GH32481-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-01-18 18:44               ` Jason Gunthorpe [this message]
     [not found]                 ` <20170118184411.GA5020-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-01-19  8:09                   ` Leon Romanovsky
     [not found]                     ` <20170119080924.GM32481-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-01-19 17:58                       ` Jason Gunthorpe
     [not found]                         ` <20170119175838.GC8109-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-01-22  8:11                           ` Leon Romanovsky
2017-01-18 15:41   ` Yishai Hadas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170118184411.GA5020@obsidianresearch.com \
    --to=jgunthorpe-epgobjl8dl3ta4ec/59zmfatqe2ktcn/@public.gmane.org \
    --cc=dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=e1000-rdma-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
    --cc=leonro-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=tatyana.e.nikolova-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox