Re: Introduce clock precision to help time travelers was Re: Extreme time jitter with suspend/resume cycles

From: Alexandre Belloni
Date: Wed Oct 18 2017 - 17:27:02 EST


On 18/10/2017 at 23:08:28 +0200, Pavel Machek wrote:
> On Wed 2017-10-18 21:34:49, Alan Cox wrote:
> > > And even the boring ones have pretty imprecise RTCs... For example Nokia N9.
> > > I only power it up from time to time, I believe it drifts something like
> > > minute per month... For normal use with SIM card, it can probably correct
> > > from GSM network if you happen to have a cell phone signal, but...
> > >
> > > More interesting machines... Old thinkpad is running without CMOS battery.
> > > ARM OLPC has _three_ RTCs, but not a single working one. N900 has working
> > > RTC but no or dead backup battery. On these, RTC driver probably knows
> > > time is not valid, but feeds the garbage into the system time, anyway. Ouch.
> > > Neither Sharp Zaurus SL-5500 nor C-3000 had battery backup on RTC...
> >
> > Not a new problem, RTC's used to cost lots of money 8)
> >
> > Most early Unixen set the clock at boot from the superblock timestamp of
> > the root fs, some with RTC's also used to scream at you if the superblock
> > stamp was too far head of current time.That doesn't quite work with
> > initrd but you can do the same in userspace on Linux so you'll at least
> > get 'when I last booted it' and because it's always moving forward lots
> > of other messes don't happen.
>
> Yeah, that's what "swclock" module of init system does. Someone solved
> that one for me. But... that's not good enough. In particular, I'd
> like time not to be displayed when "swclock" was used. Nokia 6230
> could do it, so linux should be able to do it, too.
>
> It seems kernel should pass accurancy info, or at least "this time is
> probably off by hours at least" from gettimeofday() and similar
> syscalls...

The question being how do you expect the kernel to get that information?

Some RTCs will tell you when they lost time/time accuracy and this
should be properly reported by the driver. If not, this has to be
implemented.

For anything else, it is probably the job of userspace to try to be
clever.

--
Alexandre Belloni, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com