skb和Scatter收集功能

时间:2010-11-18 08:18:15

标签: networking linux-kernel device-driver linux-device-driver

我几乎没有与SKB有关的问题。

当我们尝试使用alloc_skb()分配一个skb时,将分配与skb相关的所有头文件,例如l4头文件,l3头文件,l2头文件等, 我已经看到sizeof(struct sk_buff)为188.这必须包含所有标题 - 我是否正确?

skb的内容将与所有标题连续。(考虑没有任何片段的线性skb)。正确的吗?

Scatter gather(SG) - 一种硬件功能,用于从不同的内存位置获取数据以复制(DMA)到设备内存。

如果skb将是衬垫,并且如果它在MTU尺寸范围内,则不会使用SG。 ?

如果skb是非线性的,并且如果尺寸超过MTU尺寸,则将使用SG。

当我们将skb作为非线性情况命中时,在某种意义上skb具有多个片段。请确认一下?

谢谢, 库马尔

1 个答案:

答案 0 :(得分:2)

我想了解你的问题。

当您使用alloc_skb时 - 您可以在skb结构本身中指定您希望容纳的数据大小。 这通常用于网络标题

skb中的分散 - 收集列表通常用于数据包的 data 有效负载。

这意味着如果你有一堆数据放在内存中,你可以创建skb,为标题留出空间,并在skb本身内写入标题 - 使用SG条目指向你的数据,消除需要复制它。

“MTU”的概念与使用或不使用SG无关。

如果您将数据“skb_put”到skb中 - 它将与数据包一起传输。如果您向SG添加元素,它们将被传输到。