免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: duanius
打印 上一主题 下一主题

有谁对网卡DMA有所了解 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2008-03-18 16:01 |只看该作者
原帖由 zx_wing 于 2008-3-18 15:05 发表
我收回对IOV的看法,刚才问了一下朋友,发现MSI已经具有这功能了。
但由于我对MSI实在不懂,他给我讲的很多东西我也没理解到。
但目前对于linux来说是MSI允许的多个中断vector(MSI格式里那个)对应一个中断号 ...


MSI和MSI-X有很大不同,MSI可以注册多个中断处理函数,但对一个设备实例来说,是一个中断号。Multi-ring和MSI根本达不到性能的提高。

这也是e1000驱动为什么至今没有实现multi-ring support.

最新的网卡是MSI-X,这个可以实现多个中断处理函数并发执行。

论坛徽章:
0
42 [报告]
发表于 2008-03-18 17:08 |只看该作者
原帖由 terryfe 于 2008-3-18 15:12 发表
MSI应该是不支持的,但MSI-x支持.从驱动里来看应该没问题.....有问题的话我就死了T.T



对,MSI和MSI-X差别就在这里。

没问题的,我的驱动在Solaris上跑过很多测试了,用kernel debugger看每个中断处理函数完全是并发独立的处理的。

最近一直在做这个呵呵,而且要做的很多特性Linux都还不支持呢。

[ 本帖最后由 Solaris12 于 2008-3-18 17:09 编辑 ]

论坛徽章:
0
43 [报告]
发表于 2008-03-18 18:05 |只看该作者
原帖由 Solaris12 于 2008-3-18 17:08 发表



对,MSI和MSI-X差别就在这里。

没问题的,我的驱动在Solaris上跑过很多测试了,用kernel debugger看每个中断处理函数完全是并发独立的处理的。

最近一直在做这个呵呵,而且要做的很多特性Linux都还 ...

没时间再去看solaris中断处理的代码,不过Linux下多核系统下硬中断触发并且在同一个核中处理软中断的方式是目前的最大瓶颈,其他核完全得不到利用.
目前解决方案貌似只能依赖这块网卡了

论坛徽章:
0
44 [报告]
发表于 2008-03-19 12:50 |只看该作者
原帖由 terryfe 于 2008-3-18 18:05 发表

没时间再去看solaris中断处理的代码,不过Linux下多核系统下硬中断触发并且在同一个核中处理软中断的方式是目前的最大瓶颈,其他核完全得不到利用.
目前解决方案貌似只能依赖这块网卡了



Solaris 也得靠这啊。


e1000的网卡支持两个ring, 但不支持MSI-X,支持MSI, 所以即便实现了multi-ring,性能也好不到哪里。我猜测这就是为什么Linux的e1000驱动至今不支持MQ的原因,即便patch在N年前就有了。


新的intel卡支持MSI-X, 所以做多ring和vmdq很有意义。

论坛徽章:
0
45 [报告]
发表于 2008-03-19 13:00 |只看该作者
原帖由 terryfe 于 2008-3-18 18:05 发表

没时间再去看solaris中断处理的代码,不过Linux下多核系统下硬中断触发并且在同一个核中处理软中断的方式是目前的最大瓶颈,其他核完全得不到利用.
目前解决方案貌似只能依赖这块网卡了



Linux 有它的理由,说这样是为了防止Cache抖动。

论坛徽章:
0
46 [报告]
发表于 2008-03-19 13:31 |只看该作者
原帖由 albcamus 于 2008-3-19 13:00 发表



Linux 有它的理由,说这样是为了防止Cache抖动。

于是引用ULK的原话......
However, the relevant lines could easily be no longer in the cache when the deferrable function is run because its execution can be delayed a long time. Moreover, binding a function to a CPU is always a potentially "dangerous" operation, because one CPU might end up very busy while the others are mostly idle.
当然,多RX队列就不存在任何问题了

论坛徽章:
0
47 [报告]
发表于 2008-03-19 13:44 |只看该作者
原帖由 albcamus 于 2008-3-19 13:00 发表



Linux 有它的理由,说这样是为了防止Cache抖动。

MD,我真是老年人了,上次听Herbrt讲到这个问题的时候就跟同事讨论了,有很有力的证据认为不会抖动,可惜当时问问题的人都,没问到。现在是打死想不起来当时是怎么想的了

论坛徽章:
0
48 [报告]
发表于 2008-03-19 22:04 |只看该作者
唉  惭愧  拿着8139看着诸位讨论这么先进的东西真是无语
8139上能做的文章太少了
缓冲分配看上去没啥创新可做  同步也没啥可搞的  既然网卡闷着头狂往缓冲里面灌数据  那我在用户态只要跟着屁股读就是了 只要读写指针不重合就始终有新数据没处理。。。没啥同步算法可以发挥。。。
采用了napi后更是没啥事可做。。 因为用的是零拷贝  不需要往skb里面拷  所以轮询不需要做其他什么事  整个过程就是网卡dma  用户不停读。。。    没有创新点  我论文怎么办。。  老天

论坛徽章:
0
49 [报告]
发表于 2008-03-19 22:22 |只看该作者
原帖由 terryfe 于 2008-3-19 13:31 发表

于是引用ULK的原话......
However, the relevant lines could easily be no longer in the cache when the deferrable function is run because its execution can be delayed a long time. Moreover, bindi ...


这里面有点复杂:

