Skip to content

Commit

Permalink
state sync oom fix
Browse files Browse the repository at this point in the history
  • Loading branch information
bufrr committed Jun 6, 2022
1 parent 1654de8 commit 01c564c
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
13 changes: 13 additions & 0 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ const (
const (
defaultConfigFile = "config.json"
estimatedHeaderSize = 418
defaultSyncStateMaxPeer = 10
defaultSyncStateThreadMemory = 30 * 1024 * 1024
defaultSyncHeaderMaxMemoryPercent = 2.0
defaultSyncHeaderMaxSize = 32768
defaultSyncMaxMemoryPercent = 25
Expand Down Expand Up @@ -267,6 +269,7 @@ var (
LogLevel: 1,
MaxLogFileSize: 20,
MaxLogFileTotalSize: 100,
SyncStateMaxPeer: 0,
SyncHeaderMaxSize: 0,
SyncHeaderMaxMemorySize: 0,
SyncBatchWindowSize: 0,
Expand Down Expand Up @@ -357,6 +360,7 @@ type Configuration struct {
Mining bool `json:"Mining"`
MiningDebug bool `json:"MiningDebug"`
BeneficiaryAddr string `json:"BeneficiaryAddr"`
SyncStateMaxPeer uint32 `json:"SyncStateMaxPeer"`
SyncHeaderMaxSize uint32 `json:"SyncHeaderMaxSize"`
SyncHeaderMaxMemorySize uint32 `json:"SyncHeaderMaxMemorySize"`
SyncBatchWindowSize uint32 `json:"SyncBatchWindowSize"`
Expand Down Expand Up @@ -461,6 +465,15 @@ func Init() error {
Parameters.SyncMode = SyncMode
}

if Parameters.SyncStateMaxPeer == 0 {
syncStateMaxPeer := uint32(float64(memory.TotalMemory() / defaultSyncStateThreadMemory))
Parameters.SyncStateMaxPeer = syncStateMaxPeer
if Parameters.SyncStateMaxPeer == 0 {
Parameters.SyncStateMaxPeer = defaultSyncStateMaxPeer
}
log.Printf("Set SyncStateMaxPeer to %v", Parameters.SyncStateMaxPeer)
}

if Parameters.SyncHeaderMaxSize == 0 {
syncHeaderMaxMemorySize := uint64(Parameters.SyncHeaderMaxMemorySize) * 1024 * 1024
if syncHeaderMaxMemorySize == 0 {
Expand Down
11 changes: 8 additions & 3 deletions node/stateSync.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package node

import (
"github.com/nknorg/nkn/v2/config"
"math"
"time"

Expand Down Expand Up @@ -171,10 +172,14 @@ func (s *stateSync) run() error {

func (s *stateSync) startWorkerThread() {
var workerId uint32
peersNum := len(s.peers)
for workerId = 0; workerId < uint32(peersNum*concurrentSyncRequestPerNeighbor); workerId++ {
peersNum := uint32(len(s.peers) * concurrentSyncRequestPerNeighbor)
workerNum := config.Parameters.SyncStateMaxPeer
if workerNum > peersNum {
workerNum = peersNum
}
for workerId = 0; workerId < workerNum; workerId++ {
go func(workerId uint32) {
s.startWorker(s.peers[workerId%uint32(peersNum)])
s.startWorker(s.peers[workerId%peersNum])
}(workerId)
}
}

0 comments on commit 01c564c

Please sign in to comment.