Network throughput
I started to wonder, is my ISP providing me 1 gigabit as promised? So I started to think about how to measure this. A simple approach is visiting speedtest.net in a web browser. This resulted in a measurement of 185 mbps one way and 279 mbps the other. In addition, I found that the website recommended "For downloads speeds over 100Mbps we recommend downloading the Speedtest app[sic]". The offered application didn't support my operating system, so I started looking for measurement tools that did. I did a bit of research to check what my ISP offered, and while they claim to provide a Speedtest service of their own, all that they provide is an "Apache2 Debian Default Page". I suppose that I could download this repeatedly, but I imagine they might frown on this.
And so I looked for other options. With the surfacing of some latent data in my brain, and a conversation with Shao, I settled upon iperf3 as the first piece of my measurement infrastructure. I found that the always-interested-in-pressuring-their-competition Hurricane Electric, claims to offer an iperf server and that the tool authors provide an address for it. This is the healthy sort of software ecosystem which I am pleased to find.
I ran some tests and found that with the Hurricane Electric server I got around 600mbps downstream:
$ iperf3 -c iperf.he.net -R -t 3
Connecting to host iperf.he.net, port 5201
Reverse mode, remote host iperf.he.net is sending
[ 5] local 2604:4080:1500:8029:cad3:ffff:fea4:89c8 port 56138 connected to 2001:470:0:236::2 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 68.9 MBytes 578 Mbits/sec
[ 5] 1.00-2.00 sec 74.9 MBytes 628 Mbits/sec
[ 5] 2.00-3.00 sec 76.5 MBytes 642 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-3.05 sec 224 MBytes 617 Mbits/sec 0 sender
[ 5] 0.00-3.00 sec 220 MBytes 616 Mbits/sec receiver
This iperf server is physically 800 miles away and networkly twelve hops:
mtr -4 --show-ips --tcp --port 5201 -rwz iperf.he.net
Start: 2025-08-03T22:11:09-0700
HOST: thich Loss% Snt Last Avg Best Wrst StDev
1. AS??? router.lan (5.4.4.1) 0.0% 10 0.9 0.8 0.5 1.0 0.1
2. AS54858 br1-rollinst-v100.bb.as54858.net (104.156.111.129) 0.0% 10 1.8 3.1 1.4 15.0 4.2
3. AS??? 172.16.100.34 0.0% 10 1.7 1.6 1.2 2.0 0.2
4. AS11404 cr2-sea-a-be100-4000.bb.as11404.net (216.243.28.205) 0.0% 10 1.4 1.4 0.9 1.8 0.2
5. AS11404 be11.cr3-sea-a.bb.as11404.net (174.127.151.11) 0.0% 10 1.5 5.4 1.1 34.4 10.4
6. AS11404 be55.cr2-sea-a.bb.as11404.net (65.50.198.67) 0.0% 10 1.8 1.6 1.2 1.9 0.2
7. AS11404 be1.cr2-sea-b.bb.as11404.net (174.127.149.137) 0.0% 10 1.7 1.7 1.4 1.9 0.1
8. AS??? 100ge14-2.core1.sea1.he.net (206.81.80.40) 80.0% 10 1.9 516.7 1.9 1031. 728.0
9. AS??? hurricane.nwax.net (198.32.195.42) 0.0% 10 5.1 208.6 4.7 1033. 429.0
10. AS45430 as6939.equinix-palo-alto.core2.pao1.he.net (198.32.176.20) 40.0% 10 7180. 1383. 20.4 7180. 2868.7
11. AS6939 port-channel4.core1.fmt1.he.net (72.52.92.66) 0.0% 10 21.2 121.3 21.0 1022. 316.5
12. AS6939 216.218.207.42 0.0% 10 21.2 21.2 20.7 21.5 0.2
Thinking about that distance led me to realize that I am measuring a lot of things that aren't the gigabit that my ISP promised me, so I decided to measure fewer things at a time. The simplest measurement I could think of is two hosts on my local network.
So I set up two hosts with iperf and ran a couple tests:
thich# iperf3 -c maya
Connecting to host maya, port 5201
[ 5] local 5.4.4.4 port 33468 connected to 5.4.4.5 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 39.9 MBytes 334 Mbits/sec 0 89.1 KBytes
[ 5] 1.00-2.00 sec 58.6 MBytes 491 Mbits/sec 0 99.0 KBytes
[ 5] 2.00-3.00 sec 73.5 MBytes 617 Mbits/sec 0 137 KBytes
[ 5] 3.00-4.00 sec 91.8 MBytes 770 Mbits/sec 0 168 KBytes
[ 5] 4.00-5.00 sec 105 MBytes 885 Mbits/sec 0 201 KBytes
[ 5] 5.00-6.00 sec 109 MBytes 916 Mbits/sec 0 201 KBytes
[ 5] 6.00-7.00 sec 109 MBytes 916 Mbits/sec 0 201 KBytes
[ 5] 7.00-8.00 sec 109 MBytes 916 Mbits/sec 0 201 KBytes
[ 5] 8.00-9.00 sec 109 MBytes 914 Mbits/sec 0 201 KBytes
[ 5] 9.00-10.00 sec 109 MBytes 916 Mbits/sec 0 201 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 915 MBytes 768 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 914 MBytes 767 Mbits/sec receiver
iperf Done.
thich# iperf3 -c maya -R
Connecting to host maya, port 5201
Reverse mode, remote host maya is sending
[ 5] local 5.4.4.4 port 39224 connected to 5.4.4.5 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 111 MBytes 930 Mbits/sec
[ 5] 1.00-2.00 sec 111 MBytes 933 Mbits/sec
[ 5] 2.00-3.00 sec 111 MBytes 933 Mbits/sec
[ 5] 3.00-4.00 sec 111 MBytes 933 Mbits/sec
[ 5] 4.00-5.00 sec 111 MBytes 933 Mbits/sec
[ 5] 5.00-6.00 sec 111 MBytes 933 Mbits/sec
[ 5] 6.00-7.00 sec 111 MBytes 933 Mbits/sec
[ 5] 7.00-8.00 sec 111 MBytes 933 Mbits/sec
[ 5] 8.00-9.00 sec 111 MBytes 933 Mbits/sec
[ 5] 9.00-10.00 sec 111 MBytes 933 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.09 GBytes 933 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 1.09 GBytes 933 Mbits/sec receiver
I find these tests interesting because I get different behavior depending which direction I go, and one of these days I will get back to seeing if I can close on the differences.