Information on Reference Clock Drivers
Revised 5 August 1994
Support for most of the commonly available radio clocks is included in
the default configuration of xntpd. Individual clocks can be activated
by configuration file commands, specifically the server and fudge
commands described in the xntpd.8 man page. This file contains
information useful in configuring and operating these clocks. Note that
the man pages and documentation files mentioned in this note can be
found in the ./doc directory of the xntp3 distribution.
Radio clocks by convention have addresses in the form 127.127.t.u, where
"t" is the clock type and "u" is a unit number in the range 0-3 used to
distinguish multiple instances of clocks of the same type. Most of these
clocks require support in the form of a serial port or special bus
peripheral. The particular device is normally specified by adding a soft
link /dev/device%d to the particular hardware device involved. The name
"device" is compiled in the driver according to the table below. The
table shows the type number, device name, short description used in some
displays, and long description used in other displays.
Type Device Name Description
-------------------------------------------------------
1 (none) LOCAL Undisciplined Local Clock
2 trak GPS_TRAK TRAK 8820 GPS Receiver
3 pst WWV_PST PSTI/Traconex WWV/WWVH Receiver
4 wwvb WWVB_SPEC Spectracom WWVB Receiver
5 goes GPS_GOES_TRUE TrueTime GPS/GOES Receivers
6 irig IRIG_AUDIO IRIG Audio Decoder
7 chu CHU Scratchbuilt CHU Receiver
8 refclock- GENERIC Generic Reference Clock Driver
9 gps GPS_MX4200 Magnavox MX4200 GPS Receiver
10 gps GPS_AS2201 Austron 2201A GPS Receiver
11 omega OMEGA_TRUE TrueTime OM-DC OMEGA Receiver
12 tpro IRIG_TPRO KSI/Odetics TPRO/S IRIG Interface
13 leitch ATOM_LEITCH Leitch CSD 5300 Master Clock Controller
14 ees MSF_EES EES M201 MSF Receiver
15 gpstm GPS_TRUE TrueTime GPS/TM-TMD Receiver
16 * GPS_BANC Bancomm GPS/IRIG Receiver
17 datum GPS_DATUM Datum Precision Time System
18 acts NIST_ACTS NIST Automated Computer Time Service
19 heath WWV_HEATH Heath WWV/WWVH Receiver
20 nmea GPS_NMEA Generic NMEA GPS Receiver
21 * GPS_MOTO Motorola Six Gun GPS Receiver
22 pps ATOM_PPS PPS Clock Discipline
* Not yet available.
A radio clock is specified in the configuration using the server command
server 127.127.t.u [ prefer ] [ mode m ]
where t is the type number above and u can be in the range 0-3,
conventionally 1. Ordinarily, this is the only command necessary to
configure a radio clock. The optional prefer keyword can be used to
modify the clock selection algorithm as described in Appendix B. For
those clock drivers that support multiple modes of operation, the
optional mode parameter selects which one. This parameter affects the
operation of each driver as described in Appendix A.
In rare cases a fudge command is necessary to specify additional
details. This command has the following syntax
fudge 127.127.t.u [stratum s] [refid r] [time1 t1] [time2 t2] [flags]
and must follow the corresponding server command in the configuration
file. The optional fields following the clock address are interpreted as
follows:
stratum s The s, a decimal number in the range 0-15, overrides the
default stratum assigned by the driver.
refid r The r, a 4-character, null-terminated ASCII string, overrides
the reference identifier assigned by the driver.
time1 t1 The t1, a fixed-point decimal number in seconds, specifies a
constant to be added to the time offset produced by the
driver. This provides a way to correct a systematic error or
bias on the part of the particular clock.
time2 t2 The t2, a fixed-point decimal number, is interpreted in a
driver-dependent way. See the descriptions of specific clock
drivers in Appendix A.
There are four optional flags named flag1, flag2, flag3 and flag4. A
flag is specified in the form <keyword> <value>, where <keyword> is one
of the flag names and <value> is either 0 or 1, as appropriate. Two of
the flags are generic and are interpreted by all applicable drivers, and
two are driver dependent. The generic ones are as follows:
flag4 This flag is used to enable detailed status monitoring and
event recording. The data collected are written to the
clockstats file maintained by the filegen utility (See the
xntpd.8 man page). This file is normally processed by a cron
job run once per day to produce summary statistics and
performance data. The ./scripts/stats directory contains a
number of shell and awk scripts for this, as well as S-
language programs that produce PostScript plots of performance
data.
flag3 This flag is used with Sun SPARCstation baseboard serial ports
to assign the ppsclock streams driver for a 1-pps signal
produced by some radio clocks and timekeeping devices. See the
dscription of the PPS Clock Discipline Driver (type 22) in
Appendix A for further information.
Note that the fudge factors above can be changed at run time using the
xntpdc program (see the xntpdc.8 man page). This program does not have
to be run on the server machine itself, since it communicates with the
xntpd daemon using cryptographically authenticated messages.
The PPS Signal
Some radio clocks and related timekeeping gear have a pulse-per-second
(PPS) signal that can be used to discipline the local clock oscillator
to a high degree of precision, typically to the order less than 50 us in
time and 0.1 ppm in frequency. The PPS signal can be connected in either
of two ways, either via the data leads of a serial port or via the modem
control leads. Either way requires conversion of the PPS signal, usually
at TTL levels, to RS232 levels, which can be done using a circuit such
as described in the ./gadget directory of the xntp3 distribution.
The data leads interface requires regenerating the PPS pulse and
converting to RS232 signal levels, so that the pulse looks like a
legitimate ASCII character. The tty_clk module in the ./kernel directory
inserts a timestamp following this character in the input data stream.
The driver uses this timestamp to determine the time of arrival of the
PPS pulse to within 26 us at 38.4 kbps while eliminating error due to
operating system queues and service times. In order to use the tty_clk
module, the xntp3 distribution must be compiled with CLK defined.
The modem control leads interface requires converting to RS232 levels
and connecting to the carrier detect (CD) lead of a serial port. The
ppsclock streams module in the ./ppsclock directory is used to capture a
timestamp upon transition of the PPS signal. The driver reads the latest
timestamp with a designated ioctl() system call to determine the time of
arrival of the PPS pulse to within a few tens of microseconds. In order
to use the ppsclock module, the xntp3 distribution must be compiled with
PPS defined.
Both of these mechanisms are supported by the ATOM_PPS reference clock
driver described in Appendix A. This driver is ordinarily used in
conjunction with another clock driver that supports the radio clock that
produces the PPS pulse. This driver furnishes the coarse timecode used
to disambiguate the seconds numbering of the PPS pulse itself. The NTP
daemon mitigates between the radio clock driver and ATOM_PPS driver as
described in Appendix B in order to provide the most accurate time,
while respecting the various types of equipment failures that could
happen.
For the utmost time quality, a number of Unix system kernel
modifications can be made as described in the README.magic and
README.kernel files. Specifically, the ppsclock module can be used to
interface the PPS signal directly to the kernel for use as discipline
sources for both time and frequency. These sources can be separately
enabled and monitored using the ntp_adjtime() system call described in
README.kernel and the ./include/sys/timex.h header file in the xntp3
distribution. In order to use the kernel PPS signal, the xntp3
distribution must be compiled with KERNEL_PLL defined.
In some configurations may have multiple radio clocks, each with PPS
outputs, as well as a kernel modified to use the PPS signal. In order to
provide the highest degree of redundancy and survivability, the kernel
PPS discipline, tty_clk module and ppsclock module may all be in use at
the same time, each backing up the other. The sometimes complicated
mitigation rules are described in Appendix B.
Debugging Hints
The ntpq and xntpdc utility programs can be used to debug reference
clocks, either on the server itself or from another machine elsewhere in
the network. The server is compiled, installed and started using the
command-line switches described in the xntpd.8 man page. The first thing
to look for are error messages on the system log. If none occur, the
daemon has started, opened the devices specified and waiting for peers
and radios to come up.
The next step is to be sure the RS232 messages, if used, are getting to
and from the clock. The most reliable way to do this is with an RS232
tester and to look for data flashes as the driver polls the clock and/or
as data arrive from the clock. Our experience is that the overwhelming
fraction of problems occurring during installation are due to problems
such as miswired connectors or improperly configured radio clocks at
this stage.
If RS232 messages are getting to and from the clock, the variables of
interest can be inspected using the ntpq program and various commands
described in the ntpq.8 man page. First, use the pe and as commands to
display a pair of billboards showing the peer configuration and
association IDs for all peers, including the radio clock peers. The
assigned clock address should appear in the pe billboard and the
association ID for it at the same relative line position in the as
billboard. If things are operating correctly, after a minute or two
samples should show up in the pe display line for the clock.
Additional information is available with the rv and clockvar commands,
which take as argument the association ID shown in the as billboard. The
rv command with no argument shows the system variables, while the rv
command with argument shows the peer variables for the clock, as well as
any other peers of interest. The clockvar command with argument shows
the peer variables specific to reference clock peers, including the
clock status, device name, last received timecode (if relevant), and
various event counters. In addition, a subset of the fudge parameters is
included.
The xntpdc utility program can be used for detailed inspection of the
clock driver status. The most useful are the clockstat and clkbug
commands described in the xntpdc.8 man page. While these commands permit
getting quite personal with the particular driver involved, their use is
seldom necessary, unless an implementation bug shows up.
Most drivers write a message to the clockstats file as each timecode or
surrogate is received from the radio clock. By convention, this is the
last ASCII timecode (or ASCII gloss of a binary-coded one) received from
the radio. This file is managed by the filegen facility described in the
xntpd.8 man page and requires specific commands in the configuration
file. This forms a highly useful record to discover anomalies during
regular operation of the clock. The scripts included in the
./scripts/stats directory can be run from a cron job to collect and
summarize these data on a daily or weekly basis. The summary files have
proven invaluable to detect infrequent misbehavior due to clock
implementation bugs in some radios.
Appendix A. Individual Driver Descriptions
Following are detailed descriptions of the clock drivers, together with
configuration data useful for special circumstances.
Type 1: Undisciplined Local Clock
This is a hack to allow a machine to use its own system clock as a
reference clock, i.e., to free-run using no outside clock
discipline source. This is useful if you want to use NTP in an
isolated environment with no radio clock or NIST modem available.
Pick a machine that you figure has a good clock oscillator and
configure it with this driver. Set the clock using the best means
available, like eyeball-and-wristwatch. Then, point all the other
machines at this one or use broadcast (not multicast) mode to
distribute time.
Another application for this driver is if you want to use a
particular server's clock as the clock of last resort when all
other normal synchronization sources have gone away. This is
especially useful if that server has an ovenized oscillator. For
this you would configure this driver at a higher stratum (say 3 or
4) to prevent the server's stratum from falling below that.
A third application for this driver is when an external discipline
source is available, such as the NIST "lockclock" program, which
synchronizes the local clock via a telephone modem and the NIST
Automated Computer Time Service (ACTS), or the Digital Time
Synchronization Service (DTSS), which runs on DCE machines. In this
case the stratum should be set at zero, indicating a bona fide
stratum-1 source. Exercise some caution with this, since there is
no easy way to telegraph via NTP that something might be wrong in
the discipline source itself. In the case of DTSS, the local clock
can have a rather large jitter, depending on the interval between
corrections and the intrinsic frequency error of the clock
oscillator. In extreme cases, this can cause clients to exceed the
128-ms slew window and drop off the NTP subnet.
In the default mode the behavior of the clock selection algorithm
is modified when this driver is in use. The algorithm is designed
so that this driver will never be selected unless no other
discipline source is available. This can be overridden with the
prefer keyword of the server configuration command, in which case
only this driver will be selected for synchronization and all other
discipline sources will be ignored. This behavior is intended for
use when an external discipline source controls the system clock.
Fudge Factors
The stratum for this driver LCLSTRATUM is set at 3 by default, but
can be changed by the fudge command and/or the xntpdc utility. The
reference ID is "LCL" by default, but can be changed using the same
mechanisms. *NEVER* configure this driver to operate at a stratum
which might possibly disrupt a client with access to a bona fide
primary server, unless the local clock oscillator is reliably
disciplined by another source. *NEVER NEVER* configure a server
which might devolve to an undisciplined local clock to use
multicast mode.
This driver provides a mechanism to trim the local clock in both
time and frequency, as well as a way to manipulate the leap bits.
The fudge time1 parameter adjusts the time, in seconds, and the
fudge time2 parameter adjusts the frequency, in ppm. Both
parameters are additive; that is, they add increments in time or
frequency to the present values. (Note: The frequency cannot be
changed when the kernel modifications are in use - see the
README.kern file). The fudge flag1 and fudge flag2 bits set the
corresponding leap bits; for example, setting flag1 causes a leap
second to be added at the end of the UTC day. These bits are not
reset automatically when the leap takes place; they must be turned
off manually after the leap event.
Type 2: TRAK 8820 GPS Receiver
This driver supports the TRAK 8820 GPS Station Clock. The claimed
accuracy at the 1-pps output is 200-300 ns relative to the
broadcast signal; however, in most cases the actual accuracy is
limited by the precision of the timecode and the latencies of the
serial interface and operating system.
For best accuracy, this radio requires the LDISC_ACTS line
discipline, which captures a timestamp at the '*' on-time character
of the timecode. Using this discipline the jitter is in the order
of 1 ms and systematic error about 0.5 ms. If unavailable, the
buffer timestamp is used, which is captured at the \r ending the
timecode message. This introduces a systematic error of 23
character times, or about 24 ms at 9600 bps, together with a jitter
well over 8 ms on Sun IPC-class machines.
Using the menus, the radio should be set for 9600 bps, one stop bit
and no parity. It should be set to operate in computer (no echo)
mode. The timecode format includes neither the year nor leap-second
warning. No provisions are included in this preliminary version of
the driver to read and record detailed internal radio status.
In operation, this driver sends a RQTS\r request to the radio at
initialization in order to put it in continuous time output mode.
The radio then sends the following message once each second:
*RQTS U,ddd:hh:mm:ss.0,q<cr><lf>
on-time = '*'
ddd = day of year
hh:mm:ss = hours, minutes, seconds
q = quality indicator (phase error), 0-6:
0 > 20 us
6 > 10 us
5 > 1 us
4 > 100 ns
3 > 10 ns
2 < 10 ns
The alarm condition is indicated by '0' at Q, which means the radio
has a phase error than 20 usec relative to the broadcast time. The
absence of year, DST and leap-second warning in this format is also
alarming.
The continuous time mode is disabled using the RQTX<cr> request,
following which the radio sends a RQTX DONE<cr><lf> response. In
the normal mode, other control and status requests are effective,
including the leap-second status request RQLS<cr>. The radio
responds with RQLS yy,mm,dd<cr><lf>, where yy,mm,dd are the year,
month and day. Presumably, this gives the epoch of the next leap
second, RQLS 00,00,00 if none is specified in the GPS message.
Specified in this form, the information is generally useless and is
ignored by the driver.
Fudge Factors
There are no special fudge factors other than the generic.
Type 3: PSTI/Traconex WWV/WWVH Receiver
This driver supports the PSTI 1010 and Traconex 1020 WWV/WWVH
Receivers. No specific claim of accuracy is made for these
receiver, but actual experience suggests that 10 ms would be a
conservative assumption.
The DIPswitches should be set for 9600 bps line speed, 24-hour day-
of-year format and UTC time zone. Automatic correction for DST
should be disabled. It is very important that the year be set
correctly in the DIPswitches; otherwise, the day of year will be
incorrect after 28 April of a normal or leap year. The propagation
delay DIPswitches should be set according to the distance from the
transmitter for both WWV and WWVH, as described in the
instructions. While the delay can be set only to within 11 ms, the
fudge time1 parameter can be used for vernier corrections.
Using the poll sequence QTQDQM, the response timecode is in three
sections totalling 50 ASCII printing characters, as concatenated by
the driver, in the following format:
ahh:mm:ss.fffs<cr> yy/dd/mm/ddd<cr> frdzycchhSSFTttttuuxx<cr>
on-time = first <cr>
hh:mm:ss.fff = hours, minutes, seconds, milliseconds
a = AM/PM indicator (' ' for 24-hour mode)
yy = year (from DIPswitches)
dd/mm/ddd = day of month, month, day of year
s = daylight-saving indicator (' ' for 24-hour mode)
f = frequency enable (O = all frequencies enabled)
r = baud rate (3 = 1200, 6 = 9600)
d = features indicator (@ = month/day display enabled)
z = time zone (0 = UTC)
y = year (5 = 91)
cc = WWV propagation delay (52 = 22 ms)
hh = WWVH propagation delay (81 = 33 ms)
SS = status (80 or 82 = operating correctly)
F = current receive frequency (4 = 15 MHz)
T = transmitter (C = WWV, H = WWVH)
tttt = time since last update (0000 = minutes)
uu = flush character (03 = ^c)
xx = 94 (unknown)
The alarm condition is indicated by other than '8' at A, which
occurs during initial synchronization and when received signal is
lost for an extended period; unlock condition is indicated by other
than "0000" in the tttt subfield at Q.
Fudge Factors
There are no special fudge factors other than the generic.
Type 4: Spectracom WWVB Receiver
This driver supports the Spectracom Model 8170 and Netclock/2 WWVB
Synchronized Clock. This clock has proven a reliable source of
time, except in some cases of high ambient conductive RF
interference. The claimed accuracy of the clock is 100 usec
relative to the broadcast signal; however, in most cases the actual
accuracy is limited by the precision of the timecode and the
latencies of the serial interface and operating system.
The DIPswitches on this clock should be set to 24-hour display,
AUTO DST off, time zone 0 (UTC), data format 0 or 2 (see below) and
baud rate 9600. If this clock is to used as the source for the IRIG
Audio Decoder (refclock_irig.c in this distribution), set the
DIPswitches for AM IRIG output and IRIG format 1 (IRIG B with
signature control).
There are two timecode formats used by these clocks. Format 0,
which is available with both the Netclock/2 and 8170, and format 2,
which is available only with the Netclock/2 and specially modified
8170.
Format 0 (22 ASCII printing characters):
<cr><lf>i ddd hh:mm:ss TZ=zz<cr><lf>
on-time = first <cr>
hh:mm:ss = hours, minutes, seconds
i = synchronization flag (' ' = in synch, '?' = out synch)
The alarm condition is indicated by other than ' ' at A, which
occurs during initial synchronization and when received signal is
lost for about ten hours.
Format 2 (24 ASCII printing characters):
<cr><lf>iqyy ddd hh:mm:ss.fff ld
on-time = <cr>
i = synchronization flag (' ' = in synch, '?' = out synch)
q = quality indicator (' ' = locked, 'A'...'D' = unlocked)
yy = year (as broadcast)
ddd = day of year
hh:mm:ss.fff = hours, minutes, seconds, milliseconds
The alarm condition is indicated by other than ' ' at A, which
occurs during initial synchronization and when received signal is
lost for about ten hours. The unlock condition is indicated by
other than ' ' at Q.
The Q is normally ' ' when the time error is less than 1 ms and a
character in the set 'A'...'D' when the time error is less than 10,
100, 500 and greater than 500 ms respectively. The L is normally '
', but is set to 'L' early in the month of an upcoming UTC leap
second and reset to ' ' on the first day of the following month.
The D is set to 'S' for standard time 'I' on the day preceding a
switch to daylight time, 'D' for daylight time and 'O' on the day
preceding a switch to standard time. The start bit of the first
<cr> is synchronized to the indicated time as returned.
This driver does not need to be told which format is in use - it
figures out which one from the length of the message. A three-stage
median filter is used to reduce jitter and provide a dispersion
measure. The driver makes no attempt to correct for the intrinsic
jitter of the radio itself, which is a known problem with the older
radios.
Fudge Factors
This driver can retrieve a table of quality data maintained
internally by the Netclock/2 receiver. If flag4 of the fudge
configuration command is set to 1, the driver will retrieve this
table and write it to the clockstats file on when the first
timecode message of a new day is received.
Type 5: TrueTime GPS/GOES Receivers
This driver supports at least two models of Kinemetrics/TrueTime
Timing Receivers, the 468-DC MK III GOES Synchronized Clock and
GPS-DC MK III GPS Synchronized Clock and very likely others in the
same model family that use the same timecode formats. The clocks
are connected via a serial port. Up to four units, with unit
numbers in the range 0 through 3, can be configured. The driver
assumes the serial port device name is /dev/goes%d (i.e., unit 1 at
127.127.5.1 opens the clock at /dev/goes1) and that the clock is
configured for 9600-baud operation.
Type 6: IRIG Audio Decoder
This driver supports the Inter-Range Instrumentation Group standard
time-distribution signal IRIG-B using the audio codec native to the
Sun SPARCstation. This signal is generated by several radio clocks,
including those made by Austron, TrueTime, Odetics and Spectracom,
among others, although it is generally an add-on option. The signal
is connected via an attenuator box and cable to the audio codec
input on a Sun SPARCstation and requires a specially modified
kernel audio driver. Details are in the README.irig file.
Timing jitter using the decoder and a Sun IPC is in the order of a
few microseconds, although the overall timing accuracy is limited
by the wander of the CPU oscillator used for timing purposes to a
few hundred microseconds. These figures are comparable with what
can be achieved using the 1-pps discipline as describe elsewhere in
this note.
Fudge Factors
There are no special fudge factors other than the generic. The
flag3 and flag4 flags are not applicable to this driver.
Type 7: Scratchbuilt CHU Receiver
This driver supports a shortwave receiver and special modem
circuitry described in the ./gadget directory of the xntp3
distribution. It requires the chu-clk line discipline or chu_clk
STREAMS module described in the ./kernel directory of that
distribution. It is connected via a serial port operating at 300
baud.
Unlike the NIST time services, whose timecode requires quite
specialized hardware to interpret, the CHU timecode can be received
directly via a serial port after demodulation. While there are
currently no known commercial CHU receivers, the hardware required
to receive the CHU timecode is fairly simple to build. While it is
possible to configure several CHU units simultaneously, this is in
general not useful.
Fudge Factors
The time1 option can be used to set the CHU propagation delay,
compensate for inherent latencies in the serial port hardware and
operating system. The default value is 0.0025 seconds, which is
about right for Toronto. Values for other locations can be
calculated using the propdelay program in the util directory of the
xntp3 distribution or equivalent means.
The time2 option can be used to compensate for inherent latencies
in the serial port hardware and operating system. The value, which
defaults to zero, is in addition to the propagation delay provided
by the time1 option. The default value is 0.0002 seconds, which is
about right for typical telephone modem chips.
The flag1 option can be used to modify the averaging algorithm used
to smooth the clock indications. Ordinarily, the algorithm picks
the median of a set of samples, which is appropriate under
conditions of poor to fair radio propagation conditions. If the
clock is located relatively close to the WWV or WWVH transmitters,
setting this flag will cause the algorithm to average the set of
samples, which can reduce the residual jitter and improve accuracy.
Type 8: Generic Reference Clock Driver
The timecode of these receivers is sampled via a STREAMS module in
the kernel (The STREAMS module has been designed for use with SUN
Systems under SunOS 4.1.x. It can be linked directly into the
kernel or loaded via the loadable driver mechanism). This STREAMS
module can be adapted to be able to convert different time code
formats. If the daemon is
compiled without the STREAM definition synchronization will work
without the Sun streams module, though accuracy is significantly
degraded.
The actual receiver status is mapped into various synchronization
states generally used by receivers. The STREAMS module is
configured to interpret the time codes of DCF U/A 31, PZF535,
GPS166, Trimble SV6 GPS, ELV DCF7000, Schmid and low cost receivers
(see list below).
The reference clock support in xntp contains the necessary
configuration tables for those receivers. In addition to supporting
up to 32 different clock types and 4 devices, the generation a a
PPS signal is also provided as an configuration option. The PPS
configuration option uses the receiver generated time stamps for
feeding the PPS loopfilter control for much finer clock
synchronization.
CAUTION: The PPS configuration option is different from the
hardware PPS signal, which is also supported (see below), as it
controls the way xntpd is synchronized to the reference clock,
while the hardware PPS signal controls the way time offsets are
determined.
The use of the PPS option requires receivers with an accuracy of
better than 1ms.
Fudge factors
Only two fudge factors are utilized. The time1 fudge factor defines
the phase offset of the synchronization character to the actual
time. On the availability of PPS information the time2 fudge factor
defines the skew between the PPS time stamp and the receiver
timestamp of the PPS signal. This parameter is usually zero, as
usually the PPS signal is believed in time and OS delays should be
corrected in the machine specific section of the kernel driver.
time2 needs only be set when the actual PPS signal is delayed for
some reason. The flag0 enables input filtering. This a median
filter with continuous sampling. The flag1 selects averaging of the
samples remaining after the filtering. Leap secondhandling is
controlled with the flag2. When set a leap second will be deleted
on receipt of a leap second indication from the receiver. Otherwise
the leap second will be added, (which is the default).
ntpq (8)
timecode variable
The ntpq program can read clock variables command list several
variables. These hold the following information: refclock_time is
the local time with the offset to UTC (format HHMM). The currently
active receiver flags are listed in refclock_status. Additional
feature flags of the receiver are optionally listed in parentheses.
The actual time code is listed in timecode. A qualification of the
decoded time code format is following in refclock_format. The last
piece of information is the overall running time and the
accumulated times for the clock event states in refclock_states.
When PPS information is present additional variable are available.
refclock_ppstime lists then the PPS timestamp and refclock_ppsskew
lists the difference between RS232 derived timestamp and the PPS
timestamp.
Unit encoding
The unit field <u> encodes the device, clock type and the PPS
generation option. There are 4 possible units, which are encoded in
the lower two bits of the <u> field. The devices are named
/dev/refclock-0 through /dev/refclock-3. Bits 2 thru 6 encode the
clock type. The fudge factors of the clock type are taken from a
table clockinfo in refclock_parse.c. The generation of PPS
information for disciplining the local NTP clock is encoded in bit
7 of <u>.
Currently, nine clock types (devices /dev/refclock-0 -
/dev/refclock-3) are supported.
127.127.8.0-3 16
Meinberg PZF535 receiver (FM demodulation/TCXO / 50us)
127.127.8.4-7 16
Meinberg PZF535 receiver (FM demodulation/OCXO / 50us)
127.127.8.8-11 16
Meinberg DCF U/A 31 receiver (AM demodulation / 4ms)
127.127.8.12-15 16
ELV DCF7000 (sloppy AM demodulation / 50ms)
127.127.8.16-19 16
Walter Schmid DCF receiver Kit (AM demodulation / 1ms)
127.127.8.20-23 16
RAW DCF77 100/200ms pulses (Conrad DCF77 receiver module / 5ms)
127.127.8.24-27 16
RAW DCF77 100/200ms pulses (TimeBrick DCF77 receiver module / 5ms)
127.127.8.28-31 16
Meinberg GPS166 receiver (GPS / <<1us)
127.127.8.32-35 16
Trimble SV6 GPS receiver (GPS / <<1us)
The reference clock support carefully monitors the state
transitions of the receiver. All state changes and exceptional
events such as loss of time code transmission are logged via the
syslog facility. Every hour a summary of the accumulated times for
the clock states is listed via syslog.
PPS support is only available when the receiver is completely
synchronized. The receiver is believed to deliver correct time for
an additional period of time after losing synchronizations, unless
a disruption in time code transmission is detected (possible power
loss). The trust period is dependent on the receiver oscillator and
thus a function of clock type. This is one of the parameters in the
clockinfo field of the reference clock implementation. This
parameter cannot be configured by xntpdc.
In addition to the PPS loopfilter control a true PPS hardware
signal can be applied on Sun Sparc stations via the CPU serial
ports on the CD pin. This signal is automatically detected and will
be used for offset calculation. The input signal must be the time
mark for the following time code. (The edge sensitivity can be
selected - look into the appropriate kernel/parsestreams.c for
details). Meinberg receivers can be connected by feeding the PPS
pulse of the receiver via a 1488 level converter to Pin 8 (CD) of a
Sun serial zs\-port.
There exists a special firmware release for the PZF535 Meinberg
receivers. This release (PZFUERL 4.6 (or higher - The UERL is
important)) is absolutely recommended for XNTP use, as it provides
LEAP warning, time code time zone information and alternate antenna
indication. Please check with Meinberg for this firmware release.
For the Meinberg GPS166 receiver is also a special firmware release
available (Uni-Erlangen). This release must be used for proper
operation.
The raw DCF77 pulses can be fed via a level converter directly into
Pin 3 (Rx) of the Sun. The telegrams will be decoded an used for
synchronization. AM DCF77 receivers are running as low as $25. The
accuracy is dependent on the receiver and is somewhere between 2ms
(expensive) to 10ms (cheap). Upon bad signal reception of DCF77
synchronizations will cease as no backup oscillator is available as
usually found in other reference clock receivers. So it is
important to have a good place for the DCF77 antenna. For
transmitter shutdowns you are out of luck unless you have other NTP
servers with alternate time sources available.
Type 9: Magnavox MX4200 GPS Receiver
This driver supports the Magnavox MX4200 Navigation Receiver
adapted to precision timing applications. This requires an
interface box described in the ./ppsclock directory of the xntp3
distribution. It is connected via a serial port and requires the
ppsclock STREAMS module described in the same directory.
Fudge Factors
There are no special fudge factors other than the generic.
Type 10: Austron 2201A GPS Receiver
This driver supports the Austron 2200A/2201A GPS/LORAN Synchronized
Clock and Timing Receiver connected via a serial port. It supports
several special features of the clock, including the Input Buffer
Module, Output Buffer Module, IRIG-B Interface Module and LORAN
Assist Module. It requires the RS232 Serial Interface module for
communication with the driver.
This receiver is capable of a comprehensive and large volume of
statistics and operational data. The specific data collection
commands and attributes are embedded in the driver source code;
however, the collection process can be enabled or disabled using
the flag4 flag. If set, collection is enabled; if not, which is the
default, it is disabled. A comprehensive suite of data reduction
and summary scripts is in the ./scripts/stats directory of the
xntp3 distribution.
To achieve the high accuracy this device provides, it is necessary
to use the ppsclock feature of the xntp3 program distribution or,
alternatively, to install the kernel modifications described in the
README.kern. The clock can be wired to provide time to a single CPU
or bussed in parallel to several CPUs, with one CPU controlling the
receiver and the others just listening. Fair accuracy can be
achieved in the single-CPU configuration without use of the 1-pps
signal, but in multiple CPU configurations accuracy is severely
degraded without it.
Fudge Factors
There are no special fudge factors other than the generic.
Type 11: TrueTime OM-DC OMEGA Receiver
This driver supports the Kinemetrics/TrueTime OMEGA-DC OMEGA
Synchronized Clock connected via a serial port. This clock is
sufficiently different from other Kinemetrics/TrueTime models that
a separate driver is required. Up to four units, with unit numbers
in the range 0 through 3, can be configured. The driver assumes the
serial port device name is /dev/omega%d (i.e., unit 1 at
127.127.11.1 opens the clock at /dev/omega1) and that the clock is
configured for 9600-baud operation.
Fudge Factors
There are no special fudge factors other than the generic.
Type 12: KSI/Odetics TPRO/S IRIG Interface
This driver supports the KSI/Odetics TPRO and TPRO-SAT IRIG-B
Decoder, which is a module connected directly to the SBus of a Sun
workstation. The module works with the IRIG-B signal generated by
several radio clocks, including those made by Austron, TrueTime,
Odetics and Spectracom, among others, although it is generally an
add-on option. In the case of the TPRO-SAT, the module is an
integral part of a GPS receiver, which serves as the primary timing
source.
Using the TPRO interface as a NTP reference clock provides
precision time only to xntpd and its clients. With suitable kernel
modifications, it is possible to use the TPRO as the CPU system
clock, avoiding errors introduced by the CPU clock oscillator
wander. See the README.kernel and kern.c files for further details.
Type 13: Leitch CSD 5300 Master Clock Controller
Information not available.
Type 14: EES M201 MSF Receiver
This driver supports the EES M201 MSF receiver connected to a Sun
SPARCstation running SunOS 4.x with the "ppsclock" STREAMS module.
Fudge Factors
If flag1 is set, then the system clock is assumed to be sloppy
(e.g. Sun4 with 20ms clock), so samples are averaged. If flag2 is
set, then leaphold is set. If flag3 is set, then the sample
information is dumped. If flag4 is set, then the input data is
smoothed, and all data points are used.
Type 15: TrueTime GPS/TM-TMD Receiver
Information not available.
Type 16: Bancomm GPS/IRIG Receiver
Information not available.
Type 17: Datum Precision Time System
Information not available.
Type 18: NIST Automated Computer Time Service
This driver supports the NIST Automated Computer Time Service
(ACTS). It periodically dials a prespecified telephone number,
receives the NIST timecode data and calculates the local clock
correction. It designed primarily for use when neither a radio
clock nor connectivity to Internet time servers is available. For
the best accuracy, the individual telephone line/modem delay needs
to be calibrated using outside sources.
The ACTS is located at NIST Boulder, CO, telephone 303 494 4774. A
toll call from Newark, DE, costs between three and four cents,
although it is not clear what carrier and time of day discounts
apply. The modem dial string will differ depending on local
telephone configuration, etc., and is specified by the phone
command in the configuration file. The argument to this command is
an AT command for a Hayes compatible modem.
The accuracy produced by this driver should be in the range of a
millisecond or two, but may need correction due to the delay
characteristics of the individual modem involved. For undetermined
reasons, some modems work with the ACTS echo-delay measurement
scheme and some don't. This driver tries to do the best it can with
what it gets. Initial experiments with a Practical Peripherals
9600SA modem here in Delaware suggest an accuracy of a millisecond
or two can be achieved without the scheme by using a fudge time1
value of 65.0 ms. In either case, the dispersion for a single call
involving ten samples is about 1.3 ms.
The driver can operate in either of three modes, as determined by
the mode parameter in the server configuration command. In mode 0
(automatic) the driver operates continuously at intervals depending
on the prediction error, as measured by the driver, usually in the
order of several hours. In mode 1 (backup) the driver is enabled in
automatic mode only when no other source of synchronization is
available and when more than MAXOUTAGE (3600 s) have elapsed since
last synchronized by other sources. In mode 2 (manual) the driver
operates only when enabled using a fudge flags switch, as described
below.
For reliable call management, this driver requires a 1200-bps modem
with a Hayes-compatible command set and control over the modem data
terminal ready (DTR) control line. Present restrictions require the
use of a POSIX-compatible programming interface, although other
interfaces may work as well. The ACTS telephone number and modem
setup string are hard-coded in the driver and may require changes
for nonstandard modems or special circumstances.
Fudge Factors
Ordinarily, the propagation time correction is computed
automatically by ACTS and the driver. When this is not possible or
erratic due to individual modem characteristics, the fudge flag2
switch should be set to disable the ACTS echo-delay scheme. In any
case, the fudge time1 parameter can be used to adjust the
propagation delay as required.
The ACTS call interval is determined in one of three ways. In
manual mode a call is initiated by setting fudge flag1 using
xntpdc, either manually or via a cron job. In automatic mode this
flag is set by the peer timer, which is controlled by the sys_poll
variable in response to measured errors. In backup mode the driver
is ordinarily asleep, but awakes (in automatic mode) if all other
synchronization sources are lost. In either automatic or backup
modes, the call interval increases as long as the measured errors
do not exceed the value of the fudge time2 parameter.
When the fudge flag1 is set, the ACTS calling program is activated.
This program dials each number listed in the phones command of the
configuration file in turn. If a call attempt fails, the next
number in the list is dialed. The fudge flag1 and counter are reset
and the calling program terminated if (a) a valid clock update has
been determined, (b) no more numbers remain in the list, (c) a
device fault or timeout occurs, or (d) fudge flag1 is reset
manually using xntpdc.
The NIST timecode message is transmitted at 1200 bps in the
following format (see the driver source for more information):
jjjjj yy-mm-dd hh:mm:ss tt l uuu mmmmm UTC(NIST) *
jjjjj = modified Julian day
yy-mm-dd = year, month, day
hh:mm:ss = hours, minutes, seconds
tt = DST indicator (see driver listing)
l = leap-second warning (see driver listing)
uuu = DUT1 correction (see driver listing)
mmmmm = modem calibration (see driver listing)
on-time = '*'
The timecode message is transmitted continuously after a signon
banner, which this driver ignores. The driver also ignores all but
the yy-mm-dd, hh:mm:ss and on-time character '*' fields, although
it checks the format of all fields of the message. A timestamp is
captured at the '*' character, as required by the ACTS
specification, and used as the reference time of the timecode. If a
message with an on-time character of '#' is received, the driver
updates the propagation delay. The driver disconnects when (a) ten
valid messages have been received, (b) no message has been received
for 15 s, (c) an on-time character of '#' is received. These
messages are processed by a trimmed-mean filter to reduce timing
noise and then by the usual NTP algorithms to develop the clock
correction.
The behavior of the clock selection algorithm is modified when this
driver is in use. The algorithm is designed so that this driver
will never be selected unless no other discipline source is
available. This can be overridden with the prefer keyword of the
server configuration command, in which case only this driver will
be selected for synchronization and all other discipline sources
will be ignored. Ordinarily, the prefer keyword would be used only
in automatic mode ehen primary time is to be obtained via ACTS and
backup NTP peers used only when ACTS fails.
Call Management
Since ACTS will be a toll call in most areas of the country, it is
necessary to carefully manage the calling interval. The ACTS call
program is initiated by setting fudge flag1. This flag can be set
manually using xntpdc, by a cron job that calls xntpdc, or
automatically by the driver itself. The fudge flag1 is reset when
the program terminates after a time determination is comlete or
when no more numbers remain in the alternate path list, a device
fault or timeout has occured, or the fudge flag1 has been reset
using xntpdc.
In automatic and backup modes, the driver determines the call
interval using a procedure depending on the measured prediction
error and the fudge time2 parameter. If the error exceeds time2 for
a number of times depending on the current interval, the interval
is decreased, but not less than about 1000 s. If the error is less
than time2 for some number of times, the interval is increased, but
not more than about 18 h. With the default value of zero for fudge
time2, the interval will increase from 1000 s to the 4000-8000-s
range, in which the expected accuracy should be in the 1-2-ms
range. Setting fudge time2 to a large value, like 0.1 s, may result
in errors of that order, but increase the call interval to the
maximum. The exact value for each configuration will depend on the
modem and operating system involved, so some experimentation may be
necessary.
Manual call attempts can be made at any time by setting fudge flag1
using xntpdc. For example, the xntpdc command
fudge 127.127.18.1 flags 1
will ask for a key identifier and password and, if authenticated by
the server, will set flag1. There may be a short delay until the
expiration of the current poll timeout.
The flag1 can be set from a cron job in the following way.
Construct a file with contents
keyid 11
passwd dialup
fudge 127.127.18.1 flags 1
quit
Then, run the following program at specified times as required.
/usr/local/bin/xntpdc <file
Type 19: Heath WWV/WWVH Receiver
This driver supports the Heath GC-1000 Most Accurate Clock, with
RS232C Output Accessory. This is a WWV/WWVH receiver somewhat less
robust than other supported receivers. Its claimed accuracy is 100
ms when actually synchronized to the broadcast signal, but this
doesn't happen even most of the time, due to propagation
conditions, ambient noise sources, etc. When not synchronized, the
accuracy is at the whim of the internal clock oscillator, which can
wander into the sunset without warning. Since the indicated
precision is 100 ms, expect a host synchronized only to this thing
to wander to and fro, occasionally being rudely stepped when the
offset exceeds the default CLOCK_MAX of 128 ms.
The internal DIPswitches should be set to operate at 1200 baud in
MANUAL mode and the current year. The external DIPswitches should
be set to GMT and 24-hour format. It is very important that the
year be set correctly in the DIPswitches. Otherwise, the day of
year will be incorrect after 28 April of a normal or leap year.
In MANUAL mode the clock responds to a rising edge of the request
to send (RTS) modem control line by sending the timecode.
Therefore, it is necessary that the operating system implement the
TIOCMBIC and TIOCMBIS ioctl system calls and TIOCM_RTS control bit.
Present restrictions require the use of a POSIX-compatible
programming interface, although other interfaces may work as well.
The clock message consists of 23 ASCII printing characters in the
following format:
hh:mm:ss.f dd/mm/yr<cr>
hh:mm:ss.f = hours, minutes, seconds
f = deciseconds ('?' when out of spec)
dd/mm/yr = day, month, year
The alarm condition is indicated by '?', rather than a digit, at A.
Note that 0?:??:??.? is displayed before synchronization is first
established and hh:mm:ss.? once synchronization is established and
then lost again for about a day.
Fudge Factors
There are no special fudge factors other than the generic. A fudge
time1 value of .07 s appears to center the clock offset residuals.
Type 20: Generic NMEA GPS Receiver
Information not available.
Type 21: Motorola Six Gun GPS Receiver
Information not available.
Type 22: PPS Clock Discipline
This driver furnishes an interface for pulse-per-second (PPS)
signals produced by a cesium clock, timing receiver or related
equipment. It can be used to remove accumulated jitter and retime a
secondary server when synchronized to a primary server over a
congested, wide-area network and before redistributing the time to
local clients. Note that this driver does not control the system
clock if the kernel modifications described in the README.kernel
file have been installed, but it can be useful as a monitoring
tool.
In order for this driver to work, the local clock must be set to
within +-500 ms by another means, such as a radio clock or NTP
itself. The 1-pps signal is connected via a serial port and gadget
box consisting of a one-shot and RS232 level converter. When
operated at 38.4 kbps with a SPARCstation IPC, this arrangement has
a worst-case jitter less than 26 us.
There are three ways in which this driver can be used. The first
way uses the LDISC_PPS line discipline and works only for the
baseboard serial ports of the Sun SPARCstation. The PPS signal is
connected via a gadget box to the carrier detect (CD) line of a
serial port and flag3 of the driver configured for that port is
set. This causes the ppsclock streams module to be configured for
that port and capture a timestamp at the on-time transition of the
PPS signal. This driver then reads the timestamp directly by a
designated ioctl() system call. This provides the most accurate
time and least jitter of any other scheme. There is no need to
configure a dedicated device for this purpose, which ordinarily is
the device used for the associated radio clock.
The second way uses the LDISC_CLKPPS line discipline and works for
any architecture supporting a serial port. If after a few seconds
this driver finds no ppsclock module configured, it attempts to
open a serial port device /dev/pps%d, where %d is the unit number,
and assign the LDISC_CLKPPS line discipline to it. If the line
discipline fails, no harm is done except the accuracy is reduced
somewhat. The pulse generator in the gadget box is adjusted to
produce a start bit of length 26 us at 38400 bps (or 104 us at 9600
bps). Used with the LDISC_CLKPPS line discipline, this produces an
ASCII DEL character ('\377') followed by a timestamp at each
seconds epoch.
The third way involves an auxiliary radio clock driver which calls
the PPS driver with a timestamp captured by that driver. This use
is documented in the source code for the driver(s) involved.
Fudge Factors
There are no special fudge factors other than the generic and those
explicitly defined above. The fudge time1 parameter can be used to
compensate for miscellaneous UART and OS delays. Allow about 247 us
for uart delays at 38400 bps and about 1 ms for SunOS streams
nonsense.
Appendix B. Mitigation Rules
In order to provide robust backup sources, stratum-1 peers are usually
operated in a diversity configuration, in which the local server
operates with a number of remote peers in addition with one or more
radio clocks operating also as local peers. In these configurations the
suite of algorithms used in NTP to refine the data from each peer
separately and to select and weight the data from a number of peers can
be used with the entire ensemble of remote peers and local radios.
However, Because of small but significant systematic time offsets
between the peers, it is in general not possible to achieve the lowest
jitter and highest stability in these configurations. In addition, there
are a number of special configurations involving auxiliary radio clock
outputs, telephone backup services and other special cases, so that a
set of mitigation rules becomes necessary.
The mitigation rules are based on a set of special characteristics of
the various reference clock drivers configured on the server. For
instance, it is possible to designate a peer as "preferred," in which
case, all other things being equal, this peer will be selected for
synchronization over all other eligible candidates in the clock
selection procedures. The precise characterization of the prefer peer is
described below. In addition, when a pulse-per-second (PPS) signal is
connected via the PPS Clock Discipline Driver (type 22), the
corresponding peer is called the PPS peer. The manner in which this peer
operates is described below. When the Undisciplined Local Clock Driver
(type 1) is configured in the server, this becomes the local-clock peer.
When the Automated Computer Time Service Driver (type 18) is configured
in the server, this becomes the ACTS peer. Both the local-clock and ACTS
peers operates in the manner described in Appendix A. Finally, where
support is available, the PPS signal may be processed directly by the
kernel. In the following this will be called the kernel discipline.
The mitigation rules apply in the clock selection procedures following
the sanity checks, intersection algorithm and clustering algorithm. The
survivors at this point represent the subset of all peers which can
provide the most accurate, stable time. In the general case, with no
designated prefer peer, PPS peer or local-clock peer, the mitigation
rules require all survivors be averaged according to a weight depending
on the reciprocal of the dispersion, as provided in the NTP
specification.
The mitigation rules establish the choice of system peer, which
determine the stratum, reference identifier and several other system
variables which are visible to clients of the local server. In addition,
they establish which source or combination of sources control the local
clock. In detail, these rules operate as follows:
1. If there is a prefer peer and it is the local-clock peer or the
ACTS peer; or, if there is a prefer peer and the kernel discipline
is active, choose the prefer peer as the system peer.
2. If the above is not the case and there is a PPS peer, then choose
it as the system peer and its offset as the system clock offset.
3. If the above is not the case and there is a prefer peer (not the
local-clock or ACTS peer in this case), then choose it as the
system peer and its offset as the system clock offset.
4. If the above is not the case and the peer previously chosen as the
system peer is in the surviving population, then choose it as the
system peer and average its offset along with the other survivors
to determine the system clock offset. This behavior is designed to
avoid excess jitter due to "clockhopping," when switching the
system peer would not materially improve the time accuracy.
5. If the above is not the case, then choose the first candidate in
the list of survivors ranked in order of synchronization distance
and average its offset along with the other survivors to determine
the system clock offset. This is the default case and the only case
considered in the current NTP specification.
The specific interpretation of the prefer peer and PPS peer require some
explanation, which is given in following sections.
B.1. Using the prefer Keyword
For the reasons stated previously, a scheme has been implemented in NTP
to provide an intelligent mitigation between various classes of peers,
one designed to provide the best quality time without compromising the
normal operation of the NTP algorithms. This scheme in its present form
is not an integral component of the NTP specification. but is likely to
be included in future versions of the specification. The scheme is based
on the "preferred peer," which is specified by including the prefer
keyword with the associated server or peer command in the configuration
file. This keyword can be used with any peer or server, but is most
commonly used with a radio clock server.
The prefer scheme works on the set of peers that have survived the
sanity and intersection algorithms of the clock select procedures.
Ordinarily, the members of this set can be considered truechimers and
any one of them could in principle provide correct time; however, due to
various error contributions, not all can provide the most stable time.
The job of the clustering algorithm, which is invoked at this point, is
to select the best subset of the survivors providing the least variance
in the combined ensemble compared to the variance in each member of the
subset. The detailed operation of the clustering algorithm, which are
given in the specification, are not important here, other than to point
out it operates in rounds, where a survivor, presumably the worst of the
lot, is discarded in each round until one of several termination
conditions is met.
In the prefer scheme the clustering algorithm is modified so that the
prefer peer is never discarded; on the contrary, its potential removal
becomes a termination condition. If the original algorithm were about to
toss out the prefer peer, the algorithm terminates right there. The
prefer peer can still be discarded by the sanity and intersection
algorithms, of course, but it will always survive the clustering
algorithm. A preferred peer retains that designation as long as it
survives the intersection algorithm. If for some reason the prefer peer
fails to survive the intersection algorithm, either because it was
declared a falseticker or became unreachable, it loses that designation
and the clock selection remitigates as described above.
Along with this behavior, the clock select procedures are modified so
that the combining algorithm is not used when a prefer (or PPS) peer is
present. Instead, the offset of the prefer (or PPS) peer is used
exclusively as the synchronization source. In the usual case involving a
radio clock and a flock of remote stratum-1 peers, and with the radio
clock designated a prefer peer, the result is that the high quality
radio time disciplines the server clock as long as the radio itself
remains operational and with valid time, as determined from the remote
peers, sanity algorithm and intersection algorithm.
While the model does not forbid it, it does not seem useful to designate
more than one peer as preferred, since the additional complexities to
mitigate among them do not seem justified from on the air experience.
Note that the prefer peer interacts with the PPS peer discussed in
Appendix C. It also interacts with the Undisciplined Local Clock Driver
(type 1), as described in Appendix A. See the main text for the
mitigation rules applying to the general case.
B.2. Using the Pulse-per-Second (PPS) Signal
Most radio clocks are connected using a serial port operating at speeds
of 9600 bps or lower. The accuracy using typical timecode formats, where
the on-time epoch is indicated by a designated ASCII character, like
carriage-return <cr>, is limited to a millisecond at best and a few
milliseconds in typical cases. However, some radios produce a precision
pulse-per-second (PPS) signal which can be used to improve the accuracy
in typical workstation servers to the order of a few tens of
microseconds. The details of how this can be accomplished are discussed
in the README.magic file; the following discusses how this signal is
implemented and configured in a typical working server.
First, it should be pointed out that the PPS signal is inherently
ambiguous, in that it provides a precise seconds epoch, but does not
provide a way to number the seconds. In principle and most commonly,
another source of synchronization, either the timecode from an
associated radio clock, or even a set of remote peers, is available to
perform that function. In all cases a specific, configured peer or
server must be designated as associated with the PPS signal. This is
done by including the prefer keyword with the associated server or peer
command in the configuration file. This PPS signal can be associated in
this way any peer or server, but is most commonly used with the radio
clock generating the PPS signal.
The PPS signal is processed by a special PPS Clock Discipline Driver
(type 22) described in Appendix A. That description specifies the
hardware configurations in which this signal can be connected to the
server. This driver replaces the former scheme based on conditional
compilation and the PPS, CLK and PPSCLK compile-time switches.
Regardless of method, the driver, like all other drivers, is mitigated
in the manner described for the prefer peer in Appendix B. However, in
the case of the PPS peer, the behavior is slightly more complex.
First, in order for the PPS peer to be considered at all, its associated
prefer peer must have survived the sanity and intersection algorithms
and have been designated the prefer peer. This insures that the radio
clock hardware is operating correctly and that, presumably, the PPS
signal is operating correctly as well. Second, the absolute time offset
from that peer must be less than CLOCK_MAX, the gradual-adjustment
range, which is ordinarily set at 128 ms, or well within the +-0.5-s
unambiguous range of the PPS signal itself. Finally, the time offsets
generated by the PPS peer are propagated via the clock filter to the
clock selection procedures just like any other peer. Should these pass
the sanity and intersection algorithms, they will show up along with the
offsets of the prefer peer itself. Note that, unlike the prefer peer,
the PPS peer samples are not protected from discard by the clustering
algorithm. These complicated procedures insure that the PPS offsets
developed in this way are the most accurate, reliable available for
synchronization.
A PPS peer retains that designation as long as it survives the
intersection algorithm; however, like any other clock driver, it runs a
reachability algortihm on the PPS signal itself. If for some reason the
signal fails or displays gross errors, the PPS peer will either become
unreachable or stray out of the survivor population. In this case the
clock selection remitigates as described above.
Finally, the mitigation procedures described above for the prefer peer
are modified so that, if the PPS peer survives the clustering algorithm,
its offset is mitigated over the prefer peer offset; in other words in
case of ties, the PPS offset wins. See the main text for the mitigation
rules applying to the general case.
B.3. Using the Kernel Discipline
Code to implement the kernel discipline is a special feature that can be
incorporated in the kernel of some workstations as described in the
README.kernel file. The discipline provides for the control of the local
clock oscillator time and/or frequency by means of an external PPS
signal interfaced via a modem control lead. As the PPS signal is derived
from external equipment, cables, etc., which sometimes fail, a good deal
of error checking is done in the kernel to detect signal failure and
excessive noise.
In order to operate, the kernel discipline must be enabled and the
signal must be present and within nominal jitter and wander error
tolerances. In the NTP daemon the kernel is enabled only when the prefer
peer is among the survivors of the clustering algorithm, as described
above. Then, the PPS peer is designated the prefer peer as long as the
PPS signal is present and operating within tolerances. Under these
conditions the kernel disregards updates produced by the NTP daemon and
uses its internal PPS source instead. The kernel maintains a watchdog
timer for the PPS signal; if the signal has not been heard or is out of
tolerance for more than some interval, currently two minutes, the kernel
discipline is declared inoperable and operation continues as if it were
not present.
Appendix C. NTP Local Clock Discipline
Implementation of the ACTS driver caused somewhat of a shakeup in the
NTP local clock model and implementation. The model described in the
specification RFC-1305 is based on a phase-lock loop (PLL) design, which
is optimum or near optimum for the update intervals used for NTP peers
and radio clocks, ordinarily in the range 64-1024 s. However, the ACTS
driver must operate with update intervals in the range well above 1024
s, where the performance of the PLL model deteriorates. As suggested by
Judah Levine of NIST and used in his "lockclock" algorithm, a hybrid
frequency-lock loop (FLL) gives better performance at the longer update
intervals up to a maximum depending on the acceptable error bound.
In a series of experiments and simulations, it was verified that the PLL
model provides better performance in the regime less than about 1000 s,
while the FLL model provides better performance above that. The
parameters of each model were optimized by simulation for the lowest
time and frequency error using data collected on an undisciplined
computer clock oscillator over a period of about two weeks. The PLL/FLL
hybrid loop has been implemented in NTP, along with certain other
refinements described below. While it was designed primarily with ACTS
in mind, it can be used with any NTP peer or radio clock, should that
prove useful.
To take advantage of this feature for other than the ACTS driver, where
it is automatic, note that the default minimum poll interval is 64 s and
default maximum poll interval 1024 s (for the ACTS driver the default
minimum is 1024 s and default maximum 16384 s). However, using the
minpoll and/or maxpoll parameters of the server or peer commands in the
configuration file, it is possible to set the minimum poll interval as
low as 16 s and the maximum poll interval as high as 16384 s. Poll
intervals less than 64 s are useful if an exceptionally quick lock is
required, like in real-time or portable systems. Poll intervals above
1024 s, other than ACTS, may be useful to reduce traffic in some
situations, such as when charges are made on a per-packet basis.
Another modification to the stock NTP local clock discipline is to avoid
errors due to old data. From a study of the stability characteristics of
typical computer clock oscillators using both experiment and simulation,
it was determined that data used to discipline the PLL are not generally
useful if older than about 1000 s. This corresponds roughly to the knee
in the Allan variance characteristic measured for a typical workstation
oscillator. The NTP clock filter algorithm was modified to adjust the
effective length of the shift register so that samples older than about
1000 s are not used to determine the filtered offset, delay and
dispersion values. This design has the useful byproduct that the time to
acquire lock when first coming up and to declare unreachability is
independent of the poll interval.
A problem which has recurred on every occasion a leap second has been
inserted in the UTC timescale is that not all radio clocks detect and
implement the leap event. As a result, some radios sail right through
the leap, become confused for periods up to 15 minutes, then reacquire
lock. In order to cope with this, as well as other occasions where
atypically large offsets occur, the NTP clock discipline has been
modified to disregard offsets over 128 ms, unless (a) first coming up,
(b) first returning to service after a period when unsynchronized, or
(c) an interval of about 15 minutes has elapsed since the last update
less than 128 ms was received. In addition, the discipline has been
modified so that, if the first offset received after coming up is less
than 128 ms, the local clock is immediately reset to that offset without
affecting the PLL variables.
It has been the experience of some users that, when first installed in a
system, the NTP clock discipline fails to reliably lock to other peers
and servers as configured. The indications are that the daemon locks for
some period of time, but is unable to stabilize the frequency estimate.
As the result, the time offsets eventually climb above 128 ms and the
discipline unlocks again. After the 15-minute timeout, the daemon locks
again and the cycle repeats. The problem here is that the intrinsic
frequency error of the local clock exceeds the design capture range of
the PLL, 100 ppm. This particular limit was selected as a compromise
between useful maximum error indications and the tolerances found in
typical computer clock oscillators.
In spite of the tolerance assumed in the NTP specification of 100 ppm,
the NTP daemon for Unix can operate with an intrinsic frequency error of
over 380 ppm, depending on the values of tick and tickadj selected by
the tickadj program. However, with errors that large, the PLL will not
reliably lock, and the behavior noted above can occur. Formerly, the
only remedial in cases where this happens waas a somewhat painful manual
process where the nominal oscillator frequency is measured by some other
means, such as eyeball-and-wristwatch, and a specific drift file
(ntp.drift) crafted.
In order to avoid the above problem, the NTP clock discipline has been
modified to measure the frequency during periods when not locked to
another server or radio clock. Such periods occur when the time offset
wanders through and beyond the 128-ms window as described above. When
synchronization is reestablished, the working frequency used by NTP is
initialized with the measured value. Since a precise frequency
determination is not always possible under these chaotic conditions, it
may take more than one cycle of this type to get the residual error
below 100 ppm and reliable lock established.
David L. Mills <mills@udel.edu>
Electrical Engineering Department
University of Delaware
Newark, DE 19716
302 831 8247 fax 302 831 4316
3 July 1994