aboutsummaryrefslogtreecommitdiffstats
path: root/simulation/peer-server.go
diff options
context:
space:
mode:
authorhaoping-ku <haoping.ku@dexon.org>2018-12-05 17:38:03 +0800
committerGitHub <noreply@github.com>2018-12-05 17:38:03 +0800
commit4eb02f1dd96e136b0f7cf7eff792da1e44176713 (patch)
tree3757739bff31ce4b9cb7ff45be572f9858fc19e9 /simulation/peer-server.go
parent1f48b590f6e9a6d3fd773846a3d8ba1b7f0419e6 (diff)
downloaddexon-consensus-4eb02f1dd96e136b0f7cf7eff792da1e44176713.tar
dexon-consensus-4eb02f1dd96e136b0f7cf7eff792da1e44176713.tar.gz
dexon-consensus-4eb02f1dd96e136b0f7cf7eff792da1e44176713.tar.bz2
dexon-consensus-4eb02f1dd96e136b0f7cf7eff792da1e44176713.tar.lz
dexon-consensus-4eb02f1dd96e136b0f7cf7eff792da1e44176713.tar.xz
dexon-consensus-4eb02f1dd96e136b0f7cf7eff792da1e44176713.tar.zst
dexon-consensus-4eb02f1dd96e136b0f7cf7eff792da1e44176713.zip
Haoping fix simulation (#356)
* simulation: add benchmark features * tmp * simulation: modify Debug interface * Added BlockReceived and BlockReady function to Debug interface. * Added Benchmark features. * fix * fix typos
Diffstat (limited to 'simulation/peer-server.go')
-rw-r--r--simulation/peer-server.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/simulation/peer-server.go b/simulation/peer-server.go
index 1cd6ca1..95ce5c1 100644
--- a/simulation/peer-server.go
+++ b/simulation/peer-server.go
@@ -24,7 +24,9 @@ import (
"log"
"reflect"
"sync"
+ "time"
+ "github.com/dexon-foundation/dexon-consensus/common"
"github.com/dexon-foundation/dexon-consensus/core/test"
"github.com/dexon-foundation/dexon-consensus/core/types"
"github.com/dexon-foundation/dexon-consensus/simulation/config"
@@ -41,6 +43,7 @@ type PeerServer struct {
cfg *config.Config
ctx context.Context
ctxCancel context.CancelFunc
+ blockEvents map[types.NodeID]map[common.Hash][]time.Time
}
// NewPeerServer returns a new PeerServer instance.
@@ -51,6 +54,7 @@ func NewPeerServer() *PeerServer {
peerTotalOrder: make(PeerTotalOrder),
ctx: ctx,
ctxCancel: cancel,
+ blockEvents: make(map[types.NodeID]map[common.Hash][]time.Time),
}
}
@@ -114,6 +118,17 @@ func (p *PeerServer) handleMessage(id types.NodeID, m *message) {
}
}
+func (p *PeerServer) handleBlockEventMessage(id types.NodeID, msg *blockEventMessage) {
+ if _, exist := p.blockEvents[id]; !exist {
+ p.blockEvents[id] = make(map[common.Hash][]time.Time)
+ }
+ nodeEvents := p.blockEvents[id]
+ if _, exist := nodeEvents[msg.BlockHash]; !exist {
+ nodeEvents[msg.BlockHash] = []time.Time{}
+ }
+ nodeEvents[msg.BlockHash] = msg.Timestamps
+}
+
func (p *PeerServer) mainLoop() {
for {
select {
@@ -134,6 +149,8 @@ func (p *PeerServer) mainLoop() {
p.handleBlockList(e.From, val)
case *message:
p.handleMessage(e.From, val)
+ case *blockEventMessage:
+ p.handleBlockEventMessage(e.From, val)
default:
panic(fmt.Errorf("unknown message: %v", reflect.TypeOf(e.Msg)))
}
@@ -182,4 +199,21 @@ func (p *PeerServer) Run() {
if err := p.trans.Close(); err != nil {
log.Printf("Error shutting down peerServer: %v\n", err)
}
+ p.logBlockEvents()
+}
+
+func (p *PeerServer) logBlockEvents() {
+ diffs := [blockEventCount - 1][]float64{}
+ for _, bs := range p.blockEvents {
+ for _, ts := range bs {
+ for i := 0; i < blockEventCount-1; i++ {
+ diffs[i] = append(diffs[i], float64(ts[i+1].Sub(ts[i]))/1000000000)
+ }
+ }
+ }
+ log.Printf("===== block event mean and std dev (%d blocks) =====\n", len(diffs[0]))
+ for i, a := range diffs {
+ m, d := calcMeanAndStdDeviation(a)
+ log.Printf(" event %d: mean = %f, std dev = %f\n", i, m, d)
+ }
}