RAS(三)Intel MCA-CMCI

2025-04-25阅读 0热度 0
intel linux 处理器 red

ras(三)intel mca-cmci

修正的机器检查错误中断(CMCI)是MCA的一个增强特性,它提供了一种基于阈值的错误报告方式。通过这种模式,软件可以配置硬件校正MC错误的阈值,当硬件发生的CE(校正错误)次数达到设定阈值时,会产生一个中断通知软件处理。

需要注意的是,CMCI是随MCA引入的特性,最初只能通过软件轮询方式获取CE信息。CMCI中断通知方式的优势在于,每个CE都将通过IRQ处理,不会丢失任何CE;而轮询方式则可能因轮询频率低、存储空间有限等原因导致CE丢失。然而,CMCI并非总是最佳选择,其缺点在于大量的CE可能引发中断风暴,影响机器性能。在云服务器场景中,CE风暴较为常见,那么Intel服务器是如何解决这一问题的呢?下文将详细说明。

CMCI机制

CMCI默认是关闭的,软件需要通过配置IA32_MCG_CAP[10] = 1来启用。

软件通过IA32_MCi_CTL2 MSR来控制对应Bank的CMCI功能的启用或关闭。

通过IA32_MCi_CTL2 Bit 14:0设置阈值,如果设置非0,则使用配置的阈值;如果CMCI不支持,则全0;

CMCI机制如下图所示:

ras(三)intel mca-cmci硬件通过比较IA32_MCi_CTL2 Bit 14:0和IA32_MCi_STATUS Bit 52:38,如果数值相等,则溢出事件发送到APIC的CMCI LVT条目。如果MC错误涉及多个处理器,那么CMCI中断会同时发送到这些处理器,例如两个CPU共享的缓存发生CE,这两个CPU都会收到CMCI。

CMCI初始化

以Linux v6.3分支为例,内核启用CMCI的代码如下:

arch/x86/kernel/cpu/mce/intel.cvoid intel_init_cmci(void){    int banks;    if (!cmci_supported(&banks))        return;    mce_threshold_vector = intel_threshold_interrupt;    cmci_discover(banks);    /*      * For CPU #0 this runs with still disabled APIC, but that's      * ok because only the vector is set up. We still do another      * check for the banks later for CPU #0 just to make sure      * to not miss any events.      */    apic_write(APIC_LVTCMCI, THRESHOLD_APIC_VECTOR|APIC_DM_FIXED);    cmci_recheck();}
登录后复制
免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策