色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Intel MCA-CMCI初探

Linux閱碼場(chǎng) ? 來源:Linux閱碼場(chǎng) ? 2023-07-11 09:57 ? 次閱讀

RAS(三)Intel MCA-CMCI

Corrected machine-check error interrupt (CMCI)是MCA的增強(qiáng)特性,它提供了一種threshold-based的錯(cuò)誤上報(bào)方式。這種模式下,軟件可以配置硬件corrected MC errors的閾值,硬件發(fā)生CE(Corrected Error)次數(shù)達(dá)到閾值后,會(huì)產(chǎn)生一個(gè)中斷通知到軟件處理。

值得一提的是,CMCI是隨MCA加入的特性,最開始只能通過軟件輪詢方式獲取CE信息。CMCI中斷通知方式的優(yōu)點(diǎn)是每個(gè)CE都會(huì)經(jīng)過IRQ Handle處理,不會(huì)丟失任一CE;而輪詢方式可能因?yàn)檩喸冾l率低、存儲(chǔ)空間有限等原因,導(dǎo)致丟失CE。但是并不是說CMCI最優(yōu),CMCI的缺點(diǎn)是大量CE會(huì)產(chǎn)生中斷風(fēng)暴,影響機(jī)器的性能。不幸的是在云服務(wù)器場(chǎng)景,CE風(fēng)暴是比較常見的,那么當(dāng)下Intel服務(wù)器是如何解決這個(gè)問題的呢?下面會(huì)講到。

CMCI機(jī)制

CMCI默認(rèn)是關(guān)閉的,軟件需要通過配置IA32_MCG_CAP[10] = 1打開。

軟件通過IA32_MCi_CTL2 MSR來控制對(duì)應(yīng)Bank使能/關(guān)閉CMCI功能。

通過IA32_MCi_CTL2 Bit 14:0設(shè)置閾值,如果設(shè)置非0,則使用配置的閾值;如果CMCI不支持,則全0;

CMCI機(jī)制如下圖

cd513352-1f88-11ee-962d-dac502259ad0.png

硬件通過比較IA32_MCi_CTL2 Bit 14:0和IA32_MCi_STATUS Bit 52:38,如果數(shù)值相等,那么overflow event發(fā)送到APIC的CMCI LVT entry。如果MC error涉及多個(gè)processors,那么CMCI中斷會(huì)同時(shí)發(fā)送到這些processors,比如2個(gè)cpu共享的cache發(fā)生CE,那么這兩個(gè)cpu都會(huì)收到CMCI。

CMCI初始化

Linux v6.3分支為例,內(nèi)核使能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()函數(shù)主要事項(xiàng)包括

?根據(jù)內(nèi)核啟動(dòng)參數(shù)"mce=no_cmci,ignore_ce"判斷是否打開cmci和ce上報(bào)功能

?檢查硬件是否支持cmci

?通過MCG_CMCI_P bit判斷硬件是否使能cmci功能

2.mce_threshold_vector = intel_threshold_interrupt; 聲明cmci的中斷處理函數(shù)為intel_threshold_interrupt();

3.cmci_discover()函數(shù)主要完成

?遍歷所有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);

?設(shè)置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;
}

如果用戶未通過啟動(dòng)參數(shù)"mce=bios_cmci_threshold"配置值,則val = CMCI_THRESHOLD,為1;

如果啟動(dòng)參數(shù)"mce=bios_cmci_threshold"配置,那么表示bios已配置threshold值,即val & MCI_CTL2_CMCI_THRESHOLD_MASK不為0,跳過else if判斷,采用bios配置值;如果bios未配置值,val & MCI_CTL2_CMCI_THRESHOLD_MASK為0,那么驅(qū)動(dòng)初始化threshold為1。

4.cmci_recheck()

cmci_recheck函數(shù)通過調(diào)用machine_check_poll(),檢查CPU #0是否有遺漏的CE&UCE events。

CMCI處理

cmci中斷處理函數(shù)為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));
}

1.cmci_storm_detect()函數(shù)主要是對(duì)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 ");
return true;
}

該函數(shù)通過jiffies,判斷固定時(shí)間內(nèi)發(fā)生的cmci次數(shù)是否大于CMCI_STORM_THRESHOLD(15),如果否則return,反之說明發(fā)生cmci storm,則執(zhí)行cmci_toggle_interrupt_mode()關(guān)閉cmci功能, 切換為poll mode,通過輪詢方式獲取event;

2.非cmci storm情況下,通過machine_check_poll(MCP_TIMESTAMP, this_cpu_ptr(&mce_banks_owned))函數(shù)獲取并記錄故障信息

