_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