Skip to content

Startup time: all-chip devourer-vs-kernel benchmark (host-kernel cells) + docs/startup-time.md#206

Merged
josephnef merged 1 commit into
masterfrom
bench-startup-all-chips
Jul 6, 2026
Merged

Startup time: all-chip devourer-vs-kernel benchmark (host-kernel cells) + docs/startup-time.md#206
josephnef merged 1 commit into
masterfrom
bench-startup-all-chips

Conversation

@josephnef

Copy link
Copy Markdown
Collaborator

What

Closes the README "Startup time" gap: the "faster than the kernel driver" claim was only ever substantiated for Jaguar1 (vs aircrack in the VM). This PR measures every supported generation on the host against the vendor drivers built from reference/, publishes the numbers + methodology in a new docs/startup-time.md, and shrinks the README section to one line + link.

Results (true cold plug, VBUS-cycled per rep, median of 2, ch 6)

chip devourer vendor kernel driver
RTL8814AU 5.7 s 6.9 s (88XXau)
RTL8821AU (T2U+) 2.2 s 5.3 s (88XXau)
RTL8822BU (T3U) 7.2 s 11.1 s (rtl88x2bu)
RTL8821CU 3.4 s 5.1 s (8821cu)
RTL8812CU 1.2 s 3.1 s (rtl88x2cu)
RTL8812EU 1.0 s 3.0 s (rtl88x2eu)

TX-ready tracks RX-ready within ~1%. The doc also carries the warm (authorized-toggle) table — the vendor drivers pay full calibration only from true cold, so warm-only benchmarks understate the first-plug gap (and the 8821AU kernel even edges ahead by ~60 ms warm; stated honestly in the doc).

The 8812AU rows are absent: the bench unit doesn't come up RX-functional on first init from true cold under either driver — #205.

Harness (tests/bench_init.py)

  • --kernel-host — kernel cells via insmod of the reference/ vendor .ko on the host (netdev → monitor → first frame, same stage names as the VM path; KMOD_FOR_VIDPID maps PIDs for all three generations). VM mode remains for driver-behaviour comparisons but is documented as unfit for startup timing (virtualized USB adds latency to every stage).
  • --traffic-from PID — dedicates a plugged non-DUT adapter to a devourer beacon flood on the bench channel. In an RF-quiet room there are zero ambient frames and every first-frame marker (devourer and kernel tcpdump alike) starves; with a ~500 fps flood, first-frame latency measures RX-path readiness instead of beacon-interval luck.
  • udev-rename-tolerant iface configuration in the kernel cell (the 88XXau netdev renames right after registration).
  • tests/regress.py: SUPPORTED_DUTS learns the Jaguar2 PIDs (2357:012d, 0bda:b82c, 0bda:c811) so DUT discovery covers them.

Notes

  • All four vendor comparators (rtl8812au/88XXau, rtl88x2bu, rtl88x2cu, rtl88x2eu, 8821cu) build against the host 6.18 kernel with local compat patches in the (gitignored) reference/ trees — including aircrack-lineage 88XXau, so no VM is needed anywhere in the table.
  • Methodology traps documented in the doc: warm-vs-cold chip state, and the traffic-source requirement.
  • 36+ harness cells all 3/3–5/5 green across two full runs; .ko debug-strip verified irrelevant to kernel.probe (the T3U's 5.5 s probe is genuine vendor work, not insmod cost).

🤖 Generated with Claude Code

…nel cells, startup-time doc

Close the README "Startup time" gap: the claim was only substantiated for
Jaguar1 vs aircrack-in-VM. Now every supported generation is measured on
the host against the vendor drivers built from reference/ (88XXau for
Jaguar1; rtl88x2bu / 8821cu / rtl88x2cu / rtl88x2eu for Jaguar2/3), from
true cold (per-rep VBUS power-cycle) and warm — devourer is faster on
every measured chip at first plug (1.2-2.9x). Numbers + methodology move
out of README into docs/startup-time.md; README keeps one line + link.

tests/bench_init.py grows the machinery this needed:
- --kernel-host: kernel cells via insmod of the reference/ vendor .ko on
  the host (netdev -> monitor -> first frame, same stage names as the VM
  path; KMOD_FOR_VIDPID maps PIDs across all three generations). VM mode
  stays for driver-behaviour comparisons but is documented as unfit for
  startup timing (virtualized USB latency).
- --traffic-from PID: dedicate a plugged non-DUT adapter to a devourer
  beacon flood on the bench channel — in an RF-quiet room there are zero
  ambient frames and every first-frame marker (devourer and kernel
  tcpdump alike) starves.
- udev-rename-tolerant iface configuration in the kernel cell.

tests/regress.py: SUPPORTED_DUTS learns the Jaguar2 PIDs (2357:012d,
0bda:b82c, 0bda:c811).

The 8812AU has no rows: the bench unit doesn't come up RX-functional on
first init from true cold under either driver — tracked in #205.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@josephnef josephnef force-pushed the bench-startup-all-chips branch from 012b763 to b4e3724 Compare July 6, 2026 17:14
@josephnef josephnef merged commit 1b0bdfa into master Jul 6, 2026
15 checks passed
@josephnef josephnef deleted the bench-startup-all-chips branch July 6, 2026 17:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant