|
There is a huge amount of work around this, with a huge number of names for what is always pretty similar in conception: parakernels, exokernels, isokernels, now demikernels. The common thread is that allowing the OS to interpose itself in the data path makes it impossible to operate devices at full speed, so applications need to bypass the OS. At the same time, you need some control over hardware access and permissions, and some degree of hardware abstraction. How to draw the line between application performance, on one side, and OS abstraction and hardware sharing, on the other, is endlessly negotiated. Those of us actually operating hardware at maximum rates, today, often use proprietary vendor libraries to bypass the kernel. These tend to have an OS module to map hardware resources into user process space, and a library to operate hardware resources without adding overhead, typically involving a ring buffer and the spin-loop polling on isolated cores that we were taught in school indicated primitive system design. The result is that our applications have a hundred or six lines of custom code for each vendor's gadget, that has to be added to as new vendors enter and old ones retire. eBPF access to devices is one interesting wrinkle on this, holding out a hope of mainstream portability without compromising performance, running user code directly on target hardware. |