Intel引入了 MACHINE-CHECK ARCHITECTURE(MCA) 和 machine-check exception(#MC) 机制用来对服务器硬件进行自检,并在发现硬件错误的时候发出中断或异常。系统软件收到中断或异常后,会对其进行响应,进行相应的修复、告警或其他策略等动作。通过Intel的这个RAS特性,保证在发生crash等错误前,服务器可以有机会做一些容错处理,大大提升了Intel在数据中心高可靠服务器领域的竞争实力。
Intel在Xeon,Atom,P6等中,都开始支持MCA特性。通过MCA,系统可以探测硬件错误,如系统总线错误,ECC错误,奇偶校验错误,cache错误,TLB错误等。MCA机制使用到了一组相关的MSR,通过这些MSR,MCA可以对硬件错误进行检测并记录检测到的错误信息。注意这里有一个bank的概念,可以简单理解为组。如bank1里面有MSR1_STATUS, MSR1_CTL, MSR1_ADDR;bank2里面有MSR2_STATUS, MSR2_CTL, MSR2_ADDR;为了方便书写为banks 含有寄存器 MSRi_STATUS, MSRi_CTL, MSRi_ADDR;其中i=0,i=1。后面讲解MSR的时候,还会进行讲解
处理器在探测到
uncorrected machine-check error(硬件不可自修复)的时候,就会发送
machine-check exception (#MC)。这种exception是abort类型的。MCA的实现通常来讲,是不允许在产生#MC后进行可靠的重启。
machine-check-exception的处理函数,可以通过读取相关的MSR来得到相关的错误信息。从Intel 45nm(最新的已经规划10nm门电路的芯片)的芯片开始,处理器在发现
corrected machine-check error(硬件可自修复的错误)的时候,也会发送一个中断给系统软件来响应这类MC 错误,这种中断被称作CMCI(
corrected machine-check
error interrupt
)
在支持MCA和CMCI的
Intel 64处理上,还支持一些额外的增强特性,可以让系统软件来恢复一些特性的
uncorrected recoverable machine check 错误(UCR),让服务器得到更大的稳定稳定性
关于特定的芯片兼容性和映射这里就不多讲了,有兴趣的可以参考Intel的SDM
参考文章