免费注册 查看新帖 |

Chinaunix

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

[CPU及多核] SMP 为什么一个核心死掉,总个系统都是死? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-10 14:41 |只看该作者 |倒序浏览
SMP中一个核心死掉,为什么总个系统会死?有什么办法能时一个核心死啦,系统继续运行吗?希望和大家交流学习下(本人实属菜鸟级)。

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
2 [报告]
发表于 2013-10-10 16:41 |只看该作者
死的不是核心,是操作系统。
---
虚拟机

论坛徽章:
0
3 [报告]
发表于 2013-10-10 17:56 |只看该作者
谢谢 smalloc的回答,那SMP上有多个core的话,系统运行在其中一个core上,其他core用来跑用户程序,这样其他core有个突然关闭的话,操作系统是不是不会死掉?

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
4 [报告]
发表于 2013-10-11 09:52 |只看该作者
楼主说的应该是cpu硬件中的core死掉了吧?这种情况应该是无法保证OS正常运行的,如果该核上运行的是内核的核心任务,那么OS会直接挂断,如果不是,内核可能会检测到mce错误,触发mce异常,系统仍将die。
对于CPU,在软硬件一起配合的情况下,可以支持热插拔,但是这个热插拔的概念跟你说的情况不一样,热插拔是需要由用户通过硬件发起,OS接收到相应通知(通常是中断)后,进行相应的处理,比如将本核上的任务进行迁移,处理完成后,才能进行cpu拔出操作,如果系统在运行过程中,cpu突然被拔掉(相当于你说的core死掉),这个从软件层面是无法保证系统正常运行的。

论坛徽章:
1
综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00
5 [报告]
发表于 2013-10-13 07:00 |只看该作者
本帖最后由 fly3ds 于 2013-10-13 07:05 编辑
zyy9812 发表于 2013-10-10 14:41
SMP中一个核心死掉,为什么总个系统会死?有什么办法能时一个核心死啦,系统继续运行吗?希望和大家交流学习 ...


楼主的意思是好像是:我可是有两个CPU啊,系统怎么会死!但是如果照这个思路,你甚至可以问,为什么我插了了四个内存条,系统还是会死,我有八个硬盘系统为什么会死呢? 有没有办法一个核心、内存、硬盘坏掉系统继续运行?

我有点搞不清SMP到底是对多CPU的支持还是单CPU多核心的支持或者两者都是;对称多处理处理是什么,怎么个对称法。高人指点下。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
6 [报告]
发表于 2013-10-13 12:30 |只看该作者
painc时,crash的那个core,会发出ipi通知其他core,然后其他core也执行dump_stack,于是看上去就是都死了

流程
panic()
        crash_kexec(NULL)
        kmsg_dump(KMSG_DUMP_PANIC);
        smp_send_stop()
                cpumask_t mask = cpu_online_map;
                cpu_clear(smp_processor_id(), mask);
                send_ipi_message(&mask, IPI_CPU_STOP);
                        struct ipi_data *ipi = &per_cpu(ipi_data, cpu); ipi->bits |= 1 << msg;
                        smp_cross_call(mask);
                                gic_raise_softirq(mask, 1);
                                        writel(map << 16 | irq, gic_data[0].dist_base + GIC_DIST_SOFTINT);
        panic_blink_one_second()

以下是其余各个core对IPI_CPU_STOP的处理
do_IPI
        struct ipi_data *ipi = &per_cpu(ipi_data, cpu);
        ipi_cpu_stop()
                dump_stack();
                set_cpu_online(cpu, false);
                local_fiq_disable();
                local_irq_disable();
                while (1) cpu_relax();

所以panic会导致所有的core都最终进入死循环。

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
7 [报告]
发表于 2013-10-14 08:56 |只看该作者
回复 5# fly3ds
不管是多物理CPU,还是单CPU中的多物理核,甚至超线程,对于OS来说都是透明的,对于OS来说看到都是逻辑核。
个人理解smp的对称代表每个逻辑核的地位和使用都是一样的,AMP则代表不对称,比如每个核用于跑不通的OS。
   

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
8 [报告]
发表于 2013-10-14 11:19 |只看该作者
我是来顶二楼的。

AMP 虚拟机 都是可以解决楼主这个问题的,一些os间通信协议也是专门针对这个问题进行设计和实现的。

论坛徽章:
0
9 [报告]
发表于 2014-03-24 22:55 |只看该作者
humjb_1983 发表于 2013-10-11 09:52
楼主说的应该是cpu硬件中的core死掉了吧?这种情况应该是无法保证OS正常运行的,如果该核上运行的是内核的核 ...


请问哪里可以找到这种热插拔的相关资料呢?想学习一下,谢谢~

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
10 [报告]
发表于 2014-03-25 09:08 |只看该作者
studying_linux 发表于 2014-03-24 22:55
请问哪里可以找到这种热插拔的相关资料呢?想学习一下,谢谢~

这个涉及的东西比较多,开源的习惯就是没有文档。
关于CPU的热插拔,可以看看具体的intel芯片手册,比如ivybridge的芯片手册中有部分内容,另外,这个还跟ACPI的关系很密切,APCI的规范和手册中有跟BIOS和硬件接口相关的内容。其它的就是google一些文档,有论文,最后就是源代码了~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP