A few comments about the wiki notes.

First ntpd is careful about ensuring that time always moves forward.  It
does this by adjusting the clock slew rather than jumping time forwards or
backwards.  When ntpd first starts up and the system clock is not set
within 5 seconds relative to its ntp servers then ntpd will die with a log
message rather than jump the time.  Within about an hour of starting ntpd
can have the system synchronized within a few milliseconds of its best
server.

Some admins like to run ntpdate out of cron and force a time reset at
regular intervals.  It's never a good idea to force time jumps. It can case
all kinds of trouble for databases, NFS, cryptography, process scheduler
and even event systems written in perl.

Most systems have a separate hardware clocks that is pretty accurate.  OS
time is typically synchronized with it at boot then runs independently of
it.  Some admins like to synch with hwclock out of cron.  This is also a
bad idea.  On "wintel" type systems the hardware clock typically reports
only down to seconds.  This is much too rough for modern time keeping.,

Virtual machines add another whole layer of complexity to the picture.  A
vm will frequently have time jumps between time slices when it gets to run.
 Things that require real time behaviors probably should not be run in a
vm.  VM guests have to trust their host for an accurate representation of
time.  And all the issues that crop up above add another layer of
complexity to accurate time keeping here

There are very few good reasons for administrative clock adjustments.
 These days there are no good reasons based on simple calendrical causes.
 Soon even the dreaded leap second will be dealt with through math  and
lookup tables rather than clock adjustments.   Nearly all other reasons to
adjust the clock are political and organizational rather than technical.

If we still want to deal with time sifts we have to detect them. When time
jumps occur it is hard for a program to detect them.  The only way that the
program would know that time has changed is if it has two sources to
compare.  If such an event has been detected then it has to decide if there
was a good administrative reason for the change or not.

If the program decides to take action because it has detected a time change
then  it must have an array of logic to decide what special behaviors to
apply for all of the various ways that the change could have occurred.
 Should it fire missed events?  Should it recompute the offset for future
events? what if the scale of the shift is large? What if the scale of the
shift is tiny?  What if time shifts occur frequently? What if they are
noisy, crossing and recrossing the same point in time?  We quickly get into
pathological behaviors that either need to be accounted or ignored.

Most developers who have cracked open this nut have eventually decided to
leave well enough alone and have their system trust that the OS knows what
time it is and that the admin had a "good reason" for mucking with the
system time and leave it at that.   Trying to correct for bad admin
behavior is better done at the social layer than at the technical one.

Just my thoughts.
chris

Reply via email to