LWN: 让 TCP packet size 大大增加!

群晖万兆网络配置与测试 为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客http://nas.hepcloud.top:7000首先,群晖上必须有万兆网卡,win11上也得有万兆网卡。在群晖DSM设置MTU为9000,具体路径为:控制面板 – 网络 – 网络界面 – 编辑 – 手动设置MTU。控制面板 – 网络和Internet – 网络和共享中心 – 点击以太网6(这个是我们的万兆网卡) – 属性 – 配置 – 高级Link Speed设置为10GJumbo Packet选择最大的16348BytesFlow Control 阅读详情

关注了就能看到更多这么棒的文章哦~

Going big with TCP packets

By Jonathan Corbet
February 14, 2022
DeepL assisted translation
https://lwn.net/Articles/884104/

计算领域的大多数组件都跟网络硬件一样,会随着时间的推移稳步演进。事实上,今天的高端的网络接口设备的数据传输速度往往比它们所连接的系统能对数据进行处理的速度还要快。网络开发人员多年来一直在努力提高网络子系统中的可扩展性;目前就有 Eric Dumazet 和 Coco Li 的 BIG TCP 这组 patch set 是与此相关的。BIG TCP 并不适合所有人,但它有可能在某些情况下大幅提高网络性能。

举例来说,如果你希望完全利用好一个 100Gb/s 的网络适配器,那么正如网络开发人员 Jesper Brouer 在 2015 年所描述的那样,如果仍然按我们长期以来一直在用的 1538 字节作为数据包的最大 size,那么网卡全速运行时就意味着每秒要处理超过 800 万个数据包。按这个速度来算的话,CPU 处理每个数据包仅有大约 120 纳秒的时间,这个时间非常短了,只要发生一次 cache miss 就可能会耗费这么多时间。

不过,如果减少数据包的数量的话,情况就会好转。要做到这一点仅仅需要增大数据包的 size 就好。因此,高性能的网络设施,尤其是那些把全部设备都当作一个网络单元来统一协作的局域网,通常都会使用较大的数据包 size。在适当配置之后就可以使用高达 64KB 的数据包 size,就能大大改善这种情况。但是,在那些需要处理 MB 级别或 GB 级别的数据(还有更多的,毕竟猫咪视频也都一直在变大)的环境中,系统仍然有大量的数据包需要处理。

数据包数量太多会导致影响很多方面的性能。每一个流经此系统的数据包都有显著的固定开销。每个数据包都必须通过网络堆栈的处理,从上层协议层到网络接口的设备驱动(或按此路径返回),找到自己该去哪里。更多的数据包就意味着来自网络适配器的更多中断。在内核中用来表示数据包的 sk_buff 结构("SKB")是一个庞大复杂的结构,因为它必须能够支持任何有可能会在使用的网络功能。这就导致了每个数据包都使用大量内存,以及提高了相关的内存管理成本。因此,很希望能够以更少、且更大的数据包为单位来移动数据,至少对于某些类型的应用来说是希望这样的。

IP 数据包的长度存储在 IP 头中;对于 IPv4 和 IPv6,该长度存放在一个 16 bit 的字段中,将数据包的最大尺寸限制在了 64KB。在设计这些协议的时候,一个 64KB 的数据包在当时的骨干互联网链路(backbone internet links)上可能需要很多秒的时间来传输,所以当时看起来已经是一个非常大的数字了;其实那个时代任何一个有理性的人都不会使用 64KB 来放单个数据包的。但是,时代变了,64KB 现在看起来是一个令人沮丧的过低限制。

并不是最近才认识到这个问题的:在 1999 年通过的 RFC 2675 中可以找到一个解决方案(至少对 IPv6 而言)。IPv6 规范允许放置带有额外信息的 "hop-by-hop" header 头;顾名思义,hop-by-hop header 会用来在两个直接连接起来的系统之间进行 option 选项的交流。RFC 2675 对协议进行了一些调整,使得可能支持大型数据包了。为了发送一个 "jumbo" 数据包,系统必须将(16 位的)IP payload length 字段设置为零,并添加一个包含了真正的 payload length 的 hop-by-hop header。这个 hop-by-hop header 中的 length 字段是 32 位的,这意味着一个 jumbo packet 就可以包含多达 4GB 的数据了,这对每个人来说肯定是足够了。

BIG TCP 这组 patch set 添加了相关的代码逻辑,这样就能在连接的最大传输单元(MTU)被设置得足够高时可以生成和接受 jumbo packet。不出所料,这里有许多细节需要处理,以便能让其真正工作起来。其中一个更重要的问题是,这一系列数据包可能就不是存放在物理连续的内存中了,因为有时候很难分配到想要的连续内存空间。对于 zero-copy 操作来说,buffer 是来自用户空间的,这些数据包必定是分散在物理内存中各个地方的。因此,数据包经常是一组 fragment 片段,每个片段可能最短会是一个 4KB 的 page;网络接口在处理数据传输时会负责将数据包从 fragment 片段组合起来(或在收到网络数据时分割成多个 fragment)。

目前的内核里将一个 SKB 中存储的 fragment 数量限制在了 17 个,这足以将一个 64KB 的数据包用多个 4KB 的小块内存拼接起来。但是在使用更大 size 的数据包的时候,这个限制显然会导致干扰了,所以 patch set 提高了 fragment 的最大数量(提升到 45)。但是,正如 Alexander Duyck 所指出的,许多网络接口驱动程序对一个数据包可能被分割成的最大 fragment 数量在代码中就想当然地处理了。他说,在没有修复驱动程序的情况下提升这个上限值可能会导致性能倒退,甚至导致硬件不可用了。

经过一些讨论,Dumazet 建议通过增加一个配置选项来解决这个问题,用它来控制各个数据包所允许的最大 fragment 数量。这对那些自己会构建自己的内核的网站来说足够用了,那些可能会使用这个功能的潜在用户相对来说可能会配置成这样。但是,这对发行版提供商来说帮助不大,他们必须要为他们的所有用户来决定这个选项的值。

无论如何,都会有许多驱动程序需要进行更新,才能处理 jumbo packet。现代网络接口还会进行 segmentation offloading,意味着创建一个数据包的大部分工作是由接口硬件本身来完成的。要想让 segmentation offloading 跟 jumbo packet 能配合起来,还会需要进行少量调整,因此在 patch set 中也修改了一些驱动程序的代码。

还有一个小问题与 RFC 2675 hop-by-hop header 的位置有关。根据 IPv6 标准,这些头被放在了 IP 头之后,这可能会使那些 "想当然地认为" TCP 头是在在数据包中的 IP 头之后紧跟着的位置的软件代码失效。tcpdump 工具在这方面就有一些问题,另外,似乎在满天飞的 BPF 程序中也有不少是含有这种假设的。因此这个原因,即使底层硬件和链路可以处理这些数据包,我们仍然需要把 jumbo packet 处理功能默认关闭掉。

Dumazet 在发布补丁的同时还包括一些简单基准测试的结果。使用 185 KB 字节的数据包 size 之后,网络吞吐量增加了近 50%,同时也大大减少了往返延迟(round-trip latency)。因此,BIG TCP 似乎是一个很有价值的可选功能,至少在那些使用了高速链接并能可靠地传送大数据包的环境中(例如数据中心)是这样的。如果未来的猫咪视频能加载得更快一些了,也许就是得益于咱们的 BIG TCP 呢。

更多细节请参见 Dumazet 在 2021 年 Netdev 上的演讲。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

2cee9d6279fdaa23cf8de92a937acc81.png

Basler千兆网相机使用相关设置 关于千兆Baster相机使用时的相关设置 阅读详情

相关推荐

[相机配置] 海康相机丢包配置环境

1.千兆网络相机网卡配置推荐: 优先使用 intel 芯片的 PCIE 千兆网卡,例如 intel pro1000 系列等 多相机应用时,推荐使用 intel 芯片多口千兆 pcie 网卡,例如

Loewen丶的小窝 9582

网卡参数设置建议与各个网卡参数含义详解

自从和无盘开始打交道,学到了n多知识,无论是软件层面还是硬件层面,无论是理论还是实践层面,之前很多人认为无盘很复杂,而我也受其“误导”认为无盘很复杂,但实际上用下来发现,其实无盘确实很简单,而所谓的无盘复杂,更多的是理论和经验的结合,以前在网上也看到过很多无盘教程,当时不以为然,不当回事,总觉得自己很牛,可实际上真正的去做了之后,发现自己也在传播这些信息,套用以前某人说过的一句名言“现在很多人的不

xcntime的专栏 1万+

Cilium系列:实现IPv6、BIG TCP和巨帧支持

在这篇文章中,我们将学习如何通过使用Cilium来启用IPv6、BIG TCP和巨帧支持。Cilium是一个开源的网络连接和安全管理解决方案,它提供了强大的网络功能,可以与Kubernetes集成。你可以根据自己的需求进一步定制Cilium的配置,以实现更多的网络功能。为了验证我们的配置是否生效,我们可以创建一个简单的Kubernetes Pod,并在其中执行一些网络操作。要启用BIG TCP支持,我们需要修改Cilium的配置。要启用IPv6支持,我们需要修改Cilium的配置。

UerxDebug的博客 260

网络基础知识记录

电力线通信(Power Line Communication,英文简称PLC)技术是指利用电力线传输数据和媒体信号的一种通信方式。该技术是把载有信息的高频加载于电流然后用电线传输接受信息的适配器再把高频从电流中分离出来并传送到计算机或电话以实现信息传递。 电力线通信全称是电力线载波(Power Line Carrier – PLC)通信,是指利用高压电力线(在电力载波领域通常指35kV及以上电压

你的灯在亮 8340

玩转Isaac Sim动态控制:从随机舞动到精准操控Franka的5种控制模式实测

本文深入实测了在NVIDIA Isaac Sim仿真平台中,利用Dynamic Control模块对Franka机械臂进行精准操控的五种核心模式:位置控制、单关节位置控制、速度控制、单关节速度控制和力矩控制。通过详细的代码示例和对比分析,阐述了每种模式的适用场景、参数调优技巧及从随机运动到闭环控制的实现路径,为机器人算法验证提供了实用指南。

night的博客 807

Delphi开发者必备:CEF4Delphi跨平台浏览器嵌入实战指南(含Lazarus适配)

本文详细介绍了Delphi开发者如何利用CEF4Delphi实现跨平台浏览器嵌入,包括环境配置、Lazarus适配、ARM架构优化及Firemonkey集成等实战技巧。通过Chromium引擎的强大功能,开发者可以轻松为传统桌面应用添加现代浏览器特性,提升多平台开发效率。

weixin_29233333的博客 226

深入理解Linux网络技术内幕 P1-P2

细品

西门吹雪 540

雷达原理习题答案【西电】

  目前教材用的是陈老师新版的,但是,我发现课后题有一部分是之前某本书里的。答案如下【建议参看原题→查阅答案】 【原题点这里!!点这里!!】 目录跳转功能目前好像只支持网页版 文章目录% 第一章、第二章% 第三章% 第四章% 第五章% 第六章% 第七章% 第八章 % 第一章、第二章 % 第三章 % 第四章 % 第五章 % 第六章 % 第七章 % 第八章 ...

薛定谔的壳的博客 1万+

交换机上如何测试出口带宽速度_万兆NAS模拟测试:是什么限制了性能?

不久前,有位老朋友问了我一个技术问题。如下:万兆的NAS类存储,以前我还真没仔细研究过性能。不过以早年千兆时代的习惯,单1Gb/s网口客户端访问60-70MB/s也还算正常吧?然后我到网上查了下,万兆文件存储跑到1GB/s应该挺轻松的,就想着自己搭个平台验证下,看看能否遇到朋友类似的问题。模拟测试平台:10GBASE-T直连 + NVMe SSD我手头倒是有一台带Intel10Gb/s万兆SFP+...

weixin_39777540的博客 856

STM32实现webserver显示数据及配置参数

其实提到的将fsdata.c重命名为fsdata_custom.c,可以不重命令,将/LWIP/Target/lwipopts.h中HTTPD_USE_CUSTOM_FSDATA 定义为0,这样HTTPD_FSDATA_FILE将使用fsdata.c,避免每次生成fsdata.c需要重命令的麻烦。2、登录成功后,板卡根据板卡配置类型,返回对应的数据页面,该页面可实现数据校准、清零,以及进行到板卡参数设置页面。目前还未实现post功能以及http身份验证功能。3、板卡参数设置页面。

2692

完整的申请邓白氏编码的流程(手把手教你申请邓白氏编码)

申请公司的苹果开发者账号和企业级的苹果开发者账号时,都会用到邓白氏编码,也就是我们申请苹果开发者账号时需要填写的D-U-N-S Number。     申请这个邓白氏编码是免费的,但是从像华夏邓白氏公司提交申请到可以申请苹果开发者账号来用这个9位的D-U-N-S Number,需要一段时间,我申请得到D-U-N-S Number,用了8个工作日(不算周末哦)

wxw2011014003的博客 9万+

网卡最大传输单位MTU和巨型帧(Jumbo frame)设置

1. 背景:在1998年,Alteon Networks 公司提出把Data Link Layer最大能传输的数据从1500 bytes 增加到9000 bytes,这个提议虽然没有得到IEEE 802.3 Working Group的同意,但是大多数设备厂商都已经支持 1500bytes 不包含18字节(14+4CRC) 2. 产生原因:提高网络的吞吐率和效率(小的数据报文封装二层信息时,效

相聚一刻 7万+

virtuoso:layout如何做flat修drc

有些drc在virtuoso layout中修更节省时间,比如遇到一些via array需要做删改时,发现工具把via array做成了一个cell,如图。去改cell可能会影响很多via,所以最好的办法是做flat,去调整cut,比如删除。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 342

网卡设置 网卡的高级设置说明

网卡设置 网卡的高级设置说明 修改电脑网卡高级设置可以提高网络速度。另外,建议关闭在Realtek网卡高级设置中的以下其他选项:流控制/FlowControl、巨型帧/Jumboframe、大量传送负载/OffloadLargesend、EEE(Energy Efficient Ethernet)、环保节能/GreenEthernet、硬件效验和/OffloadChksum。 自动关闭 PCI...

weixin_30487701的博客 2万+

仿真学习系列(四十七):Sigrity仿真之直流压降与电流密度

在现代电子设计中,电源网络的设计和分析对于保证电路的稳定性至关重要。直流压降(IR-Drop)和电流密度是评估电源网络性能的关键参数,尤其是在高频和高速电路中。它们直接影响到设备的工作稳定性与效率。通过Sigrity的仿真工具,可以深入分析和优化这些电源特性,从而确保系统的可靠性。 本节将介绍直流压降和电流密度的基本概念,以及如何在Sigrity中使用PowerDC模块进行相关仿真。

案例文章,高速信号 509

Buildroot RK3568系统中更改GPU驱动为:panfrost

1:Kernel中开启Panfrost 2:更新mesa 到mesa-24.0.2 3:查看/proc/interrupts 中的panfrost 中断 4:LInux启动日志 5:查看GPU负载

OpenWrt/WLAN/驱动/Android/嵌入式开发总结 2078

单流 TCP 100Gbps+ 难题的直观解释

为实现初始假设,CPU 处理 100Gbps 到达率,需在 100ns 内完成 tcp_v4_rcv 调用(除 CPU 执行冗长的指令,还要加入内存操作,batch 只降低 overhead,但内存时间也相应越久,ZeroCopy 也不例外,稍好,但不完全),CPU 很难完成该任务,初始假设都难,匡论后续随机过程。若说到达率和服务率相等,在足够久的相同一段时间,垂直线和水平线的数量是相等的,但表示到达的垂直线是实在累加的,而表示处理的水平线中有很多空闲的浪费,所谓逝去时间不可追回。读后 本文接着写点感想。

TCP/IP 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

支撑 100Gbit/s K8s 集群的未来网络数据平面

总体原则:高度可扩展,极致性能。Cilium 数据平面的核心功能Cilium + BIG TCPBIG TCP设计目标支持数据中心内的单个 socket 达到 100Gbps+ 带宽。使用场景大数据、AI、机器学习以及其他网络密集型应用。BIG TCP 并不是一个适应于大部分场景的通用方案,而是针对数据密集型应用的优化,在这些场景下能显著提升网络性能。技术原理文档:GoingbigwithT...

u012516914的专栏 662

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

基于Cubic的拥塞控制的基本原理

基于Cubic的拥塞控制的基本原理

weixin_46563862的博客 2119

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

下一代数据平面 Cilium:支撑 100Gbit/s Kubernetes 集群

公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !译者序本文翻译自 KubeCon+CloudNativeCon North America 2022 的一篇分享:100 Gbit/s Clusters with Cilium: Building Tomorrow’s Networking Data Plane[1]。作者 Daniel Borkmann, Nik...

easylife206的专栏 954

说说过量 tcp pure ack 的利弊

回到 pure ack 过多问题,如果数据中心可利用 pure ack 度量或预测潜在流量特征是因为网络足够规则,那么在广域网,1:2 的 data/ack 比例则没必要,广域网波动性被放大而损害的预测精度损失不会随样本增加而缓解,按照大数定律,样本增加只能更精确测量波动本身,而波动是滞后的,拥塞控制要做的是在更粗粒度感知波动而不是精确测量波动。简单说,tcp 依靠 ack 提供 self-clock,发送 data 越多,ack 越多,如果 ack 与 data 不同步,将出现各种问题,详见。

TCP/IP 2万+

基于FPGA的万兆以太网UDP/IP协议栈讲解

31bit,这种传输次序为big endian(大端对齐)。TCP/IP所有二进制整数在网络中传输时都要求采用这种次序,因此这种传输次序又称为网络字节序。版本(Version)+首部长度(IHL):长度为1字节。版本[0:3]就是IPv4或者IPv6,一般选择IPv4,即版本值为4。首部长度[4:7]是指首部有多少个32位数,因为4位的最大值为15,因此首部最长为60字节,5表示固定最小值为20字节。选项部分(可选字段)的最大值为40字节,不够4的倍数要用0填充,使数据部分的起始地址为4的倍数。...

ltqdxl的博客 1万+

Cilium CNI深度指南

你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。然而,这样的限制增加了复杂性和处理成本。我们的长期目标包括为pod提供一种机制来选择对等身份验证,支持可插拔的证书管理系统(如SPIFFE、Vault、SMI、Istio、cert-manager等),提供可配置的证书粒度,以及利用现有的对数据平面的加密协议支持。

残星说梦话 2983

【实践】基于云峦KeyarchOS的BIG TCP深度解析与实践

随着云计算、大数据、人工智能等技术的快速发展,数据呈现出爆发式增长趋势,同时驱动着算力持续提升,然而,传统DRAM并未实现同步扩展以满足应用需求,应用对内存容量和带宽不断提高的需求,推动着内存扩展技术不断发展,在此背景下,CXL成为解决内存扩展瓶颈的最有前景的技术;小包场景中,要达到网卡的最大带宽,需要处理的数据包数量会激增,如100G带宽下,64字节小包的每秒处理量约为1.9亿个,此时CPU的处理资源会因高频中断和协议栈处理开销迅速耗尽,导致CPU先于网卡达到瓶颈,网卡带宽无法重复利用。

sinat_34953318的博客 627

TCP Delayed ACK 辩证考

TCP Delayed ACK 的 WiKi 解释: ​ 看下红框里说的“某些劣化性能的场景”: ​ 是不是很复杂?特别是跟 Nagle 算法,糊涂窗口综合症揉在一起,需要理解各种情况如何组合这些配置。复杂的根源在哪儿?先看 Delayed ACK 的目标:减少 Pure ACK 数量,提升有效载荷率。再看 Nagle 算法的目标:减少小包数量,提升有效载荷率。二者的目标一致,为何会冲突?根源在于 Delayed ACK 在接收端,Nagle 算法在发送端,不知道对端情况。两端对不齐,仅靠猜肯定不行。TCP

TCP/IP 6416

Cilium系列-10-启用 IPv6 BIG TCP和启用巨帧

启用本地路由(Native Routing)完全替换 KubeProxyIP 地址伪装(Masquerading)切换为基于 eBPF 的模式Kubernetes NodePort 实现在 DSR(Direct Server Return) 模式下运行绕过 iptables 连接跟踪(Bypass iptables Connection Tracking)主机路由(Host Routing)切换为基于 BPF 的模式 (需要 Linux Kernel >= 5.10)

east4ming的博客 1066
上一篇: LWN:避免对持久性内存的误写入!
下一篇: LWN:允许其他CPU来清空此CPU的page list!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值