All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: "Denis V. Lunev" <den@openvz.org>
Cc: qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 5/9] log: improve performance of qemu_log and qemu_log_mask if disabled
Date: Mon, 14 Mar 2016 15:30:43 +0100	[thread overview]
Message-ID: <56E6CB13.3020406@redhat.com> (raw)
In-Reply-To: <1457954501-26528-6-git-send-email-den@openvz.org>



On 14/03/2016 12:21, Denis V. Lunev wrote:
> The patch is intended to avoid to perform any operation including
> calculation of log function arguments when the log is not enabled due to
> various reasons.
> 
> Functions qemu_log and qemu_log_mask are replaced with variadic macros.
> 
> Format checking performed by compiler will not suffer by this patch. It
> will be done inside in fprintf arguments checking.

Have you encountered a place that was calling them so hard that it
caused performance problem?  If so, the logging should probably be
replaced by a tracepoint.

Paolo

> Signed-off-by: Denis V. Lunev <den@openvz.org>
> CC: Stefan Hajnoczi <stefanha@redhat.com>
> CC: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  include/qemu/log.h | 15 ++++++++++++---
>  util/log.c         | 21 ---------------------
>  2 files changed, 12 insertions(+), 24 deletions(-)
> 
> diff --git a/include/qemu/log.h b/include/qemu/log.h
> index 2c2c220..a05c7dc 100644
> --- a/include/qemu/log.h
> +++ b/include/qemu/log.h
> @@ -54,7 +54,12 @@ static inline bool qemu_loglevel_mask(int mask)
>  
>  /* main logging function
>   */
> -void GCC_FMT_ATTR(1, 2) qemu_log(const char *fmt, ...);
> +#define qemu_log(...)                          \
> +    do {                                       \
> +        if (qemu_log_enabled()) {              \
> +           fprintf(qemu_logfile, __VA_ARGS__); \
> +        }                                      \
> +    } while (0)
>  
>  /* vfprintf-like logging function
>   */
> @@ -68,8 +73,12 @@ qemu_log_vprintf(const char *fmt, va_list va)
>  
>  /* log only if a bit is set on the current loglevel mask
>   */
> -void GCC_FMT_ATTR(2, 3) qemu_log_mask(int mask, const char *fmt, ...);
> -
> +#define qemu_log_mask(mask, ...)                                \
> +    do {                                                        \
> +        if ((qemu_loglevel & (mask)) && qemu_log_enabled()) {   \
> +           fprintf(qemu_logfile, __VA_ARGS__);                  \
> +        }                                                       \
> +    } while (0)
>  
>  /* Maintenance: */
>  
> diff --git a/util/log.c b/util/log.c
> index df672cc..65d46e2 100644
> --- a/util/log.c
> +++ b/util/log.c
> @@ -27,27 +27,6 @@ FILE *qemu_logfile;
>  int qemu_loglevel;
>  static int log_append = 0;
>  
> -void qemu_log(const char *fmt, ...)
> -{
> -    va_list ap;
> -
> -    va_start(ap, fmt);
> -    if (qemu_logfile) {
> -        vfprintf(qemu_logfile, fmt, ap);
> -    }
> -    va_end(ap);
> -}
> -
> -void qemu_log_mask(int mask, const char *fmt, ...)
> -{
> -    va_list ap;
> -
> -    va_start(ap, fmt);
> -    if ((qemu_loglevel & mask) && qemu_logfile) {
> -        vfprintf(qemu_logfile, fmt, ap);
> -    }
> -    va_end(ap);
> -}
>  
>  /* enable or disable low levels log */
>  void do_qemu_set_log(int log_flags, bool use_own_buffers)
> 

  reply	other threads:[~2016-03-14 14:30 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-14 11:21 [Qemu-devel] [PATCH v2 0/9] log: assorted improvements Denis V. Lunev
2016-03-14 11:21 ` [Qemu-devel] [PATCH 1/9] trace: do not always call exit() in trace_enable_events Denis V. Lunev
2016-03-14 14:25   ` Paolo Bonzini
2016-03-14 11:21 ` [Qemu-devel] [PATCH 2/9] qemu-log: fix cpu_reset log target Denis V. Lunev
2016-03-14 14:24   ` Paolo Bonzini
2016-03-14 11:21 ` [Qemu-devel] [PATCH 3/9] log: improve code in do_qemu_set_log Denis V. Lunev
2016-03-14 14:28   ` Paolo Bonzini
2016-03-16 11:20     ` Denis V. Lunev
2016-03-16 11:25       ` Paolo Bonzini
2016-03-14 11:21 ` [Qemu-devel] [PATCH 4/9] log: move qemu_log_close/qemu_log_flush from header to log.c Denis V. Lunev
2016-03-14 14:29   ` Paolo Bonzini
2016-03-14 11:21 ` [Qemu-devel] [PATCH 5/9] log: improve performance of qemu_log and qemu_log_mask if disabled Denis V. Lunev
2016-03-14 14:30   ` Paolo Bonzini [this message]
2016-03-14 15:07     ` Denis V. Lunev
2016-03-14 11:21 ` [Qemu-devel] [PATCH 6/9] log: log QMP commands and replies Denis V. Lunev
2016-03-14 14:33   ` Paolo Bonzini
2016-03-14 14:38     ` Daniel P. Berrange
2016-03-14 15:00       ` Denis V. Lunev
2016-03-14 15:05       ` Denis V. Lunev
2016-03-14 15:26         ` Daniel P. Berrange
2016-03-14 16:10           ` Denis V. Lunev
2016-03-14 16:37             ` Paolo Bonzini
2016-03-14 16:11           ` Daniel P. Berrange
2016-03-14 16:16             ` Denis V. Lunev
2016-03-14 16:40               ` Paolo Bonzini
2016-03-16 13:09                 ` Denis V. Lunev
2016-03-16 13:11                   ` Paolo Bonzini
2016-03-17 15:31                     ` Daniel P. Berrange
2016-03-14 11:21 ` [Qemu-devel] [PATCH 7/9] log: report HMP command and event Denis V. Lunev
2016-03-14 14:36   ` Paolo Bonzini
2016-03-14 15:08     ` Denis V. Lunev
2016-03-14 16:35       ` Paolo Bonzini
2016-03-14 11:21 ` [Qemu-devel] [PATCH 8/9] log: report QAPI event Denis V. Lunev
2016-03-14 14:33   ` Paolo Bonzini
2016-03-14 11:21 ` [Qemu-devel] [PATCH 9/9] log: adds a timestamp to each log entry Denis V. Lunev
2016-03-14 14:39   ` Paolo Bonzini

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=56E6CB13.3020406@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=den@openvz.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.