reference: schedule fallback drift even when synchronized
After update to NTPv4 the synchronized status doesn't change when sources are unreachable, start fallbackdrift timeout on reference update too.
This commit is contained in:
parent
d9a84d24cf
commit
2af6f8cf78
2 changed files with 12 additions and 11 deletions
|
@ -1637,14 +1637,13 @@ the program exits. (See the dumpdir command above).
|
||||||
@subsection fallbackdrift
|
@subsection fallbackdrift
|
||||||
Fallback drifts are long-term averages of the system clock drift
|
Fallback drifts are long-term averages of the system clock drift
|
||||||
calculated over exponentially increasing intervals. They are used
|
calculated over exponentially increasing intervals. They are used
|
||||||
when the clock is unsynchronised to avoid quickly drifting away from
|
when the clock is no longer synchronised to avoid quickly drifting
|
||||||
true time if there was a short-term deviation in drift before the
|
away from true time if there was a short-term deviation in the drift
|
||||||
synchronisation was lost.
|
before the synchronisation was lost.
|
||||||
|
|
||||||
The directive specifies the minimum and maximum interval for how long
|
The directive specifies the minimum and maximum interval since last
|
||||||
the system clock has to be unsynchronised to switch between fallback
|
clock update to switch between fallback drifts. They are defined as a
|
||||||
drifts. They are defined as a power of 2 (in seconds). The syntax is
|
power of 2 (in seconds). The syntax is as follows
|
||||||
as follows
|
|
||||||
|
|
||||||
@example
|
@example
|
||||||
fallbackdrift 16 19
|
fallbackdrift 16 19
|
||||||
|
@ -1652,13 +1651,13 @@ fallbackdrift 16 19
|
||||||
|
|
||||||
In this example, the minimum interval is 16 (18 hours) and maximum
|
In this example, the minimum interval is 16 (18 hours) and maximum
|
||||||
interval is 19 (6 days). The system clock frequency will be set to
|
interval is 19 (6 days). The system clock frequency will be set to
|
||||||
the first fallback 18 hours after the synchronisation was lost, to the
|
the first fallback 18 hours after last clock update, to the
|
||||||
second after 36 hours, etc. This might be a good setting to cover
|
second after 36 hours, etc. This might be a good setting to cover
|
||||||
daily and weekly temperature fluctuations.
|
daily and weekly temperature fluctuations.
|
||||||
|
|
||||||
By default (or if the specified maximum or minimum is 0), no fallbacks
|
By default (or if the specified maximum or minimum is 0), no fallbacks
|
||||||
will be used and the clock frequency will stay at the last value
|
are used and the clock frequency changes only with new measurements from
|
||||||
calculated before synchronisation was lost.
|
NTP, reference clocks or manual input.
|
||||||
@c }}}
|
@c }}}
|
||||||
@c {{{ generatecommandkey
|
@c {{{ generatecommandkey
|
||||||
@node generatecommandkey directive
|
@node generatecommandkey directive
|
||||||
|
|
|
@ -457,11 +457,12 @@ update_fb_drifts(double freq_ppm, double update_interval)
|
||||||
static void
|
static void
|
||||||
fb_drift_timeout(void *arg)
|
fb_drift_timeout(void *arg)
|
||||||
{
|
{
|
||||||
assert(are_we_synchronised == 0);
|
|
||||||
assert(next_fb_drift >= fb_drift_min && next_fb_drift <= fb_drift_max);
|
assert(next_fb_drift >= fb_drift_min && next_fb_drift <= fb_drift_max);
|
||||||
|
|
||||||
fb_drift_timeout_id = -1;
|
fb_drift_timeout_id = -1;
|
||||||
|
|
||||||
|
DEBUG_LOG(LOGF_Reference, "Fallback drift %d active: %f ppm",
|
||||||
|
next_fb_drift, fb_drifts[next_fb_drift - fb_drift_min].freq);
|
||||||
LCL_SetAbsoluteFrequency(fb_drifts[next_fb_drift - fb_drift_min].freq);
|
LCL_SetAbsoluteFrequency(fb_drifts[next_fb_drift - fb_drift_min].freq);
|
||||||
REF_SetUnsynchronised();
|
REF_SetUnsynchronised();
|
||||||
}
|
}
|
||||||
|
@ -1071,6 +1072,7 @@ REF_SetReference(int stratum,
|
||||||
/* Update fallback drifts */
|
/* Update fallback drifts */
|
||||||
if (fb_drifts) {
|
if (fb_drifts) {
|
||||||
update_fb_drifts(abs_freq_ppm, update_interval);
|
update_fb_drifts(abs_freq_ppm, update_interval);
|
||||||
|
schedule_fb_drift(&now);
|
||||||
}
|
}
|
||||||
|
|
||||||
last_ref_update_interval = update_interval;
|
last_ref_update_interval = update_interval;
|
||||||
|
|
Loading…
Reference in a new issue