浅谈基于DPDK的用户态协议栈mTCP 1.背景 TCP短连接变得越来越普遍,90%以上的TCP流都是小于32KB的,50%的小于4KB。高速处理TCP短连接对于面向用户的在线服务和后台系统都是一项重要的需求,但是Linux TCP的处理速度峰值是30万/s(来源mTCP: A Highly Scalable User-level TCP Stack for Multicore Systems),而packet I/O可以扩展到千万/s,所以当前的Linux TCP架构的处理速度是跟不上实际需求的。 2.MTCP特点 mTCP(User-Level TCP Stack for Multicore System)是一款开源的用户态TCP协议栈。在MTCP看来,原有的Linux内核态TCP/IP栈的实现主要存在以下问题:由于文件的描述符(File Descriptor, FD)在一个进程内部都是共享的,因此不同的CPU核在处理FD的时候存在相关的竞争。这些竞争包括:共享的监听FD的队列(锁保护)、FD的管理、需要在共享的空间内寻找空闲的FD。破坏了应用程序的局部最优原则,比如在基于per-core的包处理队列中,收到中断的CPU和最后实际处理网络数据读写的CPU不是同一个,这就带来大量的系统开销。低效的批处理方式,比如accept/read/write等系统调用效率不高,不断地要进行上下文的切换,并引起cache的不断更新。内核的TCP/IP栈处理报文的时候也很低效,对每个包都要进行内存的分配。
3.MTCP框架
mTCP对TCP报文的处理流程,简要介绍如下。epoll_server接收到TCP 3次握手的SYN或ACK报文;收发线程将新建的TCP连接的tcb结构加入accept queue;收发线程把报文的有效载荷复制到接收缓存,产生一个 ACK 报文发送到 TXmanager,并为监听线程的Socket生成一个read event;收发线程处理完所有接收的报文后,激活业务线程;业务线程处理事件,并为多条流构建响应报文;业务线程将tcb入队到write queue中;收发线程将需要发送数据的tcb从write queue入队到发送list;收发线程接收待发送报文,并将报文通过对应的队列发送出去。 4.socket API 学习直通车:Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家【dpdk教程合集】太厉害了 我已跪!终于有人能把dpdk讲的这么通俗易懂了,现在分享给大家dpdk视频合集,全网最强教学,看完一整个把你拿捏住! 原文链接:http://t.csdn.cn/8fYE2
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/61467.html