mirror of
https://gitlab.com/chrony/chrony.git
synced 2025-12-04 01:25:07 -05:00
sourcestats: update offset estimate when regression fails
If there are too few samples to make a regression, at least update the offset estimate from the last sample and keep the previous frequency offset unchanged. Also, reset the error estimates.
This commit is contained in:
@@ -54,6 +54,9 @@
|
|||||||
/* The minimum standard deviation */
|
/* The minimum standard deviation */
|
||||||
#define MIN_STDDEV 1.0e-9
|
#define MIN_STDDEV 1.0e-9
|
||||||
|
|
||||||
|
/* The worst case bound on an unknown standard deviation of the offset */
|
||||||
|
#define WORST_CASE_STDDEV_BOUND 4.0
|
||||||
|
|
||||||
/* The asymmetry of network jitter when all jitter is in one direction */
|
/* The asymmetry of network jitter when all jitter is in one direction */
|
||||||
#define MAX_ASYMMETRY 0.5
|
#define MAX_ASYMMETRY 0.5
|
||||||
|
|
||||||
@@ -249,9 +252,9 @@ SST_ResetInstance(SST_Stats inst)
|
|||||||
inst->estimated_frequency_sd = WORST_CASE_FREQ_BOUND;
|
inst->estimated_frequency_sd = WORST_CASE_FREQ_BOUND;
|
||||||
inst->skew = WORST_CASE_FREQ_BOUND;
|
inst->skew = WORST_CASE_FREQ_BOUND;
|
||||||
inst->estimated_offset = 0.0;
|
inst->estimated_offset = 0.0;
|
||||||
inst->estimated_offset_sd = 86400.0; /* Assume it's at least within a day! */
|
inst->estimated_offset_sd = WORST_CASE_STDDEV_BOUND;
|
||||||
UTI_ZeroTimespec(&inst->offset_time);
|
UTI_ZeroTimespec(&inst->offset_time);
|
||||||
inst->std_dev = 4.0;
|
inst->std_dev = WORST_CASE_STDDEV_BOUND;
|
||||||
inst->nruns = 0;
|
inst->nruns = 0;
|
||||||
inst->asymmetry_run = 0;
|
inst->asymmetry_run = 0;
|
||||||
inst->asymmetry = 0.0;
|
inst->asymmetry = 0.0;
|
||||||
@@ -603,9 +606,20 @@ SST_DoNewRegression(SST_Stats inst)
|
|||||||
times_back_start = inst->runs_samples + best_start;
|
times_back_start = inst->runs_samples + best_start;
|
||||||
prune_register(inst, best_start);
|
prune_register(inst, best_start);
|
||||||
} else {
|
} else {
|
||||||
inst->estimated_frequency = 0.0;
|
|
||||||
inst->estimated_frequency_sd = WORST_CASE_FREQ_BOUND;
|
inst->estimated_frequency_sd = WORST_CASE_FREQ_BOUND;
|
||||||
inst->skew = WORST_CASE_FREQ_BOUND;
|
inst->skew = WORST_CASE_FREQ_BOUND;
|
||||||
|
inst->estimated_offset_sd = WORST_CASE_STDDEV_BOUND;
|
||||||
|
inst->std_dev = WORST_CASE_STDDEV_BOUND;
|
||||||
|
inst->nruns = 0;
|
||||||
|
|
||||||
|
if (inst->n_samples > 0) {
|
||||||
|
inst->estimated_offset = inst->offsets[inst->last_sample];
|
||||||
|
inst->offset_time = inst->sample_times[inst->last_sample];
|
||||||
|
} else {
|
||||||
|
inst->estimated_offset = 0.0;
|
||||||
|
UTI_ZeroTimespec(&inst->offset_time);
|
||||||
|
}
|
||||||
|
|
||||||
times_back_start = 0;
|
times_back_start = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user