-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Move headless codebase to .NET #2265
Comments
Given my experimentation with patching the headless to run on .NET 8 with my own set of patches - I'm very excited for this. I've seen a few events hosted with the patches and the performance has been stellar. Some anecdotal observations I've noticed are that even populated sessions (20-30 users!!!!) will never go below the server's set tickrate of either 30 or 60 on a variety of different hardware configurations. An example I like citing is that during testing on a 5800X ubuntu server, I requested the tickrate to be uncapped (set to 300) and turned off the in-world culling system so that the headless was calculating everything. With 13-20 players filing in and out, protoflux being built, avatars spawning and vehicles whizzing around, the server saw a maximum stable tickrate exceeding 230fps, and never dropping below that (sometimes down to like 90 or so) for a single update. Bepu unsurprisingly gets a very significant performance bump - whereas simulating ~900 rotation-enabled character controllers CRUSHES mono down to like 20fps on my 5900X server, .NET handles it no-problem, capping to the server tickrate of 60fps at all times. These are just my anecdotal observations as I haven't had time to do a true scientific A/B test of a populated session, but given - to my own eyes - the performance that I regularly see out of headless sessions on a variety of different hardware, it's an exciting glimpse into what kind of performance gains we could potentially see. |
This has now been implemented (mostly) with 2024.7.12.12 and we're doing testing! #2539 I'll keep this open to see if there's stuff exploding with this. If it's okay, I'll close it. |
Question, is this good to close? The Headless branch has been pushed to .net8 for a few weeks now and seems to be pretty stable (if not more stable than mono). |
Oh yes, I completely forgot! Thanks! Closing! |
Is your feature request related to a problem? Please describe.
Currently the headless client is using .NET Framework as a runtime, which is old, outdated and lacking in a number of performance improvements.
It doesn't support other platforms natively either, requiring use of Mono to run it on Linux.
Describe the solution you'd like
As a step of general push towards using much more modern (and performant) .NET (previously .NET Core), we'll transition headless server codebase to use .NET as the runtime.
The codebase is mostly compatible with .NET already except for a few changes that need to be done. The major hurdle is the type serialization, resulting in an incompatibility between .NET Framework and .NET clients, which will be addressed by this: #2264
Describe alternatives you've considered
N/A
Additional Context
This should provide performance improvements to the headless server (based on some data from community based ports) and provide better compatibility.
This will allow us to better evaluate the impact for .NET on performance and estimate performance improvements for the graphical client from the same switch that would be done through this issue: #706
Requesters
No response
The text was updated successfully, but these errors were encountered: