From 31d92c50adba6af49939a6f91dc52f9f714ad935 Mon Sep 17 00:00:00 2001 From: galaio <12880651+galaio@users.noreply.github.com> Date: Sat, 27 Apr 2024 06:37:42 +0800 Subject: [PATCH] chore: add metric & log for blobTx; (#2428) --- core/blockchain_insert.go | 7 +++++-- core/data_availability.go | 11 +++++++++++ miner/worker.go | 3 ++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/core/blockchain_insert.go b/core/blockchain_insert.go index fafe684aa..4777bff1a 100644 --- a/core/blockchain_insert.go +++ b/core/blockchain_insert.go @@ -48,16 +48,19 @@ func (st *insertStats) report(chain []*types.Block, index int, snapDiffItems, sn // If we're at the last block of the batch or report period reached, log if index == len(chain)-1 || elapsed >= statsReportLimit { // Count the number of transactions in this segment - var txs int + var txs, blobs int for _, block := range chain[st.lastIndex : index+1] { txs += len(block.Transactions()) + for _, sidecar := range block.Sidecars() { + blobs += len(sidecar.Blobs) + } } end := chain[index] // Assemble the log context and send it to the logger context := []interface{}{ "number", end.Number(), "hash", end.Hash(), "miner", end.Coinbase(), - "blocks", st.processed, "txs", txs, "mgas", float64(st.usedGas) / 1000000, + "blocks", st.processed, "txs", txs, "blobs", blobs, "mgas", float64(st.usedGas) / 1000000, "elapsed", common.PrettyDuration(elapsed), "mgasps", float64(st.usedGas) * 1000 / float64(elapsed), } if timestamp := time.Unix(int64(end.Time()), 0); time.Since(timestamp) > time.Minute { diff --git a/core/data_availability.go b/core/data_availability.go index cd8e58a14..2953c8c36 100644 --- a/core/data_availability.go +++ b/core/data_availability.go @@ -5,6 +5,9 @@ import ( "errors" "fmt" "sync" + "time" + + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/gopool" @@ -14,6 +17,10 @@ import ( "github.com/ethereum/go-ethereum/params" ) +var ( + daCheckTimer = metrics.NewRegisteredTimer("chain/dacheck", nil) +) + // validateBlobSidecar it is same as validateBlobSidecar in core/txpool/validation.go func validateBlobSidecar(hashes []common.Hash, sidecar *types.BlobSidecar) error { if len(sidecar.Blobs) != len(hashes) { @@ -46,6 +53,10 @@ func validateBlobSidecar(hashes []common.Hash, sidecar *types.BlobSidecar) error // IsDataAvailable it checks that the blobTx block has available blob data func IsDataAvailable(chain consensus.ChainHeaderReader, block *types.Block) (err error) { + defer func(start time.Time) { + daCheckTimer.Update(time.Since(start)) + }(time.Now()) + // refer logic in ValidateBody if !chain.Config().IsCancun(block.Number(), block.Time()) { if block.Sidecars() != nil { diff --git a/miner/worker.go b/miner/worker.go index 2cc2ff00a..43b08622e 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -115,6 +115,7 @@ func (env *environment) copy() *environment { if env.sidecars != nil { cpy.sidecars = make(types.BlobSidecars, len(env.sidecars)) copy(cpy.sidecars, env.sidecars) + cpy.blobs = env.blobs } return cpy @@ -1420,7 +1421,7 @@ func (w *worker) commit(env *environment, interval func(), update bool, start ti select { case w.taskCh <- &task{receipts: receipts, state: env.state, block: block, createdAt: time.Now()}: log.Info("Commit new sealing work", "number", block.Number(), "sealhash", w.engine.SealHash(block.Header()), - "txs", env.tcount, "gas", block.GasUsed(), "fees", feesInEther, "elapsed", common.PrettyDuration(time.Since(start))) + "txs", env.tcount, "blobs", env.blobs, "gas", block.GasUsed(), "fees", feesInEther, "elapsed", common.PrettyDuration(time.Since(start))) case <-w.exitCh: log.Info("Worker has exited")