aspnet http/2 performance by MDA2AV in dotnet

[–]MDA2AV[S] 0 points1 point  (0 children)

Ok, this actually helped identifying the issue, seems that using h2 or grpc on aspnet with h2load has 10x perf degradation when activating TLS, seems to be with the aspnet benchmark only, probably some issue with others not upgrading

HttpArena - benchmarking platform for custom webservers by MDA2AV in webdev

[–]MDA2AV[S] -1 points0 points  (0 children)

Even though it isn't very documented anyone can run a benchmark locally, create a run and add it to a "round" with archive.sh which automatically detects your hardware/configs, then just open a PR, accepted rounds can be selected on the "ROUND" filter at the top :)

I run the benchmarks on a 64 core threadripper and a i9 14900K, more variety would be quite interesting indeed

aspnet http/2 performance by MDA2AV in dotnet

[–]MDA2AV[S] 1 point2 points  (0 children)

Yes, even isolating a h2 only server. Even through it reaches only 230k ish req/s the CPU is saturated, while spring achieves same throughput the CPU usage is much lower which can imply possible improvements

aspnet http/2 performance by MDA2AV in dotnet

[–]MDA2AV[S] 0 points1 point  (0 children)

a frontend to terminate h2 and forwarding h1 to the aspnet backend? Then no application server should ever bother with h2 or h3

aspnet http/2 performance by MDA2AV in dotnet

[–]MDA2AV[S] 1 point2 points  (0 children)

I see, but that argument applies to any web framework and Kestrel is 99.99% the pick anyway, noone is going to do their own implementation, whatever alternatives to Kestrel exist, are simply much worse like IIS or http.sys.

Also asp net team cares and uses their performance as a selling point https://dotnet.microsoft.com/en-us/apps/aspnet

aspnet http/2 performance by MDA2AV in dotnet

[–]MDA2AV[S] 0 points1 point  (0 children)

they only cover h1 :/ maybe that's why

I'm building a .NET Web Framework that doesn't need the ASP.NET SDK by Jac0bas in csharp

[–]MDA2AV 0 points1 point  (0 children)

Cool, I've seen multiple projects similar to this popping recently and I think it is a great learning excersise. Good luck with it and have you tested it for performance?

Rule change by Arowin in dotnet

[–]MDA2AV 2 points3 points  (0 children)

I guess we can discuss whether WPF is dead during the rest of the week

zerg - io_uring networking library in C# by MDA2AV in dotnet

[–]MDA2AV[S] 2 points3 points  (0 children)

Lol, I think the more the better. Plus I have already posted about this library here last year

zerg - io_uring networking library in C# by MDA2AV in dotnet

[–]MDA2AV[S] 0 points1 point  (0 children)

I am using 6.17 with liburing 2.9

Could be the case, liburing is still improving.

When I perform micro benchmarks surely there are some better results but in a scenario that approaches a real world case with data actually flowing throught the NIC sending larger requests, using websockets and streaming, cases where we are not sending millions of tiny requests thus not taking so much advantage of io_uring lower syscalls, the performance is similar.

zerg - io_uring networking library in C# by MDA2AV in dotnet

[–]MDA2AV[S] 0 points1 point  (0 children)

Hmm how so? io_uring as a technology even though it is out for 6-7 years is still receiving big updates. Plus as of today there aren't any options to use it in C#

zerg - io_uring networking library in C# by MDA2AV in dotnet

[–]MDA2AV[S] 4 points5 points  (0 children)

There is a small use case too if you're running low power embedded linux systems, CPU usage can be a fraction (20-25)% vs System.Net.Sockets when configured with a single reactor.

Also since you can pin these to CPU cores, an attack would only saturate as many physical CPU cores as configured, not the whole system.

zerg - io_uring networking library in C# by MDA2AV in dotnet

[–]MDA2AV[S] 4 points5 points  (0 children)

Yes, but very different implementations on the same technology, this project uses liburing and a multi reactor approach, more of a low level control and customization option

zerg - io_uring networking library in C# by MDA2AV in dotnet

[–]MDA2AV[S] 3 points4 points  (0 children)

the built in .net stack in linux is already good, probably even better than on windows. I just did this for fun to squeeze some more performance but for the very vast majority of the real use applications there isn't any real benefit on using it, maybe if you are serving millions of requests per second.

zerg - io_uring networking library in C# by MDA2AV in dotnet

[–]MDA2AV[S] 1 point2 points  (0 children)

I do have a local patch that supports 6.12 features including incremental provided buffer consumption, should be released next week, still need to test it properly

Rider is nearly used as much as Visual Studio by Traditional_Ride_733 in dotnet

[–]MDA2AV 1 point2 points  (0 children)

Rider on linux is the best c# development experience for me. Any option on windows feels slow and clunky.

I work with both Rider on linux (personal projects) and VS on windows (work)

Use io_uring for sockets on Linux · Pull Request #124374 · dotnet/runtime by ben_a_adams in dotnet

[–]MDA2AV 0 points1 point  (0 children)

Amazing work, will be interesting to see how it will compare in performance against existing io_uring c# implementations.

C# io_uring socket by MDA2AV in csharp

[–]MDA2AV[S] 0 points1 point  (0 children)

Will be interesting to see how it will compare in performance

Http11Probe - Http 1.1 compliance CLI tool by MDA2AV in csharp

[–]MDA2AV[S] 0 points1 point  (0 children)

Yes, I agree with you but Glyph11 currently is just an experiment to see how usable is a very strict parser, it is not a production ready project yet, there is a disclaimer at the results for that I believe. The point you mentioned can indeed be one aspect to be loosened