Documento e especificações da proposta original por @ rjl493456442: Métricas de desempenho Ethereum padronizadas – HackMD
Isso foi iniciado por Gary, quando ele implementou o registro lento de blocos no Geth. A partir daí, pensei que isso seria muito útil para muitas coisas listadas abaixo e colaborei com ele na padronização e na concretização dessa visão.

Na minha opinião, isso poderia ajudar nas reprecificações e nas faixas ScaleL1, bem como no bloatnet (meu foco atual). Embora eu ache que podemos fazer muito mais do que isso.


1. Introdução e motivação

Por que esta iniciativa existe

A filosofia multicliente da Ethereum é um ponto forte fundamental – mas cria um desafio: como comparamos o desempenho entre implementações?

Métricas de execução padronizadas resolvem isso permitindo:

  • Comparação de desempenho entre clientes – Benchmarking justo e comparativo
  • Monitoramento da integridade da rede — Identifique gargalos de execução antes que eles afetem o consenso
  • Pesquisa de protocolo baseada em dados — Valide propostas EIP com dados reais de execução
  • Detecção de anomalias — Detectar blocos incomuns (alto gás, padrões de acesso de estado complexos)

Exemplo do mundo real: análise EIP-7907

A análise EIP-7907 demonstra exatamente por que as métricas de execução padronizadas são críticas.

Usando métricas Geth, medi:

  • Latência de leitura de código: 107ms a 904ms dependendo do tamanho do bytecode
  • Dimensionamento de sobrecarga por chamada: 5,9µs a 49,9µs (aumento de 8,5x do menor para o maior contrato)
  • Análise da execução do bloco: Isolando leituras de código, leituras de conta, execução de EVM e gravações de banco de dados

Todos esses insights ajudaram a tomar uma decisão muito mais informada. Agilizando assim muito o processo de tomada de decisão da ACD.

2. Métricas Básicas

As métricas são organizadas em categorias que abrangem o ciclo de vida de execução do bloco:

Categoria Caminho JSON Descrição
Informações do bloco block.* Número do bloco, hash, gás usado, contagem de transações
Tempo timing.* Execução, validação, confirmação e tempo total em milissegundos
Taxa de transferência throughput.* Taxa de processamento de Mgas/s
Leituras de estado state_reads.* Operações de conta, armazenamento e leitura de código
Gravações estaduais state_writes.* Mutações de conta e armazenamento
Cache cache.* Taxas de acertos/erros para caches de conta, armazenamento e código

Definições de métricas

Métrica Tipo Descrição
block.number int64 Altura do bloco
block.hash corda Hash de bloco (prefixado 0x)
block.gas_used int64 Total de gás consumido
block.tx_count int32 Número de transações
timing.execution_ms int64 Tempo gasto na execução de transações
timing.state_read_ms int64 Tempo gasto na leitura do estado (contas, slots de armazenamento e códigos de contrato)
timing.state_hash_ms int64 Tempo gasto na reformulação do estado
timing.total_ms int64 Tempo total de processamento do bloco
throughput.mgas_per_sec float64 Produção de gás (gas_used/execution_time/1e6)
state_reads.accounts int64 Cargas de dados da conta (saldo, nonce, hash de código)
state_reads.storage_slots int64 Leituras de slot de armazenamento
state_reads.code int64 Leituras de bytecode do contrato
state_reads.code_bytes int64 Total de bytes de código lido
state_writes.accounts int64 Atualizações do estado da conta
state_writes.storage_slots int64 Gravações no slot de armazenamento
state_writes.code int64 Gravações de bytecode de contrato
state_writes.code_bytes int64 Total de bytes de gravação de código
cache.{type}.hits int64 Acessos de cache para conta/armazenamento/código
cache.{type}.misses int64 Faltas de cache (leituras de banco de dados necessárias)
cache.{type}.hit_rate float64 Porcentagem de acertos: (hits / (hits + misses)) * 100.0

3. Formato JSON de bloco lento

Quando a execução do bloco excede um limite configurável (padrão: 1.000 ms), os clientes geram um log JSON estruturado:


{

"level": "warn"
"msg": "Slow block"
"block": {
    "number": 19234567
    "hash": "0x1234...abcd"
    "gas_used": 29500000
    "tx_count": 234
  }
"timing": {
    "execution_ms": 1250
        "state_read_ms": 320
    "state_hash_ms": 150
    "commit_ms": 75
    "total_ms": 1475
  }
"throughput": {
    "mgas_per_sec": 23.60
  }
"state_reads": {
    "accounts": 5420
    "storage_slots": 12340
    "code": 890
    "code_bytes": 456000
  }
"state_writes": {
    "accounts": 234
    "storage_slots": 1890
  }
"cache": {
    "account": { "hits": 4800, "misses": 620, "hit_rate": 88.60 }
    "storage": { "hits": 10200, "misses": 2140, "hit_rate": 82.68 }
    "code": { "hits": 870, "misses": 20, "hit_rate": 97.75 }
  }
}

Requisitos de campo

4. Status de implementação

5. Outras melhorias

Metas de médio prazo para uma análise de desempenho mais refinada:

Melhoria Descrição Justificativa
Métricas por transação Tempo e acesso de estado por tx individual Identifique transações específicas que causam lentidão
Contagens de opcode EVM SLOAD, SSTORE, CHAMADA, CRIAR, EXTCODECOPY Entenda os padrões de execução, detecte vetores DoS
Rastreamento de acesso exclusivo Contas exclusivas, slots de armazenamento, contratos Medir a diversidade de acesso estadual e o tamanho do conjunto de trabalho
Análise de pré-compilação Tempo por pré-compilação (ecrecover, sha256, modex) Identifique operações criptográficas caras
Tempo de Merkleização Árvore de conta versus re-hashing da árvore de armazenamento Identifique os custos de cálculo da raiz do estado
Estatísticas de memória/alocação Uso máximo de memória, alocações por bloco Rastreie a pressão da memória para planejamento de recursos
Experimente estatísticas de profundidade Profundidade média/máxima de passagem de teste Entenda o impacto do inchaço estatal
Métricas de execução paralela Utilização de threads, estatísticas de contenção Para implementações EVM paralelas
Tamanho da testemunha Tamanho dos dados de testemunha Verkle/stateless Preparação para clientes apátridas
Acesso frio vs quente Distinguir primeiro acesso versus acesso em cache Análise de gás EIP-2929

Este post não quer apenas informar sobre isso, mas busca essencialmente feedback. Queremos saber o que mais seria interessante para equipes, pesquisadores e qualquer outra pessoa poder extrair/saber. Dados internos de clientes difíceis de coletar para eles, etc.

Além disso, gostaríamos de saber o que poderíamos fazer com isso, temos algumas ideias e listamos aqui mais alguns objetivos. Mas acreditamos que as pessoas terão muito mais ideias do que apenas nós.

Obrigado.

Fontesethresear

By victor

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *