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; } |