mTCP

Problem

Short TCP connections are becoming widespread. Scaling the processing speed of these short connections is important, but supporting high TCP transaction rates remains very challenging.

The major inefficiencies in existing TCP implementations include the lack of connection locality, shared file descriptor space, inefficient packet processing, and heavy system call overhead. Prior studies attribute the inefficiency to either the high system call overhead of the operating system or inefficient implementations that cause resource contention on multicore systems. They typically make incremental changes in existing implementation and thus fall short in fully addressing the inefficiencies.

Main Insight

This paper mainly explores an approach that can deliver high performance without requiring drastic changes to the existing code base. They build a user-level TCP stack from the ground up by leveraging high-performance packet I/O libraries that allow applications to directly access the packets, to increase multicore scalability of the TCP stack, usability, and deployability.

The key insight is to amortize the context-switch overhead over a batch of packet-level and socket-level events. They demonstrate that significant performance gain can be obtained by integrating packet- and socket-level batching. They also show that such integration can be done purely at the user level in a way that ensures ease of porting without requiring significant modifications to the kernel, with BSD-like socket and epoll-like event-driven interfaces.

Key Strength

  • Inefficiencies from existing implementations and solutions are clearly studied.

  • Two components of mTCP, including user-level TCP stack and packet I/O library, are responsible for achieving high scalability. The performance evals seem superb for existing applications (i.e. up to 320%)

Key Weakness

  • The prototype only supports a single application due to the limitation of the user-level packet I/O system.

  • It might be hard to deploy a new stack like mTCP (e.g. setting up, testing versions and drivers, porting applications to new API)

Comments

Last updated