NMI是什么


NMI是什么

NMI(non-maskable interrupt),就是不可屏蔽的中斷。根據Intel的Software Developer手冊Volume 3,NMI的來源有兩個:
– NMI pin
– delivery mode NMI messages through system bus or local APIC serial bus

NMI通常用於通知操作系統發生了無法恢復的硬件錯誤,也可以用於系統調試與采樣,大多數服務器還提供了人工觸發NMI的接口,比如NMI按鈕或者iLO命令等。

  1. 無法恢復的硬件錯誤通常包括:芯片錯誤、內存ECC校驗錯、總線數據損壞等等。
  2. 當系統掛起,失去響應的時候,可以人工觸發NMI,使系統重置,如果早已配置好了kdump,那么會保存crash dump以供分析。有的服務器提供了NMI按鈕,而刀片服務器通常不提供按鈕,但可以用iLO命令觸發。
  3. Linux還提供一種稱為”NMI watchdog“的機制,用於檢測系統是否失去響應(也稱為lockup),可以配置為在發生lockup時自動觸發panic。原理是周期性地生成NMI,由NMI handler檢查hrtimer中斷的發生次數,如果一定時間內這個數字停頓了,表示系統失去了響應,於是調用panic例程。NMI watchdog的開關是通過內核參數 kernel.nmi_watchdog 或者在boot parameter中加入”nmi_watchdog=1″參數實現,比如:
    在RHEL上編輯 /boot/grub/menu.lst:

    kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/sda nmi_watchdog=1

    然后你會看到:
    # grep NMI /proc/interrupts
    NMI: 0 0 0 0

Linux kernel籠統地把NMI分為三大類:內存校驗錯 mem_parity_error(),總線數據損壞 io_check_error(),其他的全部歸入 unknown_nmi_error()。kernel對NMI是不能精確定位的,對故障診斷很不利,硬件驅動程序可以注冊自己的NMI處理例程,kernel會在發生NMI之后通過notify_die()調用這些第三方注冊的處理例程。


參考資料:
Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 3
http://wiki.osdev.org/Non_Maskable_Interrupt


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM