- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
谁能解释一下 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/
我的 NIC 驱动程序不支持 H/W LRO,但会在驱动程序中模拟 LRO。现在可以使用“ethtool -k ethx gro off”禁用 GRO(这是一个 linux 网络堆栈功能)。这也适用于
谁能解释一下 TCP 中的 TSO/LRO 硬件功能是什么以及这些功能是否也对确认机制负责? 最佳答案 我知道这是一个旧话题,但我觉得答案不完整。 您首先要了解的是,就网络性能提升技术而言,TSO 只
我是一名优秀的程序员,十分优秀!