2.3 KiB

id ticket title created tags
LSN-0026 perf-runtime-telemetry-hot-path Modelo de Telemetria Push-based 2026-04-10
performance
telemetry
atomics

Modelo de Telemetria Push-based

O sistema de telemetria do PROMETEU evoluiu de um modelo de varredura sob demanda (pull) para um modelo de contadores incrementais (push), visando minimizar o impacto no hot path do runtime.

O Problema Original

Anteriormente, a cada host tick, o runtime solicitava informações de uso de memória dos bancos de assets. Isso resultava em:

  • Varreduras O(n) sobre mapas de recursos.
  • Múltiplas aquisições de locks de leitura em cada tick.
  • Overhead desnecessário em hardwares handheld, onde cada microssegundo conta.

A Solução: Modelo Push com Atômicos

A solução implementada utiliza AtomicUsize nos drivers e na VM para manter o estado do sistema em tempo real com custo O(1) de leitura e escrita:

  1. Drivers (Assets): Contadores atômicos em cada BankPolicy são atualizados durante load, commit e cancel.
  2. VM (Heap): Um contador used_bytes na struct Heap rastreia alocações e liberações (sweep).
  3. System (Logs): O LogService rastreia a pressão de logs emitida em cada frame.

Dois Níveis de Observabilidade

Para equilibrar performance e depuração, a coleta foi dividida:

  • Snapshot de Frame (Sempre): Captura automática no fim de cada frame lógico. Custo irrelevante (O(1)). Serve ao Certifier e ao log histórico.
  • Tick de Host (Sob Demanda): A coleta detalhada em cada tick só ocorre se inspection_active estiver habilitado (ex: Overlay F1 ligado).

Lições Aprendidas

  • Desacoplamento de Gatilhos: Não devemos usar o estado do Certifier para habilitar funcionalidades de depuração visual (como o overlay), pois eles têm propósitos e custos diferentes.
  • Consistência Eventual é Suficiente: Para métricas de telemetria, não é necessário travar o sistema para obter um valor exato a cada nanossegundo. A leitura relaxada de atômicos é suficiente e muito mais performática.
  • Isolamento de Custo: Mover a lógica de agregação para o driver simplifica o runtime e garante que o custo de telemetria seja pago apenas durante mutações de estado, e não repetidamente durante a execução estável.