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>