Compare commits

...

4 Commits

Author SHA1 Message Date
Miroslav Lichvar
2dcc16169b Update NEWS 2011-05-04 12:29:40 +02:00
Miroslav Lichvar
a8efd8c398 Update versions in man pages 2011-05-02 13:21:50 +02:00
Miroslav Lichvar
bb40f4aff4 Modify weight calculation again
Dividing the weights by variance or unweighted variance seems to have a
significant negative impact on response with normally distributed
network delays.

Divide by the difference between the mean and minimum distance instead.
It should be stable as there is no loop and the response seems to be a
good compromise between the original minimum distance weighting which
works well with normally distributed delays and the variance weighting
which works well with exponentially distributed delays.
2011-04-29 13:29:56 +02:00
Miroslav Lichvar
66c7ac4d24 Revert using unweighted variance in weight calculation
This reverts commit 165e6805ab.
2011-04-29 13:29:24 +02:00
6 changed files with 18 additions and 24 deletions

1
NEWS
View File

@@ -6,6 +6,7 @@ New in version 1.25
* Improve polling interval adjustment
* Improve stability with temporary asymmetric delays
* Improve source selection
* Improve initial synchronisation
* Add delayed server name resolving
* Add temperature compensation
* Add nanosecond slewing to Linux driver

View File

@@ -1,4 +1,4 @@
.TH CHRONYC 1 "December 04, 2009" chrony "User's Manual"
.TH CHRONYC 1 "May 02, 2011" chrony "User's Manual"
.SH NAME
chronyc \- command-line interface for chronyd
@@ -48,7 +48,7 @@ interactively.
.SH VERSION
1.24
1.25
.SH BUGS
To report bugs, please visit \fIhttp://chrony.tuxfamily.org\fR

View File

@@ -1,4 +1,4 @@
.TH CHRONYD 8 "December 04, 2009" chrony "System Administration"
.TH CHRONYD 8 "May 02, 2011" chrony "System Administration"
.SH NAME
chronyd \- chrony background daemon
@@ -109,7 +109,7 @@ Resolve hostnames only to IPv6 addresses.
\fI/etc/chrony.conf\fR
.SH VERSION
Version 1.24
Version 1.25
.SH BUGS
To report bugs, please visit \fIhttp://chrony.tuxfamily.org/\fR

View File

@@ -232,7 +232,6 @@ RGR_FindBestRegression
double *b0, /* estimated y axis intercept */
double *b1, /* estimated slope */
double *s2, /* estimated variance of data points */
double *us2, /* estimated unweighted variance of data points */
double *sb0, /* estimated standard deviation of
intercept */
@@ -251,7 +250,7 @@ RGR_FindBestRegression
{
double P, Q, U, V, W; /* total */
double resid[MAX_POINTS * REGRESS_RUNS_RATIO];
double ss, uss;
double ss;
double a, b, u, ui, aa;
int start, resid_start, nruns, npoints;
@@ -315,20 +314,17 @@ RGR_FindBestRegression
*b1 = b;
*b0 = a;
ss = uss = 0.0;
ss = 0.0;
for (i=start; i<n; i++) {
ss += resid[i - resid_start]*resid[i - resid_start] / w[i];
uss += resid[i - resid_start]*resid[i - resid_start];
}
npoints = n - start;
ss /= npoints - 2;
uss /= npoints - 2;
ss /= (double)(npoints - 2);
*sb1 = sqrt(ss / V);
aa = u * (*sb1);
*sb0 = sqrt((ss / W) + (aa * aa));
*s2 = ss * npoints / W;
*us2 = uss;
*s2 = ss * (double) npoints / W;
*new_start = start;
*dof = npoints - 2;

View File

@@ -86,7 +86,6 @@ RGR_FindBestRegression
double *b0, /* estimated y axis intercept */
double *b1, /* estimated slope */
double *s2, /* estimated variance of data points */
double *us2, /* estimated unweighted variance of data points */
double *sb0, /* estimated standard deviation of
intercept */

View File

@@ -105,9 +105,6 @@ struct SST_Stats_Record {
/* This is the estimated residual variance of the data points */
double variance;
/* This is the estimated unweighted variance of the data points */
double uvariance;
/* This array contains the sample epochs, in terms of the local
clock. */
struct timeval sample_times[MAX_SAMPLES * REGRESS_RUNS_RATIO];
@@ -193,7 +190,7 @@ SST_CreateInstance(unsigned long refid, IPAddr *addr)
inst->estimated_offset_sd = 86400.0; /* Assume it's at least within a day! */
inst->offset_time.tv_sec = 0;
inst->offset_time.tv_usec = 0;
inst->variance = inst->uvariance = 16.0;
inst->variance = 16.0;
inst->nruns = 0;
return inst;
}
@@ -367,7 +364,7 @@ find_min_delay_sample(SST_Stats inst)
time. E.g. a value of 4 means that we think the standard deviation
is four times the fluctuation of the peer distance */
#define SD_TO_DIST_RATIO 1.4
#define SD_TO_DIST_RATIO 1.0
/* ================================================== */
/* This function runs the linear regression operation on the data. It
@@ -385,9 +382,9 @@ SST_DoNewRegression(SST_Stats inst)
int degrees_of_freedom;
int best_start, times_back_start;
double est_intercept, est_slope, est_var, est_uvar, est_intercept_sd, est_slope_sd;
double est_intercept, est_slope, est_var, est_intercept_sd, est_slope_sd;
int i, j, nruns;
double min_distance;
double min_distance, mean_distance;
double sd_weight, sd;
double old_skew, old_freq, stress;
@@ -398,17 +395,19 @@ SST_DoNewRegression(SST_Stats inst)
offsets[i + inst->runs_samples] = inst->offsets[get_runsbuf_index(inst, i)];
}
for (i = 0, min_distance = DBL_MAX; i < inst->n_samples; i++) {
for (i = 0, mean_distance = 0.0, min_distance = DBL_MAX; i < inst->n_samples; i++) {
j = get_buf_index(inst, i);
peer_distances[i] = 0.5 * inst->peer_delays[j] + inst->peer_dispersions[j];
mean_distance += peer_distances[i];
if (peer_distances[i] < min_distance) {
min_distance = peer_distances[i];
}
}
mean_distance /= inst->n_samples;
/* And now, work out the weight vector */
sd = sqrt(inst->uvariance);
sd = mean_distance - min_distance;
if (sd > min_distance || sd <= 0.0)
sd = min_distance;
@@ -421,7 +420,7 @@ SST_DoNewRegression(SST_Stats inst)
inst->regression_ok = RGR_FindBestRegression(times_back + inst->runs_samples,
offsets + inst->runs_samples, weights,
inst->n_samples, inst->runs_samples,
&est_intercept, &est_slope, &est_var, &est_uvar,
&est_intercept, &est_slope, &est_var,
&est_intercept_sd, &est_slope_sd,
&best_start, &nruns, &degrees_of_freedom);
@@ -436,7 +435,6 @@ SST_DoNewRegression(SST_Stats inst)
inst->offset_time = inst->sample_times[inst->last_sample];
inst->estimated_offset_sd = est_intercept_sd;
inst->variance = est_var;
inst->uvariance = est_uvar;
inst->nruns = nruns;
stress = fabs(old_freq - inst->estimated_frequency) / old_skew;