--- 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.