cvs commit: src/usr.bin/vmstat vmstat.c src/usr.bin/w w.c

Poul-Henning Kamp phk at phk.freebsd.dk
Tue Oct 18 00:30:02 PDT 2005


In message <20051018135821.L93164 at delplex.bde.org>, Bruce Evans writes:

>This is bogus, and it breaks vmstat some more in the dead kernel case.
>
>In the live kernel case, clock_gettime() returns the time since an
>unspecified point in the past.  It is still necessary to subtract the
>boottime, one measured by the same clock, especially under systems
>like FreeBSD where the "unspecified point in the past" is undocumented.

The unspecified point in the past is actually the exact time the kernel
booted and therefore clock_gettime(CLOCK_MONOTONIC) does the right thing
for a running kernel.

>I don't know of any good way to determine the uptime of a dead kernel
>now.

It is available in an internal variable in the timecounter code.  If
desired it can be exported to a visible variable once per second.

>The death time for a dead kernel should be saved in a variable near its
>boottime variable so that utilities like vmstat can determine it easily.

That's another option.

Let me know which is preferable.

>For live kernels, subtracting the boot time from the current _real_
>time using difftime() is the correct method.

Actually it isn't, but it comes close.  CLOCK_MONOTONIC is the true
elapsed time since boot, whereas boottime is our retrospective UTC
estimate of that moment.

-- 
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
phk at FreeBSD.ORG         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe    
Never attribute to malice what can adequately be explained by incompetence.


More information about the cvs-all mailing list