One of the things I test when reviewing mini PCs for Liliputing is WiFi performance or network throughput. And up until recently I’ve used the popular iperf3 tool to do that, since it allows me to see how real-world performance compares with the speeds you’d expect from the specifications provided by WiFi chip makers.

For some time though, I’ve noticed that WiFi speeds have been much higher when I ran the test on systems running Ubuntu Linux than they were when running the same test. Now Microsoft has provided an explanation for the discrepancy in an article entitled Three Reasons Why You Should Not Use iPerf3 on Windows .

Those three reasons boil down to:

  1. ESnet, the team that develops iPerf3 doesn’t officially support Windows.
  2. While there are versions of the tool that have been compiled for Windows, they do not make native API calls on Windows, and instead use Cygwin as an emulation layer, which could add some overhead.
  3. Up until recently, there  was a Windows build available for download from the iperf3 website , but it was nearly 8 years old and contained a bug in cygwin that causes “poor performance on high speed-high latency and high bandwidth networks.”

At first, I thought Microsoft’s second point, namely that “iPerf3 is Emulated on Windows,” appeared to be the most likely cause for the lower than expected throughput I’ve encountered.

So I installed Microsoft’s suggested alternative of ntttcp , as there are both Windows and Linux versions of the tool, and because it supports testing between Windows and Linux. That second point is critical, given that I always test throughput to and from a Linux server regardless of client OS.

With the “ntttcp” tool installed on both Windows and Ubuntu on a mini PC client, and “ntttcp” installed on the Ubuntu server, I measured the throughput on each OS over both Ethernet and WiFi. And this time the Windows and Ubuntu results were much closer.

However I then decided to investigate Microsoft’s third point. I had been downloading the Windows build of iperf3 from the iperf website, which means I was running iperf3 3.1.3 rather than the latest version, which is iperf3 3.16.

After Microsoft published its article though, ESnet removed that download link, suggesting there was something to Microsoft’s assertion that the old build of the software didn’t perform properly on Windows.

So I also installed a Windows version of iperf3 3.16 and ran the test again on Windows. In the table below, for Ethernet I used a connection between two 2.5 Gbps ports. , and for WiFi, I connected over networks on 2.4, 5.0 and 6.0 GHz bands.

Windows
Ethernet WiFi 2.4 GHz WiFi 5.0 GHz WiFi 6.0 GHz
ntttcp iperf3 3.1.3 iperf3 3.16 ntttcp iperf3 3.1.3 iperf3 3.16 ntttcp iperf3 3.1.3 iperf3 3.16 ntttcp iperf3 3.1.3 iperf3 3.16
Upload 2.37 Gbps 2.37 Gbps 2.37 Gbps 371.08 Mbps 302 Mbps 369 Mbps 949.46 Mbps 517 Mbps 922 Mbps 1.93 Gbps 800 Mbps 1.86 Gbps
Download 2.35 Gbps 2.35 Gbps 2.35 Gbps 394.44 Mbps 274 Mbps 393 Mbps 882.91 Mbps 506 Mbps 880 Mbps 1.58 Mbps 661 Mbps 1.59 Gbps
Ubuntu
Ethernet WiFi 2.4 GHz WiFi 5.0 GHz WiFi 6.0 GHz
ntttcp iperf3 ntttcp iperf3 ntttcp iperf3 ntttcp iperf3
Upload 2.35 Gbps 2.35 Gbps 352.11 Mbps 349 Mbps 887.77 Mbps 868 Mbps 1.51 Gbps 1.46 Gbps
Download 2.35 Gbps 2.35 Gbps 176.96 Mbps 181 Mbps 811.3 Mbps 814 Mbps 1.38 Gbps 1.35 Gbps

While throughput measured with iperf3 3.1.3 on Windows was significantly lower than the measurements I saw with Ubuntu, the Windows ntttcp and iperf3 3.16 throughput measurements were much closer. And there is very little difference in measured throughput compared with nttcp, with variances between 0% and 3.6%, i.e., likely within the testing margin of error.

The muted emulation performance penalty appears to be minimal, and is likely not detectable given the normal variations of throughput encountered while testing WiFi (it is not an exact science when tested outside of lab environments).

Now that it’s clear that the discrepancy between WiFi network throughput that I was seeing while reviewing mini PCs was due to the measurement tools and not the operating systems themselves, I’ll either make sure to use the latest tools or go back to simply reporting the Ubuntu-only results since they should be similar to what you’d see with Windows.

via Slashdot

Update: This article was first published April 23, 2024 and most recently updated April 24, 2024 with a comparison between throughput measured by iperf3 3.1.3 and iperf 3.16 on Windows. The article originally only compared iperf3 3.1.3 to ntttcp. 

Support Liliputing

Liliputing's primary sources of revenue are advertising and affiliate links (if you click the " Shop " button at the top of the page and buy something on Amazon, for example, we'll get a small commission).

But there are several ways you can support the site directly even if you're using an ad blocker* and hate online shopping.

Contribute to our Patreon campaign

or...

Contribute via PayPal

* If you are using an ad blocker like uBlock Origin and seeing a pop-up message at the bottom of the screen, we have a guide that may help you disable it.

Subscribe to Liliputing via Email

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Join 9,554 other subscribers

Join the Conversation

6 Comments

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed .

  1. Testing Ethernet or WiFi throughput is such a crap-shoot. What’s your latency? Is you latency symmetric? What are your buffer sizes? Did you disable TCP slow start (TCP congestion control – https://en.wikipedia.org/wiki/TCP_congestion_control )? What is your MTU? Where are your end-points?

    iperf works over ip/udp or tcp/ip. Microsoft’s ntttcp runs on tcp/ip only – right? iperf on Linux/xBSD is a no brainer. For windows though, if you read this page:

    https://en.wikipedia.org/wiki/Iperf

    It says, “A user of Neowin, BudMan, provides unofficial Windows builds on his server:”

    https://files.budman.pw/

    Which seems to be true [latest: iperf3.16_64.zip, 2023-12-08 14:06:14].

    I remember there used to be a cross-platform GUI front end for iperf in Java called Jperf, I’ll have to look into that again.

  2. Which mini PC did you use? I tried with Khadas Mind Premium, and saw close to zero differences between iperf3 and ntttcp in Windows 11 using WiFi 6 (5GHz)

  3. Iperf3 is open source. Microsoft should do the work required for it to run at speed on windows instead of making everyone change their workflow.

    1. That’s because ESnet, who is the principle developer and maintainer of iperf, states here: https://software.es.net/iperf/obtaining.html
      “Primary development for iperf3 takes place on CentOS 7 Linux, FreeBSD 11, and macOS 10.12. At this time, these are the only officially supported platforms, however there have been some reports of success with NetBSD, OpenBSD, Windows, Solaris, Android, and iOS.”
      (Note that Windows support comes from emulation using Cygwin)
      And I suspect they focus on the *nix, including posix compatible OSX, because they can all share mostly the same code path and network API calls. It could be likely that ESnet is not receptive to having an entirely different code path dedicated to making native Windows API calls in iperf3