cmd/geth, core: impl. percentile reporting, instrument insertions

This commit is contained in:
Péter Szilágyi 2015-06-21 22:10:24 +03:00
parent b426301467
commit 7f92e708c5
2 changed files with 15 additions and 8 deletions

@ -735,7 +735,6 @@ func (js *jsre) metrics(call otto.FunctionCall) otto.Value {
format := func(total float64, rate float64) string { format := func(total float64, rate float64) string {
return fmt.Sprintf("%s (%s/s)", round(total, 0), round(rate, 2)) return fmt.Sprintf("%s (%s/s)", round(total, 0), round(rate, 2))
} }
// Iterate over all the metrics, and just dump for now // Iterate over all the metrics, and just dump for now
counters := make(map[string]interface{}) counters := make(map[string]interface{})
metrics.DefaultRegistry.Each(func(name string, metric interface{}) { metrics.DefaultRegistry.Each(func(name string, metric interface{}) {
@ -756,7 +755,7 @@ func (js *jsre) metrics(call otto.FunctionCall) otto.Value {
"Avg01Min": format(metric.Rate1()*60, metric.Rate1()), "Avg01Min": format(metric.Rate1()*60, metric.Rate1()),
"Avg05Min": format(metric.Rate5()*300, metric.Rate5()), "Avg05Min": format(metric.Rate5()*300, metric.Rate5()),
"Avg15Min": format(metric.Rate15()*900, metric.Rate15()), "Avg15Min": format(metric.Rate15()*900, metric.Rate15()),
"Overall": format(float64(metric.Count()), metric.RateMean()), "Total": format(float64(metric.Count()), metric.RateMean()),
} }
case metrics.Timer: case metrics.Timer:
@ -764,11 +763,16 @@ func (js *jsre) metrics(call otto.FunctionCall) otto.Value {
"Avg01Min": format(metric.Rate1()*60, metric.Rate1()), "Avg01Min": format(metric.Rate1()*60, metric.Rate1()),
"Avg05Min": format(metric.Rate5()*300, metric.Rate5()), "Avg05Min": format(metric.Rate5()*300, metric.Rate5()),
"Avg15Min": format(metric.Rate15()*900, metric.Rate15()), "Avg15Min": format(metric.Rate15()*900, metric.Rate15()),
"Overall": format(float64(metric.Count()), metric.RateMean()), "Count": format(float64(metric.Count()), metric.RateMean()),
"Perc01": round(metric.Percentile(1), 2), "Maximum": time.Duration(metric.Max()).String(),
"Perc05": round(metric.Percentile(5), 2), "Minimum": time.Duration(metric.Min()).String(),
"Perc25": round(metric.Percentile(25), 2), "Percentile": map[string]interface{}{
"Perc90": round(metric.Percentile(90), 2), "20": time.Duration(metric.Percentile(0.2)).String(),
"50": time.Duration(metric.Percentile(0.5)).String(),
"80": time.Duration(metric.Percentile(0.8)).String(),
"95": time.Duration(metric.Percentile(0.95)).String(),
"99": time.Duration(metric.Percentile(0.99)).String(),
},
} }
default: default:

@ -19,6 +19,7 @@ import (
"github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/pow" "github.com/ethereum/go-ethereum/pow"
"github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rlp"
"github.com/rcrowley/go-metrics"
) )
var ( var (
@ -27,6 +28,8 @@ var (
blockHashPre = []byte("block-hash-") blockHashPre = []byte("block-hash-")
blockNumPre = []byte("block-num-") blockNumPre = []byte("block-num-")
blockInsertTimer = metrics.GetOrRegisterTimer("core/BlockInsertions", metrics.DefaultRegistry)
) )
const ( const (
@ -691,7 +694,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
self.futureBlocks.Delete(block.Hash()) self.futureBlocks.Delete(block.Hash())
stats.processed++ stats.processed++
blockInsertTimer.UpdateSince(bstart)
} }
if (stats.queued > 0 || stats.processed > 0 || stats.ignored > 0) && bool(glog.V(logger.Info)) { if (stats.queued > 0 || stats.processed > 0 || stats.ignored > 0) && bool(glog.V(logger.Info)) {