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), | ||||
| 		datasets:     newlru("dataset", config.DatasetsInMem, newDataset), | ||||
| 		update:       make(chan struct{}), | ||||
| 		hashrate:     metrics.NewMeter(), | ||||
| 		hashrate:     metrics.NewMeterForced(), | ||||
| 		workCh:       make(chan *sealTask), | ||||
| 		fetchWorkCh:  make(chan *sealWork), | ||||
| 		submitWorkCh: make(chan *mineResult), | ||||
| @ -505,7 +505,7 @@ func NewTester(notify []string, noverify bool) *Ethash { | ||||
| 		caches:       newlru("cache", 1, newCache), | ||||
| 		datasets:     newlru("dataset", 1, newDataset), | ||||
| 		update:       make(chan struct{}), | ||||
| 		hashrate:     metrics.NewMeter(), | ||||
| 		hashrate:     metrics.NewMeterForced(), | ||||
| 		workCh:       make(chan *sealTask), | ||||
| 		fetchWorkCh:  make(chan *sealWork), | ||||
| 		submitWorkCh: make(chan *mineResult), | ||||
|  | ||||
| @ -155,15 +155,12 @@ func (db *LDBDatabase) LDB() *leveldb.DB { | ||||
| 
 | ||||
| // Meter configures the database metrics collectors and
 | ||||
| func (db *LDBDatabase) Meter(prefix string) { | ||||
| 	if metrics.Enabled { | ||||
| 		// Initialize all the metrics collector at the requested prefix
 | ||||
| 		db.compTimeMeter = metrics.NewRegisteredMeter(prefix+"compact/time", nil) | ||||
| 		db.compReadMeter = metrics.NewRegisteredMeter(prefix+"compact/input", nil) | ||||
| 		db.compWriteMeter = metrics.NewRegisteredMeter(prefix+"compact/output", nil) | ||||
| 		db.diskReadMeter = metrics.NewRegisteredMeter(prefix+"disk/read", nil) | ||||
| 		db.diskWriteMeter = metrics.NewRegisteredMeter(prefix+"disk/write", nil) | ||||
| 	} | ||||
| 	// Initialize write delay metrics no matter we are in metric mode or not.
 | ||||
| 	// Initialize all the metrics collector at the requested prefix
 | ||||
| 	db.compTimeMeter = metrics.NewRegisteredMeter(prefix+"compact/time", nil) | ||||
| 	db.compReadMeter = metrics.NewRegisteredMeter(prefix+"compact/input", nil) | ||||
| 	db.compWriteMeter = metrics.NewRegisteredMeter(prefix+"compact/output", nil) | ||||
| 	db.diskReadMeter = metrics.NewRegisteredMeter(prefix+"disk/read", nil) | ||||
| 	db.diskWriteMeter = metrics.NewRegisteredMeter(prefix+"disk/write", nil) | ||||
| 	db.writeDelayMeter = metrics.NewRegisteredMeter(prefix+"compact/writedelay/duration", 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.
 | ||||
| func NewEWMA(alpha float64) EWMA { | ||||
| 	if !Enabled { | ||||
| 		return NilEWMA{} | ||||
| 	} | ||||
| 	return &StandardEWMA{alpha: alpha} | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -29,6 +29,17 @@ func GetOrRegisterMeter(name string, r Registry) 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.
 | ||||
| // Be sure to call Stop() once the meter is of no use to allow for garbage collection.
 | ||||
| func NewMeter() Meter { | ||||
| @ -46,8 +57,23 @@ func NewMeter() Meter { | ||||
| 	return m | ||||
| } | ||||
| 
 | ||||
| // NewMeter constructs and registers a new StandardMeter and launches a
 | ||||
| // goroutine.
 | ||||
| // NewMeterForced constructs a new StandardMeter and launches a goroutine no matter
 | ||||
| // 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
 | ||||
| // allow for garbage collection.
 | ||||
| func NewRegisteredMeter(name string, r Registry) Meter { | ||||
| @ -59,6 +85,19 @@ func NewRegisteredMeter(name string, r Registry) Meter { | ||||
| 	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.
 | ||||
| type MeterSnapshot struct { | ||||
| 	count                          int64 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user