网卡卸载(Nic Offload)-硬件卸载-DPU-智能网卡

简介

为了降低cpu利用率, 将更多的cpu释放给业务使用, 大多数现代操作系统都支持某种形式的网络卸载,其中一些网络处理发生在网卡 nic 而不是 cpu 上, 它可以释放系统其余部分的资源, 这样操作系统就能处理更多连接, 提高整体性能.

默认以太网最大传输单元 (MTU) 为 1500 字节,这是通常可以传输的最大帧大小。这可能会导致系统资源未得到充分利用,例如,如果有 3200 字节的数据需要传输,则意味着会生成三个较小的数据包。有几种称为卸载的选项,它们允许相关协议栈传输大于正常 MTU 的数据包。可以创建最大允许 64KiB 的数据包,并提供发送 (Tx) 和接收 (Rx) 选项。当发送或接收大量数据时,这可能意味着每发送或接收 64KiB 的数据处理一个大数据包,而不是处理多个较小的数据包。这意味着生成的中断请求更少,用于拆分或合并流量的处理开销更少,传输机会更多,从而导致吞吐量的整体增加。

网卡卸载(Nic Offload)-硬件卸载-DPU-智能网卡

卸载类型

TCP 分段卸载 (TSO) – TCP Segmentation Offload使用 TCP 协议发送大数据包。使用NIC来处理分段,然后将TCP、IP和数据链路层协议头添加到每个分段。UDP 碎片卸载 (UFO) – UDP Fragmentation Offload使用UDP协议发送大数据包。使用 NIC 将大型 UDP 数据报的 IP 分段处理为 MTU 大小的数据包。通用分段卸载 (GSO) – Generic Segmentation Offload使用 TCP 或 UDP 协议发送大数据包。如果 NIC 无法处理分段/碎片,GSO 会绕过 NIC 硬件执行相同的操作。这是通过尽可能晚地延迟分段来实现的,例如,当数据包由设备驱动程序处理时。大量接收卸载 (LRO) – Large Receive Offload使用 TCP 协议。所有传入数据包在收到时都会重新分段,从而减少系统必须处理的分段数量。它们可以在驱动程序中或使用 NIC 进行合并。LRO 的一个问题是它倾向于重新分段所有传入数据包,通常会忽略标头和其他可能导致错误的信息的差异。当启用 IP 转发时,通常无法使用 LRO。LRO 与 IP 转发相结合可能会导致校验和错误。/proc/sys/net/ipv4/ip_forward如果设置为 1, 则启用转发。通用接收卸载 (GRO) – Generic Receive Offload使用 TCP 或 UDP 协议。在对数据包进行重新分段时,GRO 比 LRO 更加严格。例如,它检查每个数据包的 MAC 标头,这些标头必须匹配,只有有限数量的 TCP 或 IP 标头可以不同,并且 TCP 时间戳必须匹配。重新分段可以由 NIC 或 GSO 代码处理。使用 NIC 卸载

卸载应该用在传输或接收大量数据的高速系统上,并且优先考虑吞吐量而不是延迟。由于使用卸载极大地增加了驱动程序队列的容量,因此延迟可能成为一个问题。一个例子是系统使用大数据包传输大量数据,但也运行大量交互式应用程序。由于交互式应用程序按时间间隔发送小数据包,因此存在非常现实的风险,即这些数据包可能会“陷入”缓冲区中,而同时处理它们前面的较大数据包,从而导致不可接受的延迟。

要检查当前卸载设置,请使用该ethtool命令。某些设备设置可能会列为fixed,这意味着它们无法更改。

命令语法:ethtool -k 以太网设备名称, 如: 检查当前网卡卸载设置:

代码语言:javascript代码运行次数:0运行复制

