2.3 KiB
2.3 KiB
| id | ticket | title | created | tags | |||
|---|---|---|---|---|---|---|---|
| LSN-0026 | perf-runtime-telemetry-hot-path | Modelo de Telemetria Push-based | 2026-04-10 |
|
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:
- Drivers (Assets): Contadores atômicos em cada
BankPolicysão atualizados duranteload,commitecancel. - VM (Heap): Um contador
used_bytesna structHeaprastreia alocações e liberações (sweep). - System (Logs): O
LogServicerastreia 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 aoCertifiere ao log histórico. - Tick de Host (Sob Demanda): A coleta detalhada em cada tick só ocorre se
inspection_activeestiver habilitado (ex: Overlay F1 ligado).
Lições Aprendidas
- Desacoplamento de Gatilhos: Não devemos usar o estado do
Certifierpara 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.