blob: 4b7d4d2754d23fc8426a3756c0aaf3b4d7cb7fb3 [file] [log] [blame]
<!DOCTYPE html>
<meta charset='utf-8' />
<meta http-equiv="X-UA-Compatible" content="chrome=1" />
<meta name="description" content="mTCP : mTCP: A Highly Scalable User-level TCP Stack for Multicore Systems" />
<link rel="stylesheet" type="text/css" media="screen" href="stylesheets/stylesheet.css">
<!-- HEADER -->
<div id="header_wrap" class="outer">
<header class="inner">
<a id="forkme_banner" href="">View on GitHub</a>
<h1 id="project_title">mTCP</h1>
<h2 id="project_tagline">mTCP: A Highly Scalable User-level TCP Stack for Multicore Systems</h2>
<section id="downloads">
<a class="zip_download_link" href="">Download this project as a .zip file</a>
<a class="tar_download_link" href="">Download this project as a tar.gz file</a>
<div id="main_content_wrap" class="outer">
<section id="main_content" class="inner">
<a name="what-is-mtcp" class="anchor" href="#what-is-mtcp"><span class="octicon octicon-link"></span></a>What is mTCP?</h3>
<p>mTCP is a high-performance user-level TCP stack for multicore systems. Scaling the performance of short TCP connections is fundamentally challenging due to inefficiencies in the kernel. mTCP addresses these inefficiencies from the ground up - from packet I/O and TCP connection management all the way to the application interface.</p>
<div align="center">
<img src="" height="350"><div><b> Figure 1. mTCP overview </b></div>
<p>Besides adopting well-known techniques, our mTCP stack (1) translates expensive system calls to shared memory access between two threads within the same CPU core, (2) allows efficient flow-level event aggregation, and (3) performs batch processing of RX/TX packets for high I/O efficiency. mTCP on an 8-core machine improves the performance of small message transactions by a factor 25 (compared with the latest Linux TCP stack (kernel version 3.10.12)) and 3 (compared with with the best-performing research system). It also improves the performance of various popular applications by 33% (SSLShader) to 320% (lighttpd) compared with those on the Linux stack.</p>
<a name="why-user-level-tcp" class="anchor" href="#why-user-level-tcp"><span class="octicon octicon-link"></span></a>Why user-level TCP?</h3>
<p>Many high-performance network applications spend a significant portion of CPU cycles for TCP processing in the kernel. (e.g., ~80% inside kernel for lighttpd) Even worse, these CPU cycles are not utilized effectively; according to our measurements, Linux spends more than 4x the cycles than mTCP in handling the same number of TCP transactions.</p>
<p>Then, can we design a user-level TCP stack that incorporates all existing optimizations into a single system? Can we bring the performance of existing packet I/O libraries to the TCP stack? To answer these questions, we build a TCP stack in the user level. User-level TCP is attractive for many reasons.</p>
<li>Easily depart from the kernel's complexity</li>
<li>Directly benefit from the optimizations in the high performance packet I/O libraries</li>
<li>Naturally aggregate flow-level events by packet-level I/O batching</li>
<li>Easily preserve the existing application programming interface</li>
<!-- FOOTER -->
<div id="footer_wrap" class="outer">
<footer class="inner">
<p class="copyright">mTCP maintained by <a href="">eunyoung14</a></p>
<p>Published with <a href="">GitHub Pages</a></p>