Native Linux的MCE基本原理和處理函數入口(基於kernel 4.2.0+ )__Oracle

來源:互聯網
上載者:User

在老的Intel處理器上,當硬體檢測到錯誤後,就會對系統的每個邏輯CPU廣播MCE. 這樣設計是因為硬體上的缺陷,因為原來的處理器當發現了錯誤(如記憶體錯誤),是會隨著pipeline流到任意的不可預測的CPU上去,導致系統的問題.基於這樣的硬體設計問題,就產生了將MCE廣播到整個系統所有CPU上去的策略,保證所有的CPU在發生錯誤的時候,同時陷入異常處理流程指導異常處理完成.這樣的消耗其實在多socket的情況下是很大的.這在後期的Intel處理器上得意解決,我在後面的部落格裡面再做介紹.
關於MCE請參考我的部落格 << Intel處理器中斷18 - Machine-Check Exception (#MC)介紹 >>

CPU收到MCE後,如果是本CPU產生的異常,那麼就進入到int 18的處理流程;如果不是本CPU產生的異常,那麼CPU進入忙等流程指導這個異常處理完畢.注意,這個異常是同步的,也就是說,當產生異常後,所有的CPU都會馬上進入異常處理,不會有任何的延遲和等待. 這個CPU忙等直到異常處理完畢的過程叫做CPU集合

在Native Linux上,MCE的檔案是arch/x86/kernel/cpu/mcheck/mce.c.
核心處理函數為: do_machine_check, 這個就是int 18的處理函數
在do_machine_check中會調用mce_start來進行CPU的集合
在mce_start中,如果不是本CPU,調用ndelay(SPINUNIT);進入忙等;如果是本CPU則從mce_start返回do_machine_check中進行處理
在do_machine_check後面,會進行錯誤severity等級的分級,如果很緊急,那麼直接在核心調用memory_failure來進行處理;如果不是很緊急,可以delay,那麼就會通過置位一個標誌位,然後通過notify通知.對於delay的,切換到進程上下文後,發現表職位,通過notfiy,處理函數為srao_decode_notifier , 然後調用memory_failure進行處理.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.