mTCP 论文阅读及具体实现

mTCP是一种用户态TCP协议栈,传统TCP/IP协议栈占用过多CPU周期,尤其在小数据量连接中开销占比增大。此前研究未解决协议栈性能受制于CPU的问题,mTCP将部分协议栈内容实现在用户态,通过设计队列多线程处理,减少系统调用和上下文切换开销。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mTCP是指的是TCP on multicore system,是一种用户态TCP协议栈。传统TCP/IP
协议栈需要占用过多的CPU周期,因此,作者通过实现用户态的packet I/O Lib和TCP协议栈,将TCP协议栈的工作从内核态解放出来,从而实现性能的大幅提升。

背景和动机

运行在内核态的TCP协议栈需要占用过多的CPU周期。对于大量数据来说,传输开销不在于协议栈的处理流程,但是现如今数据量小的TCP连接越发常见,所以协议栈开销所占比重增大。

在该文之前的研究与优化方法均没有解决协议栈性能受制于CPU的情况,于是该文提出在用户态实现TCP协议栈的功能,从而提升性能。除此之外,作者还综合了之前所有已知的优化方法。

设计

总体的设计如图三所示,作者将socket功能和协议栈的功能都实现在了用户态。所有应用程序可以调用的接口最多只做少量改变。
在这里插入图片描述
图4展示了协议栈部分更为细节的内容,实现的关键在于图中:双方均可读写的buffer、应用传递操作给协议栈的job queues、协议栈传递操作给应用的event queue。对于这些部分的读写都是异步的,所以每次都可以读批量的内容。

总的来说,作者即是将部分协议栈的内容实现在了用户态,应用程序原本需要去内核态做的事情改成了去用户态做。由此将大部分开销由系统调用和上下文切换转换为函数调用。又通过设计一些队列使得可以多线程处理问题,进而函数调用的开销也平摊了。
在这里插入图片描述
以收到一个控制包为例,整个的工作流程如下:

  1. 一个SYN/ACK包到达
  2. 向accept队列中写入操作
  3. 向internal event queue中写入内容
  4. 当mTCP批处理完包(往队列中塞了很多元素)后,mTCP会排空这个internal event queue,将内容填充到Event queue,最终递交给APP。同时mTCP传递一个signal唤醒APP线程
  5. 线程同样批量获取和处理队列中元素
  6. 应用处理完之后,调用write()接口buffer中写入数据
  7. 往write queue中入队写操作
  8. mTCP批量取出write queue中的内容,并据其从buffer中取出数据,分块放入Data list中

在这里插入图片描述

作者关于mtcp的项目代码地址为:https://github.com/mtcp-stack/mtcp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值