mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-26 22:56:43 +00:00
core/state: use atomic value to reduce the lock time
Signed-off-by: jsvisa <delweng@gmail.com>
This commit is contained in:
parent
77dc1acafa
commit
7c5fc085b0
1 changed files with 15 additions and 14 deletions
|
|
@ -1117,10 +1117,10 @@ func (s *StateDB) commit(deleteEmptyObjects bool, noStorageWiping bool) (*stateU
|
||||||
}
|
}
|
||||||
// Commit objects to the trie, measuring the elapsed time
|
// Commit objects to the trie, measuring the elapsed time
|
||||||
var (
|
var (
|
||||||
accountTrieNodesUpdated int
|
accountTrieNodesUpdated atomic.Int32
|
||||||
accountTrieNodesDeleted int
|
accountTrieNodesDeleted atomic.Int32
|
||||||
storageTrieNodesUpdated int
|
storageTrieNodesUpdated atomic.Int32
|
||||||
storageTrieNodesDeleted int
|
storageTrieNodesDeleted atomic.Int32
|
||||||
|
|
||||||
lock sync.Mutex // protect two maps below
|
lock sync.Mutex // protect two maps below
|
||||||
nodes = trienode.NewMergedNodeSet() // aggregated trie nodes
|
nodes = trienode.NewMergedNodeSet() // aggregated trie nodes
|
||||||
|
|
@ -1139,17 +1139,18 @@ func (s *StateDB) commit(deleteEmptyObjects bool, noStorageWiping bool) (*stateU
|
||||||
if set == nil {
|
if set == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
lock.Lock()
|
|
||||||
defer lock.Unlock()
|
|
||||||
|
|
||||||
updates, deletes := set.Size()
|
updates, deletes := set.Size()
|
||||||
if set.Owner == (common.Hash{}) {
|
if set.Owner == (common.Hash{}) {
|
||||||
accountTrieNodesUpdated += updates
|
accountTrieNodesUpdated.Add(int32(updates))
|
||||||
accountTrieNodesDeleted += deletes
|
accountTrieNodesDeleted.Add(int32(deletes))
|
||||||
} else {
|
} else {
|
||||||
storageTrieNodesUpdated += updates
|
storageTrieNodesUpdated.Add(int32(updates))
|
||||||
storageTrieNodesDeleted += deletes
|
storageTrieNodesDeleted.Add(int32(deletes))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lock.Lock()
|
||||||
|
defer lock.Unlock()
|
||||||
return nodes.Merge(set)
|
return nodes.Merge(set)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
@ -1237,10 +1238,10 @@ func (s *StateDB) commit(deleteEmptyObjects bool, noStorageWiping bool) (*stateU
|
||||||
storageUpdatedMeter.Mark(s.StorageUpdated.Load())
|
storageUpdatedMeter.Mark(s.StorageUpdated.Load())
|
||||||
accountDeletedMeter.Mark(int64(s.AccountDeleted))
|
accountDeletedMeter.Mark(int64(s.AccountDeleted))
|
||||||
storageDeletedMeter.Mark(s.StorageDeleted.Load())
|
storageDeletedMeter.Mark(s.StorageDeleted.Load())
|
||||||
accountTrieUpdatedMeter.Mark(int64(accountTrieNodesUpdated))
|
accountTrieUpdatedMeter.Mark(int64(accountTrieNodesUpdated.Load()))
|
||||||
accountTrieDeletedMeter.Mark(int64(accountTrieNodesDeleted))
|
accountTrieDeletedMeter.Mark(int64(accountTrieNodesDeleted.Load()))
|
||||||
storageTriesUpdatedMeter.Mark(int64(storageTrieNodesUpdated))
|
storageTriesUpdatedMeter.Mark(int64(storageTrieNodesUpdated.Load()))
|
||||||
storageTriesDeletedMeter.Mark(int64(storageTrieNodesDeleted))
|
storageTriesDeletedMeter.Mark(int64(storageTrieNodesDeleted.Load()))
|
||||||
|
|
||||||
// Clear the metric markers
|
// Clear the metric markers
|
||||||
s.AccountLoaded, s.AccountUpdated, s.AccountDeleted = 0, 0, 0
|
s.AccountLoaded, s.AccountUpdated, s.AccountDeleted = 0, 0, 0
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue