forked from TrueCloudLab/rclone
fs/accounting: fix moving average speed for file stats
Before this change the moving average for the individual file stats would start at 0 and only converge to the correct value over 15-30 seconds. This change starts the weighting period as 1 and moves it up once per sample which gets the average to a better value instantly.
This commit is contained in:
parent
66fe4a2523
commit
de6ec8056f
1 changed files with 6 additions and 1 deletions
|
@ -129,6 +129,7 @@ func (acc *Account) UpdateReader(in io.ReadCloser) {
|
||||||
// averageLoop calculates averages for the stats in the background
|
// averageLoop calculates averages for the stats in the background
|
||||||
func (acc *Account) averageLoop() {
|
func (acc *Account) averageLoop() {
|
||||||
tick := time.NewTicker(time.Second)
|
tick := time.NewTicker(time.Second)
|
||||||
|
var period float64
|
||||||
defer tick.Stop()
|
defer tick.Stop()
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
|
@ -137,7 +138,11 @@ func (acc *Account) averageLoop() {
|
||||||
// Add average of last second.
|
// Add average of last second.
|
||||||
elapsed := now.Sub(acc.lpTime).Seconds()
|
elapsed := now.Sub(acc.lpTime).Seconds()
|
||||||
avg := float64(acc.lpBytes) / elapsed
|
avg := float64(acc.lpBytes) / elapsed
|
||||||
acc.avg = (avg + (averagePeriod-1)*acc.avg) / averagePeriod
|
// Soft start the moving average
|
||||||
|
if period < averagePeriod {
|
||||||
|
period++
|
||||||
|
}
|
||||||
|
acc.avg = (avg + (period-1)*acc.avg) / period
|
||||||
acc.lpBytes = 0
|
acc.lpBytes = 0
|
||||||
acc.lpTime = now
|
acc.lpTime = now
|
||||||
// Unlock stats
|
// Unlock stats
|
||||||
|
|
Loading…
Add table
Reference in a new issue