docs: multi-core sharding (#10) + FEC object batching design specs #32
No reviewers
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
femboy/yip!32
Loading…
Reference in a new issue
No description provided.
Delete branch "docs/throughput-design-specs"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Two design specs answering "how do we reach WireGuard throughput?" The io_uring investigation already proved the answer isn't I/O — throughput is CPU/single-thread-bound (RaptorQ FEC encode ~24 µs/pkt + everything on one core). So:
2026-07-03-multicore-sharding-design.md(#10) — the primary leverPer-peer engine sharding: N independent single-thread
DataPlaneengines (one pinned per core), peers assigned by hash, each with its ownSO_REUSEPORTUDP socket + its ownIFF_MULTI_QUEUETUN queue. No shared state, no locks — preserves the Phase A per-flow latency win and reuses the existingrun_poll/run_uringloops verbatim (engines=1is byte-identical to today). Scales aggregate throughput across peers.Key honesty: yipd is a single connected peer today (
sock.connect), soSO_REUSEPORTneeds the multi-peer data plane (sub-project #2) — this ships the seams and is a deliberate no-op until then. Single-flow multi-Gbit (one fat link) needs the deferred crypto worker-pool (regime B, #28).2026-07-03-fec-object-batching-design.md— compounds it on lossy linksBatch N sealed packets into one RaptorQ object → amortize the ~24 µs
Encoder::newto ~24/N. Container framing + derived AEAD counters (no wire change); the accumulator buffers plaintext and seals consecutively at flush so theLossDetector's counters stay contiguous. Bulk-only, N=8 / 1 ms. Honest scope: clean links already bypass the encoder, so this helps only the repair>0 (lossy) path — not clean-link throughput.Follow-ups filed
#27 (batching impl), #28 (single-flow worker-pool, deferred), #29 (extend zero-repair bypass to non-Bulk), #30 (GSO for ARQ retx), #31 (RaptorQ encode SIMD/systematic). The specs' own follow-up sections capture smaller refinements (eBPF steering, session migration, NUMA, adaptive symbol_size, indexed RetxBuffer).
Design only — no code. Both want your sign-off on their open questions before implementation.
🤖 Generated with Claude Code