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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章