diff options
Diffstat (limited to 'usr.sbin/xntpd/doc/README.refclock')
-rw-r--r-- | usr.sbin/xntpd/doc/README.refclock | 1416 |
1 files changed, 1416 insertions, 0 deletions
diff --git a/usr.sbin/xntpd/doc/README.refclock b/usr.sbin/xntpd/doc/README.refclock new file mode 100644 index 0000000..1b9a510 --- /dev/null +++ b/usr.sbin/xntpd/doc/README.refclock @@ -0,0 +1,1416 @@ + 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 |