精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

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

開發 項目管理
CMCI是MCA的一個增強特性,主要用于將硬件CE、UCNA等類型故障通過中斷方式上報到軟件,軟件收到中斷后,執行中斷處理函數intel_threshold_interrupt()采取irq mode或poll mode記錄錯誤信息到/dev/mcelog,用戶態可以通過/dev/mcelog獲取硬件故障信息。

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.c void 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 》

責任編輯:武曉燕 來源: Linux閱碼場
相關推薦

2014-04-17 16:42:03

DevOps

2012-09-06 17:54:28

2022-07-26 00:00:22

HTAP系統數據庫

2021-11-09 09:48:13

Logging python模塊

2018-02-02 10:56:19

屏蔽機房擴建

2010-09-06 14:03:06

PPP身份認證

2021-01-15 07:44:21

SQL注入攻擊黑客

2019-10-31 08:36:59

線程內存操作系統

2021-01-12 12:07:34

Linux磁盤系統

2023-03-16 10:49:55

2014-11-28 10:31:07

Hybrid APP

2020-02-27 10:49:26

HTTPS網絡協議TCP

2021-03-28 09:26:30

HttpHttp協議網絡協議

2019-09-16 08:40:42

2012-09-27 10:24:22

監控機房

2012-05-31 09:56:54

云安全

2022-12-12 08:46:11

2022-03-14 07:53:27

ELTETL大數據

2021-08-11 10:00:51

緩存MyBatis管理

2015-07-31 10:35:18

實時計算
點贊
收藏

51CTO技術棧公眾號

久久精品在线免费观看| 欧美深夜福利| 欧美精品三级日韩久久| 在线视频福利一区| 韩国av免费在线| 久久字幕精品一区| 久久精品中文字幕| 国产精品边吃奶边做爽| 久久69成人| 午夜精品久久久久久久久久| 亚洲国产古装精品网站| 日韩欧美在线播放视频| 日本中文在线| 91在线精品一区二区| 国产在线拍偷自揄拍精品| 精品无码一区二区三区电影桃花| 国产成人影院| 欧美大片在线观看| 亚洲色精品三区二区一区| 一区二区三区视频网站 | 国产成人av免费观看| 欧美激情网站| 亚洲免费视频成人| 欧美精品久久久| 国产福利小视频| 日韩高清不卡在线| 777午夜精品福利在线观看| 少妇的滋味中文字幕bd| 黑色丝袜福利片av久久| 欧美区在线观看| 成人毛片视频网站| 黄色在线论坛| 国产片一区二区三区| 国产精品国产三级欧美二区| 91精品人妻一区二区三区果冻| 欧美亚洲免费| 性色av一区二区三区免费| 成人午夜免费影院| 女厕嘘嘘一区二区在线播放 | 日本午夜在线视频| 国产精品1区二区.| 国产日产欧美精品| 国产成人麻豆免费观看| 在线亚洲自拍| 欧美激情伊人电影| www.色小姐com| 91亚洲国产高清| 在线观看91久久久久久| 91精品人妻一区二区三区| 色老板在线视频一区二区| 精品国产成人系列| 中文字幕人妻一区| 成人av影音| 亚洲高清一区二| 亚洲精品在线视频免费观看| 精品午夜电影| 亚洲国模精品私拍| 搡老熟女老女人一区二区| 日本久久成人网| 亚洲男人的天堂在线| 菠萝菠萝蜜网站| 美女少妇全过程你懂的久久| 亚洲欧美在线播放| 极品人妻videosss人妻| 狠狠做深爱婷婷综合一区| 亚洲小视频在线观看| 阿v天堂2014| 日韩在线高清| 欧美久久精品午夜青青大伊人| 欧美国产日韩在线观看成人| 欧美午夜视频| 欧美电影影音先锋| 免费成年人高清视频| 欧美视频精品| 日韩一区二区免费视频| 国产ts在线观看| 伦理一区二区三区| 亚洲人成电影在线观看天堂色| a视频免费观看| 亚洲免费专区| 久久久av免费| 日本午夜精品理论片a级app发布| 亚洲影视综合| 成人在线视频福利| 韩国av电影在线观看| 久久久美女毛片| 一区精品视频| 2018av在线| 欧洲视频一区二区| 99国产精品免费视频| 欧美1区二区| 一区二区三区天堂av| 国产盗摄x88av| 亚洲欧美日韩国产综合精品二区| 国产精品日韩专区| 国产刺激高潮av| 国产日韩精品一区| 99国产精品白浆在线观看免费| 中文在线а√在线8| 欧美精品精品一区| 800av在线播放| 久久中文字幕av| 久久免费少妇高潮久久精品99| 成人av网站在线播放| 国产在线观看一区二区| 欧美日韩综合精品| 性国产高清在线观看| 91福利国产成人精品照片| 亚洲欧美日韩中文字幕在线观看| 欧美理论电影大全| 亚州国产精品久久久| 91tv国产成人福利| 久久奇米777| 欧美一级免费播放| 亚洲高清国产拍精品26u| 日韩av影视综合网| 午夜69成人做爰视频| 美女视频黄 久久| 精品国内自产拍在线观看| 成人性色av| 国产综合在线观看| 亚洲综合一区二区| 尤蜜粉嫩av国产一区二区三区| 亚洲精品国产九九九| 影音先锋日韩有码| 亚洲男人的天堂在线视频| 国产精品一品二品| 亚洲国产精品一区二区第四页av| av毛片午夜不卡高**水| 欧美一级夜夜爽| 粉嫩精品久久99综合一区| 亚洲少妇在线| 国产91亚洲精品一区二区三区| 午夜不卡视频| 欧美在线观看一区二区| 极品粉嫩小仙女高潮喷水久久| 欧美三级免费| 91在线观看免费网站| 日本在线视频观看| 欧美日本韩国一区二区三区视频| 国产一区二区三区四区五区六区| 欧美一级网站| 久久久久网址| 久久爱91午夜羞羞| 亚洲深夜福利视频| 好吊色在线视频| 久久先锋影音av| 国产毛片一区二区三区va在线| 亚洲欧美清纯在线制服| 99九九电视剧免费观看| 1区2区在线观看| 5月丁香婷婷综合| 日本成人精品视频| 麻豆成人久久精品二区三区小说| 日韩欧美精品在线不卡| 日韩av首页| 国产精品国产三级国产普通话蜜臀| 91视频 -- 69xx| 欧美一级三级| 青青草一区二区| 成人性生交大片免费看午夜| 亚洲欧洲av另类| 国产乱叫456| 欧美日韩蜜桃| 九色91国产| 成人自拍av| 色噜噜狠狠狠综合曰曰曰| 一区二区三区免费在线| 中文字幕一区免费在线观看| 亚洲一级片av| 国产精品videossex久久发布| 国产99在线免费| 中文在线а√在线8| 国产亚洲欧洲高清| 97在线播放免费观看| 一区二区三区中文在线| 国产伦精品一区二区免费| 国产一区二区三区久久久久久久久 | 最新黄网在线观看| 亚洲电影免费观看| 色老头在线视频| 亚洲色图视频网站| 少妇被狂c下部羞羞漫画| 日韩av一级片| 白白操在线视频| 国产日产一区| 91嫩草视频在线观看| 小视频免费在线观看| 日韩一区视频在线| 香蕉视频黄在线观看| 欧美日韩视频在线第一区| 免费一级肉体全黄毛片| 国产色一区二区| 亚洲熟女乱综合一区二区| 蜜桃久久av| 91精品一区二区三区四区| 亚洲精品亚洲人成在线观看| 91欧美激情另类亚洲| 2022成人影院| 九九九久久久久久| 草草影院在线观看| 亚洲国产精品资源| 国产理论片在线观看| 色综合天天综合网天天狠天天| 国产精品 欧美激情| 国产丝袜在线精品| 日韩少妇一区二区| 国产在线日韩欧美| 日韩免费高清在线| 99视频一区| www.18av.com| 欧美残忍xxxx极端| 欧美亚洲国产免费| 高清日韩欧美| 91网在线免费观看| 成人黄页网站视频| 日韩av三级在线观看| www.youjizz.com在线| 大胆人体色综合| 香蕉视频在线播放| 亚洲人成电影网站色xx| 亚洲 另类 春色 国产| 欧美成人女星排行榜| 91亚洲国产成人久久精品麻豆| 日本电影亚洲天堂一区| 圆产精品久久久久久久久久久| 一区二区三区四区不卡在线| 搜索黄色一级片| 国产精品护士白丝一区av| 青娱乐国产视频| 国产欧美日韩在线观看| 国精品无码人妻一区二区三区| 成人av在线影院| 韩国三级视频在线观看| 国产成人精品亚洲午夜麻豆| 亚洲性图一区二区| 免费av网站大全久久| 欧美日韩怡红院| 日韩制服丝袜av| 国产97色在线 | 日韩| 老司机亚洲精品| 天天天干夜夜夜操| 老牛嫩草一区二区三区日本| 日本成人黄色网| 日一区二区三区| 国产av人人夜夜澡人人爽| 久久久噜噜噜| www.天天射.com| 另类小说欧美激情| 欧美视频亚洲图片| 国产成人免费在线| 久久久久久婷婷| 91免费国产在线观看| 一区二区黄色片| 欧美国产一区在线| 战狼4完整免费观看在线播放版| 国产精品不卡在线观看| 小泽玛利亚一区二区免费| 亚洲精品一二三| 久青草视频在线观看| 亚洲va欧美va国产va天堂影院| 日本系列第一页| 色狠狠一区二区| 亚洲一区二区天堂| 日韩一级片网站| 五月天激情婷婷| 国产亚洲精品久久久| 久久久久久久久免费视频| 欧美高清视频一区二区| 国产粉嫩在线观看| 热久久99这里有精品| 国产黄色精品| 国产高清一区视频| 网红女主播少妇精品视频| 四虎影院一区二区三区| 亚洲综合中文| 久久久久久久午夜| 美国毛片一区二区三区| 免费黄色av网址| 久久久亚洲午夜电影| 搜索黄色一级片| 欧美日韩裸体免费视频| 又骚又黄的视频| 亚洲爱爱爱爱爱| h视频网站在线观看| 欧美华人在线视频| abab456成人免费网址| 99三级在线| av影片在线一区| 青青草国产免费| 久久婷婷蜜乳一本欲蜜臀| 成人av在线播放观看| 久久亚洲风情| 无码人妻丰满熟妇啪啪网站| 国产日韩欧美一区二区三区综合| 国产精品老熟女一区二区| 色哟哟国产精品免费观看| h片在线免费看| 国产亚洲xxx| 国产黄大片在线观看| 成人xxxxx| 国产区精品区| 成人在线观看你懂的| 国产综合色视频| mm131丰满少妇人体欣赏图| 亚洲资源在线观看| 中文字幕永久在线观看| 日韩精品在线播放| 色呦呦在线视频| 91精品国产综合久久香蕉的用户体验| 美女av一区| 喜爱夜蒲2在线| 麻豆国产一区二区| 亚洲人成人无码网www国产| 亚洲高清免费观看高清完整版在线观看| 中文字幕免费播放| 亚洲欧美另类中文字幕| 51精品视频| 高清国产在线一区| 久久久久蜜桃| 日本三级黄色网址| 国产欧美一区在线| av网站中文字幕| 亚洲精品美女久久久久| 美女精品导航| 91视频免费进入| 综合久久婷婷| 亚洲一区二区中文字幕在线观看| 国产女人18毛片水真多成人如厕| 91美女免费看| 精品无人区太爽高潮在线播放| 97蜜桃久久| 国产精品久久久对白| 人人澡人人添人人爽一区二区| 婷婷国产v国产偷v亚洲高清| 欧美日韩国产成人在线免费| 99在线小视频| 中文字幕日韩欧美在线| www.成人爱| 精品一区二区不卡| 亚洲精品美女| 久久精品女同亚洲女同13| 亚洲成人激情av| 国产91免费看| 午夜美女久久久久爽久久| 成人性生交大片免费看中文视频| 免费的一级黄色片| 国产a久久麻豆| 国产在线拍揄自揄拍| 欧美一区二区三区四区五区 | 一本色道久久88综合日韩精品| 三上悠亚国产精品一区二区三区| 久久99精品久久久久久青青日本| 国产欧美不卡| a级大片在线观看| 在线看日韩精品电影| av大片在线播放| 成人免费在线视频网站| 亚洲色图88| 在线xxxxx| 色婷婷综合久久久久中文一区二区 | 成人动漫在线一区| 日本特黄特色aaa大片免费| 亚洲精品v天堂中文字幕 | 欧美午夜美女看片| 国产理论电影在线观看| 国产精品亚洲综合天堂夜夜| 欧美电影免费观看高清| 久久精品无码一区二区三区毛片| 一区二区三区欧美视频| 天天干天天草天天射| 国产精品6699| 亚洲天堂一区二区三区四区| 永久免费未满蜜桃| 色悠悠亚洲一区二区| 日韩三级影院| 国产精品福利视频| 爽好久久久欧美精品| 欧美色视频一区二区三区在线观看 | 黑鬼大战白妞高潮喷白浆| 中文字幕一区二区三区在线观看| www.超碰在线.com| 国产成人精品一区二区| 午夜精品久久久久久久四虎美女版| 日批视频免费看| 在线视频综合导航| 中文字幕在线播放网址| 鲁丝片一区二区三区| 精品无码三级在线观看视频| 日本系列第一页| 爱福利视频一区| 精品久久对白| 亚洲妇熟xx妇色黄蜜桃| 精品久久久久久久久久国产 | 亚洲男人都懂的| 九色网友自拍视频手机在线| 97人人香蕉| 蜜臀91精品一区二区三区| 日本熟伦人妇xxxx| 久久亚洲精品一区|