Re: Still seeing "calcru: runtime went backwards" messages

From: John Baldwin <jhb_at_freebsd.org>
Date: Wed, 1 Mar 2006 13:57:10 -0500
On Wednesday 01 March 2006 13:26, Mike Jakubik wrote:
> FYI, I just did a fresh cvsup and buildworld yesterday night, and i am 
> still getting the clacru messages:
> 
> Mar  1 02:41:37 fbsd kernel: calcru: runtime went backwards from 32465 
> usec to 32464 usec for pid 490 (sh)
> Mar  1 02:41:37 fbsd kernel: u 0:0/0 s 1:32465/32464 i 0:0/0
> Mar  1 02:41:37 fbsd kernel: calcru: runtime went backwards from 17198 
> usec to 17197 usec for pid 318 (devd)
> Mar  1 02:41:37 fbsd kernel: u 0:0/0 s 2:17198/17197 i 0:0/0
> Mar  1 02:45:45 fbsd kernel: calcru: runtime went backwards from 3403872 
> usec to 3403870 usec for pid 722 (perl5.8.8)
> Mar  1 02:45:45 fbsd kernel: u 367:2852102/2852101 s 71:551769/551768 i 
> 0:1/1
> Mar  1 02:45:45 fbsd kernel: calcru: runtime went backwards from 5135265 
> usec to 5135263 usec for pid 1 (init)
> Mar  1 02:45:45 fbsd kernel: u 298:2383658/2383657 s 344:2751606/2751605 
> i 0:1/1

Try this fix for one.  It fixes the case that once time goes backward once
we keep using the last known time rather than using the new shorter time:

Index: kern_resource.c
===================================================================
RCS file: /usr/cvs/src/sys/kern/kern_resource.c,v
retrieving revision 1.156
diff -u -r1.156 kern_resource.c
--- kern_resource.c	22 Feb 2006 16:58:48 -0000	1.156
+++ kern_resource.c	22 Feb 2006 17:00:38 -0000
_at__at_ -761,14 +761,19 _at__at_
 	ut = ruxp->rux_uticks;
 	st = ruxp->rux_sticks;
 	it = ruxp->rux_iticks;
-	tu = ruxp->rux_runtime;
-	tu = cputick2usec(tu);
 	tt = ut + st + it;
 	if (tt == 0) {
 		st = 1;
 		tt = 1;
 	}
+	tu = cputick2usec(ruxp->rux_runtime);
 	ptu = ruxp->rux_uu + ruxp->rux_su + ruxp->rux_iu;
+	if (tu < ptu) {
+		printf(
+"calcru: runtime went backwards from %ju usec to %ju usec for pid %d (%s)\n",
+		    (uintmax_t)ptu, (uintmax_t)tu, p->p_pid, p->p_comm);
+		tu = ptu;
+	}
 	if ((int64_t)tu < 0) {
 		printf("calcru: negative runtime of %jd usec for pid %d (%s)\n",
 		    (intmax_t)tu, p->p_pid, p->p_comm);
_at__at_ -779,16 +784,6 _at__at_
 	uu = (tu * ut) / tt;
 	su = (tu * st) / tt;
 	iu = tu - uu - su;
-	if (tu < ptu) {
-		printf(
-"calcru: runtime went backwards from %ju usec to %ju usec for pid %d (%s)\n",
-		    (uintmax_t)ptu, (uintmax_t)tu, p->p_pid, p->p_comm);
-		printf("u %ju:%ju/%ju s %ju:%ju/%ju i %ju:%ju/%ju\n",
-		    (uintmax_t)ut, (uintmax_t)ruxp->rux_uu, uu,
-		    (uintmax_t)st, (uintmax_t)ruxp->rux_su, su,
-		    (uintmax_t)it, (uintmax_t)ruxp->rux_iu, iu);
-		tu = ptu;
-	}
 #if 0
 	/* Enforce monotonicity. */
 	if (uu < ruxp->rux_uu || su < ruxp->rux_su || iu < ruxp->rux_iu) {

-- 
John Baldwin <jhb_at_FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org
Received on Wed Mar 01 2006 - 17:56:52 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:52 UTC