Skip to content

ARQ over A-MPDU/BlockAck: quantify ACK-asymmetry reduction and goodput on the arq_e2e bench #364

Description

@josephnef

Context (measured, #359)

Per-frame ACK has a small measured asymmetry: ~15–20 duplicate deliveries per phase (frame arrived, ACK lost, peer retransmitted) and 1–3 ok=0-but-delivered per phase (peer wrote off a delivered frame). Safe direction — the TX ledger under-claims — but it wastes airtime on redundant retransmissions, and it scales with ACK exchanges. BlockAck replaces N ACK exchanges with one re-solicitable bitmap, and A-MPDU is already worth ~+30% goodput (docs/aggregation.md); the responder side is already BA-capable (SetAckResponder arms the BlockAck responder too).

Steps

  1. [verify] Report semantics under aggregation. Vendor check for J3: does CCX report per MPDU or per PPDU inside an A-MPDU, and how does the SW_DEFINE tag echo behave? The arq_e2e tag-reconstruction depends on the answer. (The payload pctr ledger is immune — it is per-MPDU by construction; the A-MPDU engine renumbers 802.11 seqs, which is why the bench never keyed on them.)
  2. [measure] Bench arm. tests/arq_e2e_delivery.sh with DEVOURER_TX_AMPDU_MODE on the drone-sim + BA responder on the DUT: acked_undelivered (must stay 0), dup rate, ok=0-but-delivered, goodput vs the per-frame-ACK arms — same phases, same stalls.
  3. [revisit] Retry interplay. The earlier aggregation work found the data-queue aggregation path ignores noack and rty0 suppresses — re-examine under the DEVOURER_TX_RETRY_LIMIT knob so the BA path's retransmission budget is actually configurable.
  4. [document] If the contract holds and asymmetry shrinks: recommend A-MPDU+BA as the ARQ transport for video streams in docs/aggregation.md + docs/scheduled-mac.md, with the measured numbers.

Acceptance

au = 0 under BA in all arms; dup + write-off rates compared against per-frame ACK with the same RF; goodput delta published.

Refs: #359, docs/aggregation.md, the SetAmpduMode/BA-responder work.

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