The dominant per-packet CPU term when FEC is active is RaptorQ Encoder::new (~24 µs, the intermediate-symbol solve over GF(256)). Object batching (separate issue) amortizes the per-object setup across N packets, but the absolute encode cost is still the biggest lever for the FEC-active path.
Investigate reducing it directly: (a) whether the raptorq crate's GF(256) matrix math is SIMD-accelerated and whether a faster backend / crate exists; (b) a systematic-encode fast path that generates repair symbols without the full intermediate-symbol solve for small objects; (c) upstreaming an optimization to raptorq. Deep/exploratory — the crypto (AEAD) is already SIMD (~2 µs, not a lever), so FEC is where the remaining per-packet CPU is. Measure with the pipeline_profile example.
The dominant per-packet CPU term when FEC is active is RaptorQ
Encoder::new(~24 µs, the intermediate-symbol solve over GF(256)). Object batching (separate issue) amortizes the per-object setup across N packets, but the absolute encode cost is still the biggest lever for the FEC-active path.Investigate reducing it directly: (a) whether the
raptorqcrate's GF(256) matrix math is SIMD-accelerated and whether a faster backend / crate exists; (b) a systematic-encode fast path that generates repair symbols without the full intermediate-symbol solve for small objects; (c) upstreaming an optimization toraptorq. Deep/exploratory — the crypto (AEAD) is already SIMD (~2 µs, not a lever), so FEC is where the remaining per-packet CPU is. Measure with thepipeline_profileexample.