consensus, ethdb, metrics: implement forced-meter (#17667)
This commit is contained in:
parent
41ac8dd803
commit
5d1d1a808d
@ -485,7 +485,7 @@ func New(config Config, notify []string, noverify bool) *Ethash {
|
|||||||
caches: newlru("cache", config.CachesInMem, newCache),
|
caches: newlru("cache", config.CachesInMem, newCache),
|
||||||
datasets: newlru("dataset", config.DatasetsInMem, newDataset),
|
datasets: newlru("dataset", config.DatasetsInMem, newDataset),
|
||||||
update: make(chan struct{}),
|
update: make(chan struct{}),
|
||||||
hashrate: metrics.NewMeter(),
|
hashrate: metrics.NewMeterForced(),
|
||||||
workCh: make(chan *sealTask),
|
workCh: make(chan *sealTask),
|
||||||
fetchWorkCh: make(chan *sealWork),
|
fetchWorkCh: make(chan *sealWork),
|
||||||
submitWorkCh: make(chan *mineResult),
|
submitWorkCh: make(chan *mineResult),
|
||||||
@ -505,7 +505,7 @@ func NewTester(notify []string, noverify bool) *Ethash {
|
|||||||
caches: newlru("cache", 1, newCache),
|
caches: newlru("cache", 1, newCache),
|
||||||
datasets: newlru("dataset", 1, newDataset),
|
datasets: newlru("dataset", 1, newDataset),
|
||||||
update: make(chan struct{}),
|
update: make(chan struct{}),
|
||||||
hashrate: metrics.NewMeter(),
|
hashrate: metrics.NewMeterForced(),
|
||||||
workCh: make(chan *sealTask),
|
workCh: make(chan *sealTask),
|
||||||
fetchWorkCh: make(chan *sealWork),
|
fetchWorkCh: make(chan *sealWork),
|
||||||
submitWorkCh: make(chan *mineResult),
|
submitWorkCh: make(chan *mineResult),
|
||||||
|
@ -155,15 +155,12 @@ func (db *LDBDatabase) LDB() *leveldb.DB {
|
|||||||
|
|
||||||
// Meter configures the database metrics collectors and
|
// Meter configures the database metrics collectors and
|
||||||
func (db *LDBDatabase) Meter(prefix string) {
|
func (db *LDBDatabase) Meter(prefix string) {
|
||||||
if metrics.Enabled {
|
// Initialize all the metrics collector at the requested prefix
|
||||||
// Initialize all the metrics collector at the requested prefix
|
db.compTimeMeter = metrics.NewRegisteredMeter(prefix+"compact/time", nil)
|
||||||
db.compTimeMeter = metrics.NewRegisteredMeter(prefix+"compact/time", nil)
|
db.compReadMeter = metrics.NewRegisteredMeter(prefix+"compact/input", nil)
|
||||||
db.compReadMeter = metrics.NewRegisteredMeter(prefix+"compact/input", nil)
|
db.compWriteMeter = metrics.NewRegisteredMeter(prefix+"compact/output", nil)
|
||||||
db.compWriteMeter = metrics.NewRegisteredMeter(prefix+"compact/output", nil)
|
db.diskReadMeter = metrics.NewRegisteredMeter(prefix+"disk/read", nil)
|
||||||
db.diskReadMeter = metrics.NewRegisteredMeter(prefix+"disk/read", nil)
|
db.diskWriteMeter = metrics.NewRegisteredMeter(prefix+"disk/write", nil)
|
||||||
db.diskWriteMeter = metrics.NewRegisteredMeter(prefix+"disk/write", nil)
|
|
||||||
}
|
|
||||||
// Initialize write delay metrics no matter we are in metric mode or not.
|
|
||||||
db.writeDelayMeter = metrics.NewRegisteredMeter(prefix+"compact/writedelay/duration", nil)
|
db.writeDelayMeter = metrics.NewRegisteredMeter(prefix+"compact/writedelay/duration", nil)
|
||||||
db.writeDelayNMeter = metrics.NewRegisteredMeter(prefix+"compact/writedelay/counter", nil)
|
db.writeDelayNMeter = metrics.NewRegisteredMeter(prefix+"compact/writedelay/counter", nil)
|
||||||
|
|
||||||
|
@ -17,9 +17,6 @@ type EWMA interface {
|
|||||||
|
|
||||||
// NewEWMA constructs a new EWMA with the given alpha.
|
// NewEWMA constructs a new EWMA with the given alpha.
|
||||||
func NewEWMA(alpha float64) EWMA {
|
func NewEWMA(alpha float64) EWMA {
|
||||||
if !Enabled {
|
|
||||||
return NilEWMA{}
|
|
||||||
}
|
|
||||||
return &StandardEWMA{alpha: alpha}
|
return &StandardEWMA{alpha: alpha}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +29,17 @@ func GetOrRegisterMeter(name string, r Registry) Meter {
|
|||||||
return r.GetOrRegister(name, NewMeter).(Meter)
|
return r.GetOrRegister(name, NewMeter).(Meter)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetOrRegisterMeterForced returns an existing Meter or constructs and registers a
|
||||||
|
// new StandardMeter no matter the global switch is enabled or not.
|
||||||
|
// Be sure to unregister the meter from the registry once it is of no use to
|
||||||
|
// allow for garbage collection.
|
||||||
|
func GetOrRegisterMeterForced(name string, r Registry) Meter {
|
||||||
|
if nil == r {
|
||||||
|
r = DefaultRegistry
|
||||||
|
}
|
||||||
|
return r.GetOrRegister(name, NewMeterForced).(Meter)
|
||||||
|
}
|
||||||
|
|
||||||
// NewMeter constructs a new StandardMeter and launches a goroutine.
|
// NewMeter constructs a new StandardMeter and launches a goroutine.
|
||||||
// Be sure to call Stop() once the meter is of no use to allow for garbage collection.
|
// Be sure to call Stop() once the meter is of no use to allow for garbage collection.
|
||||||
func NewMeter() Meter {
|
func NewMeter() Meter {
|
||||||
@ -46,8 +57,23 @@ func NewMeter() Meter {
|
|||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewMeter constructs and registers a new StandardMeter and launches a
|
// NewMeterForced constructs a new StandardMeter and launches a goroutine no matter
|
||||||
// goroutine.
|
// the global switch is enabled or not.
|
||||||
|
// Be sure to call Stop() once the meter is of no use to allow for garbage collection.
|
||||||
|
func NewMeterForced() Meter {
|
||||||
|
m := newStandardMeter()
|
||||||
|
arbiter.Lock()
|
||||||
|
defer arbiter.Unlock()
|
||||||
|
arbiter.meters[m] = struct{}{}
|
||||||
|
if !arbiter.started {
|
||||||
|
arbiter.started = true
|
||||||
|
go arbiter.tick()
|
||||||
|
}
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewRegisteredMeter constructs and registers a new StandardMeter
|
||||||
|
// and launches a goroutine.
|
||||||
// Be sure to unregister the meter from the registry once it is of no use to
|
// Be sure to unregister the meter from the registry once it is of no use to
|
||||||
// allow for garbage collection.
|
// allow for garbage collection.
|
||||||
func NewRegisteredMeter(name string, r Registry) Meter {
|
func NewRegisteredMeter(name string, r Registry) Meter {
|
||||||
@ -59,6 +85,19 @@ func NewRegisteredMeter(name string, r Registry) Meter {
|
|||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewRegisteredMeterForced constructs and registers a new StandardMeter
|
||||||
|
// and launches a goroutine no matter the global switch is enabled or not.
|
||||||
|
// Be sure to unregister the meter from the registry once it is of no use to
|
||||||
|
// allow for garbage collection.
|
||||||
|
func NewRegisteredMeterForced(name string, r Registry) Meter {
|
||||||
|
c := NewMeterForced()
|
||||||
|
if nil == r {
|
||||||
|
r = DefaultRegistry
|
||||||
|
}
|
||||||
|
r.Register(name, c)
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
// MeterSnapshot is a read-only copy of another Meter.
|
// MeterSnapshot is a read-only copy of another Meter.
|
||||||
type MeterSnapshot struct {
|
type MeterSnapshot struct {
|
||||||
count int64
|
count int64
|
||||||
|
Loading…
Reference in New Issue
Block a user