iperf2 Android Client — User Manual

Last updated: July 20, 2026

Alpha software. The UI is still moving between builds and there are rough edges. If something looks broken or inconsistent, it's more likely a known gap than a bug worth deep-diving — feedback is welcome regardless.

A network-testing client for Android built on iperf2, with live meters designed to let you correlate throughput, latency, and congestion-signal metrics as they happen, rather than reading one number in isolation.

Getting started

Download the APK from the SourceForge file listing (look for the iperf2*_android.apk file, not the big green "Download" button at the top of the page, which grabs a different default file). Open it from your phone's Downloads or notification shade, and allow the one-time "install unknown apps" prompt.

On first launch, set Host to the server you want to test against and pick a mode. The app remembers your last 5 host/port entries via the dropdown.

The three test modes

TCP

Standard throughput testing, with live meters for:

MetricWhat it shows
ThroughputInstantaneous and average Mbps
RTT smoothedSmoothed round-trip time, paired with a chart of current RTT riding above the connection's tracked RTT floor
Load DelayCurrent RTT minus the RTT floor — the delay attributable to load on the path
CE DurationCongestion-experienced marking duration (where supported by the path)
Write Block TimeTime the sender spent blocked on a full send buffer
RetriesTCP retransmissions
CWND / inFlight / NotSentCombined chart of congestion window, bytes in flight, and bytes queued but not yet sent

Congestion control algorithm is selectable: cubic, reno, bbr, or prague (prague is greyed out on most stock devices — it needs a patched kernel most phones don't have).

Bounceback

Round-trip responsiveness testing (request/response, measured in RPS) — not idle-network latency. With the Working load toggle on, the app runs a concurrent upload/download/bidirectional load underneath the responsiveness probes, so you can see how well round-trip times hold up when the link is actually busy — the same concept behind "responsiveness under working load" / bufferbloat testing.

MetricWhat it shows
RPSResponses per second, with avg/min/max
Working load up / downConcurrent bulk throughput in each direction, if enabled
RPS (live, windowed)A windowed mean ± stdev band, so you can see whether responsiveness is stable or degrading under load

UDP L4S

Tests the L4S (Low Latency, Low Loss, Scalable throughput) congestion-signaling path.

MetricWhat it shows
Throughput, RTT smoothed, Load Delay, CE DurationSame meaning as the TCP versions above
Packets/secUDP packet rate
CE marks/secRate of congestion-experienced (CE) marks received
Marking ProbabilityFraction of packets arriving CE-marked
Loss ProbabilityFraction of packets lost
Window / Inflight / QueuedCombined chart, the UDP-L4S counterpart of TCP's CWND/inFlight/NotSent view

Reading the live meters

Every metric is shown as a small dial paired with a time-series sparkline beside it, each with a time axis ("-Ns" to "now") derived from your configured Interval. The dial gives the current reading plus avg/min/max; the sparkline lets you see the trend and line up a spike in one metric against what else was happening at the same moment.

Other options

OptionWhat it does
Duration / IntervalTest length and reporting interval, in seconds
Reverse (-R)Server sends instead of the client (TCP/UDP L4S)
tcp_notsent_lowatCaps how much unsent data the kernel buffers, for more responsive write-blocking behavior (TCP)
Custom request/reply sizeOverride the default Bounceback request/response payload sizes
Hold to save resultsLong-press a run to save it into one of four A/B/C/D slots for side-by-side comparison against a later run
About the default test servers: the responde.* hosts that ship as the app's default targets exist to verify the app itself works end to end — connects, authenticates, renders the live meters correctly. They are not sized for load testing, so don't read anything into the throughput/RPS numbers you see against them. Point the app at your own iperf2 server if you want numbers that mean something for your own path.

Licensing note

Connecting to a non-local host automatically and silently attaches a permit-key to authenticate against the developer's own test servers — there's no login or password to enter. This has no effect when pointing the app at your own iperf2 server.