免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-25 14:20 |只看该作者 |倒序浏览
在多CPU中,为了实现中断的合理分发,Intel引起了APIC。我想请问一下,这个APIC是不是只能在多个CPU之间进行中断的分发,而对于一个CPU中的两个核,并不能进行中断的分发?也就是说这个APIC只对CPU有用,而对双核中的其中一个核没有什么用?

我提这个问题的原因在于我的机器是单CPU,双核。对eth0的中断,发现所有的中断都到CPU0号上去了,而CPU1号上却没有网卡中断。

此时/proc/irq/n/smp_affinity默认为1,其二进制为01,是指向0号CPU的。

此时如果我将/proc/irq/n/smp_affinity 改成 2,其二进制为10,这个时候CPU1号上就有网卡中断了。而CPU0号上就没有了。

如果此时我将smp_affinity改成3,其二进制为11,但是,这个时候,也是只有 CPU0号上面有中断,CPU1上面仍然没有中断。

所以我就想,那个APIC是不是只是对多个CPU有效,而对同一个CPU中的多个核没有效果?

不知道我描述清楚了没有?还请各位指教一下。谢谢!

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2008-12-25 14:23 |只看该作者

回复 #1 scutan 的帖子

这个地方还没来及研究啊。我用的机子是奔腾双核,伪双核啊。

论坛徽章:
0
3 [报告]
发表于 2008-12-25 14:26 |只看该作者
原帖由 Godbach 于 2008-12-25 14:23 发表
这个地方还没来及研究啊。我用的机子是奔腾双核,伪双核啊。


ULK上面说,内核试图以轮转的方式把来自硬件设备的IRQ信号在所有CPU之间分发。
是不是也就是说只限于CPU,而不是指某个核。

要不你也cat /proc/interrupts 看看你网卡中断是如何分配到两个核上的?

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
4 [报告]
发表于 2008-12-25 15:00 |只看该作者

回复 #1 scutan 的帖子

不太清楚是否可以核间平衡的分发

论坛徽章:
0
5 [报告]
发表于 2008-12-25 15:04 |只看该作者
原帖由 scutan 于 2008-12-25 14:20 发表
在多CPU中,为了实现中断的合理分发,Intel引起了APIC。我想请问一下,这个APIC是不是只能在多个CPU之间进行中断的分发,而对于一个CPU中的两个核,并不能进行中断的分发?也就是说这个APIC只对CPU有用,而对双 ...

可以发送到每个核。多核CPU的每个核都有自己的local APIC,所以都可以接收来自I/O APIC的中断
linux中对同种中断发送到同一CPU只是OS的策略问题,抛去中断负载平衡不说,同种中断不断的发送到不同CPU会导致CPU的cache颠簸,不利于局部性

论坛徽章:
0
6 [报告]
发表于 2008-12-25 15:13 |只看该作者
原帖由 zx_wing 于 2008-12-25 15:04 发表

可以发送到每个核。多核CPU的每个核都有自己的local APIC,所以都可以接收来自I/O APIC的中断
linux中对同种中断发送到同一CPU只是OS的策略问题,抛去中断负载平衡不说,同种中断不断的发送到不同CPU会导致C ...


嗯。对于双核CPU来说,echo "2" > /proc/irq/n/smp_affinity, 可以让中断发送到第2个核上。
但是如果echo "3" > /proc/irq/n/smp_affinity的话,此时的中断还是只发送到了第1个核上。
请问一下为什么后一种情况下中断不会发送到第2个核上了呢?是因为本地APIC的原因吗?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
7 [报告]
发表于 2008-12-25 15:16 |只看该作者
原帖由 scutan 于 2008-12-25 14:26 发表


ULK上面说,内核试图以轮转的方式把来自硬件设备的IRQ信号在所有CPU之间分发。
是不是也就是说只限于CPU,而不是指某个核。

要不你也cat /proc/interrupts 看看你网卡中断是如何分配到两个核上的?


我用的虚拟机,装的时候还是按照单核了,呵呵。

论坛徽章:
0
8 [报告]
发表于 2008-12-25 15:35 |只看该作者
原帖由 scutan 于 2008-12-25 15:13 发表


嗯。对于双核CPU来说,echo "2" > /proc/irq/n/smp_affinity, 可以让中断发送到第2个核上。
但是如果echo "3" > /proc/irq/n/smp_affinity的话,此时的中断还是只发送到了第1个核上。
请问一下为什么后 ...

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

论坛徽章:
0
9 [报告]
发表于 2008-12-25 15:55 |只看该作者
如果你说的是网卡的中断,现在intel的APIC有两种分发方式:
在不同的核间平均分发
由某一个核心来集中处理

对于多核的机器也是工作的。

论坛徽章:
0
10 [报告]
发表于 2008-12-25 19:12 |只看该作者
原帖由 conjurator 于 2008-12-25 15:55 发表
如果你说的是网卡的中断,现在intel的APIC有两种分发方式:
在不同的核间平均分发
由某一个核心来集中处理

对于多核的机器也是工作的。


能说说对于网卡中断来说, 如何让该中断在同一个CPU中的不同的核间分发吗? 谢谢.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP