Skip to content

Basler dart: payload discarded (host bandwidth insufficient) -- streams silently, no throughput limit applied #685

@ericweiner

Description

@ericweiner

Basler dart: payload discarded ("host bandwidth insufficient") streams silently with no throughput limit applied

Where: bench unit SN12062 (Windows), Basler dart du1_imx334m. Surfaced during a preview-perf measurement run (LVP color-audit-phase1 @ 9847fec), bundle SN12062-2026-05-28-165913.zip.

Symptom: continuous Pylon grab failures, err_code=3791651346 -- "Payload data has been discarded. Payload data can be discarded by the camera device if the available bandwidth is insufficient." ~143 occurrences across the run, intermittent (peaks at 6 consecutive, mostly 1). The camera keeps streaming at ~16-28 fps, so frames drop silently; the user gets no warning.

Root cause: the dart's data rate exceeds what the host USB link sustains (Basler's own err_code says so). First-order this is a host/USB-path condition -- verify USB3 port / cable / dedicated controller (not a shared hub) on SN12062.

Two code gaps found in triage (drivers/pyloncamera.py, drivers/camera.py):

  1. Throughput-control knobs are orphaned. set_device_link_throughput_limit, set_bandwidth_reserve_mode, set_gev_packet_size exist but have ZERO production callers -- never invoked at camera connect. So LVP applies no throughput limit; the dart runs at default (max) and over-saturates a marginal link. There is no path that throttles to fit the host.

  2. Discards never surface (observability). camera.py warns at log level only and signals "stop grabbing" only at MAX_CONSECUTIVE_FAILURES=128; intermittent drops (max 6 consecutive here) never trip it, so no Rule-14 user notification. The driver's own [INSTR MISSED]/[INSTR RESYNC] bandwidth-stress instrumentation also did NOT fire during the 143 discards -- the early-warning signal that should catch this was silent.

Disposition (agreed):

  1. Bench: reboot SN12062 (clear stale USB-controller/driver state), then verify the dart's USB path -- USB3 port / cable / dedicated controller, not a shared hub. Most likely real fix.
  2. (this issue) track it.
  3. Wire throughput control into Pylon connect (behavior change -- needs a value/default; do not default-throttle healthy setups without multi-host data).
  4. Close the observability gap (get [INSTR MISSED] firing on darts and/or a Rule-14 warning on sustained discards).

Status: bench verification pending; code items 3/4 are behavior changes awaiting design sign-off.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions