skb 和分散聚集功能
我有几个与SKB相关的问题。
当我们尝试使用 alloc_skb( ) 分配 skb 时,与 skb 相关的所有标头都将被分配,例如 l4 标头、l3 标头、l2 标头等, 我看到 sizeof(struct sk_buff) 为 188。这必须与所有标头一起使用 - 我正确吗?
skb 的内容将与所有标头连续。(考虑没有任何片段的衬垫 skb)。正确的?
分散聚集 (SG) - 一种硬件功能,用于从不同的内存位置获取数据并复制 (DMA) 到设备内存。
如果 skb 将是线性的并且如果它在 MTU 大小之内,则不会使用 SG。 ?
如果skb是非线性的并且大小超过MTU大小,则将使用SG。
当我们将 skb 作为非线性情况时,从某种意义上说 skb 具有多个片段。请确认?
谢谢, 库马尔
I have few questions related to the SKB.
when we try to allocate a skb using alloc_skb( ) all the headers related to the skb will be allocated, for example a l4 header,l3 header,l2 header etc.,
I have seen sizeof(struct sk_buff) as 188. this must with all the header -- Am I correct?
The content of skb is going to contiguous with all the headers.(considering a liner skb without any fragments). correct?
Scatter gather(SG) - a hardware feature used to fetch data from different memory locations to copy(DMA) to device memory.
If the skb is going to be liner and if it is within the MTU size, SG will not be used. ?
If the skb is non-liner and if the size exceeds MTU size, SG will be used.
When we wil hit skb as non-linear case, in the sense skb having multiple fragments. Please confirm?
Thanks,
Kumar
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我正在尝试理解你的问题。
当您使用 alloc_skb 时 - 您指定要在 skb 结构本身中容纳的数据的大小。 这通常用于网络标头。
skb 内的分散收集列表通常用于数据包的数据负载。
这意味着,如果内存中有一堆数据,您可以创建 skb,为标头留出空间,并将标头写入 skb 本身 - 使用 SG 条目指向您的数据,从而无需复制它。
“MTU”的概念与是否使用SG无关。
如果您将数据“skb_put”放入您的skb中 - 它将与数据包一起传输。如果您向 SG 添加元素,它们将被传输到。
I am trying to understand your question.
When you use alloc_skb - you specify the size of the data your would like to accomodate for in the skb structure itself. This is commonly used for network headers.
The scatter-gather lists inside the skb is commonly used for the data payload of your packet.
This means that if you have a bunch of data sitting in memory, you can create the skb, allowing space for the headers, and write the headers inside the skb itself - the use the SG entries to point to your data, eliminating the need to copy it.
The concept of "MTU" has nothing to do with SG being used or not.
If you "skb_put" data into your skb - it will be transmitted with the packet. If you add elements to you SG, they will be transmitted to.