Replies: 2 comments 4 replies
-
The first thing that comes to mind is that the sample uses send buffering by default. If you can guarantee that you have at least 2 send buffers pending at all times, you can turn off send buffering and get more performance. We have multiple Gbps performance with a single MsQuic connection, so multiple connections wouldn't help here; they'd be competing with each other for bandwidth and end up with worse performance.
Beyond that, we might need some performance traces to see what other bottlenecks there are. If you don't want to share them, you can use the instructions at https://github.com/microsoft/msquic/blob/main/src/plugins/trace/README.md to use the Windows Performance Analyzer (WPA) plugin to investigate performance bottlenecks.
Let us know if you have more questions, or problems investigating this further.
|
Beta Was this translation helpful? Give feedback.
-
I was stepping through the msquic code and it seems like only time the sendinline works is if send is called from the msquic connection worker thread. --- api.c ---
|
Beta Was this translation helpful? Give feedback.
-
Hi,
We have a very network intense application that is currently using raw tcp. The solution dynamically opens more tcp sockets if latency is high (1 socket per 15ms ping) and I can saturate my network connection really well with this setup.
Right now I'm testing integrating msquic since I want the security and also hoping to be able to implement udp hole punching once switched over to msquic.
My problem though is that I can't get nearly as high throughput as the tcp solution and I suspect it might be related to how I'm using msquic... so this post is an ask for how to configure quic for maximum throughput.
Here's my setup.
Superfast host computer (Threadripper pro, 256gb ram) using 0.6% cpu when running our application
Very stable internet connection (3gbps symmetric fiber directly in to my house)
Latency at 80ms (I'm located on west coast NA using AWS us-east)
Tcp solution
Throughput peaks at 2.5gbps+ with 4 tcp sockets... much lower with only one socket. (I guess limitation of sliding window and ack. With lower latency I get same throughput using only 1 socket)
Msquic solution
Throughput peaks at ~800mbps
Right now I have no modifications to Msquic configuration and just use the setup from sample.c. I have tested creating multiple streams inside the same connection without seing any throughput differencies. I've tested 1 stream all the way up to 10 streams.
Are there settings I can play with to try to improve the throughput?
Would it help to open more connections? Since it is udp I would expect that to not really matter (there is no competition going on on my machine with other network intense activity)
Also, a side note is that I'm using OpenSSL because I couldn't get the schannel path to work (I will revisit this at some point). I see in your perf benchmarks that schannels are faster but I wouldn't expect it to "solve" my scenario.
Any advise would be appreciated :-)
Best regards,
Henrik
Beta Was this translation helpful? Give feedback.
All reactions