免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5493 | 回复: 6
打印 上一主题 下一主题

【问题】e1000网卡的jumbo收包(2.6.32) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-27 11:33 |只看该作者 |倒序浏览
本帖最后由 bgqsl11 于 2010-06-27 11:36 编辑

问题描述:
2.6.32内核中的e1000驱动中通过配置MTU来选择收包的函数,
MTU<2000时收包函数为:
   e1000_clean_rx_irq
    e1000_alloc_rx_buffers
MTU>2000时则为jumbo帧的模式,收包使用函数为:
   e1000_clean_jumbo_rx_irq
    e1000_alloc_jumbo_rx_buffers

MTU<2000的函数没有问题,都是将报文存放到skb的线性区域skb->data;
而MTU>2000时接收的报文是存放在SKB的非线性区域中skb_shinfo(skb)->frag,这时如果系统中网卡都支持Scatter/Gather的发包方式没有问题(目前的有线高速网口貌似都支持),但是如果另一块网卡(如无线网卡Atheros)不支持这种非线性skb的处理,这时是否会出现异常?即通过e1000收包的报文在通过内核桥需要从无线口发送的时候处理异常?

这个问题困扰了很有一段时间,请各位高手指教~~

论坛徽章:
0
2 [报告]
发表于 2010-06-28 23:54 |只看该作者
没有具体看过代码。我猜是不会出问题。

可以自己看代码或者做个实验试试。

论坛徽章:
0
3 [报告]
发表于 2010-06-29 23:16 |只看该作者
倒是想做个试验,奈何一直找不到测试环境,只能凭代码来猜测...

有对网卡比较熟悉的高手吗,特别是e1000网卡,出来点化一下小弟吧...

论坛徽章:
0
4 [报告]
发表于 2010-06-29 23:34 |只看该作者
I guess you can test on QEMU VM. QEMU supports at least three different NICs, e1000 is supported, then you can add a second NIC which does not have jumbo packet support, such as NE2000.

论坛徽章:
0
5 [报告]
发表于 2010-07-04 15:16 |只看该作者
谢谢热心的版主!这个问题有答案了:

    首先,如果系统中如果有不支持SG的网卡,则在调用dev_queue_xmit时会检查到这个情况,
然后将skb做线性化处理__skb_linearize(skb),所以不存在报文发送不通的情况:

        if (skb_has_frags(skb) &&
            !(dev->features & NETIF_F_FRAGLIST) &&
            __skb_linearize(skb))
                goto out_kfree_skb;

        /* Fragmented skb is linearized if device does not support SG,
         * or if at least one of fragments is in highmem and device
         * does not support DMA from it.
         */
        if (skb_shinfo(skb)->nr_frags &&
            (!(dev->features & NETIF_F_SG) || illegal_highdma(dev, skb)) &&
            __skb_linearize(skb))
                goto out_kfree_skb;

但是,这样会严重降低系统的数据吞吐量,因为线性化的过程无非就是数据的copy,比较耗资源。

    目前很多无线网卡驱动都是不支持SG,即nonlinear的处理,因为802.11n之前,最高速率达到40多M已经相当不错了,不过由于11n协议将来300M的性能要求,以后无线网卡驱动必定会做出优化,以支持此特性。

论坛徽章:
0
6 [报告]
发表于 2010-07-04 15:44 |只看该作者
I guess you can test on QEMU VM. QEMU supports at least three different NICs, e1000 is supported, th ...
accessory 发表于 2010-06-29 23:34



    QEMU没用过,这个VM支持对ARM虚拟吗?

论坛徽章:
0
7 [报告]
发表于 2010-07-05 00:31 |只看该作者
QEMU 支持某几个版本的ARM,最新的不一定支持。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP