--- id: AGD-0013 ticket: perf-vm-allocation-and-copy-pressure title: Agenda - [PERF] VM Allocation and Copy Pressure status: open created: 2026-03-27 resolved: decision: tags: [] --- # Agenda - [PERF] VM Allocation and Copy Pressure ## Problema O core da VM ainda aloca e clona demais em alguns caminhos relevantes, especialmente quando strings entram no fluxo. Hoje `ADD` com string usa `format!`/`to_string()`, `GET_GLOBAL` clona valores e varios caminhos de erro montam strings dinamicas. ## Dor - churn de heap reduz o teto de throughput da VM. - carts que abusam de string e estado global pagam custo cedo demais. - hardware barato sente alocacao repetitiva de forma desproporcional. ## Hotspots Atuais - [virtual_machine.rs](/Users/niltonconstantino/personal/workspace.personal/intrepid/prometeu/runtime/crates/console/prometeu-vm/src/virtual_machine.rs#L635) - [virtual_machine.rs](/Users/niltonconstantino/personal/workspace.personal/intrepid/prometeu/runtime/crates/console/prometeu-vm/src/virtual_machine.rs#L870) - [tick.rs](/Users/niltonconstantino/personal/workspace.personal/intrepid/prometeu/runtime/crates/console/prometeu-system/src/virtual_machine_runtime/tick.rs#L111) ## Alvo da Discussao Definir o nivel de disciplina de alocacao/copia exigido do core da VM no baseline do console. ## O Que Precisa Ser Definido 1. Prioridade dos casos. Fechar quais caminhos sao realmente hot: - opcodes de string; - acesso a globals; - faults; - logs. 2. Estrategia de ownership. Decidir onde vale introduzir: - borrow temporario; - small-string strategy; - copy-on-write; - intern/cache de strings. 3. Meta de alocacao. Definir se o projeto quer: - zero alloc no frame loop feliz; - alloc rara e explicita; - apenas reducao oportunista. 4. Instrumentacao. Decidir como medir alocacao sem transformar a VM em microbenchmark artificial. ## Open Questions de Arquitetura 1. Strings sao citizen de primeira classe no fantasy console ou recurso conveniente mas caro? 2. Vale endurecer a linguagem/ABI para reduzir alocacao implicitamente? 3. Caminhos de fault precisam ser maximizados para desempenho ou apenas os caminhos felizes? ## Dependencias - `../specs/02a-vm-values-and-calling-convention.md` - `../specs/03-memory-stack-heap-and-allocation.md` - `../specs/10-debug-inspection-and-profiling.md` ## Criterio de Saida Desta Agenda Pode virar PR quando houver decisao escrita sobre: - caminho quente prioritario para desengordurar; - meta minima de alocacao/copia da VM; - estrategia de ownership para strings/values; - instrumentacao canonica para medir regressao.