mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
les: quick and dirty workaround for mclock leaps
This commit is contained in:
parent
e331baa7cc
commit
5bdd98b674
2 changed files with 21 additions and 1 deletions
|
|
@ -269,10 +269,29 @@ func (ct *costTracker) gfLoop() {
|
||||||
log.Debug("global cost factor saved", "value", factor)
|
log.Debug("global cost factor saved", "value", factor)
|
||||||
}
|
}
|
||||||
saveTicker := time.NewTicker(time.Minute * 10)
|
saveTicker := time.NewTicker(time.Minute * 10)
|
||||||
|
mclockTicker := time.NewTicker(time.Millisecond * 100)
|
||||||
|
lastClock := mclock.Now()
|
||||||
|
noUpdate := lastClock
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
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:
|
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
|
relCost := int64(factor * r.servingTime * 100 / r.avgTimeCost) // Convert the value to a percentage form
|
||||||
|
|
||||||
// Record more metrics if we are debugging
|
// Record more metrics if we are debugging
|
||||||
|
|
@ -311,7 +330,6 @@ func (ct *costTracker) gfLoop() {
|
||||||
requestEstimatedTimer.Update(time.Duration(r.avgTimeCost / factor))
|
requestEstimatedTimer.Update(time.Duration(r.avgTimeCost / factor))
|
||||||
relativeCostHistogram.Update(relCost)
|
relativeCostHistogram.Update(relCost)
|
||||||
|
|
||||||
now := mclock.Now()
|
|
||||||
dt := float64(now - expUpdate)
|
dt := float64(now - expUpdate)
|
||||||
expUpdate = now
|
expUpdate = now
|
||||||
exp := math.Exp(-dt / float64(gfUsageTC))
|
exp := math.Exp(-dt / float64(gfUsageTC))
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,8 @@ var (
|
||||||
relativeCostSendTxHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/sendtx", nil, metrics.NewExpDecaySample(1028, 0.015))
|
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))
|
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)
|
recentServedGauge = metrics.NewRegisteredGauge("les/server/recentRequestServed", nil)
|
||||||
recentEstimatedGauge = metrics.NewRegisteredGauge("les/server/recentRequestEstimated", nil)
|
recentEstimatedGauge = metrics.NewRegisteredGauge("les/server/recentRequestEstimated", nil)
|
||||||
sqServedGauge = metrics.NewRegisteredGauge("les/server/servingQueue/served", nil)
|
sqServedGauge = metrics.NewRegisteredGauge("les/server/servingQueue/served", nil)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue