RAS:Intel MCA-CMCI,你了解吗?

2023-07-11 11:16:19 来源: Linux阅码场

Corrected machine-check error interrupt (CMCI)是MCA的增强特性,它提供了一种threshold-based的错误上报方式。这种模式下,软件可以配置硬件corrected MC errors的阈值,硬件发生CE(Corrected Error)次数达到阈值后,会产生一个中断通知到软件处理。

值得一提的是,CMCI是随MCA加入的特性,最开始只能通过软件轮询方式获取CE信息。CMCI中断通知方式的优点是每个CE都会经过IRQ Handle处理,不会丢失任一CE;而轮询方式可能因为轮询频率低、存储空间有限等原因,导致丢失CE。但是并不是说CMCI最优,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机制如下图

图片

硬件通过比较IA32_MCi_CTL2 Bit 14:0和IA32_MCi_STATUS Bit 52:38,如果数值相等,那么overflow event发送到APIC的CMCI LVT entry。如果MC error涉及多个processors,那么CMCI中断会同时发送到这些processors,比如2个cpu共享的cache发生CE,那么这两个cpu都会收到CMCI。

CMCI初始化

以Linux v6.3分支为例,内核使能CMCI代码

C++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();    }

1.cmci_supported()函数主要事项包括

•根据内核启动参数"mce=no_cmci,ignore_ce"判断是否打开cmci和ce上报功能

•检查硬件是否支持cmci

•通过MCG_CMCI_P bit判断硬件是否使能cmci功能

2.mce_threshold_vector = intel_threshold_interrupt; 声明cmci的中断处理函数为intel_threshold_interrupt();

3.cmci_discover()函数主要完成

•遍历所有banks,通过配置IA32_MCi_CTL2寄存器使能所有bank的cmci功能;

C++rdmsrl(MSR_IA32_MCx_CTL2(i), val);...

val |= MCI_CTL2_CMCI_EN;            wrmsrl(MSR_IA32_MCx_CTL2(i), val);            rdmsrl(MSR_IA32_MCx_CTL2(i), val);

•设置cmci threshold值,代码如下

C++#define CMCI_THRESHOLD 1

if (!mca_cfg.bios_cmci_threshold) {                    val &= ~MCI_CTL2_CMCI_THRESHOLD_MASK;                    val |= CMCI_THRESHOLD;            } else if (!(val & MCI_CTL2_CMCI_THRESHOLD_MASK)) {                    /*                     * If bios_cmci_threshold boot option was specified                     * but the threshold is zero, we"ll try to initialize                     * it to 1.                     */                    bios_zero_thresh = 1;                    val |= CMCI_THRESHOLD;            }

如果用户未通过启动参数"mce=bios_cmci_threshold"配置值,则val = CMCI_THRESHOLD,为1;

如果启动参数"mce=bios_cmci_threshold"配置,那么表示bios已配置threshold值,即val & MCI_CTL2_CMCI_THRESHOLD_MASK不为0,跳过else if判断,采用bios配置值;如果bios未配置值,val & MCI_CTL2_CMCI_THRESHOLD_MASK为0,那么驱动初始化threshold为1。

4.cmci_recheck()

cmci_recheck函数通过调用machine_check_poll(),检查CPU #0是否有遗漏的CE&UCE events。

CMCI处理

cmci中断处理函数为intel_threshold_interrupt(),定义在arch/x86/kernel/cpu/mce/intel.c

C++/* * The interrupt handler. This is called on every event. * Just call the poller directly to log any events. * This could in theory increase the threshold under high load, * but doesn"t for now. */static void intel_threshold_interrupt(void){        if (cmci_storm_detect())                return;        machine_check_poll(MCP_TIMESTAMP, this_cpu_ptr(&mce_banks_owned));}machine_check_poll(MCP_TIMESTAMP, this_cpu_ptr(&mce_banks_owned));

1.cmci_storm_detect()函数主要是对cmci storm的处理,代码如下