ethtool -k em1Features for em1:rx-checksumming: ontx-checksumming: ontx-checksum-ipv4: off [fixed]tx-checksum-ip-generic: ontx-checksum-ipv6: off [fixed]tx-checksum-fcoe-crc: off [fixed]tx-checksum-sctp: off [fixed]scatter-gather: ontx-scatter-gather: ontx-scatter-gather-fraglist: off [fixed]tcp-segmentation-offload: ontx-tcp-segmentation: ontx-tcp-ecn-segmentation: off [fixed]tx-tcp6-segmentation: onudp-fragmentation-offload: off [fixed]generic-segmentation-offload: ongeneric-receive-offload: onlarge-receive-offload: off [fixed]rx-vlan-offload: ontx-vlan-offload: onntuple-filters: off [fixed]receive-hashing: onhighdma: on [fixed]rx-vlan-filter: off [fixed]vlan-challenged: off [fixed]tx-lockless: off [fixed]netns-local: off [fixed]tx-gso-robust: off [fixed]tx-fcoe-segmentation: off [fixed]tx-gre-segmentation: off [fixed]tx-ipip-segmentation: off [fixed]tx-sit-segmentation: off [fixed]tx-udp_tnl-segmentation: off [fixed]tx-mpls-segmentation: off [fixed]fcoe-mtu: off [fixed]tx-nocache-copy: offloopback: off [fixed]rx-fcs: offrx-all: offtx-vlan-stag-hw-insert: off [fixed]rx-vlan-stag-hw-parse: off [fixed]rx-vlan-stag-filter: off [fixed]l2-fwd-offload: off [fixed]busy-poll: off [fixed]​查看checksum卸载配置:ethtool --show-offload  ethX​禁用:ethtool --offload  ethX  rx off  tx off或有些驱动加载的时候可以指定关闭参数, 如3Com 网卡:rmmod 3c59x ; modprobe 3c59x hw_checksums=0

谁能解释一下 TCP 中的 TSO/LRO 硬件功能是什么以及这些功能是否也负责确认机制

您首先必须了解的是,在网络性能提升技术方面,TSO 只是相当大的冰山的一角, 除此之外还有其他方式提升网络性能

让我们考虑一下基本的网络接口。您的操作系统使用 PIO(编程输入/输出,即一次一个字(通常为 32 位))将整个数据包发送到 NIC(网络接口卡),因为它应该仅出现在线路上,不包括帧检查序列。

以下是数据传输速度的提升的方式:

因此,第一个速度提升是使用 DMA(直接内存访问),这允许处理器在硬件复制数据包的同时做其他事情。但操作系统仍然必须将数据包数据复制到内存中并生成标头和校验和。

第二个提升是让硬件为数据包的数据部分生成校验和,操作系统仍会将数据复制到其内存空间并将标头放在其前面。当操作系统生成标头时,它也可能始终生成标头的校验和。这看起来很复杂,但机制其实很简单。硬件被告知在到达位置 XX 时开始校验和,并将校验和放置在数据包缓冲区中的位置 yy 处。

第三个提升是使用分散/聚集(SGL)。这基本上意味着操作系统不会将数据复制到内存中,而是将标头和数据部分的位置传递给驱动程序,并允许驱动程序收集数据以发送它。这需要硬件校验和,如果操作系统需要对数据包进行校验和,那么它需要首先将其复制到内存中。

第四个(也是 Linux 中原生支持的最高级别)是 TSO。通过 TSO,操作系统为硬件提供标头模板,然后为硬件提供大块数据(不超过 64K)以供其分割和校验和,这意味着操作系统需要生成更少的标头,并且设置 DMA 时的任何开销也将大幅减少。当数据包在线路上传输时,它们符合数据包的正常规则,并且与它们所经过的任何交换机或路由器兼容。

接受处理则是另一回事。硬件校验和在这里更多的是猜测而不是确定,因此应该发生的是硬件将数据包和校验和分别传递给操作系统,并允许操作系统决定数据包是否正常。

分散/聚集对于接收来说几乎是多余的。

网易人工智能 网易人工智能

