_logsys_log_printf should duplicate the code in logsys_log_vprintf and
not call logsys_log_vprintf directly.  This api is called hundreds of
thousands of times in a 1-2 minute run and as is can consume 1.5% of the
cpu utilization.  I don't want to make it worse.

Regards
-steve
  


On Thu, 2009-04-23 at 11:28 +0200, Jan Friesse wrote:
> Patch based on top of r2125.
> 
> Performance impact should be one more call (shouldn't be so bad).
> 
> Regards,
>   Honza
> 
> Steven Dake wrote:
> > I can't tell, but it looks like this could have some performance impact.
> > 
> > Can you rework this patch on top of Fabio's logsys rework patch and
> > possibly introduce a new internal but externally exported api that does
> > the job for this special case without sprintfing in all cases or parsing
> > the va args list in all cases (except when a va list is specified)?
> > 
> > Regards
> > -steve
> > 
> > On Tue, 2009-03-31 at 17:04 +0200, Jan Friesse wrote:
> >> Attached patch solves problem with ipc_log_printf, which calls
> >> _logsys_log_printf. Arguments for this function was va_list, so logged
> >> information was va_list address, instead of "what user wants".
> >>
> >> Solution is based on adding new function _logsys_log_vprintf, which
> >> takes va_list as argument. Old _logsys_log_printf is implemented by new
> >> _logsys_log_vprintf (no code duplication).
> >>
> >> Another problem which patch fixing is, that old logsys_log_printf used
> >> vsprintf to static allocated buffer. This could cause buffer owerflow,
> >> so vsnprintf is used now.
> >>
> >>
> >> plain text document attachment (logsys_log_vprintf.patch)
> >> Index: include/corosync/engine/logsys.h
> >> ===================================================================
> >> --- include/corosync/engine/logsys.h       (revision 1974)
> >> +++ include/corosync/engine/logsys.h       (working copy)
> >> @@ -155,6 +155,15 @@
> >>    const char *format,
> >>    ...) __attribute__((format(printf, 6, 7)));
> >>  
> >> +extern void _logsys_log_vprintf (
> >> +  int subsys,
> >> +  const char *function_name,
> >> +  const char *file_name,
> >> +  int file_line,
> >> +  unsigned int level,
> >> +  const char *format,
> >> +  va_list ap) __attribute__((format(printf,6,0)));
> >> +
> >>  extern void _logsys_log_rec (
> >>    int subsys,
> >>    const char *function_name,
> >> Index: exec/logsys.c
> >> ===================================================================
> >> --- exec/logsys.c  (revision 1974)
> >> +++ exec/logsys.c  (working copy)
> >> @@ -795,18 +795,17 @@
> >>    records_written++;
> >>  }
> >>  
> >> -void _logsys_log_printf (
> >> +void _logsys_log_vprintf (
> >>          int subsys,
> >>          const char *function_name,
> >>          const char *file_name,
> >>          int file_line,
> >>          unsigned int level,
> >>          const char *format,
> >> -        ...)
> >> +  va_list ap)
> >>  {
> >>    char logsys_print_buffer[COMBINE_BUFFER_SIZE];
> >>    unsigned int len;
> >> -  va_list ap;
> >>  
> >>    if (logsys_mode & LOG_MODE_NOSUBSYS) {
> >>            subsys = 0;
> >> @@ -814,9 +813,8 @@
> >>    if (level > logsys_loggers[subsys].priority) {
> >>            return;
> >>    }
> >> -  va_start (ap, format);
> >> -  len = vsprintf (logsys_print_buffer, format, ap);
> >> -  va_end (ap);
> >> +  len = vsnprintf (logsys_print_buffer, COMBINE_BUFFER_SIZE, format, ap);
> >> +
> >>    if (logsys_print_buffer[len - 1] == '\n') {
> >>            logsys_print_buffer[len - 1] = '\0';
> >>            len -= 1;
> >> @@ -849,6 +847,22 @@
> >>    }
> >>  }
> >>  
> >> +void _logsys_log_printf (
> >> +  int subsys,
> >> +  const char *function_name,
> >> +  const char *file_name,
> >> +  int file_line,
> >> +  unsigned int level,
> >> +  const char *format,
> >> +  ...)
> >> +{
> >> +  va_list ap;
> >> +
> >> +  va_start (ap, format);
> >> +  _logsys_log_vprintf(subsys, function_name, file_name, file_line, level, 
> >> format, ap);
> >> +  va_end (ap);
> >> +}
> >> +
> >>  /*
> >>   * External Configuration and Initialization API
> >>   */
> >> Index: exec/main.c
> >> ===================================================================
> >> --- exec/main.c    (revision 1974)
> >> +++ exec/main.c    (working copy)
> >> @@ -601,7 +601,7 @@
> >>  
> >>          va_start (ap, format);
> >>    
> >> -       _logsys_log_printf (ipc_subsys_id, __FUNCTION__,   
> >> +  _logsys_log_vprintf (ipc_subsys_id, __FUNCTION__,       
> >>                  __FILE__, __LINE__, LOG_LEVEL_ERROR, format, ap);
> >>  
> >>          va_end (ap);
> >> _______________________________________________
> >> Openais mailing list
> >> [email protected]
> >> https://lists.linux-foundation.org/mailman/listinfo/openais
> > 
> 

_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to