gpt4 book ai didi

networking - 谁能解释一下 TCP 中的 TSO/LRO 硬件功能是什么?

转载 作者:可可西里 更新时间:2023-11-01 02:31:08 26 4
gpt4 key购买 nike

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

最佳答案

我知道这是一个旧话题,但我觉得答案不完整。

您首先要了解的是,就网络性能提升技术而言,TSO 只是冰山一角。

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

这些是数据传输速度的提升。

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

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

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

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

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

Scatter/Gather 对于接收来说几乎是多余的。

LRO (Large receive offload),嗯,硬件没有简单的方法知道这些数据包的含义,所以 LRO 目前只是一个软件构造,数据包被传递给 OS,然后 OS 决定是否连接数据并将大块传递给应用程序或传递许多较小的 block 。

关于网络堆栈的一些注意事项。

软件应该总是产生ACK数据包。它不会的唯一原因是如果您的 NIC 上有 TOE(TCP 卸载引擎)。我不知道有任何操作系统本身支持此功能,这意味着您需要对其进行破解以使其兼容。

所以有一个完整而漫无边际的回应,希望它能帮助别人。

关于networking - 谁能解释一下 TCP 中的 TSO/LRO 硬件功能是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7377209/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com