From 7f92e708c504e1c4a7382c68b5a4ed68db9c8deb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Sun, 21 Jun 2015 22:10:24 +0300 Subject: [PATCH] cmd/geth, core: impl. percentile reporting, instrument insertions --- cmd/geth/admin.go | 18 +++++++++++------- core/chain_manager.go | 5 ++++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/cmd/geth/admin.go b/cmd/geth/admin.go index 7d8780ef0..0c26cc97c 100644 --- a/cmd/geth/admin.go +++ b/cmd/geth/admin.go @@ -735,7 +735,6 @@ func (js *jsre) metrics(call otto.FunctionCall) otto.Value { format := func(total float64, rate float64) string { return fmt.Sprintf("%s (%s/s)", round(total, 0), round(rate, 2)) } - // Iterate over all the metrics, and just dump for now counters := make(map[string]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()), "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), - "Overall": format(float64(metric.Count()), metric.RateMean()), + "Total": format(float64(metric.Count()), metric.RateMean()), } case metrics.Timer: @@ -764,11 +763,16 @@ func (js *jsre) metrics(call otto.FunctionCall) otto.Value { "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), - "Overall": format(float64(metric.Count()), metric.RateMean()), - "Perc01": round(metric.Percentile(1), 2), - "Perc05": round(metric.Percentile(5), 2), - "Perc25": round(metric.Percentile(25), 2), - "Perc90": round(metric.Percentile(90), 2), + "Count": format(float64(metric.Count()), metric.RateMean()), + "Maximum": time.Duration(metric.Max()).String(), + "Minimum": time.Duration(metric.Min()).String(), + "Percentile": map[string]interface{}{ + "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: diff --git a/core/chain_manager.go b/core/chain_manager.go index e3795f561..6a017b63f 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -19,6 +19,7 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/pow" "github.com/ethereum/go-ethereum/rlp" + "github.com/rcrowley/go-metrics" ) var ( @@ -27,6 +28,8 @@ var ( blockHashPre = []byte("block-hash-") blockNumPre = []byte("block-num-") + + blockInsertTimer = metrics.GetOrRegisterTimer("core/BlockInsertions", metrics.DefaultRegistry) ) const ( @@ -691,7 +694,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { self.futureBlocks.Delete(block.Hash()) stats.processed++ - + blockInsertTimer.UpdateSince(bstart) } if (stats.queued > 0 || stats.processed > 0 || stats.ignored > 0) && bool(glog.V(logger.Info)) {