From 5bdd98b6744ba34bd3b74757d9c224bbf477af8c Mon Sep 17 00:00:00 2001 From: Zsolt Felfoldi Date: Thu, 12 Sep 2019 14:51:56 +0200 Subject: [PATCH] les: quick and dirty workaround for mclock leaps --- les/costtracker.go | 20 +++++++++++++++++++- les/metrics.go | 2 ++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/les/costtracker.go b/les/costtracker.go index 7b169f31b5..0daa9ba449 100644 --- a/les/costtracker.go +++ b/les/costtracker.go @@ -269,10 +269,29 @@ func (ct *costTracker) gfLoop() { log.Debug("global cost factor saved", "value", factor) } saveTicker := time.NewTicker(time.Minute * 10) + mclockTicker := time.NewTicker(time.Millisecond * 100) + lastClock := mclock.Now() + noUpdate := lastClock for { select { + case <-mclockTicker.C: + now := mclock.Now() + dt := time.Duration(now - lastClock) + lastClock = now + mclockTimer.Update(dt) + if dt > time.Millisecond*300 { + noUpdate = now + mclock.AbsTime(time.Second*5) + } + case r := <-ct.reqInfoCh: + now := mclock.Now() + if time.Duration(now-lastClock) > time.Millisecond*300 { + noUpdate = now + mclock.AbsTime(time.Second*5) + } + if now < noUpdate { + continue + } relCost := int64(factor * r.servingTime * 100 / r.avgTimeCost) // Convert the value to a percentage form // Record more metrics if we are debugging @@ -311,7 +330,6 @@ func (ct *costTracker) gfLoop() { requestEstimatedTimer.Update(time.Duration(r.avgTimeCost / factor)) relativeCostHistogram.Update(relCost) - now := mclock.Now() dt := float64(now - expUpdate) expUpdate = now exp := math.Exp(-dt / float64(gfUsageTC)) diff --git a/les/metrics.go b/les/metrics.go index aebbdede51..007c3b54bc 100644 --- a/les/metrics.go +++ b/les/metrics.go @@ -83,6 +83,8 @@ var ( relativeCostSendTxHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/sendtx", nil, metrics.NewExpDecaySample(1028, 0.015)) relativeCostTxStatusHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/txstatus", nil, metrics.NewExpDecaySample(1028, 0.015)) + mclockTimer = metrics.NewRegisteredTimer("les/server/mclock", nil) + recentServedGauge = metrics.NewRegisteredGauge("les/server/recentRequestServed", nil) recentEstimatedGauge = metrics.NewRegisteredGauge("les/server/recentRequestEstimated", nil) sqServedGauge = metrics.NewRegisteredGauge("les/server/servingQueue/served", nil)