aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/dexcon-simulation-with-scheduler/main.go
diff options
context:
space:
mode:
authorMission Liao <mission.liao@dexon.org>2019-02-15 14:18:59 +0800
committerJimmy Hu <jimmy.hu@dexon.org>2019-02-19 10:48:50 +0800
commit4dbdc22e355cf1f6f0c39af1b2f3737b7527bc0c (patch)
tree625b7d34aa700d072ffb8e68dc89ed3936b76d29 /cmd/dexcon-simulation-with-scheduler/main.go
parente4825619fb2499f5f534537c1a4d52d3e0bcacfe (diff)
downloaddexon-consensus-4dbdc22e355cf1f6f0c39af1b2f3737b7527bc0c.tar
dexon-consensus-4dbdc22e355cf1f6f0c39af1b2f3737b7527bc0c.tar.gz
dexon-consensus-4dbdc22e355cf1f6f0c39af1b2f3737b7527bc0c.tar.bz2
dexon-consensus-4dbdc22e355cf1f6f0c39af1b2f3737b7527bc0c.tar.lz
dexon-consensus-4dbdc22e355cf1f6f0c39af1b2f3737b7527bc0c.tar.xz
dexon-consensus-4dbdc22e355cf1f6f0c39af1b2f3737b7527bc0c.tar.zst
dexon-consensus-4dbdc22e355cf1f6f0c39af1b2f3737b7527bc0c.zip
big-bang: single chain (#446)
Diffstat (limited to 'cmd/dexcon-simulation-with-scheduler/main.go')
-rw-r--r--cmd/dexcon-simulation-with-scheduler/main.go139
1 files changed, 0 insertions, 139 deletions
diff --git a/cmd/dexcon-simulation-with-scheduler/main.go b/cmd/dexcon-simulation-with-scheduler/main.go
deleted file mode 100644
index d06e6e0..0000000
--- a/cmd/dexcon-simulation-with-scheduler/main.go
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright 2018 The dexon-consensus Authors
-// This file is part of the dexon-consensus library.
-//
-// The dexon-consensus library is free software: you can redistribute it
-// and/or modify it under the terms of the GNU Lesser General Public License as
-// published by the Free Software Foundation, either version 3 of the License,
-// or (at your option) any later version.
-//
-// The dexon-consensus library is distributed in the hope that it will be
-// useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
-// General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with the dexon-consensus library. If not, see
-// <http://www.gnu.org/licenses/>.
-
-package main
-
-import (
- "flag"
- "log"
- "math"
- "math/rand"
- "net/http"
- _ "net/http/pprof"
- "os"
- "runtime"
- "runtime/pprof"
- "time"
-
- "github.com/dexon-foundation/dexon-consensus/common"
- "github.com/dexon-foundation/dexon-consensus/core"
- "github.com/dexon-foundation/dexon-consensus/core/test"
- integration "github.com/dexon-foundation/dexon-consensus/integration_test"
- "github.com/dexon-foundation/dexon-consensus/simulation/config"
-)
-
-var (
- configFile = flag.String("config", "", "path to simulation config file")
- cpuprofile = flag.String("cpuprofile", "", "write cpu profile to `file`")
- memprofile = flag.String("memprofile", "", "write memory profile to `file`")
-)
-
-func main() {
- flag.Parse()
- rand.Seed(time.Now().UnixNano())
- // Supports runtime pprof monitoring.
- go func() {
- log.Println(http.ListenAndServe("localhost:6060", nil))
- }()
- if *configFile == "" {
- log.Fatal("error: no configuration file specified")
- }
- if *cpuprofile != "" {
- f, err := os.Create(*cpuprofile)
- if err != nil {
- log.Fatal("could not create CPU profile: ", err)
- }
- if err := pprof.StartCPUProfile(f); err != nil {
- log.Fatal("could not start CPU profile: ", err)
- }
- defer pprof.StopCPUProfile()
- }
-
- cfg, err := config.Read(*configFile)
- if err != nil {
- log.Fatal("unable to read config: ", err)
- }
- // Setup latencies, nodes.
- networkLatency := &test.NormalLatencyModel{
- Sigma: cfg.Networking.Direct.Sigma,
- Mean: cfg.Networking.Direct.Mean,
- }
- proposingLatency := &test.NormalLatencyModel{
- Sigma: cfg.Node.Legacy.ProposeIntervalSigma,
- Mean: cfg.Node.Legacy.ProposeIntervalMean,
- }
- // Setup key pairs.
- prvKeys, pubKeys, err := test.NewKeys(int(cfg.Node.Num))
- if err != nil {
- log.Fatal("could not setup key pairs: ", err)
- }
- // Setup governance instance.
- gov, err := test.NewGovernance(
- test.NewState(
- pubKeys,
- time.Duration(cfg.Networking.Direct.Mean)*time.Millisecond,
- &common.NullLogger{},
- true,
- ), core.ConfigRoundShift)
- if err != nil {
- log.Fatal("could not setup governance: ", err)
- }
- // Setup nodes and other consensus related stuffs.
- nodes, err := integration.PrepareNodes(
- gov, prvKeys, uint32(cfg.Node.Num), networkLatency, proposingLatency)
- if err != nil {
- log.Fatal("could not setup nodes: ", err)
- }
- apps, dbs := integration.CollectAppAndDBFromNodes(nodes)
- blockPerNode := int(math.Ceil(
- float64(cfg.Node.MaxBlock) / float64(cfg.Node.Num)))
- sch := test.NewScheduler(
- test.NewStopByConfirmedBlocks(blockPerNode, apps, dbs))
- now := time.Now().UTC()
- for _, v := range nodes {
- if err := v.Bootstrap(sch, now); err != nil {
- panic(err)
- }
- }
- // Run the simulation.
- sch.Run(cfg.Scheduler.WorkerNum)
- if err = integration.VerifyApps(apps); err != nil {
- log.Fatal("consensus result is not incorrect: ", err)
- }
- // Prepare statistics.
- stats, err := integration.NewStats(sch.CloneExecutionHistory(), apps)
- if err != nil {
- log.Fatal("could not generate statistics: ", err)
- }
- if *memprofile != "" {
- f, err := os.Create(*memprofile)
- if err != nil {
- log.Fatal("could not create memory profile: ", err)
- }
- runtime.GC() // get up-to-date statistics
- if err := pprof.WriteHeapProfile(f); err != nil {
- log.Fatal("could not write memory profile: ", err)
- }
- // #nosec G104
- f.Close()
- }
-
- log.Printf("BPS: %v\n", stats.BPS)
- log.Printf("ExecutionTime: %v\n", stats.ExecutionTime)
- log.Printf("Prepare: %v\n", time.Duration(stats.All.PrepareExecLatency))
- log.Printf("Process: %v\n", time.Duration(stats.All.ProcessExecLatency))
-}