diff options
author | haoping-ku <haoping.ku@dexon.org> | 2018-12-05 17:38:03 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-05 17:38:03 +0800 |
commit | 4eb02f1dd96e136b0f7cf7eff792da1e44176713 (patch) | |
tree | 3757739bff31ce4b9cb7ff45be572f9858fc19e9 /simulation/peer-server.go | |
parent | 1f48b590f6e9a6d3fd773846a3d8ba1b7f0419e6 (diff) | |
download | dexon-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.go | 34 |
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) + } } |