免费注册 查看新帖 |

Chinaunix

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

关于网卡的问题[求助] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-12 21:58 |只看该作者 |倒序浏览
网卡发送数据的时候,已经知道了包的大小和内容,接受的时候就不太一样吧,数据都写进网卡的缓存,然后系统产生中断时候,轮循处理缓存中的数据,是不是接受需要更长的时间? 因为数据到了网卡后要等待系统中断,那怎么测量数据这个等待中断处理的时间呢?

网卡有自己的中断,频率从1000-30000吧,我看别人的文章这么写的,但是我不知道在linux下,怎么设置网卡自己的中断频率? 哪位大侠指点下

论坛徽章:
0
2 [报告]
发表于 2007-08-13 08:51 |只看该作者
原帖由 Thelicopter 于 2007-8-12 21:58 发表
网卡发送数据的时候,已经知道了包的大小和内容,接受的时候就不太一样吧,数据都写进网卡的缓存,然后系统产生中断时候,轮循处理缓存中的数据,是不是接受需要更长的时间? 因为数据到了网卡后要等待系统中断 ...

然后系统产生中断时候-----应为网卡向系统请求中断. 看网卡技术手册?

论坛徽章:
0
3 [报告]
发表于 2007-08-13 15:05 |只看该作者
原帖由 Thelicopter 于 2007-8-12 21:58 发表
网卡发送数据的时候,已经知道了包的大小和内容,接受的时候就不太一样吧,数据都写进网卡的缓存,然后系统产生中断时候,轮循处理缓存中的数据,是不是接受需要更长的时间? 因为数据到了网卡后要等待系统中断 ...



网卡收到数据后,根据驱动程序事先初始化好的Buffer descriptors的buffer的指针,把收到的数据通过DMA填充在buffer ring里,然后发个中断通知系统。

系统收到中断,dispatch这个中断到驱动的ISR,驱动再去读这些buffer.

网卡中断的频率是可以设置的,对 1G和10G的网卡来说,我们不希望每来一个包就产生一个中断,这样系统的CPU占用率过高会影响系统性能。我们可以设置中断的聚合,让一次中断能送更多的包给上层。但中断不够及时又会影响网络的latecy.

至于polling在Solaris是这样处理的,当协议栈发现网卡速度远远大于CPU,自己的squeue中堆积太多包的时候,就关闭中断,启用polling。


我想,写驱动这块,Solaris和linux差别不大的。关于中断的设置,硬件一般提供很多控制寄存器,最好参考具体的手册。

论坛徽章:
0
4 [报告]
发表于 2007-08-13 16:27 |只看该作者
如果网卡的速度远大于polling, 又如何?

论坛徽章:
0
5 [报告]
发表于 2007-08-13 17:14 |只看该作者
原帖由 sisi8408 于 2007-8-13 16:27 发表
如果网卡的速度远大于polling, 又如何?



Solaris上提供了fanout机制,就是把一个CPU上中断上来的包fanout到其它CPU的soft ring上处理。

具体polling和fanout怎么结合工作,我还没看到细节。

你是不是又想扯到你写的那个patch上来? :wink:

论坛徽章:
0
6 [报告]
发表于 2007-08-13 17:32 |只看该作者

回复 #5 Solaris12 的帖子

那个patch并不解决polling的问题,
想听听你的高见。
那个patch,你都知道了,俺就没有辛苦。
听高见,是享受,呵呵。

论坛徽章:
0
7 [报告]
发表于 2007-08-13 17:43 |只看该作者
原帖由 sisi8408 于 2007-8-13 17:32 发表
那个patch并不解决polling的问题,
想听听你的高见。
那个patch,你都知道了,俺就没有辛苦。
听高见,是享受,呵呵。



我哪有什么高见。

因为最近刚转来做网卡驱动,恰好要在网卡驱动上实现multiple hardware ring,才开始看polling。

不过我是在OpenSolaris上搞,我现在不能也不允许看linux的代码。

我看的代码你可以到这里来找。

http://www.opensolaris.org/os/project/crossbow/

来Linux论坛主要是无聊,因为在Solaris那里没有那么多人关心内核。

论坛徽章:
0
8 [报告]
发表于 2007-08-13 19:25 |只看该作者
solaris很好,但我一直没有学习过,
如果说得没错,紫霞大仙的CD是俺奉送的,
当时好心人送俺一台Super sparc,
俺拿它play linux, redhat-6.2

NIC multiple hardware ring, e1000最近听说有了可用的代码,
好像依旧未被Alexey Kuznetsov接受,
关注ing.......

论坛徽章:
0
9 [报告]
发表于 2007-08-14 07:26 |只看该作者
原帖由 rtable 于 2007-8-13 19:25 发表
solaris很好,但我一直没有学习过,
如果说得没错,紫霞大仙的CD是俺奉送的,
当时好心人送俺一台Super sparc,
俺拿它play linux, redhat-6.2

NIC multiple hardware ring, e1000最近听说有了可用的代码,
好像依旧未被Alexey Kuznetsov接受,
关注ing.......


奥,OpenSolaris的开发是严格禁止看Linux的代码的。

Solaris已经有网卡驱动实现了multiple hardware ring。我只是参考已经实现的来做,难度应该不大。

在Solaris,multiple hardware ring的支持对虚拟化支持很重要,主要是利用基于multiple hardware ring和硬件的paket classification来实现对virtul nic的支持,进而可以对每个vnic进行带宽控制。

论坛徽章:
0
10 [报告]
发表于 2007-08-14 12:55 |只看该作者

回复 #9 Solaris12 的帖子

OpenSolaris的开发是严格禁止看Linux的代码的。
实在没必要,互通有无,linux已经借鉴很多solaris,

非要支持虚拟化,狭义的,要有硬件的支持,
广义的,bonding就很经典,
如果加上类似cfq scheduler的东东,那叫个完美实用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP