Skip to content
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

Closed
Frooxius opened this issue Jun 8, 2024 · 4 comments
Closed

Move headless codebase to .NET #2265

Frooxius opened this issue Jun 8, 2024 · 4 comments
Assignees
Labels
New Feature A new addition, whose complexity hasn't been evaluated yet triaged This issue has been assessed

Comments

@Frooxius
Copy link
Member

Frooxius commented Jun 8, 2024

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

@Frooxius Frooxius added the New Feature A new addition, whose complexity hasn't been evaluated yet label Jun 8, 2024
@Frooxius Frooxius self-assigned this Jun 8, 2024
@BlueCyro
Copy link

BlueCyro commented Jun 8, 2024

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.

@shiftyscales shiftyscales added the triaged This issue has been assessed label Jun 10, 2024
@Frooxius Frooxius moved this from To Do to In progress in Performance Optimizations Jul 11, 2024
@Frooxius
Copy link
Member Author

Frooxius commented Jul 12, 2024

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.

@ohzee00
Copy link

ohzee00 commented Aug 21, 2024

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).

@Frooxius
Copy link
Member Author

Oh yes, I completely forgot! Thanks! Closing!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
New Feature A new addition, whose complexity hasn't been evaluated yet triaged This issue has been assessed
Projects
Status: Done
Development

No branches or pull requests

4 participants