Three Reasons Why You Should Not Use iPerf3 on Windows

  • Staff

 Microsoft Networking Blog:

James Kehr here with the Microsoft Commercial Support – Windows Networking team. This article will explain why you should not use iPerf3 on Windows for synthetic network benchmarking and testing. Followed by a brief explanation of why you should use ntttcp and ctsTraffic instead.

Reason 1 – It is Not Supported​

iPerf3 is owned and maintained by an organization called ESnet (Energy Sciences Network). They do not officially support nor recommend that iPerf3 be used on Windows. Their recommendation is to use iPerf2. More on the Microsoft recommendation later.

Here are some direct quotes from the official ESnet iPerf3 FAQ, retrieved on 18 April 2024.

I’m trying to use iperf3 on Windows, but having trouble. What should I do?

iperf3 is not officially supported on Windows, but iperf2 is. We recommend you use iperf2.

And from the ESnet “Obtaining iPerf3” article, retrieved on 18 April 2024.

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…

Microsoft does not recommend using iPerf3 for a different reason.

Reason 2 – iPerf3 is Emulated on Windows​

iPerf3 does not make Windows native API calls. It only knows how to make Linux/POSIX calls.

The iPerf3 community uses Cygwin as an emulation layer to get iPerf3 working on Windows. You can read more about Cygwin in their FAQ.

The iPerf3 calls are sent to Cygwin, which translates them to Windows APIs calls. Only then does the Windows network stack come into play. The iPerf3 on Windows maintainers do an excellent job of making it all work together, but, ultimately, there are potential issues with this approach.

Not all the iPerf3 features will work on Windows. The basic options work well, but advanced capabilities needed for certain network testing may not be available on Windows or may behave in unexpected ways.

Emulation tends to have a performance penalty. The emulation overhead on a latency sensitive operation, such as network testing, can result in lower than expected throughput.

Finally, iPerf3 uses uncommon Windows Socket (winsock) options versus native Windows applications. For generic throughput testing this is fine. For application testing the uncommon socket options will not mimic real-world Windows-native application behavior.

Reason 3 – You Are Probably Using an Old Version of iPerf3.​

Go search for “iPerf3 on Windows” on the web. Go ahead, open a tab, and use your search engine of choice. Which I am certain is Bing with Copilot.

What is the top result, and thus the most likely link you will click on? I bet the site was

The newest version of iPerf3 on is 3.1.3 from 8 June 2016. That was nearly 8 years ago at the time of writing.

The current version of iPerf3, directly from ESnet, is 3.16. A full 15 versions of missing bug fixes, features, and changes from the version people are most likely to download.

This specific copy of iPerf3, from, includes a version of cygwin1.dll that contains a bug which limits the socket buffer to 1MB. This will cause poor performance on high speed-high latency and high bandwidth networks because iPerf3 will not be capable of putting enough data in-flight to saturate the link, resulting in inaccurate testing.

Where should you look for iPerf3 on Windows?

From ESnet’s article, “Obtaining iPerf3” they say:

Windows: iperf3 binaries for Windows (built with Cygwin) can be found in a variety of locations, including Home • Directory Lister (discussion thread).

What Does Microsoft Recommend​

Microsoft maintains two synthetic network benchmarking tools: ntttcp (Windows NT Test TCP) and ctsTraffic. The newest version of ntttcp is maintained on GitHub. This is a Windows native tool which utilizes Windows networking in the same way a native Windows application does.

But what about Linux?

There is! Details can be found on the ntttcp for Linux GitHub repo. This is a separate codebase built for Linux that is compatible with ntttcp for Windows, but it is not identical to the Windows counterpart.

Ntttcp allows you to perform API native synthetic network tests between Windows and Windows, Linux and Linux, and between Windows and Linux.

ctsTraffic is Windows-to-Windows only. Where ntttcp is more iPerf3-like, ctsTraffic has a different set of options and goals. ctsTraffic focuses on end-to-end goodput scenarios, where ntttcp and iPerf3 focus more on isolating network stack throughput.

How do you use ntttcp?​

The Azure team has written a great article about basic ntttcp functionality for Windows and Linux. I do not believe in reinventing the wheel, so I will simply link you to the article.

There is a known interoperability limitation when testing between Windows and Linux. Details can be found in this ntttcp for Linux wiki article on GitHub.

 Read more:

Top Bottom