66eab916bc
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DDwfd6Ki8UfG4hK6W5YpJz
64 lines
2.7 KiB
Markdown
64 lines
2.7 KiB
Markdown
---
|
||
type: report
|
||
date: 2026-10-11
|
||
---
|
||
# USB link test: plain cable vs PD hub
|
||
|
||
Does the PD hub degrade the tablet ⇄ Orin USB (NCM) link? Measured from the app
|
||
(the only place on the tablet whose sockets use the link) with the link test,
|
||
`lib/linktest.dart` + `tool/linktest_server.py`.
|
||
|
||
## Short version
|
||
|
||
- **No measurable effect of the PD hub**, with or without the charger connected.
|
||
All three setups: 0% loss at every size and rate up to 500 packets/s, the same
|
||
latencies, 0 TCP retransmits.
|
||
- **The loss seen earlier the same day did not come back.** Before these runs,
|
||
ICMP ping from the Orin lost 2.5–32% at 20 packets/s through the hub. After a
|
||
replug, the same ping sweep is 0% through the hub too. That connection was in
|
||
a bad state; the hub is not shown to be the cause. Cause unknown; worth
|
||
watching for (the soak below is the app-shaped check).
|
||
- **The link is asymmetric:** tablet → Orin ~22 MB/s, Orin → tablet 1.9–5.6 MB/s
|
||
and variable, with ~30 ms RTT under load and no loss (the Orin's gadget TX side
|
||
queues rather than drops).
|
||
- **App-shaped traffic is fine:** 30 s at 10 packets/s, longest silence ≤ 144 ms,
|
||
against a 5 s heartbeat timeout.
|
||
- **adb push through the SSH tunnel stays slow (0.14 MB/s, 223 Orin retransmits
|
||
per 20 MB) on a healthy link**, while the app's TCP over the same link runs at
|
||
5.6 MB/s with none. Specific to the adbd connection; not the hub, not routing
|
||
(`tcp_fwmark_accept=1`). Unexplained.
|
||
|
||
## Results
|
||
|
||
Link USB 2.0 high-speed in all runs. TCP: 5 s each way; UDP: 3 s per cell, RTT
|
||
p50 / p99 / max in ms.
|
||
|
||
| | Plain C-to-C | Hub + charger | Hub, no charger |
|
||
|---|---|---|---|
|
||
| UDP loss, 64 B and 1400 B, 10–500 /s | 0% | 0% | 0% |
|
||
| UDP 64 B 10/s RTT | 4.1 / 24.2 / 24.2 | 4.0 / 10.5 / 10.5 | 4.1 / 5.6 / 5.6 |
|
||
| UDP 1400 B 500/s RTT | 2.8 / 7.3 / 39.7 | 2.7 / 9.4 / 42.5 | 2.7 / 16.6 / 60.2 |
|
||
| Soak 64 B 10/s 30 s: loss, max gap | 0%, 144 ms | 0%, 135 ms | 0%, 104 ms |
|
||
| TCP Orin → tablet | 1.85 MB/s | 4.06 MB/s | 5.57 MB/s |
|
||
| TCP tablet → Orin | 21.8 MB/s | 22.4 MB/s | 22.6 MB/s |
|
||
| Orin TCP retransmits | 0 | 0 | 0 |
|
||
| ICMP ping from the Orin, 20/s, 56–1472 B | 0% | 0% | 0% |
|
||
|
||
For reference, the same test over WiFi to the Orin's LAN address: 0% loss, about
|
||
25 MB/s each way.
|
||
|
||
Raw records: `~/linktest/results.jsonl` on the car Orin; tabulate with
|
||
`python3 tool/linktest_summary.py ~/linktest/results.jsonl [label…]`.
|
||
|
||
## Running it
|
||
|
||
On the Orin: `python3 linktest_server.py` (from `tool/`, copied to `~/linktest/`).
|
||
On the tablet: **Link test** in the link bar, or remotely:
|
||
|
||
```bash
|
||
adb -s localhost:15555 shell am start -n dev.yukart.display/.MainActivity --es linktest <label>[@<host>]
|
||
```
|
||
|
||
The host defaults to the gateway's. A run takes about 75 s and reports each
|
||
result to the Orin as it goes.
|