參數(shù)1定義如下,MCP_TIMESTAMP表示會(huì)記錄當(dāng)前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函數(shù)主要功能是通過讀取IA32_MCG_STATUS、IA32_MCi_STATUS寄存器信息和CPU的ip、cs等相關(guān)信息,然后故障分類,將CE event或其他故障類型event記錄到/dev/mcelog。用戶可以通過讀取/dev/mcelog獲取錯(cuò)誤記錄。

執(zhí)行流程如下,過程說明在代碼注釋中

C++
bool machine_check_poll(enum mcp_flags flags, mce_banks_t *b)
{
if (flags & MCP_TIMESTAMP)
m.tsc = rdtsc(); // 記錄當(dāng)前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();
}
}

總結(jié)一下,CMCI是MCA的一個(gè)增強(qiáng)特性,主要用于將硬件CE、UCNA等類型故障通過中斷方式上報(bào)到軟件,軟件收到中斷后,執(zhí)行中斷處理函數(shù)intel_threshold_interrupt()采取irq mode或poll mode記錄錯(cuò)誤信息到/dev/mcelog,用戶態(tài)可以通過/dev/mcelog獲取硬件故障信息。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11342

    瀏覽量

    210147
  • intel
    +關(guān)注

    關(guān)注

    19

    文章

    3483

    瀏覽量

    186304
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    900

    瀏覽量

    41649
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2114

    瀏覽量

    73792
  • MCA
    MCA
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    9191

