You may have read my previous post on slow SSH/SCP in windows. In this post, I will explore this in a bit more detail. As it turns out, the network performance seems to be generally worse in Windows and I am wondering why. In this experiment, I am using Microsoft Azure (where one would think that Windows would be working optimally) to measure network throughput. I have set up a number of clients and servers in both local and remote data centers. I am using iperf3 to measure network performance of direct connections and connections established through SSH tunnels. The SSH tunnel scenario is something I am particularly interested in for connecting the clinical MRI systems to the Gadgetron.
Experiment
All virtual machines in the following were set up in Microsoft Azure and were of type Standard DS3 v2 (4 cores, 14 GB memory). Two servers were established in EASTUS and WESTUS and two clients (one Linux and one Windows) were set up in EASTUS. iperf3 was used to measure network throughput from both clients to both servers. The throughputs were measured using direct connections and connecting through an SSH tunnel established from the client to the server. On Windows, OpenSSH in Cygwin was used to establish the tunnels. The network topology is outlined in the diagram below.
Results and Dicussion
The full results of the of the iperf3 runs are listed at the end of this post. A summary of the results can be seen in the table below.
EASTUS (Direct)
EASTUS (SSH)
WESTUS (DIRECT)
WESTUS (SSH)
LINUX
236 MB/s (100%)
205 MB/s (100%)
44.9 MB/s (100%)
15.6 MB/s (100%)
WIN
209 MB/s (89%)
115 MB/s (56%)
3.65 MB/s (8%)
3.8 MB/s (24%)
It can be seen that in all instances network performance is poorer when using the Windows client. Even for a local (within EASTUS) connection, there is a drop in performance. In case you are thinking that the Linux machine could be located more favorably compared to the server, that is true, but I have tried this experiment a number of times (with different instances both in Azure and on a local network) and the result seems to always be the same. Windows just performs worse. When going through a tunnel, the problems get worse. There is almost a 50% drop in performance locally and much more when going long distance.
I struggle to explain these results and would appreciate any hints/comments that anybody might have. Especially good suggestions for fixing it. This must be a serious concern for anybody working with large datasets on Windows?
Full Data
Connecting directly Windows Client (EASTUS) to Linux Server (EASTUS):
Connecting directly Linux Client (EASTUS) to Linux Server (EASTUS):
Connecting directly Windows Client (EASTUS) to Linux Server (WESTUS):
Connecting directly Linux Client (EASTUS) to Linux Server (WESTUS):
SSH tunnel connection Linux Client (EASTUS) to Linux Server (EASTUS):
SSH tunnel Windows Client (EASTUS) to Linux Server (EASTUS):
SSH tunnel Linux Client (EASTUS) to Linux Server (WESTUS):
SSH tunnel Windows Client (EASTUS) to Linux Server (WESTUS):