Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Mar 2005 20:06:15 +1100 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        Jakub Kruszona-Zawadzki <acid@gemius.pl>
Cc:        freebsd-gnats-submit@freebsd.org
Subject:   Re: kern/78957: time counter per process stops (syscall: getrusage)
Message-ID:  <20050318194752.F1050@epsplex.bde.org>
In-Reply-To: <200503172047.j2HKlps4043804@www.freebsd.org>
References:  <200503172047.j2HKlps4043804@www.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 17 Mar 2005, Jakub Kruszona-Zawadzki wrote:

>> Description:
> When a process is running for a long time (several days) time counter per process stops on value:
> ru_utime.tv_sec:305221
> ru_utime.tv_usec:322735

This may be the same bug as in PR 76972.  Overflow occurs at about
48592008 ticks = 379625 seconds = 105 hours for a a process that consumes
100% of the CPU if the statclock frequency is 128 Hz (which is the default
and not easy to change).  There is another overflow bug at 2^32 ticks = 388
days.  This one is harder to fix.  See PR 76972 for details and a fix for
the first overflow bug.

37965 seconds is a little larger than 305221 seconds.  The difference might
be due to the other 70000+ seconds being in ru_stime.

The behaviour when overflow occurs is undefined, but stopping on a value
is quite likely to occur due to the algorithm for updating ru_*time.
Integer overflow tends to cause counters to reset to 0 (or INT_MIN),
but the kernel enforces monotonicity of the usage times, so they will
stick instead of going backwards to 0.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050318194752.F1050>