Distributed Software Switching for Scalable Network Functions
Mesut Ali Ergin, James Tsai, Charlie Tai · 2019
Network packets have traditionally been processed by purpose built, fixed-function appliances using proprietary hardware and software designs. Today, these designs are transforming into collections of flexible software blocks running on general purpose computing hardware, with expectations of high performance and scalability. Among these pieces, software packet switching (i.e. vSwitch) plays a fundamental role, as all packets need to traverse the switch on a given platform, and quite often repeatedly. In this paper, we demonstrate that certain performance and scaling deficiencies of packet switching in software can be attributed to the centralized design and deployment of the switching software threads. While multithreading is crucial for scaling-out software performance, improper use of the multi-processor resources can lead to undesired impacts on performance, due to fixed-partitioning, sub-optimal scheduling and complex cache coherency protocol interactions involving non-negligible data-access latencies. In this study, we take advantage of symmetric multi-processor threading (SMT) and lay out principles for better software packet switching with a distributed approach. With proof of concept implementations based on the very popular Open vSwitch project and DPDK, we show distributed software switching can easily scale with the network function workload threads, and achieve more than 2× throughput by exploiting the data locality within distributed nature of the CPU cache-subsystem.