QUIC network protocol - will it fix packing queuing? #6908
Replies: 12 comments 36 replies
|
It took me a while to realize the quicConfig option goes in a separate Config.json file in the root of the headless and not the normal headless config files. Unfortunately it seems none of the headless docker images are set up to create this file easily right now. |
|
Currently QUIC networking on the client does not appear to work on Linux systems. From experimenting and testing, libmsquic is not available inside the steam pressure vessel, which prevents QUIC from operating. This occurs even after installing libmsquic as a package (tested on Arch Linux), or even compiling libmsquic manually and installing manually. |
|
In case anyone else is getting bit by a mysterious inability of the server to advertise its QUIC-ness despite having everything else set up correctly, Config.json config parameters are case sensitive. oops lol |
|
Just tried a test where I upload a video and time how much time it takes for the host to fully receive it. for a ~48MB video it took ~12.5 seconds over QUIC which is an order of magnitude quicker! |
|
I hosted a session on my headless with about 12 users for a few hours, 4 of us connecting with quic. |
|
My poor 50mbps internet gets absolutely pummeled by file transfers 😭😭😭 they were watching bee movie (2.7gb) and it was like i was lobotomized for 9 minutes once the transfer finished though, everything went so smoothly i honestly forgot i was even using QUIC!! |
|
I've been running a lively cacophony factory all day and we've been helping folks try out QUIC for testing. We tossed some quite large videos at each other for testing purposes, duplicate-joined the session a whole lot via LNL/QUIC/TCP, did some impolite things to the datamodel (one thousand debugvectors my beloved). It went well overall, with just a few hitches. My setup is a dedicated headless host, i7-6700k, 24GB RAM, approximately 500 Mbit symmetric fiber in Seattle WA with good throughput and latency characteristics even at near-maximum upload/download speeds owing to a local bottleneck at my edge keeping throughput well below a point at which bufferbloat ever seems to arise. It lives on the same gigabit Ethernet network as my desktop/VR client. I'm not normally prone to queueing except in 30+ user sessions with high latency to the host and individual users within (EU party sessions seem to do it). My rough initial observations thusfar:
Network traffic overview of the last 7 days of regular session hosting on my headless (Monday and Wednesday events reach comparable peak user counts to tonight, albeit with less overt stress-testing): Zoom in on just tonight's tomfoolery:
A 700MB video file uploaded at a time when the session was largely QUIC users, to test performance. This video transfers from my desktop to the headless at near-gigabit line rate, then completely fans out to everyone on QUIC in <2 minutes. It continued to upload to the few LNL users in the session for about 15 more minutes.
A rough timeline of events, relative to my local time:
I can provide combined server and client logs for this session run but would prefer to do so out-of-band out of user discretion with this feature in its early state; let me know if you'd like copies of these. Some exceptions that stand out in frequency are: throughout sessions, and whenever a user left the session. I think some good next tests might be things like game or multimedia worlds that rely on/benefit from high speed and coordinated activities, along with more general testing with more marginal internet connections. This is exciting, so far, though!! |
|
I've been using quic on windows 10 and seen no issues come up while using it so far. Aside from joining one testing specific session, it has just been my usual usage of the platform. This did require swapping my dotnet runtime provided msquic.dll for a version built with openssl which can be obtained from https://www.nuget.org/packages/Microsoft.Native.Quic.MsQuic.OpenSSL. I added a tutorial for swapping them on the wiki for others who may want to experiment with that https://wiki.resonite.com/Guide_for_QUIC_on_Windows10. It may also be a point of consideration towards using a version that would have wider support in the meantime although even as is, it isn't terribly difficult for a user to make it work less officially if they wish to. |
|
Thanks for all the tests, investigations and help everyone! So far from what I'm reading, QUIC seems very promising way forward, with greatly increased throughput over LNL. I think this is a better way forward than trying to wrangle LNL to behave better and be able to push more data - even with large window size, it can't seem to match this protocol in its efficiency. The main issue I see right now is that large transfers negatively affect voice and pose streams. There's a few solutions to this:
Other than that it's not working out of the box on graphical Linux client - but there's solutions for that we can integrate (I've asked @BlueCyro if he can integrate those). |
|
Good news, I managed to backport the priority setting from .NET 11! From the latest build release notes:
|
|
I’ve had a QUIC-enabled session running since right after the release, and it’s been working fine so far. I’m hosting it on an ARM Linux instance on Oracle VPS; it worked properly once I installed the necessary modules as outlined in the Microsoft documentation. One question I have is: does QUIC only support IPv4? With the configuration method I tried, it wouldn't start up correctly when I specified an IPv6 address. |




Uh oh!
There was an error while loading. Please reload this page.
Hello everyone!
I have another test for you. This one is a bit long running and doesn't need a special build - but it does require you to enable certain options.
Build Version
Whatever latest public version of Resonite is - there's no separate branch
What is being tested
We've been long battling the throughput issues with the LNL protocol, resulting in packet queing and delays. One of the alternatives that might behave better is the QUIC protocol, which is natively supported in .NET 10.
We have made initial implementation of this protocol into Resonite so we can gauge how well it might perform and if it's worth investing more time into it.
Whether you're prone to queuing or not, it's good to gather some data on how it performs!
How to test
There are two parts to testing - hosts of headlesses need to explicitly configure QUIC for WAN connections and users need to enable QUIC as preferred protocol for connecting to them.
I'm user connecting to servers
By default, Resonite will not use QUIC to connect.
To enable this, toggle the option in Settings -> Network -> Prefer QUIC (experimental)
When connecting to a QUIC enabled server, it should now use this protocol. Always verify that it's actually used by checking the protocol in one of the user display items.
I'm hosting headless
QUIC will not work out of box for your headless (except on LAN). We didn't implement NAT punchthrough for it yet, so you need to configure a public IP manually for it to be available.
Make sure your system supports QUIC - there will be
QUIC supported: Truein the logConfigure public IP & open appropriate ports
Config.jsonfile where your headless is installed and add this config{ "quicConfig" : { "publicIP" : "127.0.0.1" } }forcePortsettingOnce you have all these options configured, QUIC should be supported. If your session is public, you can easily verify this by going to:
https://go.resonite.com/session/
And checking of the "Alternative URLs" contains
quic://<your-ip>:<port>What to test
What to watch out for
Known limitations
Report your observations!
How long will testing go for?
There's no set end, this is an ongoing test.
The experimental protocol exists alongside other protocols, so there's no rush and it can be used as a fallback or default protocol if it works well for you.
If we get promising results, we'll likely invest more time into polishing QUIC and switching over to it as main implementation.
I like programming, can I help get adopted quicker?
Yes!
For us to fully lean into QUIC, we require the Datagram extension, which allows sending unreliable data like voice & poses. There is a library that adds this support, but it's heavily tied to .NET 7/8 and doesn't work correctly on .NET 10.
Official support for this seems to be planned for .NET 12, which is at the time of this post more than 1 year out.
If you'd like to build Datagram extension that works with .NET 10 (and upcoming .NET 11), this would help us adopt this sooner if we have promising results.
You can find more info in the issue here: #5458
All reactions