Support for Userspace Network Stacks

A description on how we extended netmap to support userlevel stacks.

MultiStack

MultiStack is operating system support for user-level network stacks. MultiStack’s implementation revolves around four design principles. First, MultiStack supports a large number of dedicated stacks, to allow for having per-application stacks. Second, each stack has isolated access to the NIC, preventing stacks, some of which may contain untested or beta code, from interfering with each other. Third, MultiStack supports namespace isolation, whereby stacks register 3-tuples which are then used to multiplex incoming packets and to validate outgoing traffic for each application/stack instance. Finally, the system is able to accommodate legacy (in-kernel) stacks and application, providing an incremental deployment path.

Performance

In terms of performance, our tests show that MultiStack is able to achieve 10Gb/s line rate for almost all packet sizes with a single CPU core, and line rate for minimum-sized ones when using 2 CPU cores. We also show that a user-space TCP and HTTP server on top of MultiStack outperforms the same HTTP server running on top of the in-kernel stack.