On 2010-Feb-21 14:29:28 -0500, David Magda <dma...@ee.ryerson.ca> wrote:
>For future reference, how does the math work? How do you go from  
>taking a timer number:
>
>       $ sysctl machdep.acpi_timer_freq
>       machdep.acpi_timer_freq: 3577045
>
>And the ntpd(8) time reset log entries to adjust the frequency? Or do  
>you use the PPM output of the ntpdc(8) command?
>
>I'm not quite sure I understand what happened here. :)

I'm using a combination of the ACPI frequency, time reset logs and
PLL frequency reported by the op:

On 2010-Feb-20 22:32:01 +0100, Torfinn Ingolfsen <torfinn.ingolf...@broadpa=
rk.no> wrote:
>r...@kg-f2# sysctl machdep.acpi_timer_freq
>machdep.acpi_timer_freq: 3577045
>r...@kg-f2# tvlm
>Feb 20 20:06:41 kg-f2 ntpd[942]: kernel time sync status change 2001
>Feb 20 20:21:49 kg-f2 ntpd[942]: time reset +1.118880 s
>Feb 20 20:37:53 kg-f2 ntpd[942]: time reset +1.188538 s
>Feb 20 20:53:03 kg-f2 ntpd[942]: time reset +1.121903 s
>Feb 20 21:09:00 kg-f2 ntpd[942]: time reset +1.179924 s
>Feb 20 21:24:57 kg-f2 ntpd[942]: time reset +1.178490 s
>Feb 20 21:39:58 kg-f2 ntpd[942]: time reset +1.110647 s
>Feb 20 21:55:53 kg-f2 ntpd[942]: time reset +1.177292 s
>Feb 20 22:11:44 kg-f2 ntpd[942]: time reset +1.172358 s
>Feb 20 22:26:48 kg-f2 ntpd[942]: time reset +1.114350 s
...
>r...@kg-f2# ntpdc -c loopi -c sysi
>offset:               0.000000 s
>frequency:            500.000 ppm

Together with the assumptions that the system clock is stable (ie the
rate of drift is constant) and the syslog entries occurred at
precisely the times reported.  If the former assumption isn't true
(which was a distinct possibility given the size of error) then ntpd
isn't going to work.  If he latter assumption is incorrect then the
calculated clock skew will be incorrect - but hopefully enough to
bring it into ntpd capture range to allow later tweaking.

If ntpd cannot slew the local clock sufficiently, it will step the
clock roughly every 900 seconds, hence the regular "time reset"
messages.  Since we are assuming a stable clock, we can accumulate
the offsets in multiple reset messages to give a cumulative offset.

For the above figures, the clock drift (sum of "time reset" messages)
totals ~10.36 seconds over a period of 2:20:07 (the difference between
the "kernel time sync" and last "time reset" message).  [Note that I
somehow mistranscribed both the offset and duration in my last mail -
apologies for the confusion this might have caused].

10.36s in 2:20:07 == 10.36/8407 ~= 1.233e-3 or 1233ppm.  Thus ntpd is
reporting that the system clock is still 1233ppm slow, even with ntpd
pulling the system clock by its maximum of 500ppm.  Adding these gives
a total clock error of 1733ppm.

The nominal clock frequency used by the timecounter is 3577045Hz.
In order to calculate the actual clock frequency, we need to subtract the
clock error (1733ppm) from this frequency:
3577045Hz * (1 - 1733e-6) = 3570846Hz
(I rounded the clock error differently previously and got 3570847Hz).

-- 
Peter Jeremy

Attachment: pgpiFgyALIePm.pgp
Description: PGP signature

Reply via email to