28 lines
2.3 KiB
Markdown
28 lines
2.3 KiB
Markdown
---
|
|
id: LSN-0026
|
|
ticket: perf-runtime-telemetry-hot-path
|
|
title: Modelo de Telemetria Push-based
|
|
created: 2026-04-10
|
|
tags: [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.
|