如果网卡把rx_ring上的包发到不同CPU上,肯定会有问题.

但如果按照一定规则来发送就能避免这个问题.

Solaris 10在每个CPU上都实现了一个soft_ring, 一个硬件的rx_ring上的包可以被扇出(fanout)到其它CPU上, 按照目的IP地址或者端口的HASH.

SUN的T2000有32个虚拟CPU, 如果用kernel debugger观察,你会发现,中断收上来的包被fanout到其它CPU上.

不然的话,如何利用多核的特性?

当然, 这种 IP fanout + softring的技术其实思想上和RSS差不多的,但远远不如MSI-X intr+multi-ring+RSS更高效.

论坛徽章:
0
50 [报告]
发表于 2008-03-19 22:31 |只看该作者
今晚临下班的时候intel送来卡了.....真壮观
           CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7      
  0:         64          0          0          0          1          0          0          0   IO-APIC-edge      timer
  1:          0          1          0          0          0          0          1          0   IO-APIC-edge      i8042
  3:          1          1          0          1          0          1          0          1   IO-APIC-edge   
  4:          1          0          1          0          1          0          1          1   IO-APIC-edge   
  8:          0          0          1          0          0          0          0          0   IO-APIC-edge      rtc
  9:          0          0          0          0          0          0          0          0   IO-APIC-fasteoi   acpi
12:          0          0          0          1          1          1          0          1   IO-APIC-edge      i8042
14:          2          3          2          4          2          4          2          3   IO-APIC-edge      ide0
20:          0          0          0          0          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb3, uhci_hcd:usb5
21:        179        191        178        173        184        184        185        192   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb2, uhci_hcd:usb4
78:      17892      17881      17899      17894      17894      17886      17889      17890   IO-APIC-fasteoi   megasas
1236:          5          5          4          5          5          5          3          5   PCI-MSI-edge      eth3:lsc
1237:        105        102        142         95        102        137        128        127   PCI-MSI-edge      eth3:v15-Tx
1238:        102        137        128        127        142         95        102        105   PCI-MSI-edge      eth3:v14-Tx
1239:        142         95        102        105        128        127        137        102   PCI-MSI-edge      eth3:v13-Tx
1240:        128        127        137        102        102        105         95        142   PCI-MSI-edge      eth3:v12-Tx
1241:        102        105         95        142        137        102        127        128   PCI-MSI-edge      eth3:v11-Tx
1242:        137        102        127        128         95        142        105        102   PCI-MSI-edge      eth3:v10-Tx
1243:         95        142        105        102        127        128        102        137   PCI-MSI-edge      eth3:v9-Tx
1244:        143        150        135        166        128        127        161        118   PCI-MSI-edge      eth3:v8-Tx
1245:        105        102        142         95        102        137        128        127   PCI-MSI-edge      eth3:v7-Rx
1246:        102        137        128        127        142         95        102        105   PCI-MSI-edge      eth3:v6-Rx
1247:        142         95        102        105        128        127        137        102   PCI-MSI-edge      eth3:v5-Rx
1248:        128        127        137        102        102        105         95        142   PCI-MSI-edge      eth3:v4-Rx
1249:         99        108         93        145        136        108        128        124   PCI-MSI-edge      eth3:v3-Rx
1250:        137        106        126        124         99        139        104        103   PCI-MSI-edge      eth3:v2-Rx
1251:        100        142        104        105        127        126        106        137   PCI-MSI-edge      eth3:v1-Rx
1252:        130        133        112        142        110        108        147        105   PCI-MSI-edge      eth3:v0-Rx
1253:        115        115        114        115        114        115        114        115   PCI-MSI-edge      eth2:lsc
1254:        125        109        126        118        105        145        124        128   PCI-MSI-edge      eth2:v15-Tx
1255:        105        145        124        128        126        118        109        125   PCI-MSI-edge      eth2:v14-Tx
1256:        126        118        109        125        124        128        145        105   PCI-MSI-edge      eth2:v13-Tx
1257:        124        128        145        105        109        125        118        126   PCI-MSI-edge      eth2:v12-Tx
1258:        109        125        118        126        145        105        128        124   PCI-MSI-edge      eth2:v11-Tx
1259:        145        105        128        124        118        126        125        109   PCI-MSI-edge      eth2:v10-Tx
1260:        118        126        125        109        128        124        105        145   PCI-MSI-edge      eth2:v9-Tx
1261:        135        133        112        160        127        122        132        123   PCI-MSI-edge      eth2:v8-Tx
1262:        125        109        126        118        105        148        125        128   PCI-MSI-edge      eth2:v7-Rx
1263:        105        145        124        128        126        118        109        125   PCI-MSI-edge      eth2:v6-Rx
1264:        126        118        110        125        124        128        145        106   PCI-MSI-edge      eth2:v5-Rx
1265:        126        128        145        105        109        125        119        127   PCI-MSI-edge      eth2:v4-Rx
1266:        108        127        119        130        148        108        131        122   PCI-MSI-edge      eth2:v3-Rx
1267:        146        108        129        123        121        125        121        113   PCI-MSI-edge      eth2:v2-Rx
1268:        121        125        121        110        129        122        108        144   PCI-MSI-edge      eth2:v1-Rx
1269:        136        129        118        158        128        126        129        137   PCI-MSI-edge      eth2:v0-Rx
1270:       2250       2238       2230       2226       2242       2226       2250       2222   PCI-MSI-edge      eth1
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP