QUIC performance limited to 150 MB/s on my use case on localhost #6287
Replies: 10 comments 3 replies
|
I have finally found https://microsoft.github.io/msquic/msquicdocs/src/perf/readme.html?q=secnetperf And I don't known what to think. I start the server : Then the client: So the bandwidth (in lowlat) seems to be 3505446 kbps.... close to 430 MB/s, which is something I can observe with raw TCP on my localhost with the same server/client architecture and payloads. So definitely, there's something wrong in my QUIC settings. |
|
By inspecting the source code of secnetperf, I saw that I could use |
|
Just by changing the server from QUIC_EXECUTION_PROFILE_LOW_LATENCY to QUIC_EXECUTION_PROFILE_TYPE_MAX_THROUGHPUT , I get 250 MB/s instead of 150 MB/s. That's better, but still far below the expectations. |
|
Looks similar to #3926 but there were no final words |
|
I have played a little wit hQUIC_GLOBAL_EXECUTION_CONFIG on the server side, but it does not change the performance of the real and test servers. |
|
I try to generate a trace https://github.com/microsoft/msquic/blob/main/src/plugins/trace/README.md I have downloaded WPA, the plugin I start the trace with netsh trace start provider="{ff15e657-4f26-570e-88ab-0796b258d11c}" level=5 keywords=0xffffffffffffffff bufferSize=1024 maxsize=1024 tracefile=msquic.etl overwrite=yes After loading msquic.etl in WPA+msquic plugin, I just get an empty result |
|
Ok, this is not in https://github.com/microsoft/msquic/blob/main/src/plugins/trace/README.md but msQUIC must be built with QUIC_ENABLE_LOGGING and QUIC_LOGGING_TYPE=etw Now I get events in WPA |
|
Hi, I would consider trying the following, as generic advice:
If you think CPU utilization is a problem, collecting CPU traces using WPR/WPA can help to see if msquic workers get to run as you expect. Providing a CPU map in the execution options can help. |
|
I think I solved my problem ! Because of subtle differences in the toolchain, my "real server" was not deploying the same msquic.dll as my "test server". But since both Debug and Release builds of msquic.dll share the same name (instead of some "msquicd.dll" for the debug), the INSTALL step of the Debug build was overwriting the DLL of the INSTALL step of the Release. Indeed, when using Visual Studio to build several configurations, Debug is compiled after Release So ultimately, my whole problem was that the debug build of msquic is not using a "d" suffix. |

Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
I am new to msquic and try to test its performance for a very simple streaming scenario "unidirectional server -> client" on localhost.
I have built my own msquic (2.6.0), with Visual Studio under Windows, with openssl as TLS lib.
I have a (custom, C++) server that queues 5MB payloads as fast as possible, with a single stream for each payload, sequentially but overlapping (closing streams on SEND_COMPLETE, don't wait for previous stream to start a new one, but with a custom, fixed, limit on the number of active streams)
I have a (custom, C++) client that efficiently receives the payloads.
I can reach 150 MB/s measured in the client, which would be OK on a 1GB/s network, but terribly slow on "localhost".
I don't understand what is limiting me.
I have tuned many things already.
[server]
[Client]
I also (correctly) use flags such as QUIC_STREAM_START_FLAG_IMMEDIATE, QUIC_SEND_FLAG_ALLOW_0_RTT, QUIC_SEND_FLAG_FIN
I think that I am an order of magnitude below what I should expect.
Looks like that 150 MB/s limit must be related to some behaviour of msQUIC that could be tuned about congestion or some kernel events rate policy.
I would like to use one of the msquic tools to get a local perf test, but I can't find any relevant documentation for secnetperf, for instance. The link "For performance data, see the Performance dashboard." is broken
What should be my next step ?
All reactions