Jim Warner 22e6582974 top: protect against distortion when system time reset
If a system's time is adjusted backwards, then elapsed
time could appear as negative. This yielded a negative
%CPU value. Alternately if zeros were suppressed ('0')
the result was a blank %CPU column. In both cases that
distortion would last for one display cycle or until a
user forced a display refresh via some keyboard input.

The original recommendation was trading gettimeofday()
for clock_gettime() using CLOCK_MONOTONIC. But on some
systems that might not be possible, forcing the use of
CLOCK_REALTIME instead. Not only would that complicate
the build system, but it may leave us with minus %CPU.

Another approach was to ensure that elapsed time could
never be negative. Of course, this produced distortion
of %CPU values but it would be proportionally correct.
This wasn't dissimilar to a distortion already present
should the time be adjusted forward or backward within
any 'remaining' top delay intervals. These aberrations
would be avoided with clock_gettime & CLOCK_MONOTONIC,
but that is a less than ideal solution as noted above.

This final solution, which originated down under, will
simply rely on the /proc/uptime seconds, which will be
immune to *any* tampering with the system clock. Thus,
we now have a fix for the distortion we didn't know we
suffered plus a negative %CPU that began this odyssey.

Thanks to:
sk.alvin.x@gmail.com, for the original effort
jcapik@redhat.com, for a heads up on CLOCK_MONOTONIC
csmall-procps@enc.com.au, for the best suggestion of all

Reference(s):
. original post/patch
http://www.freelists.org/post/procps/PATCH-top-use-clock-gettime-instead-of-gettimeofday
. heads up on CLOCK_MONOTONIC
http://www.freelists.org/post/procps/PATCH-top-use-clock-gettime-instead-of-gettimeofday,2
. the final solution
http://www.freelists.org/post/procps/PATCH-top-use-clock-gettime-instead-of-gettimeofday,11

Signed-off-by: Jim Warner <james.warner@comcast.net>
2014-04-28 13:46:06 +02:00
2014-03-03 21:58:56 +11:00
2014-02-02 18:13:01 +11:00
2013-10-10 09:56:44 +11:00
2014-04-17 14:12:01 +07:00
2014-01-14 22:23:58 +11:00
2014-02-02 18:13:01 +11:00
2014-02-02 18:13:01 +11:00
2013-11-26 13:45:22 +01:00
2014-02-02 18:13:01 +11:00
2013-04-18 13:59:44 -04:00
2014-03-03 21:58:56 +11:00
2014-03-03 21:58:56 +11:00
2013-10-11 10:07:10 +11:00
2014-02-05 17:09:45 +01:00
w.1
2013-07-19 14:50:02 +02:00
w.c
2013-10-11 10:07:10 +11:00

COMPATIBILITY

    This code is intended for use with Linux 2.6.xx, 3.x and
    hopefully all future kernels.

INSTALLATION

    If you are using git version of the project you need extra step.

    ./autogen.sh

    After that, and everyone using .tar.xz version of procps-ng, can
    do normal build.  Read './configure --help' to select options for
    your needs.

    ./configure
    make
    make install

    If you have DejaGNU installed you can run optional test suite.

    make check

HOW TO CONTRIBUTE

    See Documentation/BUGS file.

PACKAGING

    If you are a downstream maintainer (packager) for a Linux
    distribution, please avoid causing troubles.  This section
    applies to you.

    Avoid maintaining distribution specific patches.  Send your
    patches to upstream, where they are at least reviewed, if not
    included.

    Please forward bug reports. If your bug database is public and
    busy enough to bother with, please make this known.  Follow
    Debian's lead in making the bug database easy to comment on via
    email without need for an account.

    For normal packages, ensure that you do not add debugging flags
    to the CFLAGS variable.

UPSTREAM & BUG REPORTS

    procps-ng <procps@freelists.org>
Description
Command line and full screen utilities for browsing procfs, a "pseudo" file system dynamically generated by Linux to provide information about the status of entries in its process table.
Readme 15 MiB
Languages
C 97.2%
Makefile 1%
Shell 0.9%
M4 0.9%