Context (measured, #359)
With the field-default DEVOURER_TX_RETRY_LIMIT=3, retry-exhausted frames are real, visible loss (ok=0): ~10–25/phase at 1 k fps under PixelPilot-shaped feedback bursts, ~700–900/phase at ~2.3 k fps saturation. Hardware retries are backoff-spaced, so a 3-retry budget can burn entirely inside one 2–3 ms burst — the frames that would have survived a longer straddle are dropped.
Steps
- [measure] Retry-limit sweep.
RETRY_LIMIT ∈ {3, 8, 16, 32} × burst arms (6M:10, 6M:30) on tests/arq_e2e_delivery.sh (knob already plumbed). Deliverable: delivered% vs airtime-cost curve + a recommended default for ARQ links, noted in docs/scheduled-mac.md.
- [research] Per-retry rate fallback (J2/J3). Read the vendor xmit path for DATA fallback / lowest-rate descriptor controls and whether they apply to fixed-rate monitor injection; if yes, expose a retry-fallback knob and bench one arm (fallback vs fixed at the sweep's best limit). A retry ladder that steps down MCS converts repeats into robustness.
- [research] Deadline-bounded retries. For FPV, late ≈ lost: investigate descriptor lifetime bits (J2/J3) to cap retries by time rather than count, tied to the video frame interval;
queue_time_raw in tx.report is the measurement instrument.
- [measure] FEC dimensioning from the post-ARQ residual. Extend
tests/arq_e2e_analyze.py to emit the gap-length histogram of undelivered frames; derive the minimal wfb K/N covering P99.9 of the residual. Deliverable: the measured production pairing — ARQ tier for burst collisions + FEC floor for what retries can't reach (K=N=1 was diagnostic-only; this answers "how much FEC do I actually need with ARQ on" with data).
Acceptance
Published curves for (1) and (4); go/no-go with vendor citations for (2) and (3); a documented recommended (retry_limit, K/N) pairing.
Refs: #359 (bench, per-seq ledgers), docs/scheduled-mac.md.
Context (measured, #359)
With the field-default
DEVOURER_TX_RETRY_LIMIT=3, retry-exhausted frames are real, visible loss (ok=0): ~10–25/phase at 1 k fps under PixelPilot-shaped feedback bursts, ~700–900/phase at ~2.3 k fps saturation. Hardware retries are backoff-spaced, so a 3-retry budget can burn entirely inside one 2–3 ms burst — the frames that would have survived a longer straddle are dropped.Steps
RETRY_LIMIT ∈ {3, 8, 16, 32}× burst arms (6M:10,6M:30) ontests/arq_e2e_delivery.sh(knob already plumbed). Deliverable: delivered% vs airtime-cost curve + a recommended default for ARQ links, noted in docs/scheduled-mac.md.queue_time_rawintx.reportis the measurement instrument.tests/arq_e2e_analyze.pyto emit the gap-length histogram of undelivered frames; derive the minimal wfb K/N covering P99.9 of the residual. Deliverable: the measured production pairing — ARQ tier for burst collisions + FEC floor for what retries can't reach (K=N=1 was diagnostic-only; this answers "how much FEC do I actually need with ARQ on" with data).Acceptance
Published curves for (1) and (4); go/no-go with vendor citations for (2) and (3); a documented recommended
(retry_limit, K/N)pairing.Refs: #359 (bench, per-seq ledgers), docs/scheduled-mac.md.