Hacker News new | ask | show | jobs
by 0xQSL 1281 days ago
Would it be an option to use io-uring to further recuce syscall overhead? Perhaps there's also a way to do zerocopy?
1 comments

That was previously explored in https://github.com/tailscale/tailscale/issues/2303 and will probably still happen.

When Josh et al tried it, they hit some fun kernel bugs on certain kernel versions and that soured them on it for a bit, knowing it wouldn't be as widely usable as we'd hoped based on what kernels were in common use at the time. It's almost certainly better nowadays.

Hopefully the Go runtime starts doing it instead: https://github.com/golang/go/issues/31908

It will likely not help a lot, because syscall overhead is not the bottleneck - but the implementation of the actual syscalls is - which is very visible in the flamegraphs. Both sendmmsg/recvmmsg and io_uring only help with the syscall overhead, and therefore are not as helpful in improving efficiency as the the offloads which make the actual network stack more efficient.

Besides kernel supplied offloads, the thing which helps further is actually bypassing the kernel with AF_XDP or DPDK. But those techniques will have other challenges and limitations.