linux内核死机2-smp


问题:程序跑一段时间之后会报告:
        INFO: rcu_sched_state detected stalls on CPUs/tasks: { 1} (detected by 0, t=15002 jiffies)。意思是CORE0检测到CORE1挂了。

1.cpu执行的指令和数据是从L1高速缓存的指令缓存和数据缓存中获取,一旦cpu要执行的指令或数据无法从高速缓存中获取,就会产生cpu stall。你这种情况是程序要求的cpu性能要高于你现在使用的cpu,你得考虑升级设备才能运行此庞大程序。


2.再补充一点,当cpu无法从高速缓存中获取指令或数据,那么只有从内存中获取,而这种会浪费很长时间的,所以你的程序会hang住,考虑玩个小程序吧,或者非要玩这个大程序,换个牛逼手机吧。


http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3658441如题,求指点

Dec 30 15:12:14 T206 kernel: [ 1196.284001] INFO: rcu_sched_state detected stall on CPU 0 (t=15000 jiffies)
Dec 30 15:12:14 T206 kernel: [ 1196.284001] sending NMI to all CPUs:

提示这个错误是什么原因引起的?


1.某个核调度出了问题,跟softlockup有点像。可能是spinlock关抢占。或者fifo死循环。
      如果是前者,得查死锁回溯;
      我们的业务模型会在某几个cpu上fifo死循环,没办法,目前的临时解决方法是配置了CONFIG_NO_HZ_FULL 。
CONFIG_NO_HZ_FULL的好处是,如果运行的进程只有一个,RCU也会认为该cpu经过了一个grace period,不会出死锁。


2.一般是死锁了,由于提示是cpu0死了,看下“sending nmi”下一行开始的cpu0的栈,一般最后能看到某个spin lock irqsave类似的锁操作,然后看下这个锁哪里用到。另一个常用的检测方式是把内核的lockdep检测打开,这样错误基本是无所遁形的(O_O)。

 3.   触发NMI,一般是cpu卡死,如死锁,也有如系统异常时,巨量的prinrk(打印全开)。


I have disabled the Frequency scaling and this issue is not reproduce.






发布了34 篇原创文章 · 获赞 4 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章