Throughput on the 5G radio path: an uplink ramp and two downlink levels¶
Symptom¶
Measured with the throughput campaign on 2026-09-28
(experiments/README.md): a UE behind a 5G
router (NAT mode), iperf3 against the server in the UPF pod at the UE anchor,
five runs of 60 s per combination, statistics over 1 s windows after the
first 10 s of each run.
| Combination | Median Mbit/s | p90 | Run means |
|---|---|---|---|
| downlink, 1 stream | 129 | 133 | 72-130 |
| downlink, 4 streams | 128 | 134 | 77-130 |
| uplink, 1 stream | 35.7 | 35.7 | 35.6-35.7 |
| uplink, 4 streams | 35.6 | 37.9 | 34.7-35.4 |
- Uplink: every run starts near 6 Mbit/s and climbs almost linearly to about 35 Mbit/s over 8-10 s, then stays there.
- Downlink: two levels. Every run starts low (10-30 Mbit/s) and moves to about 130 Mbit/s in one step, after 2 to 35 s; one run stayed at the low level for 35 of its 60 s. One TCP stream and four behave the same.
- The UE's CPU stays under 13% at 130 Mbit/s.
- With the modem in the measuring computer (
directmode, 2026-10-10 and 11) the downlink stays at about 130 Mbit/s in 19 of 20 runs; one run starts at the low level and moves to the high one after 17 s of its measured part.
A Session-AMBR below the radio capacity caps the downlink instead: at
100 Mbit/s it stays near 95 Mbit/s of TCP payload. The session's QoS is in
each run's ue.json (experiments/README.md).
Cause¶
Not identified. The measurements rule out:
- TCP slow start: at the measured round trip (12.8 ms median at rest) it takes well under a second, and four streams step up exactly like one.
- The UE's CPU.
- DRX sleep during a transfer: the
rttidle runs (10 pings per second) have a p99 of 22 ms, with no 200-300 ms gaps.
What remains is the radio side: how the gNB schedules and adapts the link (uplink grant sizes, the bandwidth or modulation used downlink). The gNB's own counters over the same window would tell which; they were not recorded.
Consequence for measurements¶
- The
throughputcampaign runs for 60 s and leaves out the first 10 s of every run, the length of the uplink ramp. - The downlink is reported as a distribution over 1 s windows (median, p90, the spread of the run means). A single mean over a run that spent part of its time at each level describes neither level.
- An iperf3 run of 20 s or less reports mostly the uplink ramp, or only the downlink's low level.
Where the TCP server goes¶
Measure against a server on the data path:
- the iperf3 server in each UPF pod, at the UE anchor
(
ue_internet_gateway,10.45.0.1for DNNinternet;ue_mec_gateway,10.46.0.1for DNNmec); - the edge endpoint, the measurement server in
mecon N6m (edge-apps.md).
A host outside the planes, such as the testbed host on the host-only network, cannot be reached from a UE: the plane filter drops that traffic (plane-isolation.md).