2013-02-28 59 views
8

我的系統是CentOS 6.3(運行內核版本2.6.32-279.el6.x86_64)。Linux陷入CPU軟鎖定?

我有一個可加載的內核模塊,它是一個管理PCIe卡的驅動程序。 如果我在操作系統啓動並運行時使用insmod手動插入驅動程序,則驅動程序將成功加載並運行。但是,如果我嘗試使用rpm安裝驅動程序,然後重新引導系統,則在啓動過程中,操作系統卡住了所有CPU核心的以下「軟鎖定」消息,除了一個處於「軟鎖定「在我的驅動程序創建的線程之一。

BUG: soft lockup - CPU#X stuck for 67s! [migration/8:36] 
.......(same above message for all cores except one) 
BUG: soft lockup - CPU#10 stuck for 67s! [mydriver_thread/8:36] 
(one core is locked up in one of the threads in my driver). 

我搜索了網上不少關於這個內核味精/錯誤信息,並有不少關於它的帖子,都不是什麼原因導致它或如何調試。與下列問題的任何幫助將真正意識到:

  1. 我無法登錄到系統中,我認爲這是因爲所有的核心都在「軟鎖」狀態,因此無法觸發內核從shell提示符轉儲。我啓用SysRq,並試圖用SysRq鍵組合來觸發內核轉儲,但沒有運氣。看起來系統沒有響應鍵盤(甚至沒有響應CapsLock按鈕)。有關如何在這種情況下觸發內核轉儲的任何建議?

  2. 我可以想象我的驅動程序線程可能導致「軟鎖定」。但是,由於我的驅動程序,「遷移」線程(內核線程)如何才能進入「軟鎖定」?

  3. 從瀏覽網絡來看,「遷移」線程用於將任務從一個cpu移動到另一個cpu。有人可以幫我理解這個線程的確切作用嗎?以及它如何受到其他線程的影響,如果有的話。

+0

如果您能向我們展示一些堆棧痕跡,這將是非常有用的。 – cdleonard 2013-02-28 22:02:25

+0

重新啓動時出現問題使我想起模塊在沒有固件時加載固件的許多問題。驅動程序是否嘗試從最初的虛擬硬盤加載?它需要固件而沒有得到它?你的驅動程序在初始化過程中是否循環並佔用所有的工作隊列線程? – 2013-02-28 22:19:17

+0

@cdleonard 屏幕上沒有backstrace。我所得到的是系統中十六個內核中每一個的相同內核消息的十六行(「BUG:soft lockup .....」)。其中一條消息是核心忙於來自我的驅動程序的線程,其餘核心都與遷移線程相關。 – 2013-02-28 23:13:46

回答

1

我的桌面上有一個非常類似的問題。它會非常頻繁地軟鎖定 - 大約每天一次左右。

事實證明,這是因爲我在Intel Haswell上運行。似乎Haswell/Broadwell系列的英特爾處理器有一個可能導致系統不穩定的錯誤。這個bug在微碼更新中得到修復。

檢查CentOS是否提供intel-microcode軟件包並進行安裝。確保在加載initramfs之前將grub配置爲加載它作爲初始ramdisk。

個人而言,我通過啓動進入Windows並運行BIOS更新來升級微碼。您可以通過比較更新前後grep 'microcode' /proc/cpuinfo的輸出來檢查micrcode是否實際更新。