Link test: download series (bulk sampled, warm bursts, paced) and burst-vs-idle; car results
Orin -> tablet over NCM: paced streams up to 4 MB/s are clean; unpaced bursts and bulk hit multi-second holds that inflate the RTO to 10-16 s. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DDwfd6Ki8UfG4hK6W5YpJz
This commit is contained in:
@@ -61,3 +61,61 @@ adb -s localhost:15555 shell am start -n dev.yukart.display/.MainActivity --es l
|
||||
|
||||
The host defaults to the gateway's. A run takes about 75 s and reports each
|
||||
result to the Orin as it goes.
|
||||
|
||||
## Download in the car setup (PD hub + charger)
|
||||
|
||||
Two identical download series (`dl:`), then a burst-vs-idle series (`bi:`). Raw
|
||||
records under the labels `car-dl1`, `car-dl2`, `car-bi1`.
|
||||
|
||||
**Paced streams are clean.** 30 frames/s at 0.5, 1, 2 and 4 MB/s, 10 s each, in
|
||||
both series: every frame arrived, the full rate was delivered, and queueing never
|
||||
exceeded 44 ms. A camera-like stream up to 4 MB/s (32 Mbit/s) fits.
|
||||
|
||||
**Unpaced traffic is not:**
|
||||
|
||||
| | Series 1 | Series 2 |
|
||||
|---|---|---|
|
||||
| Bulk, 5 × 10 s: rate while flowing | 5.6 MB/s | 5.6 MB/s |
|
||||
| Bulk: longest stall per run | 1.8, 14.0, 3.6, 0.3, 0.8 s | 0.2, 3.7, 0.8, 0.8, 14.4 s |
|
||||
| Bulk: Orin retransmits | 0 | 0 |
|
||||
| Burst 64 KB after 1 s idle, p50 | 17 ms | 18 ms |
|
||||
| Burst 256 KB, p50 | 12.1 s | 14.1 s |
|
||||
| Burst 1 MB, p50 | 14.8 s | 13.8 s |
|
||||
| Burst 4 MB, p50 | 4.5 s | 4.6 s |
|
||||
| Burst connection: Orin retransmits, smoothed RTT, RTO | 50, 2.35 s, 10.8 s | 49, 2.39 s, 11.0 s |
|
||||
|
||||
**Not idle-related.** 256 KB bursts on fresh connections, 8 each:
|
||||
|
||||
| Idle before each burst | p50 | Bursts over 1 s | Orin retransmits, smoothed RTT |
|
||||
|---|---|---|---|
|
||||
| 0 | 12.6 s | 7 of 8 | 15, 1.6 s |
|
||||
| 50 ms | 61 ms | 1 of 8 | 8, 1.8 s |
|
||||
| 200 ms | 14.3 s | 6 of 8 | 13, 1.8 s |
|
||||
| 1 s | 56 ms | 0 of 8 | 0, 16 ms |
|
||||
| 1 s, 50/s UDP keepalive | 56 ms | 0 of 8 (3 near 0.5 s) | 5, 21 ms |
|
||||
| 0 (repeat) | 13.6 s | 8 of 8 | 14, 1.5 s |
|
||||
|
||||
**Reading.** A fresh connection's first burst is fast. Then a few segments go
|
||||
missing, and the Orin measures round trips of 1.5–2.4 s on a 3 ms link: packets
|
||||
are being *held* for seconds, not only dropped. The smoothed RTT and the RTO
|
||||
(10–16 s) inflate, and every later burst on that connection waits out the RTO.
|
||||
Bulk stalls of up to 14 s with zero retransmits are the same holding, seen
|
||||
without loss. Paced traffic at ≤ 4 MB/s never triggers it.
|
||||
|
||||
Nothing on the Orin's side records it: no kernel messages, `tx_dropped` and
|
||||
`tx_errors` 0 on `usb1`. The packets vanish or wait inside the USB layer, in the
|
||||
Orin's NCM gadget or the tablet's NCM host driver; the tablet's sysfs is not
|
||||
readable without root.
|
||||
|
||||
**Consequences:**
|
||||
|
||||
- Anything the Orin sends to the tablet should be **paced**, not dumped at line
|
||||
rate: video at a steady frame rate is fine; a TTS utterance should stream in
|
||||
chunks rather than be written in one go (the protocol already plans chunks).
|
||||
- A connection that has hit this is poisoned for many seconds (inflated RTO).
|
||||
The heartbeat timeout will see it as a dead link and reconnect, which resets it.
|
||||
- `adb push`/`install` is exactly an unpaced bulk transfer, which explains its
|
||||
0.14 MB/s.
|
||||
|
||||
Open: whether RNDIS instead of NCM avoids it, and whether pacing all egress on
|
||||
the Orin (`tc` `fq` with `maxrate`) fixes unpaced senders too.
|
||||
|
||||
Reference in New Issue
Block a user