A Programming Interface for Scalable Network Socket I/O

Sangjin Han

EECS Department
University of California, Berkeley
Technical Report No. UCB/EECS-2016-125
June 30, 2016

http://www2.eecs.berkeley.edu/Pubs/TechRpts/2016/EECS-2016-125.pdf

We present MegaPipe, a new API for efficient, scalable network I/O for message-oriented workloads. The design of MegaPipe centers around the abstraction of a channel – a per- core, bidirectional pipe between the kernel and user space, used to exchange both I/O requests and event notifications. On top of the channel abstraction, we introduce three key concepts of MegaPipe: partitioning, lightweight socket (lwsocket), and batching.

We implement MegaPipe in Linux and adapt memcached and nginx. Our results show that, by embracing a clean-slate design approach, MegaPipe is able to exploit new oppor- tunities for improved performance and ease of programmability. In microbenchmarks on an 8-core server with 64 B messages, MegaPipe outperforms baseline Linux between 29% (for long connections) and 582% (for short connections). MegaPipe improves the per- formance of a modified version of memcached between 15% and 320%. For a workload based on real-world HTTP traces, MegaPipe boosts the throughput of nginx by 75%.

Advisor: Sylvia Ratnasamy


BibTeX citation:

@mastersthesis{Han:EECS-2016-125,
    Author = {Han, Sangjin},
    Title = {A Programming Interface for Scalable Network Socket I/O},
    School = {EECS Department, University of California, Berkeley},
    Year = {2016},
    Month = {Jun},
    URL = {http://www2.eecs.berkeley.edu/Pubs/TechRpts/2016/EECS-2016-125.html},
    Number = {UCB/EECS-2016-125},
    Abstract = {We present MegaPipe, a new API for efficient, scalable network I/O for message-oriented workloads. The design of MegaPipe centers around the abstraction of a channel – a per- core, bidirectional pipe between the kernel and user space, used to exchange both I/O requests and event notifications. On top of the channel abstraction, we introduce three key concepts of MegaPipe: partitioning, lightweight socket (lwsocket), and batching.

We implement MegaPipe in Linux and adapt memcached and nginx. Our results show that, by embracing a clean-slate design approach, MegaPipe is able to exploit new oppor- tunities for improved performance and ease of programmability. In microbenchmarks on an 8-core server with 64 B messages, MegaPipe outperforms baseline Linux between 29% (for long connections) and 582% (for short connections). MegaPipe improves the per- formance of a modified version of memcached between 15% and 320%. For a workload based on real-world HTTP traces, MegaPipe boosts the throughput of nginx by 75%.}
}

EndNote citation:

%0 Thesis
%A Han, Sangjin
%T A Programming Interface for Scalable Network Socket I/O
%I EECS Department, University of California, Berkeley
%D 2016
%8 June 30
%@ UCB/EECS-2016-125
%U http://www2.eecs.berkeley.edu/Pubs/TechRpts/2016/EECS-2016-125.html
%F Han:EECS-2016-125