I am working on an in house userspace VPN in C that is suffering from low performances. I've gathered the issue is most likely the incessant copying from the tun interface to a buffer (in user space) then back into a socket.
I've been looking into using io_uring for its copyless IO capabilities; but it being somewhat niche yet, I'm struggling to find any testimony of its use with tun/tap interface. I'm concerned that io_uring to not be generic enough to be advisable for any kind of character device, including tun/tap.
I find that exploring the feasibility of this solution is really non trivial and I was hoping in getting some insights from those among us with a better understanding of the tun/tap driver internals and io_uring than I have.
I understand that io_uring work great for sockets and networking in general but I was expecting to find more testimony of some sort relating to user experience with common vpn interfaces.
To limit the scope of the question, I'm only interested in how these two technologies interacts on a mordern linux system.