cosmatic and add CPU/walltime profiling

This commit is contained in:
Po 2025-07-27 17:50:39 +02:00
parent ab3a813582
commit ad0b8f83c8
3 changed files with 23 additions and 5 deletions

View file

@ -474,11 +474,12 @@ func showMetrics() {
fmt.Println("StateCopyTime: ", state.StateCopyTime) fmt.Println("StateCopyTime: ", state.StateCopyTime)
fmt.Println("StateCopyNewTime: ", state.StateNewTime) fmt.Println("StateCopyNewTime: ", state.StateNewTime)
fmt.Println("StateDeepCpTime: ", state.StateDeepCpTime) fmt.Println("StateDeepCpTime: ", state.StateDeepCpTime)
fmt.Println("PrefetchBALTime: ", core.PrefetchBALTime) fmt.Println("PrefetchBALtime: ", core.PrefetchBALTime)
fmt.Println("PrefetchMergeTime:", core.PrefetchMergeBALTime) fmt.Println("PrefetchMergeTime:", core.PrefetchMergeBALTime)
fmt.Println("ParallelExeTime: ", core.ParallelExeTime) fmt.Println("ParallelExeTime: ", core.ParallelExeTime)
fmt.Println("PostMergeTime: ", core.PostMergeTime) fmt.Println("PostMergeTime: ", core.PostMergeTime)
fmt.Println("PrefetchTrieTime: ", core.PrefetchTrieTimer) fmt.Println("PrefetchTrieWallTime: ", core.PrefetchTrieTimer)
// fmt.Println("PrefetchTrieCPUtime: ", state.PrefetchTrieCPUTime)
// total // total
fmt.Println("blockInsertTimer", blockInsertTimer.Total()) fmt.Println("blockInsertTimer", blockInsertTimer.Total())

View file

@ -101,9 +101,9 @@ func (p *ParallelStateProcessor) Process(block *types.Block, statedb *state.Stat
go func() { go func() {
defer wg.Done() defer wg.Done()
start := time.Now() preCalPostStart := time.Now()
statedb.PreComputePostState(block.NumberU64(), runtime.NumCPU()/2) statedb.PreComputePostState(block.NumberU64(), runtime.NumCPU()/2)
PrefetchMergeBALTime += time.Since(start) PrefetchMergeBALTime += time.Since(preCalPostStart)
exeStart := time.Now() exeStart := time.Now()
result, err = p.executeParallel(block, statedb, cfg, gp, signer, context, initialdb) result, err = p.executeParallel(block, statedb, cfg, gp, signer, context, initialdb)

View file

@ -27,6 +27,7 @@ import (
"slices" "slices"
"sync" "sync"
"sync/atomic" "sync/atomic"
"syscall"
"time" "time"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
@ -217,7 +218,7 @@ func init() {
case BalPreblockKeysPostValues: case BalPreblockKeysPostValues:
{ {
println("bal preblock keys post values") println("bal preblock keys post values")
fileName = "access_lists_kpostv.2000.json" fileName = "access_lists_kpostv.json"
data, err := os.ReadFile(fileName) data, err := os.ReadFile(fileName)
if err != nil { if err != nil {
log.Error("Failed to load access lists", "err", err) log.Error("Failed to load access lists", "err", err)
@ -732,9 +733,23 @@ func (s *StateDB) MergePostBalStates() {
} }
} }
// Must profile it seperately with sequentially processing postState merge and parallel processing in parallel_state_processor.go
var PrefetchTrieCPUTime = time.Duration(0)
func GetCPU() int64 {
usage := new(syscall.Rusage)
syscall.Getrusage(syscall.RUSAGE_SELF, usage)
return usage.Utime.Nano() + usage.Stime.Nano()
}
func (s *StateDB) PrefetchTrie() { func (s *StateDB) PrefetchTrie() {
var workers errgroup.Group var workers errgroup.Group
cpuUsed := runtime.NumCPU() / 2
workers.SetLimit(cpuUsed)
start := GetCPU()
for addr := range s.journal.dirties { for addr := range s.journal.dirties {
addr := addr addr := addr
// s.trie.GetAccount(addr) // s.trie.GetAccount(addr)
@ -778,6 +793,8 @@ func (s *StateDB) PrefetchTrie() {
tr, _ := s.db.OpenStorageTrie(s.originalRoot, params.BeaconRootsAddress, obj.data.Root, nil) tr, _ := s.db.OpenStorageTrie(s.originalRoot, params.BeaconRootsAddress, obj.data.Root, nil)
obj.trie = tr obj.trie = tr
} }
PrefetchTrieCPUTime += time.Duration((GetCPU() - start) / int64(cpuUsed) * 2)
} }
func (s *StateDB) setRefund(gas uint64) { func (s *StateDB) setRefund(gas uint64) {