Skip to content

TX retry policy for ARQ links: limit-vs-burst sweep, per-retry rate fallback, deadline-bounded retries, FEC dimensioning from the post-ARQ residual #362

Description

@josephnef

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

  1. [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.
  2. [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.
  3. [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.
  4. [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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions