多核编程中的中断处理问题(先送100分,根据解决情况再加分)

编码人V1 2009-03-09 01:06:36
加精
最近遇到了一个比较特殊的SMP中断问题。
一般情况下,多核CPU收到一个外部中断,APIC会把它派发到指定的CORE,由该CORE进行处理。但是现在我需要处理的情况是,让所有的CPU CORE都对某个特殊的外部中断进行即时的响应,所有的CORE都要对同样的一个中断处理一遍(处理的代码可能不一样,但是都需要调用对应的中断处理函数)。在Linux内核中,有没有办法对做到这一点?如果可以做到,应该如何做呢?顺便说一下,该中断是NMI,要求在中断产生之后所有CORE在很短的时间内(小于10ms)迅速处理。
我曾经想过当CORE 0收到了中断,在ISR中通过IPI向其他CORE发送中断,但是这样处理的话,时延比较大,其他CORE不能在要求的间隔之内进行处理。
先送100分出来,如果有很好的解决办法,再加分!
...全文
1555 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
whyyour 2012-08-13
  • 打赏
  • 举报
回复
支持下 学习中
yexingxia_2010 2011-08-26
  • 打赏
  • 举报
回复
支持下
编码人V1 2011-06-20
  • 打赏
  • 举报
回复
上面的回答有点问题,我再补充一下:
经过我的分析和实验,对于我所碰到的NMI中断,所有CORE都会接收,都会调用中断处理函数,所以问题中的烦恼不再烦恼。
每个CORE都要调用一段自己的内容,但是第一个CORE需要做更多处理。所以,在其他CORE干完自己的本分工作之后,就会直接返回,第一个CORE会把剩下的事情做完。里面有些并发互斥的操作,通过自己写的一些代码来实现。(当然不能调用现有的锁机制了)
编码人V1 2011-06-20
  • 打赏
  • 举报
回复
这个问题很久以前就被解决了。结贴之前再回复一下。
每个CORE都会处理同样一个中断函数,我的做法就是只有第一个CORE才做真正的操作,其他直接返回即可。
blossomlove 2011-02-23
  • 打赏
  • 举报
回复
支持一下 楼主,最近也碰到类似的问题,我不太清楚中断返回到底是哪个处理器读取返回信息。
rolim 2010-08-23
  • 打赏
  • 举报
回复
mark一下,显式控制CPU核操作,牛人啊,操作系统调度已经够牛了
INGDI 2010-06-17
  • 打赏
  • 举报
回复
只能看看了
星光sky 2009-06-06
  • 打赏
  • 举报
回复
通过core 0让core1。。N产生软件中断,在中断函数中把cache清空,速度应该还可以的,搂主可以先尝试一下
stormsxf 2009-04-15
  • 打赏
  • 举报
回复
我最近也在考虑和楼主类似的问题:
可惜研究相当不深刻,很多试验做不出来

有个想法:
在IOAPIC中的中断重定向表项第[63:56]位表示的是通过IOAPIC发往LAPIC的方式
可以表示一个指定的LAPIC,也可以表示一组CPU的APIC,是否可以通过设置这个位来实现你的目的

仅仅是理论上的考虑,我自己实在操作不来
bgcelite 2009-04-15
  • 打赏
  • 举报
回复
我关注一下
Kyph 2009-03-30
  • 打赏
  • 举报
回复
两种方案,仅供参考:
1)硬件方案,桥芯片的中断控制器是否提供这种功能,即将某种中断向所有的处理器都发送中断消息报文副本;
如果提供此种功能,只要在桥芯片的中断控制器单元初始化代码中进行中断路由设置即可。
2)软件方案,你也提到采用处理器机间中断的方式来传播中断,此方案其实比较可行,因为当第一个处理器获得中断,就连续调用机间中断调用向其他处理器发送中断。其他所有处理器的延迟仅仅多了一个中断过程的,即这个延迟时间是O(1)的复杂度,而不是O(n)的复杂度。
gcl151449388 2009-03-19
  • 打赏
  • 举报
回复
呵呵。这个问题比较深奥。只能关注了
编码人V1 2009-03-18
  • 打赏
  • 举报
回复
重新顶一下。
tsqtm123 2009-03-11
  • 打赏
  • 举报
回复
好像linux默认对于外部的IO中断都是由CORE 0处理,当然进行特殊的设置平衡中断除外。
串行程序在一个核上面执行,效率最高,不需要多核。
但是现在的问题就是想对于一个特殊外部中断,两个核都能够触发一个中断函数,进行各自的处理。
举个简单的例子,系统遇到了一个很严重的错误,需要立即出发NMI然后把系统给关闭。CORE 0能够接到NMI,它会做一些关键性的保护动作,然后把cache给清空,接下来就可以关机了。CORE 1不能收到NMI,所以它依然在执行自己本来的任务,可能导致一些重要的系统资源在关机瞬间得不到保护。现在我想让CORE 1也能立即进行类似的处理,至少把cache清空,可以相对安全的关机。CORE 0可以通过IPI让CORE 1执行一个函数,但是那样速度似乎太慢了。
多谢大家对本文提到关注!
xx425511 2009-03-10
  • 打赏
  • 举报
回复
看看 呵呵
cht_1988 2009-03-10
  • 打赏
  • 举报
回复
好东西值得看看啊
mm350670610 2009-03-10
  • 打赏
  • 举报
回复
好难啊~~
friendfish 2009-03-10
  • 打赏
  • 举报
回复
学习了~
编码人V1 2009-03-10
  • 打赏
  • 举报
回复
自己做CPU太前卫了吧?
xl168199 2009-03-10
  • 打赏
  • 举报
回复
自己顶一下!
加载更多回复(17)

566

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