C++static bool cmci_storm_detect(void){unsigned int cnt = __this_cpu_read(cmci_storm_cnt);unsigned long ts = __this_cpu_read(cmci_time_stamp);unsigned long now = jiffies;int r;

if (__this_cpu_read(cmci_storm_state) != CMCI_STORM_NONE)            return true;    if (time_before_eq(now, ts + CMCI_STORM_INTERVAL)) {            cnt++;    } else {            cnt = 1;            __this_cpu_write(cmci_time_stamp, now);    }    __this_cpu_write(cmci_storm_cnt, cnt);    if (cnt <= CMCI_STORM_THRESHOLD)            return false;    cmci_toggle_interrupt_mode(false);    __this_cpu_write(cmci_storm_state, CMCI_STORM_ACTIVE);    r = atomic_add_return(1, &cmci_storm_on_cpus);    mce_timer_kick(CMCI_STORM_INTERVAL);    this_cpu_write(cmci_backoff_cnt, INITIAL_CHECK_INTERVAL);    if (r == 1)            pr_notice("CMCI storm detected: switching to poll mode\n");    return true;    }

该函数通过jiffies,判断固定时间内发生的cmci次数是否大于CMCI_STORM_THRESHOLD(15),如果否则return,反之说明发生cmci storm,则执行cmci_toggle_interrupt_mode()关闭cmci功能, 切换为poll mode,通过轮询方式获取event;

2.非cmci storm情况下,通过machine_check_poll(MCP_TIMESTAMP, this_cpu_ptr(&mce_banks_owned))函数获取并记录故障信息

参数1定义如下,MCP_TIMESTAMP表示会记录当前TSC

C++enum mcp_flags {        MCP_TIMESTAMP   = BIT(0),       /* log time stamp */        MCP_UC          = BIT(1),       /* log uncorrected errors */        MCP_DONTLOG     = BIT(2),       /* only clear, don"t log */};

machine_check_poll函数主要功能是通过读取IA32_MCG_STATUS、IA32_MCi_STATUS寄存器信息和CPU的ip、cs等相关信息,然后故障分类,将CE event或其他故障类型event记录到/dev/mcelog。用户可以通过读取/dev/mcelog获取错误记录。

执行流程如下,过程说明在代码注释中

C++bool machine_check_poll(enum mcp_flags flags, mce_banks_t *b){        if (flags & MCP_TIMESTAMP)                m.tsc = rdtsc(); // 记录当前TSC/*CE Error记录*/                /* If this entry is not valid, ignore it */                if (!(m.status & MCI_STATUS_VAL))                        continue;                /*                 * If we are logging everything (at CPU online) or this                 * is a corrected error, then we must log it.                 */                if ((flags & MCP_UC) || !(m.status & MCI_STATUS_UC))                        goto log_it;/*UCNA Error记录*/                /*                 * Log UCNA (SDM: 15.6.3 "UCR Error Classification")                 * UC == 1 && PCC == 0 && S == 0                 */                if (!(m.status & MCI_STATUS_PCC) && !(m.status & MCI_STATUS_S))                        goto log_it;/*通过mce_log记录故障信息*/log_it:                         /*                 * Don"t get the IP here because it"s unlikely to                 * have anything to do with the actual error location.                 */                if (!(flags & MCP_DONTLOG) && !mca_cfg.dont_log_ce)                        mce_log(&m);                else if (mce_usable_address(&m)) {                        /*                         * Although we skipped logging this, we still want                         * to take action. Add to the pool so the registered                         * notifiers will see it.                         */                        if (!mce_gen_pool_add(&m))                                mce_schedule_work();                }        }

总结一下,CMCI是MCA的一个增强特性,主要用于将硬件CE、UCNA等类型故障通过中断方式上报到软件,软件收到中断后,执行中断处理函数intel_threshold_interrupt()采取irq mode或poll mode记录错误信息到/dev/mcelog,用户态可以通过/dev/mcelog获取硬件故障信息。

参考文档:《Intel® 64 and IA-32 Architectures Software Developer’s Manual 》

标签:

RAS:Intel MCA-CMCI,你了解吗?

Correctedmachine-checkerrorinterrupt(CMCI)是MCA的增强特性,它提供

07-11 11:16:19

赵心喜:当好“领头雁”干出新业绩

赵心喜树立成功创业村民典型,引导村民建起香菇大棚,发展特色种植业。

07-11 10:45:54

诗丨毛一民:成长的样子

火苗里暗藏嶙峋的手干柴里暗藏灼人的舌头手指头长着锋利的牙齿小时候围

07-11 10:28:58

瓦格纳事件后 普京会见普里戈任等瓦格纳领导层成员

新华社莫斯科7月10日电(记者刘恺)俄罗斯总统新闻秘书佩斯科夫10日对

07-11 10:12:32

中国五冶集团将承建宜宾岷江新区数字文化中心(一期)项目

近日,中国五冶集团中标宜宾市翠屏区岷江新区数字文化中心建设项目(一

07-11 09:36:56

麻辣女兵汤小米跳街舞 麻辣女兵汤小米)

hello大家好,我是城乡经济网小晟来为大家解答以上问题,麻辣女兵汤小

07-11 09:11:48

2022年中国吸引外国直接投资达创纪录1891亿美元,外交部回应

【环球时报-环球网报道记者陈青青】在7月10日举行的外交部例行记者会上

07-11 08:54:40

来水偏枯拖累业绩 黔源电力上半年净利润预减

黔源电力业绩大幅预减引发市场关注。7月10日,黔源电力发布业绩预告显

07-11 08:17:01

丁香花什么季节开的最旺盛(丁香花什么季节开花)

丁香花什么季节开的最旺盛,丁香花什么季节开花这个很多人还不知道,现

07-11 07:09:41

美联储博斯蒂克表示:如果通胀预期失锚可能需要进一步采取利率措施

美联储博斯蒂克表示:如果通胀预期失锚可能需要进一步采取利率措施:美

07-11 06:02:53

花旗“唱多”欧股:相对美股,欧股从未如此便宜

花旗“唱多”欧股:相对美股,欧股从未如此便宜

07-11 04:51:07

华东交通大学理工学院宿舍(华东交通大学理工学院分数线)

大家好,小福来为大家解答以上的问题。华东交通大学理工学院宿舍,华东

07-11 01:14:39

拒绝切尔西!拒绝大巴黎!罗马核心留队,迪巴拉只相信穆里尼奥

从数据来看,迪巴拉上赛季在罗马打进了18粒进球,送出了7次助攻,其中

07-10 22:40:52

我国基本医疗保险参保人数134592万人,参保率稳在95%以上

我国基本医疗保险参保人数134592万人,参保率稳在95%以上,7月10日消息

07-10 21:41:58

尖椒肉丝卤怎么做不辣_尖椒肉丝卤怎么做

1、配料:辣椒,瘦肉。2、辅料:姜、淀粉、油、酱油、盐、味精。3、生

07-10 20:44:13

1688新增化妆品行业管理规范

7月10日消息,1688平台发布化妆品行业管理规范,本规范于2023年7月9日

07-10 19:54:10

环亚国际医疗集团(01143.HK)延长配售不超3450.58万股最后截止日期

来源:格隆汇格隆汇7月10日丨环亚国际医疗集团(01143 HK)公告,延长配

07-10 19:23:41

俄总统新闻秘书:普京已于6月29日会见瓦格纳组织创始人普里戈任,会见持续3小时

△普里戈任(资料图)当地时间7月10日,俄罗斯总统新闻秘书佩斯科夫表

07-10 18:55:36

跨界!伊藤美诚接受拳击训练反哺乒乓球母亲说只有她战胜国乒

拳击和乒乓球对步伐要求很高,这两者都要求脚要比手快,在出手之前,你

07-10 18:36:27

漫步者:预计上半年净利润同比增长60%-70%

南方财经7月10日电,漫步者公告,预计上半年净利润1 7亿元-1 8亿元,同

07-10 17:50:55

河南省第十五届见义勇为英雄模范表彰大会举行,这些人获表彰

河南日报客户端记者王斌7月10日,记者从河南省第十五届见义勇为英雄模

07-10 17:23:58

半决赛直播乒乓球(半决赛)

您好,现在农农来为大家解答以上的问题。半决赛直播乒乓球,半决赛相信

07-10 16:52:23

传媒板块涨1.72% 幸福蓝海涨20.04%居首

传媒板块涨1 72%幸福蓝海涨20 04%居首

07-10 16:50:16

金发拉比:实控人之一林浩亮拟减持公司不超6%股份

金发拉比(002762)7月10日晚间公告,持股27 29%的公司大股东之一林浩亮

07-10 16:16:07

iPhone 15已量产 iPhone 14清仓价4888

iPhone15已经开始进入即将量产的阶段,而上一代的iPhone14现在售价已降

07-10 15:44:44

原神寄想者剧场南礼券位置大全 寄想者剧场南礼券全收集攻略[多图]

原神寄想者剧场南礼券在哪?找到礼券成功收集一定的数量之后,大家可以

07-10 15:26:45

美心翼申IPO获北交所受理:从二次挂牌新三板到受理仅用一年时间

美心翼申IPO获北交所受理:从二次挂牌新三板到受理仅用一年时间2023 7

07-10 14:58:45

教师简历模板,精选600套免费分享给大家

什么样的简历是比较失败的:辣眼的配色、缺乏逻辑的内容布局、永远填不

07-10 14:19:56

东风日产启辰首款插混SUV上市,易车将对其进行十万公里长测

7月8日,东风日产启辰大V DD-i超混动新车上市发布会在海南三亚隆重

07-10 13:43:31

【深化精神文明创建活动】以传统节日群众文化活动 助力文明村镇创建

文明村镇创建活动,是实施乡村振兴战略的有效途径,是群众性精神文明创

07-10 13:07:11

【强信心 起好步 开新局】新疆首个多能互补清洁能源基地投用

近日,华电北疆乌鲁木齐100万千瓦风光基地项目全容量并网发电,该项目

07-10 12:04:34

2000万人次!全国第十家!又一条新航线开通

随着暑运旺季到来西安咸阳国际机场单日航班量和客运量屡创新高截至7月7

07-10 11:52:24

新剧启动,再续前缘!肖战与王楚然领衔主演《怜星》

新剧启动,再续前缘!肖战与王楚然领衔主演《怜星》,肖战,怜星,王楚然,

07-10 11:20:32

氯喹的别名叫什么 ?磷酸氯喹和硫酸羟氯喹有什么不同?

在当前全球新型冠状病毒肺炎快速蔓延之际,寻找开发治疗新冠肺炎的有效

07-10 10:47:50

最低109.92分!6003人入围本市2023年积分落户公示名单

7月10日,北京市人力资源和社会保障局发布消息,本市2023年积分落户申

07-10 10:15:17

最新国产鱼粉价格(7月10日)

中国饲料行业信息网最新国产鱼粉价格:山东荣成地区63%蛋白TVN150的国

07-10 10:11:35

台灯的英语单词怎么写(ldquo 台灯 rdquo 用英语怎么说)

来为大家解答以下的问题,灯的英语单词怎么写,ldquo台灯rdquo用英语怎

07-10 09:59:28

回盛生物(300871)7月7日主力资金净买入90.49万元

截至2023年7月7日收盘,回盛生物(300871)报收于元,上涨%,换手率%,成

07-10 09:15:29

深交所:港股通标的证券名单发生调整并自2023年07月10日起生效,调入山高新能源(新)

深交所公告,港股通标的证券名单发生调整并自2023年07月10日起生效,调

07-10 08:43:13

国脉科技(002093.SZ)发预增,预计上半年净利润5000-7000万元 增长49.04%-108.65%

智通财经讯,国脉科技(002093 SZ)发布2023年半年度业绩预告,预计上半

07-10 08:02:42

oppor9s怎么查出厂日期(oppor9怎么看出厂日期)

手机生产日期可以通过以下方法查看:1、手机包装盒上有标注合格证日期

07-10 06:52:09

楼市政策应强化中长期调节

今年以来,已有100多个城市出台房地产调控政策超300次,对稳定楼市起到

07-10 05:34:43

火箭vs老鹰录像(火箭vs老鹰全场录像)

【特雷-杨28+11格林41分老鹰130-114火箭】老鹰客场战胜火箭,送对手7连

07-10 01:49:40

又来两家,退退退!

7月9日晚间,已锁定退市的深南退(002417)、腾信退(300392)齐发摘牌公告

07-09 22:15:02

高温天出现热痉挛患者,医生:不及时处理威胁生命

多日气温居高不下,多地出现了多例热痉挛患者。对此,多位专家表示,热

07-09 21:39:11

打卡武清“洋火夜市” 藏不住的夏日美好

如不能正常浏览请选用IE浏览器  天津北方网讯:昨天节目里咱们给大家

07-09 20:07:08

被窝整装施工交付2023年年中大会“同心同梦 戮力翻山”顺利举行

7月8日,被窝整装于京举办“同心同梦戮力翻山”施工交付2023年年中大会

07-09 18:56:26

神奇生物在哪里?来看海南热带雨林国家公园动植物资源宝库

盛夏时节,感受雨林清凉,一起走进海南热带雨林国家公园。海南热带雨林

07-09 17:50:16

《咩咕咪大冒险》第七章:原本的力量

“这个身体是我的!”亚尔维斯的声音渐渐的盖过了魔王的声音,似乎夺回

07-09 16:35:39

固态电池又突破了?丰田释放一个烟雾弹 中国要走自己的路

照自己研发节奏,有自己的独立思考,有经过市场验证过的技术路线与模式

07-09 15:26:12

赵心喜:当好“领头雁”干出新业绩
诗丨毛一民:成长的样子
瓦格纳事件后 普京会见普里戈任等瓦格纳领导层成员
中国五冶集团将承建宜宾岷江新区数字文化中心(一期)项目
麻辣女兵汤小米跳街舞 麻辣女兵汤小米)
2022年中国吸引外国直接投资达创纪录1891亿美元,外交部回应
来水偏枯拖累业绩 黔源电力上半年净利润预减
丁香花什么季节开的最旺盛(丁香花什么季节开花)
美联储博斯蒂克表示:如果通胀预期失锚可能需要进一步采取利率措施
花旗“唱多”欧股:相对美股,欧股从未如此便宜
华东交通大学理工学院宿舍(华东交通大学理工学院分数线)
拒绝切尔西!拒绝大巴黎!罗马核心留队,迪巴拉只相信穆里尼奥
我国基本医疗保险参保人数134592万人,参保率稳在95%以上
尖椒肉丝卤怎么做不辣_尖椒肉丝卤怎么做
1688新增化妆品行业管理规范
环亚国际医疗集团(01143.HK)延长配售不超3450.58万股最后截止日期
俄总统新闻秘书:普京已于6月29日会见瓦格纳组织创始人普里戈任,会见持续3小时
跨界!伊藤美诚接受拳击训练反哺乒乓球母亲说只有她战胜国乒
漫步者:预计上半年净利润同比增长60%-70%
河南省第十五届见义勇为英雄模范表彰大会举行,这些人获表彰
半决赛直播乒乓球(半决赛)
传媒板块涨1.72% 幸福蓝海涨20.04%居首
金发拉比:实控人之一林浩亮拟减持公司不超6%股份
iPhone 15已量产 iPhone 14清仓价4888
原神寄想者剧场南礼券位置大全 寄想者剧场南礼券全收集攻略[多图]
美心翼申IPO获北交所受理:从二次挂牌新三板到受理仅用一年时间
教师简历模板,精选600套免费分享给大家
东风日产启辰首款插混SUV上市,易车将对其进行十万公里长测
【深化精神文明创建活动】以传统节日群众文化活动 助力文明村镇创建
【强信心 起好步 开新局】新疆首个多能互补清洁能源基地投用
2000万人次!全国第十家!又一条新航线开通
新剧启动,再续前缘!肖战与王楚然领衔主演《怜星》
氯喹的别名叫什么 ?磷酸氯喹和硫酸羟氯喹有什么不同?
最低109.92分!6003人入围本市2023年积分落户公示名单
最新国产鱼粉价格(7月10日)
台灯的英语单词怎么写(ldquo 台灯 rdquo 用英语怎么说)
回盛生物(300871)7月7日主力资金净买入90.49万元
深交所:港股通标的证券名单发生调整并自2023年07月10日起生效,调入山高新能源(新)
国脉科技(002093.SZ)发预增,预计上半年净利润5000-7000万元 增长49.04%-108.65%
oppor9s怎么查出厂日期(oppor9怎么看出厂日期)
楼市政策应强化中长期调节
火箭vs老鹰录像(火箭vs老鹰全场录像)
又来两家,退退退!
高温天出现热痉挛患者,医生:不及时处理威胁生命
打卡武清“洋火夜市” 藏不住的夏日美好
被窝整装施工交付2023年年中大会“同心同梦 戮力翻山”顺利举行
神奇生物在哪里?来看海南热带雨林国家公园动植物资源宝库
《咩咕咪大冒险》第七章:原本的力量
固态电池又突破了?丰田释放一个烟雾弹 中国要走自己的路
保仕婷药效_保仕婷的功效是什么
X 广告
资讯
X 广告

Copyright ©  2015-2022 东北畜牧网版权所有  备案号:京ICP备12018864号-9   联系邮箱:2913236@qq.com