# Performance Budget (Katra3D §32)
Budgets are explicit and enforced by courts where possible.
| Katra tracing overhead (production profiling) | < 1% of frame time | `profiler_overhead` court (hard bound < 5 µs/event in CI; target ≤ 500 ns/event optimized) |
| Hot Katra operation (emit) | no heap allocation per event | design (`CompactEvent` + `Vec::drain(..)`) + `raw_push_cost`/`convert_cost` tests |
| FFI boundary | coarse-grained, batched | ABI design (§22); no per-function chatter |
| Request graph metadata | bounded per node/edge (arena, no per-op allocation) | `katra-graph` arena design |
| KatraFlow prefetch | strict RAM + bandwidth budget | `FlowPolicy` gates (`max_speculative_bytes`, `max_outstanding`, `bandwidth_bps`) |
| Staging arenas | bounded capacity; lifetime-driven recycling | `StagingArena` + `OutOfBudget` errors |
| Trace file growth | record-bounded, schema-bounded | header + record framing |
## Measuring capture overhead
```sh
cargo run -p katra-prof-tool -- self-test
```
reports ns/event and events/sec with a null sink, including periodic drains.
## What "fast" means here
Katra3D optimizes by **removing whole operations** before micro-optimizing
what remains (§34):
* fewer transitions × fewer copies × fewer allocations × fewer locks ×
fewer wakeups × fewer redundant translations × fewer command submissions
× deeper batching × better cache reuse × better residency × better
scheduling.
Rust is not the performance story; architecture is.