Don't Use Iperf3 on Windows
techcommunity.microsoft.com
techcommunity.microsoft.com
> Ntttcp averaged about 12.75 Gbps […] Ntttcp does something called pre-posting receives, which is unique to this tool.
This is TCP we’re talking about, and with large enough buffer—per-syscall (128k on my iperf3 by default - that’s good) you should be able to saturate even a thick line, provided auto-tuning is enabled correctly. But just add -P 16 to parallelize to be sure it’s not the TCP stack, instead? Did they even try a workaround, before suggesting an extremely limited and proprietary tool that nobody is familiar with? Or better yet, help the project out by contributing native code if the open source community is so bad at windows? At the very least, make a wire-compatible version.
Iperf is a very boring and wonderful tool that just works. Importantly, it’s a networking tool, which means you need interop across different systems. Any networking tool that’s single-platform is dead in the water, as far as I’m concerned.
Edit: To be fair, I see they have a Linux version, how generous. Last updated in 2022 and many open issues though.
I know UDP and QUIC comes with a ton of novel bottlenecks throughout the stack (even down to the NICs, no?), and at the very least tons of knobs, which warrants more custom tooling and keeping up with the latest in terms of OS/platform support. I can totally see how iperf isn’t suited for that.
Still, it’s a pretty strong and different message that Microsoft is sending on an official channel, which is unfortunate if it indeed is the case that iperf works just fine on windows with pretty standard flags (note that even on typical Linux recv buffers are constrained to ~6MiB so -P is standard for WAN saturation tests).
(Also good to see your relentless attention to engineering details as always. We used to work together some years back)
To study higher end network stacks or more modern protocol dynamics, or cross network flows, the other tools are providing much better insights.
The need for -P for basic tests is also telling and part of the problem: if the tool can't outpace a browser then even for these "basic cases" it's showing its inadequacy for the kinds of things the bulk of users care about even today, even with old protocols.
> Microsoft maintains two synthetic network benchmarking tools, ntttcp (Windows NT Test TCP) and ctsTraffic.
Okay, let's see which of these is compatible with the iperf3 available on my locked-down commercial router (or, alternatively, the test endpoint my ISP provides) …
…it's neither…
…aaaaand we're back to iperf3 on Windows. :-(
As tongue-in-cheek this comment may be, a recommendation for 2 incompatible tools is worth nothing. Iperf is the de-facto standard, if anything the problem is sometimes you have iperf2 around for some reason. If, Microsoft, you want better Windows network stack benchmark results, you'll need to make something compatible with iperf3 (or fix iperf3.)
(It does not matter that ntttcp runs on Linux. I can't install ntttcp on an Ubiquiti router, or ask my ISP to add another test endpoint.)
For many people it won't be by choice, it'll be because Windows' plethora of dark patterns and anti-consumer features have tricked you into using it, or taken away your previous explicit choice.
Anyhow, even when searching for "iPerf3 on Windows" in both Google and DuckDuckGo, the first result is still iperf.fr.
This is just woefully naive when we have court documents from Microsoft's history of open source attacks. Microsoft lost the benefit of the doubt ages ago, nevermind that you should not be giving a legal entity who's only incentive is to extract more wealth from the world "the benefit of the doubt".
root@router:~# opkg find ntttcp
root@router:~# opkg install ntttcp
Unknown package 'ntttcp'.
Collected errors:
* opkg_install_cmd: Cannot install package ntttcp.
root@router:~#
Microsoft would be so much better served putting resources into proper Windows support for iperf3, instead of creating their own tools and convincing the world to switch.But I just checked with the newer version and I didn't see a difference when testing with my 2.5GbE LAN (still 2.3Gbit UP and 1.9Gbit DOWN)
It's not quite linux package management, but, it beats the pants off any other way.
It's always such a bizarre experience when people advocate for centralized repositories for Windows. Windows, unlike Linux, comes in very few flavours/versions (and with decent backwards-compatibility story), so the application developers can very well be (and in practice, well, are) expected to build the apps for the Windows versions they care about and then use their web-sites to distribute it.
In this case with iPerf3 we just have a sad story of two forks, and the group that owns the namesaked website for some reason could not be bothered after 2016 to re-upload the releases of the other group. Well, similar things happens in "official" Linux distros as well, with severely outdated packages.
If winget had appeared a decade or two earlier it might have replaced the need for every Windows app to ship an auto-updater.
I'd actually love for that, yes. Just google "download VLC" - the top link does refer to VLCs official site (probably because they paid for or got donated the top spot), the second one goes to an IT newspaper, the third one to something uBlock flags as badware risk, the fourth one another newspaper, the fifth one someone offering VLC with a newsletter subscription, and finally the official page.
And that's the reality for a lot of popular Windows software. Part of that is obviously the responsibility of Google that can't even keep the top software search results free of advertising grifters (the newspapers) or malware, but the larger part is on Microsoft for not offering a centralized store for decades.
In contrast, on Ubuntu a simple `sudo apt-get install vlc` is enough, and (bar a supply chain corruption) I can be reasonably sure that I get a stable, unmodified version of VLC. Oh, and when I run a `sudo apt-get remove --purge vlc` it is gone... in contrast to a lot of Windows software with badly written uninstallers (because MSI is an utter PITA to develop against), that leaves remains everywhere across the system.
[0] https://apps.microsoft.com/detail/xpdm1zw6815mqm?hl=en-us&gl...
VLC: App Stores Were a Mistake (twitter.com/videolan) https://news.ycombinator.com/item?id=39798565
More here: https://mjtsai.com/blog/2024/04/19/vlc-vs-the-app-stores/
> Currently, we cannot update VLC on Windows Store, and we cannot update VLC on Android Play Store, without reducing security or dropping a lot of users…
> If you do wonder why we don’t update VLC on the Windows Store or why VLC/iOS can’t connect properly to OneDrive shares, it’s because Microsoft Kafkaïesque bureaucracy refuses to help us.
So maybe you don’t want to use centralised app stores with commercial control, and instead want to download software directly from the authors.
Debian explicitly ships free software. They make no apologies for the impact on functionality if software authors depend on non-free elements, for software that they package. This has always been true, and is always a source of complaint from people who prioritise functionality over freedom.
I actually get ~7 Gbps, not 10Gbps, out to my real network. I haven't dug into what the issue is but when hitting my real network the guest clearly becomes bottlenecked by CPU, so I doubt iperf3 is to blame. (The host does not have this problem despite being on the same bridge, so I'm guessing there is some host-guest optimization I'm hitting in the virtio driver in the former case.)
Now that's a low-latency, high-bandwidth link. If you're testing "high latency, high-bandwidth" as purported in the article, and that link is apparently ~40Gbps or fatter, you're probably running on a "real server" in a "real datacenter" somewhere. I can tell you I wouldn't be burning a Windows Server license just to verify my L2/L3 connectivity is configured correctly.
I am sure MS would love if I bought two licenses of their proprietary operating system just to use this proprietary network testing client, but my pockets are not infinitely deep. (As I already spent all that money on the Cisco-branded optics. /s)
How many routers do you know off the top of your head that run Windows?
https://pkgs.org/download/nttcp
No user of the other commercial Linux distros (RHEL, SLES) is going to install ntttcp from source or random binaries.
Of course, the Windows kernel team could support POSIX system calls that iperf and other network applications require, instead of removing that feature altogether:
https://learn.microsoft.com/en-us/archive/technet-wiki/10224...
But hey why provide customers a good product when you can just write a blog with a useless recommendation instead.
Microsoft is a big company with many teams on many products. Some of those teams really understand interoperability with modern developers and applications. This team don't.
In hindsight not doing that is what opened the door to FOOS on PCs in first place, so beware what one wishes for.
The current release of iperf 2 is 2.2.0 but 2.2.1 with bug fixes will be out soon.
Comparison table here: https://iperf2.sourceforge.io/IperfCompare.html
Compare invocations for these commandline apps:
Linux app:
iperf3 -s
Windows app: .\ctstraffic.exe -listen:* -Buffer:"$(128KB)" -Transfer:"$(1TB)" -ServerExitLimit:1 -consoleverbosity:1 -TimeLimit:60000
Who the hell wants to type all of that out?A binary is here https://sourceforge.net/projects/iperf2/files/
I've gravitated towards using custom test tools that use the same pattern as the application that will run on the network. So instead of testing maximum UDP throughput or with dozens of TCP threads with artificially high window sizes, I test with "whatever it is" that the client/server apps are likely to do.
I still use hrPing, because it behaves a lot like a large category of common server apps, such as Linux tools ported to Windows.
However, when the service you provide is the network itself, e.g. to a customer who just bought XYZ performance from A to B, you need usage-agnostic test tools.
A company providing a network application should be providing a custom benchmark tool whose behaviour mimics the application. If the application provider is so incompetent they don't do that, then tools like yours become useful, if they are allowed by organisation security policy. In my experience, few are going to compile some bloke's random testing tool from source or run scripts off your GitHub.
Most commercial users just want to plug in 10Gbps NICs, run iperf and see "9.x Gbps", tick a box and move onto the next item.