Linux Kernel version of OpenVPN, incomplete View of ghosts
It's time to give a general picture.
In the multi-core era, multi-core processing is really too simple, as long as the process is scheduled to different CPU cores using softirq or tasklet, there are so many complicated rules such as epoll. But this is not to say that writing code in the kernel state is fine, provided that you can control it! Not only is it panic, oops... More importantly, even if you can handle this, you cannot take a system as a single-chip computer, because you violate the basic principles of software design. This is why I don't like embedded systems. Processing logic in the kernel is extremely nonstandard unless you know what you are doing. In fact, everything that can be done in the kernel state can be done in the user State. The key is that you have to know how to do it. If you don't want to copy the buffer, you can use map, if you want to shorten the protocol stack processing path, why don't you just learn PF_RING and flat the user State... but the question is, do you know how to do this?