原文標(biāo)題:RAS(三)Intel MCA-CMCI

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MCA將為臨床醫(yī)護(hù)帶來革命

    伴隨INTEL數(shù)字醫(yī)療團(tuán)隊(duì)的努力,MCA(移動(dòng)醫(yī)護(hù)助手)已經(jīng)在歐美取得了巨大的成功,明顯提升醫(yī)護(hù)人員工作效率,進(jìn)一步降低醫(yī)患糾紛等.在不久的將來,伴隨我國(guó)醫(yī)療改革的深入開展,這種產(chǎn)品將廣泛使用于醫(yī)療衛(wèi)生系統(tǒng).
    發(fā)表于 12-10 14:41

    TETRACAM全新的Micro-MCA 和Micro-MCA Snap系列產(chǎn)品

    數(shù)據(jù)支持,強(qiáng)悍的技術(shù)和產(chǎn)品質(zhì)量,TETRACAM能夠充分滿足航拍,水體,野外,實(shí)驗(yàn)室等各類環(huán)境,包括各類復(fù)雜的工業(yè)環(huán)境。 TETRACAM推出了全新的Micro-MCA 和Micro-MCA Snap
    發(fā)表于 12-12 17:31

    MATLAB中.mca文件如何打開

    數(shù)據(jù)都包含在一個(gè).mca文件中,但是這個(gè)文件用matlab打開是一堆亂碼,請(qǐng)問大佬們?nèi)绾潍@取.mca文件里面的數(shù)據(jù)。
    發(fā)表于 01-23 14:15

    5402A MCA/Basic System操作和維修手冊(cè)

    05402-90010 (July 1971) The 5402A MCA/Basic System is a discontinued product. This manual is provided for information only.
    發(fā)表于 11-01 11:42

    美國(guó)泰克(Tektronix)MCA3027微波計(jì)數(shù)器 MCA3027 泰克MCA3027計(jì)數(shù)器

    `東莞市求購美國(guó)泰克(Tektronix)MCA3027微波計(jì)數(shù)器 MCA3027 泰克MCA3027計(jì)數(shù)器數(shù)量:5臺(tái),功能好壞都回收價(jià)格“1200元”電1-5-9-2-0-8-4-5-9-6-9
    發(fā)表于 04-11 21:45

    美國(guó)泰克MCA3027回收MCA3040微波計(jì)數(shù)器

    `MCA3027回收MCA3040微波計(jì)數(shù)器 MCA3027回收MCA3040微波計(jì)數(shù)器 PS:因市場(chǎng)行情變動(dòng),不能在線上提供準(zhǔn)確的價(jià)格,實(shí)際價(jià)格以儀器配置為準(zhǔn),不同的配置價(jià)格不同,不
    發(fā)表于 01-11 19:29

    電池的特型——初探

    電池的特型——初探1、電動(dòng)勢(shì)和內(nèi)電阻的概念;2、外電壓和干路電流的關(guān)系;3、電池的伏-安特型圖像。
    發(fā)表于 11-05 15:35 ?8次下載

    利用MCA技術(shù)對(duì)電機(jī)進(jìn)行故障診斷

    MCA技術(shù)是把電機(jī)視同于一個(gè)由電阻、電感和電容組成的復(fù)雜電路進(jìn)行分析,可以對(duì)電機(jī)進(jìn)行不解體狀態(tài)下的故障診斷。本文重點(diǎn)介紹MCA測(cè)試方法,及在電機(jī)故障診斷中的應(yīng)用。
    發(fā)表于 01-16 15:54 ?11次下載

    研祥終端MCA急救方案

    針對(duì)如何有效的利用搶救現(xiàn)場(chǎng)和途中的黃金時(shí)間,本文設(shè)計(jì)了研祥終端MCA急救方案。
    發(fā)表于 04-15 11:38 ?1118次閱讀

    步進(jìn)電機(jī)細(xì)分驅(qū)動(dòng)系統(tǒng)設(shè)計(jì)初探

    步進(jìn)電機(jī)細(xì)分驅(qū)動(dòng)系統(tǒng)設(shè)計(jì)初探,有需要的下來看看
    發(fā)表于 04-25 10:10 ?41次下載

    MCA_TouchProbeECAT探針是什么

    本節(jié)介紹另一個(gè)探針功能塊:MCA_TouchProbeECAT。 ECAT_CiA402_Touchprobe_App功能塊的輸入設(shè)置比較繁瑣且有冗余,以次功能塊為執(zhí)行內(nèi)核,精簡(jiǎn)輸入端子,二次開發(fā)
    發(fā)表于 03-08 13:56 ?638次閱讀

    功能塊MCA_CamInDirect的電子凸輪功能

    1_回顧及簡(jiǎn)介 從本節(jié)開始,將持續(xù)介紹基于功能塊MCA_CamInDirect的電子凸輪功能。 前面曾介紹過MCA_GearInDirect,MCA_CamInDirect與之特點(diǎn)近似,也是個(gè)急性子
    的頭像 發(fā)表于 04-30 16:12 ?1122次閱讀

    RAS(二)Intel MCA初探

    MCA(Machine Check Architecture)是Intel Xeon,Intel Atom和P6 family系列Processors支持的硬件錯(cuò)誤檢測(cè)、上報(bào)機(jī)制,硬件錯(cuò)誤包括
    的頭像 發(fā)表于 07-10 10:35 ?1704次閱讀
    RAS(二)<b class='flag-5'>Intel</b> <b class='flag-5'>MCA</b><b class='flag-5'>初探</b>

    基于Android的應(yīng)用軟件開發(fā)實(shí)例初探

    電子發(fā)燒友網(wǎng)站提供《基于Android的應(yīng)用軟件開發(fā)實(shí)例初探.pdf》資料免費(fèi)下載
    發(fā)表于 10-09 16:57 ?0次下載
    基于Android的應(yīng)用軟件開發(fā)實(shí)例<b class='flag-5'>初探</b>

    skill語言及IPC初探.zip

    skill語言及IPC初探
    發(fā)表于 12-30 09:20 ?8次下載
    主站蜘蛛池模板: 国产一区二区在线免费观看 | 国产精品久久久久久久久免费下载 | 先锋影音av无码第1页 | 日本人xxxⅹ18hd19hd | 果冻传媒在线完整免费播放 | 精品人伦一区二区三区潘金莲 | xvideos中文版在线视频 | 成人免费肉动漫无遮网站 | 日韩成人黄色 | 亚洲精品成人A8198A片漫画 | 欧洲另类一二三四区 | 久久亚洲AV成人无码国产漫画 | 有人有片的观看免费视频 | 双性被疯狂灌满精NP | 午夜射精日本三级 | 97色伦图片97色伦图影院久久 | 熟女人妻-蜜臀AV-首页 | 欧美伊人久久大香线蕉综合69 | 顶级欧美不卡一区二区三区 | 最新 国产 精品 精品 视频 | 日本无码专区亚洲麻豆 | 日韩精品欧美在线视频在线 | 自拍黄色片 | 无码天堂亚洲国产AV久久 | 高清国产免费观看视频在线 | 国产女人与黑人在线播放 | 在线观看成人3d动漫入口 | 亚洲 制服 欧美 中文字幕 | 色哦色哦哦色天天综合 | 老司机午夜影院试看区 | 99精品免费在线观看 | 亚洲一品AV片观看五月色婷婷 | 亚洲午夜久久影院 | 国产日韩亚洲专区无码 | 亚洲免费黄色片 | 99视频精品免视3 | 色戒西瓜视频 | 99精品久久| 国产午夜福利片 | 精品国产国偷自产在线观看 | 色女孩综合 |