Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 5 Feb 2002 12:18:59 -0700
From:      Nate Williams <nate@yogotech.com>
To:        Poul-Henning Kamp <phk@critter.freebsd.dk>
Cc:        nate@yogotech.com (Nate Williams), John Polstra <jdp@polstra.com>, hackers@FreeBSD.ORG
Subject:   Re: A question about timecounters 
Message-ID:  <15456.12323.943290.212726@caddis.yogotech.com>
In-Reply-To: <92033.1012936151@critter.freebsd.dk>
References:  <15456.11469.659090.290513@caddis.yogotech.com> <92033.1012936151@critter.freebsd.dk>

next in thread | previous in thread | raw e-mail | index | archive | help
> >How are issues (1) and (3) above different?
> >
> >ps. I'm just trying to understand, and am *NOT* trying to start a
> >flame-war. :) :) :)
> 
> If the starvation happens to hardclock() or rather tc_windup() the effect
> will be cummulative and show up in permanent jumps in the output of date
> for instance.  In stable hardclock() is spl-protected so this would be
> _really_ bad news.
> 
> If the starvation happens in any of {micro|nano}[up]time() (but not the
> "get&" variants!) the it will result in a single spurious reading.

Ok, the bulb is starting to grow from dim to bright. :)

> The premise for avoiding locking in the access functions to timecounters
> where precisely that we could trust them to not be pre-empted for long
> enough for the hardware to roll over, if this is not the case we loose
> because the overflow in the hardware counter means that the timecounter
> we calculate from is not valid for the delta we get from the hardware.
> 
> I'm not sure this answers your question, if not it is not bad will, just
> me not understanding the question :-)

*grin*

I think I understand the problem.  Let me try to rephrase to make sure.

1) If we have an interrupt lockout (*NOT* due to time-counting code),
   then we'd have a problem since the hardclock would never get run.

2) If however, the locking done to protect the timecounter code happens
   to make getting/setting the timecounter take too long, we'd get
   similar results, but for *completely* different reasons.

Let me be more precise.

(1)
  cli();
   /* Take a really long time doing something */
  sti();

(2)
  /* Do something */
  gettime();  /* Takes a really long time to complete */

The first is harder to track down/fix, simply because you don't know
*who* the offender is.  The latter is essentially the same problem to
fix, but *may* be easier to fix since the offending code *IS* the
timecounter code.

Am I even close to understanding?



Nate

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




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