docs(performance): close modern runtime slice H

This commit is contained in:
Erik 2026-07-25 06:15:13 +02:00
parent 41c1a59392
commit f1a8d36682
7 changed files with 179 additions and 27 deletions

View file

@ -362,7 +362,7 @@ retained typed snapshots instead of arrays. Evidence:
## #239 — Inbound net path allocates 3-4 arrays/objects per packet
**Status:** OPEN
**Status:** DONE — 2026-07-25, Modern Runtime Slice H-c
**Severity:** LOW
**Filed:** 2026-07-24
**Component:** net
@ -375,10 +375,15 @@ byte[], a second full copy into `Packet.BodyBytes`
fragment count, which dominates during active play. The audit named only
the outbound `ToArray()` copy.
**Root cause / status:** 2026-07-24 audit review finding. In scope for plan
Slice H-c (requires the §0.3 freeze authorization); invariants pinned in
the plan amendment (single outstanding receive, arrival order,
ack-per-packet).
**Resolution:** One cancellable pooled receive owner now preserves kernel
arrival order while packet headers, optionals, checksum verification, and
single-fragment dispatch borrow the queued datagram. Only multi-fragment state
whose lifetime crosses datagrams is copied. Warm production decode allocates
zero bytes; the 500,000-packet differential benchmark improved throughput
8.666x and removed approximately 400 bytes per packet. Direct recurring sends
also frame into caller storage with zero warmed allocation. Connected
login/portal/dungeon/reconnect and exact graceful disconnect pass. Evidence:
`docs/research/2026-07-25-slice-h-closeout.md`.
**Files:** `src/AcDream.Core.Net/NetClient.cs:63-78`;
`src/AcDream.Core.Net/Packets/PacketCodec.cs:58,64`;