---
# System prepended metadata

title: Standardized Ethereum Performance Metrics

---

# Standardized Ethereum performance metrics

This document defines a standardized breakdown of `engine_newPayload` performance metrics for ethereum block execution, validation, and the relevant state IO. 

The goal is to enable consistent measurement, reporting and comparison across different Ethereum client implementations.

## EVM execution metrics

EVM execution metrics should include the time spent in the following components:

- **Gas accounting**: time spent calculating and deducting gas for both opcodes and precompiled contracts, including constant and dynamic gas costs
- **Stack validation and memory expansion**: time spent validating stack constraints and handling memory growth
- **Opcode execution**: time spent executing EVM opcodes
- **Precompile execution**: time spent executing precompiled contracts

Note that precisely tracking the time spent in each individual component may introduce significant overhead. In practice, reporting the overall EVM execution time is  sufficient.

## Block validation metrics

Block validation metrics should include the time spent in the following components:

- **State validation**: time spent on state tree(s) re-merkleization after applying state mutations.
    - **account tree merkleization**: time spent on account tree merkleization and comparison. This time must include tree node loading as well as the hash recomputation.
    - **storage tree merkleization**: time spent on storage trees merkleization. This time must include tree node loading as well as the hash recomputation.
- **Block component validation**:
    - **Receipts hashing**: time spent on receipt list merkleization and hash comparison.
    - **Requests hashing**: time spent on request list merkleization and hash comparison (only applied since Prague fork).
    - **Bloom filter validation**: time spent on bloom filter construction and comparison.
    - **Gas usage validation**: time spent on block gas usage comparsion.

Note reporting the overall block validation time is usually  sufficient.

## State read metrics

State read metrics should include the time spent on state data loading, specifically:

- **Account reads**: time spent on account data loading.
- **Storage reads**: time spent on storage data loading.
- **Code reads**: time spent on contract code loading.

What's more, client implementations may additionally report cache statistics for each category, including cache hit, miss and hit ratio.

## State write metrics

State read metrics should include the time spent on state data commit, specifically:

- **Tree commit**: time spent on committing the mutated tree nodes in the account tree and all associated storage trees
- **State commit**: time spent on committing the mutated states including accounts and storage slots
- **Block commit**: time spent on committing the block data

Note reporting the overall state write time is usually  sufficient.

## Overall metrics

- **Block number**: the number of the executed block
- **Block hash**: the hash of the executed block
- **Transaction count**: the number of transactions in the block
- **Elapsed**: time spent on executing the block entirely
- **MGasPerSecond**: milli-gas executed per second