Explore performance with io_uring
Is your feature request related to a problem? Please describe.
Once #410 is completed, we could also investigate performance improvements by using the io_uring capabilities in newer Linux Kernels, and see if we get an increase in performance.
Describe the solution you'd like
Tokio has https://github.com/tokio-rs/tokio-uring - which now has a UdpSocket. It does miss the capability to specify exactly how one would like SO_REUSEPORT setup, but I'm going to submit a PR for that.
This will mean we'll need platform conditional code, since the library doesn't (yet?) support uring on Windows, so would want to fall back to the current implementation (maybe need a wrapper around a UdpSocket to make this easier?)
We could potentially also test for if you can start a uring system, and fall back on the current implementation for older Linux Kernels as well and/or provide a way to turn it off if the kernel you are on isn't as modern as required (bug fixes, etc - seems like it might bit of a unstable surface until you hit around 5.14 or so???)
Describe alternatives you've considered
Leave things as is. But I'd like to at least explore it, see what the performance impact is, and if it's significant, it may be worth the extra juggling we would need to do in the codebase.
Additional context
- https://unixism.net/loti/
One thing that might be worth looking into, is using a different runtime like monoio which is built around io-uring. (It's also where I first saw the SO_REUSEPORT option FWIW).