[CRIU] Re: [PATCH] log: Add relative timestamp before each log line

Andrey Wagin avagin at gmail.com
Wed Oct 3 03:07:50 EDT 2012


2012/10/3 Pavel Emelyanov <xemul at parallels.com>:
> I find this handy. Do you have any objections?
>
> Andrey, you didn't want to call getpid() on each log message, is

getpid() doesn't do syscall each time, so you can remove all this logic.

> gettimeofday() OK from your POV?

My POV has not any objection against that;).

Acked-by: Andrew Vagin <avagin at openvz.org>

A few minor comments are inline
>
> Signed-off-by: Pavel Emelyanov <xemul at parallels.com>
>
> ---
>
> diff --git a/log.c b/log.c
> index d9a36f1..8fe3429 100644
> --- a/log.c
> +++ b/log.c
> @@ -27,6 +27,37 @@ static int logdir = -1;
>  static char buffer[PAGE_SIZE];
>  static char buf_off = 0;
>
> +static struct timeval start;
> +/*
> + * Manual buf len as sprintf will _always_ put '\0' at the
> + * and, but we want a "constant" pid to be there on restore
> + */
> +#define TS_BUF_OFF     12
> +
> +static void timediff(struct timeval *from, struct timeval *to)
> +{
> +       to->tv_sec -= from->tv_sec;
> +       if (to->tv_usec >= from->tv_usec)
> +               to->tv_usec -= from->tv_usec;
> +       else {
> +               to->tv_sec--;
> +               to->tv_usec += 1000000 - from->tv_usec;
> +       }
> +}
> +
> +static void print_ts(void)
> +{
> +       struct timeval t;
> +
> +       gettimeofday(&t, NULL);
> +       timediff(&start, &t);
> +       snprintf(buffer, 12,
> +                       "(%02u.%06u)", (unsigned)t.tv_sec, (unsigned)t.tv_usec);

Could we use TS_BUF_OFF instead of 12?
I think we should check that snprintf returns  TS_BUF_OFF, otherwise
the next line will be useless.

> +       buffer[TS_BUF_OFF - 1] = ' '; /* kill the '\0' produced by snprintf */
> +}
> +
> +
> +
>  int log_get_fd(void)
>  {
>         return current_logfd;
> @@ -36,6 +67,9 @@ int log_init(const char *output)
>  {
>         int new_logfd, sfd, dfd;
>
> +       gettimeofday(&start, NULL);
> +       buf_off = TS_BUF_OFF;
> +
>         dfd = get_service_fd(LOG_DIR_FD_OFF);
>         if (dfd < 0) {
>                 pr_msg("Can't obtain logfd");
> @@ -96,8 +130,15 @@ int log_init_by_pid(void)
>  {
>         char path[PATH_MAX];
>
> +       /*
> +        * reset buf_off as this fn is called on each fork while
> +        * restoring process tree
> +        */
> +
> +       buf_off = TS_BUF_OFF;
> +
>         if (!opts.log_file_per_pid) {
> -               buf_off = snprintf(buffer, PAGE_SIZE, "%6d: ", getpid());
> +               buf_off += snprintf(buffer + buf_off, PAGE_SIZE - buf_off, "%6d: ", getpid());
>                 return 0;
>         }
>
> @@ -148,6 +189,8 @@ void print_on_level(unsigned int loglevel, const char *format, ...)
>                 fd = current_logfd;
>         }
>
> +       print_ts();
> +
>         va_start(params, format);
>         size = vsnprintf(buffer + buf_off, PAGE_SIZE - buf_off, format, params);
>         va_end(params);


More information about the CRIU mailing list