网易数帆多媒体智能生产力平台

网易人工智能 39 查看详情 网易人工智能

LRO(大量接收卸载),硬件没有简单的方法知道这些数据包的含义,因此 LRO 目前只是一个软件构造,数据包被传递到操作系统,然后操作系统决定是否连接数据并将大块传递给应用程序或传递许多较小的块。

“TSO 导致网卡将较大的数据块划分为 TCP 段。”“LRO 将传入的网络数据包重新组装到更大的缓冲区中,并将生成的较大但较少的数据包传输到网络堆栈主机或虚拟机”

软件应始终生成 ACK 数据包。唯一的原因是您的 NIC 上是否有 TOE(TCP 卸载引擎)

具有支持 TSO 的硬件的主机将 TCP 数据发送到 NIC,而无需在软件中对数据进行分段。NIC 将执行 TCP 分段(读取 – 它将把大数据块分成段)。支持 LRO 的 NIC 接收数据包并重新组装它们,然后再将数据传递到本地软件。

LRO/TSO 不直接对 ack 机制负责(尽管它确实依赖于 GBN(回退N步-go-back-n))。请注意,只要涉及的所有接口都支持该技术,LRO/TSO 就可以安全地在路由器和网桥上使用

大型接收卸载LRO的工作原理是,在将多个传入数据包传递到网络堆栈的更高层之前,将来自单个流的多个传入数据包聚合到更大的缓冲区中。它只是将它们聚合起来,而没有任何方式验证数据是否正确发送。在另一层有解决这个问题的算法。如果我要告诉你 1509GB 的数据,你至少应该意识到这一点并准备一个 1509GB 的缓冲区。这就是 LRO/TSO 的简单规则参考

红帽网卡卸载: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/performance_tuning_guide/network-nic-offloads

wireshark_offload_checksum: https://wiki.wireshark.org/CaptureSetup/Offloading

TOE: https://en.wikipedia.org/wiki/TCP_offload_engine

谁能解释一下 TCP 中的 TSO/LRO 硬件功能是什么: https://stackoverflow.com/questions/7377209/can-anybody-explain-what-are-the-tso-lro-hardware-functions-in-tcp

网络硬件卸载: https://www.the-toffee-project.org/the-linux-channel/index.php?page=8-links-network-packet-processing-hardware-offload

晓兵(ssbandjl)

博客: https://cloud.tencent.com/developer/user/5060293/articles | https://logread.cn | https://blog.csdn.net/ssbandjl | https://www.zhihu.com/people/ssbandjl/posts

DPU专栏

https://cloud.tencent.com/developer/column/101987

晓兵技术杂谈(系列)

https://cloud.tencent.com/developer/user/5060293/video

以上就是网卡卸载(Nic Offload)-硬件卸载-DPU-智能网卡的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/468262.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Mac上玩《别踩白块》攻略,轻松在苹果电脑运行《别踩白块》
上一篇 2025年11月8日 06:21:52
vscode在哪写代码
下一篇 2025年11月8日 06:22:18

相关推荐

  • Matplotlib 地图中多类型图例的创建与优化

    Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化

    本教程旨在解决matplotlib地图可视化中,如何在一个图例中同时展示颜色块(如区域分类)和自定义标记(如特定兴趣点)的问题。文章详细介绍了当传统`patch`对象无法正确显示标记时,如何利用`matplotlib.lines.line2d`创建标记图例句柄,并将其与颜色块图例句柄合并,从而生成一…

    2026年5月10日 用户投稿
    100
  • Golang JSON序列化:控制敏感字段暴露的最佳实践

    本教程探讨golang中如何高效控制结构体字段在json序列化时的可见性。当需要将包含敏感信息的结构体数组转换为json响应时,通过利用`encoding/json`包提供的结构体标签,特别是`json:”-“`,可以轻松实现对特定字段的忽略,从而避免敏感数据泄露,确保api…

    2026年5月10日
    000
  • 获取日期中的周数:CodeIgniter 教程

    本教程旨在帮助开发者在 CodeIgniter 框架中,从日期字符串中准确提取周数。我们将使用 PHP 内置的 DateTime 类,并提供详细的代码示例和注意事项,确保您能够轻松地在项目中实现此功能。 使用 DateTime 类获取周数 PHP 的 DateTime 类提供了一种便捷的方式来处理日…

    2026年5月10日
    100
  • 比特币新手教程 比特币交易平台有哪些

    比特币是一种去中心化的数字货币,基于区块链技术实现点对点交易,具有匿名性、有限发行和不可篡改等特点;新手可通过交易所购买,P2P交易获得比特币,常用平台包括Binance、OKX和Huobi;交易流程包括注册账户、实名认证、绑定支付方式、充值法币并下单购买,可选择市价单或限价单;比特币存储方式有交易…

    2026年5月10日
    000
  • c++中的SFINAE技术是什么_c++模板编程中的SFINAE原理与应用

    SFINAE 是“替换失败不是错误”的原则,指模板实例化时若参数替换导致错误,只要存在其他合法候选,编译器不报错而是继续重载决议。它用于条件启用模板、类型检测等场景,如通过 decltype 或 enable_if 控制函数重载,实现类型特征判断。尽管 C++20 引入 Concepts 简化了部分…

    2026年5月10日
    000
  • 如何让动态追加元素的类事件生效?

    如何在追加元素后使其绑定类事件生效 在页面中引入三方 JavaScript 类并通过添加相应 class 来调用事件方法是一种常见的做法。然而,如果通过 JavaScript 追加标签元素,即使添加了对应的 class,事件也可能无法生效。 为了解决这个问题,可以尝试以下步骤: 检查追加的标签是否为…

    2026年5月10日
    000
  • Go语言mgo查询构建:深入理解bson.M与日期范围查询的正确实践

    本文旨在解决go语言mgo库中构建复杂查询时,特别是涉及嵌套`bson.m`和日期范围筛选的常见错误。我们将深入剖析`bson.m`的类型特性,解释为何直接索引`interface{}`会导致“invalid operation”错误,并提供一种推荐的、结构清晰的代码重构方案,以确保查询条件能够正确…

    2026年5月10日
    100
  • RichHandler与Rich Progress集成:解决显示冲突的教程

    在使用rich库的`richhandler`进行日志输出并同时使用`progress`组件时,可能会遇到显示错乱或溢出问题。这通常是由于为`richhandler`和`progress`分别创建了独立的`console`实例导致的。解决方案是确保日志处理器和进度条组件共享同一个`console`实例…

    2026年5月10日
    000
  • 修复点击时按钮抖动:CSS垂直对齐实践

    本文探讨了在Web开发中,交互式按钮(如播放/暂停按钮)在点击时发生意外垂直位移的问题。通过分析CSS样式变化对元素布局的影响,我们发现这是由于按钮不同状态下的边框样式和内边距改变,以及默认的垂直对齐行为共同作用所致。核心解决方案是利用CSS的vertical-align属性,将其设置为middle…

    2026年5月10日
    100
  • Golang goroutine与channel调试技巧

    使用go run -race检测数据竞争,结合runtime.NumGoroutine监控协程数量,通过pprof分析阻塞调用栈,利用select超时避免永久阻塞,有效排查goroutine泄漏、死锁和数据竞争问题。 Go语言的goroutine和channel是并发编程的核心,但它们也带来了调试上…

    2026年5月10日
    000
  • 使用 Jupyter Notebook 进行探索性数据分析

    Jupyter Notebook通过单元格实现代码与Markdown结合,支持数据导入(pandas)、清洗(fillna)、探索(matplotlib/seaborn可视化)、统计分析(describe/corr)和特征工程,便于记录与分享分析过程。 Jupyter Notebook 是进行探索性…

    2026年5月10日
    000
  • 《魔兽世界》将于6月11日开启国服回归技术测试

    《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试

    《%ign%ignore_a_1%re_a_1%》官方宣布,将于6月11日开启国服回归技术测试,时间为7天,并称可以在6月内正式开服,玩家们可以访问官网下载战网客户端并预下载“巫妖王之怒”客户端,技术测试详情见下图。 WordAi WordAI是一个AI驱动的内容重写平台 53 查看详情 以上就是《…

    2026年5月10日 用户投稿
    200
  • 如何在HTML中插入表单元素_HTML表单控件与输入类型使用指南

    HTML表单通过标签构建,包含action和method属性定义数据提交目标与方式,常用input类型如text、password、email等适配不同输入需求,配合label、required、placeholder提升可用性,结合textarea、select、button等控件实现完整交互,是…

    2026年5月10日
    100
  • 创建指定大小并填充特定数据的Golang文件教程

    本文将介绍如何使用Golang创建一个指定大小的文件,并用特定数据填充它。我们将使用 `os` 包提供的函数来创建和截断文件,从而实现快速生成大文件的目的。示例代码展示了如何创建一个10MB的文件,并将其填充为全零数据。掌握这些方法,可以方便地在例如日志系统或磁盘队列等场景中,预先创建测试文件或初始…

    2026年5月10日
    000
  • Python命令怎样使用profile分析脚本性能 Python命令性能分析的基础教程

    使用Python的cProfile模块分析脚本性能最直接的方式是通过命令行执行python -m cProfile your_script.py,它会输出每个函数的调用次数、总耗时、累积耗时等关键指标,帮助定位性能瓶颈;为进一步分析,可将结果保存为文件python -m cProfile -o ou…

    2026年5月10日
    000
  • 使用 WebCodecs VideoDecoder 实现精确逐帧回退

    本文档旨在解决在使用 WebCodecs VideoDecoder 进行视频解码时,实现精确逐帧回退的问题。通过比较帧的时间戳与目标帧的时间戳,可以避免渲染中间帧,从而提高用户体验。本文将提供详细的解决方案和示例代码,帮助开发者实现精确的视频帧控制。 在使用 WebCodecs VideoDecod…

    2026年5月10日
    000
  • 如何插入查询结果数据_SQL插入Select查询结果方法

    如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法

    使用INSERT INTO…SELECT语句可高效插入数据,通过NOT EXISTS、LEFT JOIN、MERGE语句或唯一约束避免重复;表结构不一致时可通过别名、类型转换、默认值或计算字段处理;结合存储过程可提升可维护性,支持参数化与动态SQL。 将查询结果数据插入到另一个表中,可以…

    2026年5月10日 用户投稿
    000
  • Discord.py 交互按钮超时与持久化解决方案

    本教程旨在解决Discord.py中交互按钮在一段时间后出现“This Interaction Failed”错误的问题。我们将深入探讨视图(View)的超时机制,并提供通过正确设置timeout参数以及利用bot.add_view()方法实现按钮持久化的具体方案,确保您的机器人交互功能稳定可靠,即…

    2026年5月10日
    000
  • Debian Copilot的社区活跃度如何

    debian copilot是codeberg社区维护的ai助手,旨在为debian用户提供服务。尽管搜索结果中没有直接提供关于debian copilot社区支持活跃度的具体数据,但我们可以通过debian社区的整体活跃度和特点来推断其活跃性。 Debian社区的一般情况: Debian拥有详尽的…

    2026年5月10日
    000
  • Python递归函数追踪与性能考量:以序列打印为例

    本文深入探讨了Python中一种递归打印序列元素的方法,并着重演示了如何通过引入缩进参数来有效追踪递归函数的执行流程和参数变化。通过实际代码示例,文章揭示了递归调用可能带来的潜在性能开销,特别是对调用栈空间的需求,以及Python默认递归深度限制可能导致的错误,为读者提供了理解和优化递归算法的实用见…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信