public inbox for util-linux@vger.kernel.org
 help / color / mirror / Atom feed
From: Karel Zak <kzak@redhat.com>
To: Sami Kerola <kerolasa@iki.fi>
Cc: util-linux@vger.kernel.org
Subject: Re: [PATCH 18/19] dmesg: more deterministic boot time detection
Date: Mon, 3 Jun 2013 11:35:04 +0200	[thread overview]
Message-ID: <20130603093504.GK30341@x2.net.home> (raw)
In-Reply-To: <1370195485-27907-19-git-send-email-kerolasa@iki.fi>

On Sun, Jun 02, 2013 at 06:51:24PM +0100, Sami Kerola wrote:
> diff --git a/include/pathnames.h b/include/pathnames.h
> index cc8a20b..84eabd4 100644
> --- a/include/pathnames.h
> +++ b/include/pathnames.h
> @@ -48,7 +48,8 @@
>  #define _PATH_SECURE		"/etc/securesingle"
>  #define _PATH_USERTTY           "/etc/usertty"
>  
> -/* used in login-utils/shutdown.c */
> +/* used in sys-utils/dmesg.c */
> +#define _PATH_PROC_PID1		"/proc/1"
>  
>  /* used in login-utils/setpwnam.h and login-utils/islocal.c */
>  #define _PATH_PASSWD		"/etc/passwd"
> diff --git a/sys-utils/dmesg.c b/sys-utils/dmesg.c
> index d80b3e9..da58c42 100644
> --- a/sys-utils/dmesg.c
> +++ b/sys-utils/dmesg.c
> @@ -34,6 +34,7 @@
>  #include "optutils.h"
>  #include "mangle.h"
>  #include "pager.h"
> +#include "pathnames.h"
>  
>  /* Close the log.  Currently a NOP. */
>  #define SYSLOG_ACTION_CLOSE          0
> @@ -141,7 +142,7 @@ struct dmesg_control {
>  
>  	struct timeval	lasttime;	/* last printed timestamp */
>  	struct tm	lasttm;		/* last localtime */
> -	time_t		boot_time;	/* system boot time */
> +	struct timeval	boot_time;	/* system boot time */
>  
>  	int		action;		/* SYSLOG_ACTION_* */
>  	int		method;		/* DMESG_METHOD_* */
> @@ -464,18 +465,17 @@ static int get_syslog_buffer_size(void)
>  	return n > 0 ? n : 0;
>  }
>  
> -static time_t get_boot_time(void)
> +static struct timeval get_boot_time(void)
>  {
> -	struct sysinfo info;
> -	struct timeval tv;
> +	struct stat st;
> +	struct timeval ret;
> +	memset(&ret, 0, sizeof(struct timeval));
>  
> -	if (sysinfo(&info) != 0)
> -		warn(_("sysinfo failed"));
> -	else if (gettimeofday(&tv, NULL) != 0)
> -		warn(_("gettimeofday failed"));
> +	if (stat(_PATH_PROC_PID1, &st))
> +		warn(_("stat failed %s"), _PATH_PROC_PID1);

Nice idea, but what about the delay between kernel boot and init
start -- in this time kernel already writes to the log.

Maybe we need to study systemd code, I guess they already have all the
information:

# systemd-analyze time
Startup finished in 11.306s (firmware) + 31ms (loader) + 864ms
(kernel) + 1.971s (initrd) + 52.068s (userspace) = 1min 6.243s

>  	else
> -		return tv.tv_sec -= info.uptime;
> -	return 0;
> +		ret.tv_sec = st.st_ctime;
> +	return ret;
>  }

 stat() usually provides nanoseconds resolution

#ifdef HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
     ret.tv_sec = st.st_ctime;
     ret.tv_usec = st.st_mtim.tv_nsec / 1000;
#endif

    Karel

-- 
 Karel Zak  <kzak@redhat.com>
 http://karelzak.blogspot.com

  reply	other threads:[~2013-06-03  9:35 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-02 17:51 [PATCH 00/19] pull: various clean ups and couple bug fixes Sami Kerola
2013-06-02 17:51 ` [PATCH 01/19] lib: remove unused code Sami Kerola
2013-06-02 17:51 ` [PATCH 02/19] lscpu: add max MHz value to make cpu governor effects more visible Sami Kerola
2013-06-02 17:51 ` [PATCH 03/19] docs: add lscpu max mhz to manual and bash completion Sami Kerola
2013-06-02 17:51 ` [PATCH 04/19] sfdisk: use libc error printing function, and symbolic exit values Sami Kerola
2013-06-07 10:20   ` Karel Zak
2013-06-02 17:51 ` [PATCH 05/19] sfdisk: clean up usage() functions Sami Kerola
2013-06-02 17:51 ` [PATCH 06/19] sfdisk: use program_invocation_short_name to determine program name Sami Kerola
2013-06-02 17:51 ` [PATCH 07/19] docs: correct sfdisk --activate instructions Sami Kerola
2013-06-02 17:51 ` [PATCH 08/19] sfdisk: remove --unhide and related functions Sami Kerola
2013-06-02 17:51 ` [PATCH 09/19] sfdisk: replace my_warn() with warnx() Sami Kerola
2013-06-02 17:51 ` [PATCH 10/19] rev: stop adding new line at the end when input does not have it Sami Kerola
2013-06-02 17:51 ` [PATCH 11/19] rev: simplify new line detection and impossible test Sami Kerola
2013-06-02 17:51 ` [PATCH 12/19] rev: reduce stream checking when closing read-only file descriptor Sami Kerola
2013-06-02 17:51 ` [PATCH 13/19] dmesg: make time format parsing to use enum bit field Sami Kerola
2013-06-03  8:45   ` Karel Zak
2013-06-02 17:51 ` [PATCH 14/19] dmesg: add --time-format option Sami Kerola
2013-06-02 17:51 ` [PATCH 15/19] dmesg: add iso-8601 time format Sami Kerola
2013-06-02 17:51 ` [PATCH 16/19] docs: add --time-format option and ISO-8601 format to manual Sami Kerola
2013-06-02 17:51 ` [PATCH 17/19] dmesg: make usage() a little bit shorter Sami Kerola
2013-06-03  8:56   ` Karel Zak
2013-06-02 17:51 ` [PATCH 18/19] dmesg: more deterministic boot time detection Sami Kerola
2013-06-03  9:35   ` Karel Zak [this message]
2013-06-02 17:51 ` [PATCH 19/19] cal: fix few type mismatches Sami Kerola
2013-06-07 10:28 ` [PATCH 00/19] pull: various clean ups and couple bug fixes Karel Zak
2013-06-07 15:45   ` Sami Kerola

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=20130603093504.GK30341@x2.net.home \
    --to=kzak@redhat.com \
    --cc=kerolasa@iki.fi \
    --cc=util-linux@vger.kernel.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