audit-perf · git:20261027.bf64f38 · 2026-10-27 · sha256 b07b3ab96b96869a
audit-perf git:20261027.bf64f38A
Immutable. This exact content never changes and is served at /api/v1/blob/b07b3ab96b96869a.
--- name: audit-perf description: "Find the next performance win in Nino (.NET, Unity/Burst, Go, Rust, TypeScript) - where wins come from, gaps against MemoryPack, MessagePack, protobuf-net and each language's competitors, and the plan to prove each (measuring is the benchmark skill, techniques the optimize skill). Use for a performance round, when a case is slower than a competitor or than the previous main, or when asked to optimize further. Triggers: faster, slower, performance round, gap, MemoryPack, MessagePack, protobuf-net, competitor, regression, allocation, beat, lead every case, 性能, 更快, 反超, 领先, 差距, 还能优化吗." metadata: internal: true --- # Performance Performance is a requirement on every platform, and every number that counts comes from a GitHub runner. This skill owns the search; measuring is `benchmark`, the code-level techniques are `optimize`, each runtime's rules are in `runtimes/*/AGENTS.md`, and a finding is built by the skill that owns its files. ## Where wins come from 1. **Gaps**: every case where Nino is not clearly ahead of MemoryPack (and of MessagePack and protobuf-net where they can express the case) on x64 and Arm64; for Go, Rust and TypeScript, the competitors in each `bench` module. List them per CPU from the latest Performance Report and the runtimes' reports. 2. **Regressions against the previous main** (a release, or the commit before a wire-format change): nothing gets slower than main beyond the floor, and a change that should help must beat it. 3. **Work that is not needed**: a length checked twice, a copy where a span would do, a per-element call where a block copy or a vector loop would do, a check that could be a `static readonly` field, a generic lookup on a hot path. 4. **SIMD beyond strings**: blocks of primitives, bools (validation), fixed-size structs, transcoding, hash table fills; every SIMD path has its Arm64 and no-SIMD forms (`platforms`). 5. **The generator**: code it could emit faster for a shape users write (`audit-generated-code`), and its own speed per keystroke (`audit-generator`). ## Method 1. **Read first.** What does the code do now, what would change, which benchmark shows it, what did earlier attempts find (commit messages of reverted tries)? Look up the technique in `optimize` before inventing one. 2. **Choose locally, decide on runners**, as `benchmark` says: local runs only guide, the A/B on runners per CPU against the floor decides, and only a net win ships. 3. **Record what you learned** in `optimize` (the technique, faster or slower, with the runner numbers). ## Report A table: idea | where it comes from | what Nino does now | expected gain | benchmark | runner result per CPU | verdict (land / drop / later), plus the cases still not ahead and why.