免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: scutan

请教I/O APIC对中断分发的问题 [复制链接]

论坛徽章:
0
发表于 2008-12-25 21:02 |显示全部楼层
不是有个irq_balance,专门负责平衡中断的。

你用的是intel 82575以上的网卡吗?

你可以下载intel 的igb驱动。

驱动可以开启接受多队列功能,也就是RSS功能,翻译为接受平衡负载。
不过这要懂驱动,还要看网卡datasheet,操作难度比较大。
如果你有兴趣,可以研究一下。

论坛徽章:
0
发表于 2008-12-25 21:29 |显示全部楼层
原帖由 zx_wing 于 2008-12-25 15:35 发表

代码我倒不记得了。不过既然是bitmap,在查找的时候肯定是用find_first_bit之类的操作做的,这时肯定是第一个置1的bit对应的CPU生效。


嗯,我刚刚测试了,确实是你说的这样,应该是使用find_first_bit之类的操作,因为不管我设置的为多少,网卡总是把中断发送到第一个置1的bit对应的CPU。

而且我看了一下0号中断,发现/proc/irq/0/smp_affinity 是周期性变化的,1,2,4,8这样地变化(2CPU2核),将0号中断发送到不同的CPU上。

论坛徽章:
0
发表于 2008-12-25 21:37 |显示全部楼层
原帖由 zx_wing 于 2008-12-25 15:35 发表

代码我倒不记得了。不过既然是bitmap,在查找的时候肯定是用find_first_bit之类的操作做的,这时肯定是第一个置1的bit对应的CPU生效。


能否指点一下,APIC决定向某个CPU发送中断的这个代码在哪儿吗?
谢谢。

论坛徽章:
0
发表于 2008-12-25 22:09 |显示全部楼层
在我的机器上smp_affinity确实如预期的工作了,下面是结果(smp_affinity contains '3', Intel Duo Core)

  1.               CPU0         CPU1      
  2. 314:       2437         1561     PCI-MSI-edge      eth0
  3. 315:     351419     357343   PCI-MSI-edge      iwl3945
复制代码

当smp_affinity为'1'或者'2'时,中断也如预期一样只发生在一个核心上
eth0的结果,明显平衡得不好,单是因为设备并未事实启用,所以仅供参考.
有新的结果我会再发出来

论坛徽章:
0
发表于 2008-12-25 22:23 |显示全部楼层

回复 #14 conjurator 的帖子

在我的机器中,smp_affinity中为“3”时,也只有1号核能够接收到中断。

论坛徽章:
0
发表于 2008-12-25 22:48 |显示全部楼层
我没办法确定什么原因会出现你说的那种情况,我能碰到得只有我自己的机器,我只能确定我这里是什么情况 不好意思
代码的话,看一下arch/x86/kernel/io_apic_64.c(vanilla 2.6.26.7)吧.
不知道你想看的是不是这里.
这个功能好象是硬件实现的,在代码里看不出什么.去看看文档吧
就这样,我要睡觉了晚安

论坛徽章:
0
发表于 2008-12-25 22:48 |显示全部楼层
原帖由 scutan 于 2008-12-25 21:37 发表


能否指点一下,APIC决定向某个CPU发送中断的这个代码在哪儿吗?
谢谢。


我们平时讲APIC这个词,最好还是区分开I/O和LAPIC。 LAPIC一定是每个 *逻辑上的* CPU有且只有一个,不管这个逻辑的CPU是一个physical package、还是通过mutilcore/hyperthreading等技术做出来的逻辑CPU。

对外设来说, 中断递送到IO APIC(注:MSI/MSI-X不经过IO APIC,这是例外),然后IOAPIC递送到LAPIC, LAPIC收到中断,再决定丢弃、转发、还是递送到自己所属的那个CPU。

IO APIC有24个entries, 每个entry有很多域, 规定了中断的触发方式、是否NMI、递送方式、目标LAPIC ID,等信息。

IOAPIC一般采用82093芯片,可以找datasheet看一下。

至于中断消息的源如何规定目标LAPIC(s)、一个LAPIC收到消息后如何决定忽略、转发还是递送到CPU, 有一套非常复杂的机制, Intel手册卷3A的APIC那章讲IPI的时候讲得比较全。  虽然是以IPI为例,但是对于从IO APIC到LAPIC的方式, 和从PCI设备来的MSI/MSI-X消息直接到LAPIC的方式,道理是一样的。

论坛徽章:
0
发表于 2008-12-25 23:15 |显示全部楼层
原帖由 albcamus 于 2008-12-25 22:48 发表


我们平时讲APIC这个词,最好还是区分开I/O和LAPIC。 LAPIC一定是每个 *逻辑上的* CPU有且只有一个,不管这个逻辑的CPU是一个physical package、还是通过mutilcore/hyperthreading等技术做出来的逻辑CPU。
...


非常感谢albcamus 版主详细的讲解,尤其是LAPIC,我之前一直以为是物理上的。
我明天就去看Intel那个手册。

论坛徽章:
0
发表于 2008-12-25 23:22 |显示全部楼层
原帖由 conjurator 于 2008-12-25 22:48 发表
我没办法确定什么原因会出现你说的那种情况,我能碰到得只有我自己的机器,我只能确定我这里是什么情况 不好意思
代码的话,看一下arch/x86/kernel/io_apic_64.c(vanilla 2.6.26.7)吧.
不知道你想看的是不 ...


谢谢,辛苦你了。

论坛徽章:
0
发表于 2008-12-26 00:28 |显示全部楼层
原帖由 conjurator 于 2008-12-25 22:09 发表
在我的机器上smp_affinity确实如预期的工作了,下面是结果(smp_affinity contains '3', Intel Duo Core)

              CPU0         CPU1      
314:       2437         1561     PCI-MSI-edge      eth0 ...


你用的是msi,好像与apic没有关系。不知lz显示的是msi中断吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP