gpt4 book ai didi

linux - RX/TX ring和sk_buff有什么关系?

转载 作者:太空狗 更新时间:2023-10-29 12:10:28 25 4
gpt4 key购买 nike

我知道每个 NIC 在 RAM 中都有其 RX/TX 环,用于操作系统接收/传输数据包。环中的一项(数据包描述符)包括数据包的物理地址,数据包的长度等。我想知道这个描述符是否指向一个sk_buff?如果数据包是 GSO 数据包会发生什么?环中的一个描述符 = 一个数据包 = 一个 sk_buff 是真的吗?

最佳答案

I wonder that does this descriptor point to a sk_buff?

不完全是。 sk_buff是一个软件结构,粗略地说,一个包含元信息的数据结构,用于描述一些网络数据 block 并指向 data本身。因此,NIC 描述符不需要指向 sk_buff - 它可能只指向一个数据缓冲区(使用 DMA/物理地址)。

And what happens if the packet is a GSO packet?

这是一个非常模糊的问题,因为此类卸载可能在软件中实现(例如,通过网络堆栈),也可能在硬件中完成。

在前一种情况下,就 NIC SW 描述符而言没有什么可讨论的 - 上层应用程序提供连续的数据 block ,网络堆栈从中产生较小的数据包,因此 sk_buff -s 已移交给网络驱动程序描述小数据包。

在后一种情况下(HW 卸载),网络驱动程序被提供了大量的数据(通过将单个 sk_buff-s 或 sk_buff 链交给它), 并且网络驱动程序反过来将适当的描述符发布到 NIC - 它可能是一个指向一大块数据的描述符,或者是指向同一连续数据缓冲区的较小部分的少数描述符 - 这无关紧要因为卸载魔法将发生在硬件中——整个数据 block 将被切片,数据包 header 将相应地添加到前面,从而产生许多较小的网络数据包,以将其传输到网络上。

Is this true that one descriptor in the ring = one packet = one sk_buff?

严格来说,。这取决于。您的网络驱动程序可能会被要求传输一个描述一个数据缓冲区的 sk_buff。但是,在某些情况下,您的驱动程序可能会决定发布多个指向相同数据 block 但具有不同偏移量的描述符 - 即提交将分部分完成,并且 NIC 环中将有多个描述符与单个 ​​sk_buff 相关。此外,一个数据包并不总是与一个 sk_buff 相同 - 一个数据包可能呈现为少量,每个段都用单独的 sk_buff 描述形成一个sk_buffchain(请在sk_buff中找到nextprev fields >).

关于linux - RX/TX ring和sk_buff有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46781857/

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