免费注册 查看新帖 |

Chinaunix

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

重开一帖 问一下千兆网卡e1000/p1000的DMA问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-20 19:54 |只看该作者 |倒序浏览
在http://linux.chinaunix.net/bbs/thread-983479-1-1.html 这张贴子里我提出了自己的问题
不过我现在对千兆网卡的一些dma设置感到好奇  
我给写一篇零拷贝论文的作者发了封邮件问了下
×××××××××××××××
。。。。
。。。。
您文章里有这样一段话
*******
  在有新数据报文到达时,网卡直接以DMA方式直接存储到RxUserBuff中,然后发出硬中断;在硬中断处理程序里,首先要做的就是获取空闲数据块索引,再从userbuff物理地址映射表中检索到相应的物理地址,初始化网卡RX_queue,供下次DMA操作使用
********
其他很多论文也有类似这样的操作 就是在数据传递过程中重新修改接收dma缓存的地址  但因为我手头暂时没有千兆网卡 只是拿8139做下实验  所以我不清楚这是不是千兆网卡特有的功能 因为8139的dma地址在初始化的时候建立  然后将物理地址传给网卡  只设置一次  以后不再设置  网卡自动执行DMA操作    因此我不清楚在传输过程中给网卡指定下一次dma缓存的地址是千兆网卡的功能 还是对8139也可以做到(确实可以做到 重新像初始化那样重新设置一下缓存地址  但不清楚这样的开销有多大 )  也就是说 我想知道在传输过程中重设dma缓存 是千兆网卡有这个功能可以去指定   还是重新设置了一遍
。。。
。。。
××××××××××××××××
作者的回复比较简单  就是说需要修改网卡驱动程序来完成此功能
我还是比较模糊  所以在此想请教下熟悉千兆网卡特别是e1000/p1000的大牛们
在传输过程中可以做到每次dma前重新指定dma缓冲区地址这种操作   在千兆网卡里是不是支持的很好
也就是说  不是要耗费很多系统资源或时间  做到每个包过来都可以重新指定dma的缓冲区位置
还是说就是单纯的重设dma缓冲区位置  就像8139芯片初始化时做的那样

论坛徽章:
0
2 [报告]
发表于 2008-03-20 22:54 |只看该作者
http://tomoyo.sourceforge.jp/cgi ... /net/8139too.c#L661
我好像找到8139里面设定下一个dma传送地址的语句了
2032                 cur_rx = (cur_rx + rx_size + 4 + 3) & ~3;
2033                 RTL_W16 (RxBufPtr, (u16) (cur_rx - 16));

2032行算出下一个收包的地址  然后2033行将其写入io内存
不是很确定 而且这2行的式子都看不明白   不过我想如果8139的dma传输地址是可以指定的话  有也就应该就在这里了

论坛徽章:
0
3 [报告]
发表于 2008-03-21 21:23 |只看该作者
原帖由 duanius 于 2008-3-20 19:54 发表
http://linux.chinaunix.net/bbs/thread-983479-1-1.html 这张贴子里我提出了自己的问题
不过我现在对千兆网卡的一些dma设置感到好奇  
我给写一篇零拷贝论文的作者发了封邮件问了下
×××××××××× ...

e1000网卡当包到达FIFO后,会根据RX descriptor中指向的buffer进行DMA操作,
所以e1000驱动程序的一个重要的工作是不断的替换RX descriptor以及对应的buffer.
具体情况可以参考e1000的spec.

论坛徽章:
0
4 [报告]
发表于 2008-03-23 15:34 |只看该作者
谢谢回复  不过RX descriptor的更替真的是驱动完成的么?
我查了8139的源码 确实在napi的接收函数里有回写接收地址的io操作  但有个问题
接收函数在napi里面是由软中断调用的  如果数据包到的时候  软中断没有及时调用而网卡还在不停的dma数据包  那么RX descriptor岂不是无法更新了么  因为驱动程序的接收函数因为软中断没调用的缘故而无法更新RX descriptor    而此时网卡是不会等的  只会继续dma收到的包。。。

