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)
|
||||
}
|
||||
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))
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue