Date: Fri, 18 Mar 2005 09:10:04 GMT From: Bruce Evans <bde@zeta.org.au> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/78957: time counter per process stops (syscall: getrusage) Message-ID: <200503180910.j2I9A4kN025659@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/78957; it has been noted by GNATS. From: Bruce Evans <bde@zeta.org.au> To: Jakub Kruszona-Zawadzki <acid@gemius.pl> Cc: freebsd-gnats-submit@freebsd.org, freebsd-bugs@freebsd.org Subject: Re: kern/78957: time counter per process stops (syscall: getrusage) Date: Fri, 18 Mar 2005 20:06:15 +1100 (EST) 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?200503180910.j2I9A4kN025659>