Really asymmetric upload and download speeds using QUIC #2848
Unanswered
SergioLuis
asked this question in
Q&A
Replies: 1 comment 1 reply
-
First off, I want to say thanks for trying MsQuic and thanks for all the detailed info. Unfortunately, our most detailed diagnostics are currently only available when running on Windows. So if you could try that out and collect |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Hi all!
We write some software that does Remote Procedure Calling using a protocol of our own - no gRPC nor any other known frameworks. This software is written in pure C# and the newest versions of dotnet.
This RPC protocol is transport-agnostic. We default to TCP, but we also support UPD & UDT (in fact, we maintain a completely managed implementation of UDT).
So in order to test QUIC, which we all are really excited about, I rewrote the transport part of the RPC protocol, plugging in the new QUIC APIs in .NET where necessary.
But because the QUIC APIs are still not public in .NET 7 Preview, I built myself from scratch System.Net.Quic.dll from the dotnet/runtime repository and msquic from this one.
These are the arguments I used to build msquic:
I built msquic both for macOS x64 and ARM64, and for Linux x64 - and got it working perfectly (meaning that the RPC protocol works as expected using QUIC instead of TCP for both Linux to Linux, macOS to macOS, and macOS to Linux, both in x64 environments, ARM64, and mixed ARM64 - I have yet to test this on Windows, but as you can see, I had quite some fun testing this 😄 ...!)
However, the speed test results are not what I expected. I ran some synthetic upload and download tests. Instead of manually tampering with the network QoS, I created a remote VM on Google Cloud (in Sydney) and connected to it from Madrid (Spain).
The software we write has some built-in network speed tests, and that's what I used to compare TCP to QUIC - so that the comparison is as fair as possible.
The tests consist of uploading and downloading a chunk of 128MB of random bytes in packets of 1MB (so, 128 uploads and 128 downloads). Each upload and download test is an iteration, and the test performs four iterations in a row, reusing the same connection for all of them, and using the same (bidirectional) stream for uploading and downloading. These are the results:
QUIC:
SSL over TCP:
As you can see, I have QUIC running on port 443, in case someone was doing some shenanigans in the routing by favoring UDP traffic over HTTP/3's default port.
Some things to unpack here:
I tested this over two different networks in case there was some firewall in the middle throttling UDP packets in some way. The next thing I plan to do is repeat these tests within Google infrastructure (both client and server, in different regions) and check if there are any differences.
Any light you can shed on this will be more than welcome :)
Beta Was this translation helpful? Give feedback.
All reactions