mean = src->mean;
S = src->S;
} else {
- mean = ((src->mean * (double) nr) + dst->mean) / ((double) nr + 1.0);
- S = ((src->S * (double) nr) + dst->S) / ((double) nr + 1.0);
+ mean = ((src->mean * (double) (nr - 1)) + dst->mean) / ((double) nr);
+ S = ((src->S * (double) (nr - 1)) + dst->S) / ((double) nr);
}
dst->mean = mean;
members++;
if (!ts->groupid) {
+ /*
+ * These are per-group shared already
+ */
ts->name = td->name;
ts->description = td->description;
- ts->error = td->error;
ts->groupid = td->groupid;
+
+ /*
+ * first pid in group, not very useful...
+ */
ts->pid = td->pid;
+ }
+
+ if (td->error && !ts->error) {
+ ts->error = td->error;
ts->verror = td->verror;
}
static inline void add_stat_sample(struct io_stat *is, unsigned long data)
{
double val = data;
- double delta, n;
+ double delta;
if (data > is->max_val)
is->max_val = data;
is->min_val = data;
delta = val - is->mean;
- n = is->samples + 1.0;
- is->mean += delta / n;
+ is->mean += delta / (is->samples + 1.0);
is->S += delta * (val - is->mean);
is->samples++;