论坛徽章:
0
5 [报告]
发表于 2008-03-23 16:37 |只看该作者
原帖由 duanius 于 2008-3-23 15:34 发表
谢谢回复  不过RX descriptor的更替真的是驱动完成的么?
我查了8139的源码 确实在napi的接收函数里有回写接收地址的io操作  但有个问题
接收函数在napi里面是由软中断调用的  如果数据包到的时候  软中断没有 ...

8139我不清楚,e1000中RX描述符的更新只能在驱动程序中进行的:
e1000_clean中调用clean_rx(e1000_clean_rx_irq)中进行RX descriptor替换工作。
当驱动程序没有能及时更新RX的tail,有可能会导致Receiver FIFO Overrun中断,会产生丢包。
我的印象中对于e1000,驱动程序可以配置FIFO中用于RX还是TX的比例。
另外印象中对于e1000,驱动程序最多可以分配64K个descriptor,
可以算一下,对于千兆以太网线速和PCIE,如果真的使用64K个descriptor的话应该足够了。

[ 本帖最后由 crspo 于 2008-3-23 16:47 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-03-23 16:51 |只看该作者
原帖由 crspo 于 2008-3-23 16:37 发表

8139我不清楚,e1000中RX描述符的更新只能在驱动程序中进行的:
e1000_clean中调用clean_rx(e1000_clean_rx_irq)中进行RX descriptor替换工作。
当驱动程序没有能及时更新RX的tail,有可能会导致Receiver FIF ...

我希望也是由驱动来实现的  不过网卡记录了分配的缓冲区的空间和长度  为什么不能自己向前推  而是由驱动指定  是为了编程的灵活角度还是其他原因呢。。
另外你说 “对于e1000,驱动程序最多可以分配64K个descriptor”  是指最大只能分配64K的dma空间的意思么?

论坛徽章:
0
7 [报告]
发表于 2008-03-23 18:37 |只看该作者
原帖由 duanius 于 2008-3-23 16:51 发表

我希望也是由驱动来实现的  不过网卡记录了分配的缓冲区的空间和长度  为什么不能自己向前推  而是由驱动指定  是为了编程的灵活角度还是其他原因呢。。
另外你说 “对于e1000,驱动程序最多可以分配64K个de ...

64K个描述符而不是64K空间,
descriptor只是描述buffer的数据结构,其中只保留buffer的地址.
网卡根据descriptor中的buffer地址进行DMA操作.
网卡在收包的时候步进的只是RX ring中的descriptor指针,描述符中具体的buffer地址完全由驱动程序确定.
具体情况可以参看
Intel
PCIe* GbE Controllers Open Source
Software Developer’s Manual

论坛徽章:
0
8 [报告]
发表于 2008-03-23 18:50 |只看该作者
谢谢指点!!  我去看看你所提的文档

论坛徽章:
0
9 [报告]
发表于 2008-03-23 19:01 |只看该作者
原帖由 duanius 于 2008-3-23 18:50 发表
谢谢指点!!  我去看看你所提的文档

LZ同学,看你这么多帖子,感觉你还是没有搞懂网卡的ring buffer是什么结构,用的是机制。
我不建议你看e1000的spec,看e100的吧。鉴于你现在还只有8139的网卡,我建议你去买个intel e100的网卡,这东西便宜,几十元钱就搞定。然后对着spec看驱动。

论坛徽章:
0
10 [报告]
发表于 2008-03-23 19:18 |只看该作者
原帖由 zx_wing 于 2008-3-23 19:01 发表

LZ同学,看你这么多帖子,感觉你还是没有搞懂网卡的ring buffer是什么结构,用的是机制。
我不建议你看e1000的spec,看e100的吧。鉴于你现在还只有8139的网卡,我建议你去买个intel e100的网卡,这东 ...

的确这样  我看了8139的datasheet  但没找到它具体是什么样的结构机制   所以现在还是比较模糊
如果8139这方面资料比较少  没法弄清楚的话   就会去考虑e100吧,,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP