Date: Sun, 29 Jul 2012 17:44:40 +0300 From: Alexander Motin <mav@FreeBSD.org> To: Bruce Evans <brde@optusnet.com.au> Cc: freebsd-acpi@freebsd.org Subject: Re: Using bintime() in acpi_cpu_idle()? Message-ID: <50154C58.4060408@FreeBSD.org> In-Reply-To: <20120729221526.H2941@besplex.bde.org> References: <5014DD00.3000307@FreeBSD.org> <20120729175031.U2084@besplex.bde.org> <50150CF5.4070605@FreeBSD.org> <20120729221526.H2941@besplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 29.07.2012 15:26, Bruce Evans wrote: > On Sun, 29 Jul 2012, Alexander Motin wrote: > >> On 29.07.2012 11:37, Bruce Evans wrote: >> ... >>> binuptime() is more accurate than uncalibrated scaling. Is accuracy >>> required? >> >> Accuracy is not required at all. +-20% is not a problem. >> >>> If not, the CPU ticker might work, and is faster than HPET, >>> and and is not under user control for perverse settings. It normally >>> reduces to readtsc() with no serializing instruction even in proposed >>> changes. This is good enough for process times (not very good) and >>> depends on the CPU not changing. Its calibration is very accurate >>> (similar to timecounters) modulo bugs, but not always up to date. >> >> Problem with ticker that it may stop during idle periods, and idle is >> exactly what happens here. Unlike timecounter usage here we don't need >> CPU synchronicity, but we need it working during deep sleeps. > > The ticker is the same as the timecounter in many cases of interest. If > the TSC stops then it cannot be used for timecounting unless timecounting > is reinitialized. Timecounting should be reinitialized after deep sleeps, > but you say you need it to work during deep sleeps. Timecounter already has detection logic to disable TSC in cases where it is unreliable. I don't want to replicate it here. I need not precise and not synchronized by reliable and fast time source. > I wouldn't trust timecounters for some time after waking up after a > deep sleep. If their clock stopped then the times read might only be > very out of date. If their clock didn't stop, then they might have > wrapped or otherwise overflowed and the times read would be garbage. > Is there any locking or ordering to prevent them being used before they > are reinitialized? I am not sure what reinitialization are you talking about. IIRC, there is no any waking up code for TSC. None other time counters have problems with C-states. -- Alexander Motin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?50154C58.4060408>