在前面的一篇文章Linux网络优化之链路层优化中,我们已经看到,随着网卡速率超过1Gbps
,增加到10Gbps/100Gbps
时,CPU已经很难处理如此大量的数据包了。总结来说,主要有如下瓶颈:
- 内核协议栈处理在
L3(IP)/L4(TCP)
的数据处理上,消耗了比较多的时间,会导致网络延迟与传输受限 - 高速网卡会在短时间内产生大量中断,导致CPU频繁发生上下文切换,性能收到影响,进而影响网络吞吐
针对10Gbps/100Gbps
等高速网卡中存在的延迟与带宽受限问题,Intel在2010年提出了DPDK(Data Plane Development Kit)
基于用户空间的解决方案,并开源了实现方案, 目前DPDK
支持包括Intel/ARM等多个芯片架构的指令集; 同样是Intel的工程师在2018年提出了XDP(eXpress Data Path)
,与DPDK
不一样的是,XDP
基于现有内核socket
接口,与eBPF
相结合实现网卡与用户空间的数据传输,从而避免了内核协议栈的处理延迟。
TCP(Transmision Control Protocol
)即传输控制协议, 位于TCP/IP协议栈的第三层(L3), 是一种提供了可靠连接的字节流协议; TCP是目前使用最为广泛的协议之一, HTTP/MQTT/FTP等诸多应用层协议都是基于TCP实现的, 更多关于TCP协议相关的具体内容可以参考标准文档RFC793以及早前写的一篇聊一聊TCP协议.
在上一篇文章中讲到了高速以太网如1Gbps/10Gpbs中Linux网络L2(链路层)的一些优化方法, 包括了offload(卸荷)
以及scaling(缩放)
两种技术. 随着高速网络的不断普及, 1Gbps/10Gpbs以太网已经被广泛使用, 40Gbps/100Gbps也已经制定标准, TCP也在随着网络带宽的提升而不断进化.这篇文章我们就来看下如何在高速以太网下对TCP相关的参数的进行调优.
现在车内网络都开始内卷到1Gbps
了, 有同学给我反馈说以太网的吞吐量上不来, 跟理论带宽差距很大, 之前虽然优化了一波TCP
相关的参数, 但估计不能解决全部问题. 遂决定重新学习下网络优化, 从底层链路对开发平台上的网络进行改善. 趁着这个机会, 索性写一个系列文章-Linux网络优化, 用来总结下Linux网络优化的一些方法与技术, 目前计划从如下几篇文章展开(希望不要放飞了):
- Linux网络优化之数据链路层优化: 数据链路层
L2
的优化, 如何从收发两个方面优化网卡吞吐量,即本篇。 - Linux网络优化之TCP优化: 以TCP协议为例, 说明
L3
协议栈优化 - Linux网络优化之高速网络优化: 基于
DPDK/XDP
解决高速网络传输延迟问题 - Linux网络优化之AVB: 介绍以太网中用于音视频传输的低时延
TSN/AVB
协议
这篇文章主要讲第一个话题: Linux是如何在数据链路层L2
对网络数据的接收与发送进行优化的.