Fix(#793): "./waf bin_test" results in a Python error
[ntpsec.git] / docs / discipline.adoc
blobeddf824e879fe9b4923f676a06e68a05d4ae0406
1 = Clock Discipline Algorithm
2 include::include-html.ad[]
4 == Table of Contents
6 * link:#intro[General Overview]
7 * link:#pll[Phase-Lock Loop Operations]
8 * link:#loop[Loop Dynamics]
9 * link:#house[Clock Initialization and Management]
11 '''''
13 [[intro]]
14 == General Overview
16 At the heart of the NTP specification and reference implementation is
17 the clock discipline algorithm, which is best described as an adaptive
18 parameter, hybrid phase/frequency-lock feedback loop. It is an
19 intricately crafted algorithm that automatically adapts for optimum
20 performance while minimizing network overhead. Operation is in two
21 modes, phase-lock loop (PLL), which is used at poll intervals below the
22 Allan intercept - by default 2048 s - and frequency-lock loop (FLL),
23 which is used above that.
25 image::pic/discipline.gif[align="center"]
27 Figure 1. Clock Discipline Algorithm
29 [[pll]]
30 == Clock Discipline Operations
32 A block diagram of the clock discipline is shown in Figure 1. The
33 timestamp of a reference clock or remote server is compared with the
34 timestamp of the system clock, represented as a variable frequency
35 oscillator (VFO), to produce a raw offset sample _V~d~_. Offset samples
36 are processed by the clock filter to produce a filtered update _V~s~_.
37 The loop filter implements a type-2 proportional-integrator controller
38 (PIC). The PIC can minimize errors in both time and frequency using
39 predictors _x_ and _y_, respectively. The clock adjust process samples
40 these predictors once each second for the daemon discipline or once each
41 tick interrupt for the kernel discipline to produce the system clock
42 update _V~c~_.
44 In PLL mode the frequency predictor is an integral of the offset over
45 past updates, while the phase predictor is the offset amortized over
46 time to avoid setting the clock backward. In FLL mode the phase
47 predictor is not used, while the frequency predictor is similar to the
48 NIST _lockclock_ algorithm. In this algorithm, the frequency predictor
49 is computed as a fraction of the current offset divided by the time
50 since the last update to minimize the offset at the next
51 update.
53 The discipline response in PLL mode is determined by the _time
54 constant_, which results in a "stiffness" depending on the jitter of the
55 available sources and the wander of the system clock oscillator. The
56 scaled time constant is also used as the poll interval described on the
57 link:poll.html[Poll Program] page. However, in NTP symmetric mode, each
58 peer manages its poll interval and the two might not be the same. In
59 such cases, either peer uses the minimum of its poll interval and
60 that of the other peer, which is included in the NTP packet header.
62 [[loop]]
63 == Loop Dynamics
65 It is necessary to verify that the clock discipline algorithm is stable
66 and satisfies the Nyquist criterion, which requires that the sampling
67 rate be at least twice the bandwidth. In this case, the bandwidth can be
68 approximated by the reciprocal of the time constant. In the NTP
69 specification and reference implementation, time constants and poll
70 intervals are expressed as exponents of 2. By construction, the time
71 constant exponent is five times the poll interval exponent. Thus, the
72 default poll exponent of 6 corresponds to a poll interval of 64 s and a
73 time constant of 2048 s. A change in the poll interval changes the time
74 constant by a corresponding amount. The Nyquist criterion requires the
75 sample interval to be not more than half the time constant or 1024 s.
76 The clock filter guarantees at least one sample in eight poll intervals,
77 so the sample interval is not more than 512 s; this would be described
78 as oversampling by a factor of two. Finally, the PLL parameters have
79 been chosen for a damping factor of 2, which results in a much faster
80 risetime than with critical damping, but results in modest overshoot of
81 6 percent.
83 It is important to understand how the dynamics of the PLL are affected
84 by the time constant and poll interval. At the default poll interval of
85 64 s and a step offset change of 100 ms, the time response crosses zero
86 in about 50 min and overshoots about 6 ms, as per design. Ordinarily, a
87 step correction would cause a temporary frequency surge of about 5 PPM,
88 which along with the overshoot slowly dissipates over a few hours.
90 However, the clock state machine used with the discipline algorithm
91 avoids this transient at startup. It does this using a previously saved
92 frequency file, if present, or by measuring the oscillator frequency, if
93 not. It then quickly amortizes the residual offset at startup without
94 affecting the oscillator frequency. In this way, the offset error is less
95 than 0.5 ms within 5 min, if the file is present, and within 10 min if
96 not. See the link:clock.html[Clock State Machine] page for further
97 details.
99 Since the PLL is linear, the response with different offset step
100 amplitudes and poll intervals has the same characteristic shape but
101 scaled differently in amplitude and time. The response scales exactly
102 with step amplitude, so that the response to a 10-ms step has the same
103 shape as at 64 s, but with amplitude compressed by one-tenth. The
104 response scales exactly with poll interval, so that response at a poll
105 interval of 8 s has the same shape as at 64 s, but with time compressed
106 by one-eighth.
108 The optimum time constant, and thus the poll interval, depends on the
109 network time jitter and the oscillator frequency wander. Errors due to
110 jitter decrease as the time constant increases, while errors due to
111 wander decrease as the time constant decreases. For typical Internet
112 paths, the two error characteristics intersect at a point called the
113 _Allan intercept_, which represents the optimum time constant. With a
114 compromise Allan intercept of 2048 s, the optimum poll interval is about
115 64 s, which corresponds to a compromise poll exponent of 6. For fast
116 LANs with modern computers, the Allan intercept is somewhat lower at
117 around 512 s, so a compromise poll exponent of 4 (16 s) is appropriate.
118 An intricate, heuristic algorithm is used to manage the actual poll
119 interval within a specified range. Details are on the
120 link:poll.html[Poll Program] page.
122 In the NTPv4 specification and reference implementation a state machine
123 is used to manage the system clock under exceptional conditions, as when
124 the daemon is first started or when encountering severe network
125 congestion. In extreme cases not likely to be encountered in normal
126 operation, the system time can be stepped forward or backward more than
127 128 ms. Further details are on the link:clock.html[Clock State Machine]
128 page.
130 [[house]]
131 == Clock Initialization and Management
133 If left running continuously, an NTP client on a fast LAN in a home or
134 office environment can maintain synchronization nominally within one
135 millisecond. When the ambient temperature variations are less than a
136 degree Celsius, the clock oscillator frequency is disciplined to within
137 one part per million (PPM), even when the clock oscillator native frequency
138 offset is 100 PPM or more. A temperature-compensated crystal oscillator,
139 if available, will be even less affected by thermal influences.
141 For laptops and portable devices when the power is turned off, the
142 battery backup clock offset error can increase as much as one second per
143 day. When power is restored after several hours or days, the clock
144 offset and oscillator frequency errors must be resolved by the clock
145 discipline algorithm, but this can take several hours without specific
146 provisions.
148 The provisions described in this section ensure that, in all but
149 pathological situations, the startup transient is suppressed to within
150 nominal levels in no more than five minutes after a warm start or ten
151 minutes after a cold start. Following is a summary of these provisions.
152 A detailed discussion of these provisions is on the
153 link:clock.html[Clock State Machine] page.
155 The reference implementation measures the clock oscillator frequency and
156 updates a frequency file at intervals of one hour or more, depending on
157 the measured frequency wander. This design is intended to minimize write
158 cycles in NVRAM that might be used in a laptop or portable device. In a
159 warm start, the frequency is initialized from this file, which avoids a
160 possibly lengthy convergence time. In a cold start when no frequency
161 file is available, the reference implementation first measures the
162 oscillator frequency over a five-min interval. This generally results in
163 a residual frequency error less than 1 PPM. The measurement interval can
164 be changed using the +stepout+ option of the
165 link:miscopt.html#tinker[+tinker+] command.
167 In order to reduce the clock offset error when restarting, the reference
168 implementation next disables oscillator frequency discipline and enables
169 clock offset discipline with a small time constant; this is designed to
170 quickly reduce the clock offset error without causing a frequency surge.
171 This configuration is continued for an interval of five-min, after which
172 the clock offset error is usually no more than a millisecond. The
173 measurement interval can be changed using the +stepout+ option of the
174 link:miscopt.html#tinker[+tinker+] command.
176 Another concern when restarting is the time necessary for the select and
177 cluster algorithms to refine and validate the initial clock offset
178 estimate. Normally, this takes several updates before setting the system
179 clock. As the default minimum poll interval in most configurations is
180 about one minute, it can take several minutes before setting the system
181 clock. The +iburst+ option of the link:assoc.html#burst[+server+]
182 command changes the behavior at restart and is recommended for
183 client/server configurations. When this option is enabled, the client
184 sends a volley of six requests at intervals of two seconds; this usually
185 ensures a reliable estimate is available in about ten seconds before
186 setting the clock. Once this initial volley is complete, the procedures
187 described above are executed.
189 As a result of the above considerations, when a backup source, such as
190 the local clock driver, ACTS modem driver or orphan mode is included in
191 the system configuration, it may happen that one or more of them are
192 selectable before one or more of the regular sources are selectable.
193 When backup sources are included in the configuration, the reference
194 implementation waits several minutes without regular
195 sources before switching to backup sources; this is generally enough to
196 avoid startup transients due to premature switching to backup sources.
197 The interval can be changed using the +orphanwait+ option of the
198 link:miscopt.html#tos[+tos+] command.
200 '''''
202 include::includes/footer.adoc[]