Any sufficiently advanced kernel API is indistinguishable from magic.

UDP generic segment offload currently, pf_ring possibly in the future. not much need for io_ring at the moment...

@cjd @wolf480pl io_uring reduces context switching a bit right? How does it compare to udp gso in high packet rate workloads?

@yes @wolf480pl
Well, for UDP you already have sendmmsg() so context switches aren't the problem. The problem is that you spend ages futzing around in kernelspace building all of those little packets rather than just sending a 64k slab over and letting the ethernet card deal with it.

@cjd @wolf480pl this sounds like it would be hard to make portable

@cjd @yes I think 64k is too big for a slab, the largest one I've seen is 8k. To get a 64k allocation you'd probably allocate individual pages. And if you need contiguous 64k then good luck.

@wolf480pl @yes
Right, indeed, it's just an skbuff, but that's not that important because resolving the real memory pages is the DMA engine's problem.

@cjd io_uring is useful for more than just networking. Once you set up the rign, you can queue up any number of used-to-be-syscalls* in it, asynchronously, without performing any syscalls.

*as long as they're one of readv, writev, read, write, open, close, fallocate, stat, fsync, poll, sendmsg, recvmsg, send, recv, connect, accept, madvise, fadvise, epoll_ctl

Sign in to participate in the conversation

Server run by the main developers of the project 🐘 It is not focused on any particular niche interest - everyone is welcome as long as you follow our code of conduct!