81 float inter_sweep_estimate) {
82 // If the latest inter-sweep time is below our granularity
83 // of measurement, we may call in here with
84 // inter_sweep_current == 0. However, even for suitably small
85 // but non-zero inter-sweep durations, we may not trust the accuracy
86 // of accumulated data, since it has not been "integrated"
87 // (read "low-pass-filtered") long enough, and would be
88 // vulnerable to noisy glitches. In such cases, we
89 // ignore the current sample and use currently available
90 // historical estimates.
91 if (inter_sweep_current > _threshold) {
92 ssize_t demand = prevSweep() - count + splitBirths() - splitDeaths();
93 float rate = ((float)demand)/inter_sweep_current;
94 _demand_rate_estimate.sample(rate);
95 _desired = (ssize_t)(_demand_rate_estimate.padded_average()
96 *inter_sweep_estimate);
97 }
98 }
99
100 ssize_t desired() const { return _desired; }
101 ssize_t coalDesired() const { return _coalDesired; }
102 void set_coalDesired(ssize_t v) { _coalDesired = v; }
103
104 ssize_t surplus() const { return _surplus; }
105 void set_surplus(ssize_t v) { _surplus = v; }
106 void increment_surplus() { _surplus++; }
107 void decrement_surplus() { _surplus--; }
108
109 ssize_t bfrSurp() const { return _bfrSurp; }
110 void set_bfrSurp(ssize_t v) { _bfrSurp = v; }
111 ssize_t prevSweep() const { return _prevSweep; }
112 void set_prevSweep(ssize_t v) { _prevSweep = v; }
113 ssize_t beforeSweep() const { return _beforeSweep; }
114 void set_beforeSweep(ssize_t v) { _beforeSweep = v; }
115
116 ssize_t coalBirths() const { return _coalBirths; }
117 void set_coalBirths(ssize_t v) { _coalBirths = v; }
118 void increment_coalBirths() { _coalBirths++; }
119
120 ssize_t coalDeaths() const { return _coalDeaths; }
|
81 float inter_sweep_estimate) {
82 // If the latest inter-sweep time is below our granularity
83 // of measurement, we may call in here with
84 // inter_sweep_current == 0. However, even for suitably small
85 // but non-zero inter-sweep durations, we may not trust the accuracy
86 // of accumulated data, since it has not been "integrated"
87 // (read "low-pass-filtered") long enough, and would be
88 // vulnerable to noisy glitches. In such cases, we
89 // ignore the current sample and use currently available
90 // historical estimates.
91 if (inter_sweep_current > _threshold) {
92 ssize_t demand = prevSweep() - count + splitBirths() - splitDeaths();
93 float rate = ((float)demand)/inter_sweep_current;
94 _demand_rate_estimate.sample(rate);
95 _desired = (ssize_t)(_demand_rate_estimate.padded_average()
96 *inter_sweep_estimate);
97 }
98 }
99
100 ssize_t desired() const { return _desired; }
101 void set_desired(ssize_t v) { _desired = v; }
102
103 ssize_t coalDesired() const { return _coalDesired; }
104 void set_coalDesired(ssize_t v) { _coalDesired = v; }
105
106 ssize_t surplus() const { return _surplus; }
107 void set_surplus(ssize_t v) { _surplus = v; }
108 void increment_surplus() { _surplus++; }
109 void decrement_surplus() { _surplus--; }
110
111 ssize_t bfrSurp() const { return _bfrSurp; }
112 void set_bfrSurp(ssize_t v) { _bfrSurp = v; }
113 ssize_t prevSweep() const { return _prevSweep; }
114 void set_prevSweep(ssize_t v) { _prevSweep = v; }
115 ssize_t beforeSweep() const { return _beforeSweep; }
116 void set_beforeSweep(ssize_t v) { _beforeSweep = v; }
117
118 ssize_t coalBirths() const { return _coalBirths; }
119 void set_coalBirths(ssize_t v) { _coalBirths = v; }
120 void increment_coalBirths() { _coalBirths++; }
121
122 ssize_t coalDeaths() const { return _coalDeaths; }
|