基于tlb-miss的numa內(nèi)存管理容錯(cuò)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及處理器技術(shù)領(lǐng)域,具體涉及一種基于TLB-MISS的NUMA內(nèi)存管理容錯(cuò)方法。
【背景技術(shù)】
[0002]多核或者多處理器機(jī)器上具有多個(gè)內(nèi)存節(jié)點(diǎn)時(shí),可能由于內(nèi)存控制器芯片或者內(nèi)存顆粒故障導(dǎo)致某個(gè)或者某些內(nèi)存節(jié)點(diǎn)無(wú)法使用,如果處理器存儲(chǔ)控制器不具備自定義內(nèi)存地址能力,而是根據(jù)內(nèi)存控制器芯片編號(hào)或者內(nèi)存顆粒位置固定編排內(nèi)存物理地址,就將形成內(nèi)存地址空洞。
[0003]NUMA (Non-Uniform Memory Access,非統(tǒng)一內(nèi)存訪問(wèn))指的是這樣一種技術(shù),其中多核或者多處理器機(jī)器上具有多個(gè)內(nèi)存節(jié)點(diǎn),從處理器發(fā)出的對(duì)不同內(nèi)存節(jié)點(diǎn)的訪問(wèn)時(shí)間不相同。
[0004]NUMA操作系統(tǒng)一般提供了非連續(xù)物理地址的管理,但操作系統(tǒng)內(nèi)核自身卻必須處于從0開(kāi)始的低段物理內(nèi)存中。而操作系統(tǒng)內(nèi)核引導(dǎo)對(duì)物理地址的地址編排較為敏感,尤其是系統(tǒng)內(nèi)核自身所處內(nèi)存的物理地址。操作系統(tǒng)內(nèi)核通常假設(shè)自身所處的內(nèi)存位于從0開(kāi)始的物理內(nèi)存的低段內(nèi)存地址中,比如1MB的位置。如果機(jī)器上由于內(nèi)存空洞沒(méi)有配置這段物理地址,會(huì)導(dǎo)致內(nèi)核引導(dǎo)的失敗。
【發(fā)明內(nèi)容】
[0005]本發(fā)明所要解決的技術(shù)問(wèn)題是針對(duì)現(xiàn)有技術(shù)中存在上述缺陷,提出了一種基于TLB-MISS的NUMA內(nèi)存管理容錯(cuò)方法,從而解決了 NUMA操作系統(tǒng)上,由于內(nèi)存控制器故障或者顆粒故障導(dǎo)致低段物理地址缺失時(shí)的操作系統(tǒng)引導(dǎo)問(wèn)題。而且,根據(jù)本發(fā)明的基于TLB-MISS的NUMA內(nèi)存管理容錯(cuò)方法可以由處理器微代碼實(shí)現(xiàn),且對(duì)操作系統(tǒng)內(nèi)核完全透明。
[0006]根據(jù)本發(fā)明,提供了一種基于TLB-MISS的NUMA內(nèi)存管理容錯(cuò)方法,其特征在于包括:
[0007]第一步驟:處理器上電進(jìn)入微代碼處理入口 ;
[0008]第二步驟:判斷內(nèi)存在位情況,計(jì)算在位內(nèi)存物理地址中最低地址與0的差值;
[0009]第三步驟:保存所述差值;
[0010]第四步驟:清除處理器上所有TLB條目;
[0011]第五步驟:執(zhí)行處理器內(nèi)核的虛地址入口,以開(kāi)始運(yùn)行處理器內(nèi)核代碼;
[0012]第六步驟:在運(yùn)行處理器內(nèi)核代碼的過(guò)程中觸發(fā)處理器TLB-MISS異常,進(jìn)入TLB-MISS異常處理入口以執(zhí)行TLB-MISS異常處理程序;
[0013]第七步驟:在TLB-MISS異常處理程序中根據(jù)所述差值計(jì)算虛地址和物理地址的對(duì)應(yīng)關(guān)系,并根據(jù)所述對(duì)應(yīng)關(guān)系填入正確的TLB條目;
[0014]第八步驟:退出TLB-MISS異常處理程序,返回觸發(fā)TLB-MISS異常的代碼并重新執(zhí)行所述觸發(fā)TLB-MISS異常的代碼。
[0015]優(yōu)選地,在第三步驟將所述差值填入處理器內(nèi)部寄存器。
[0016]由此,本發(fā)明能夠有效地解決低段物理地址未配置的情況下操作系統(tǒng)內(nèi)核引導(dǎo)的容錯(cuò)問(wèn)題。具體地,根據(jù)本發(fā)明的基于TLB-MISS的NUMA內(nèi)存管理容錯(cuò)方法解決了 NUMA操作系統(tǒng)上,由于內(nèi)存控制器故障或者顆粒故障導(dǎo)致低段物理地址缺失時(shí)的操作系統(tǒng)引導(dǎo)問(wèn)題。而且,根據(jù)本發(fā)明的基于TLB-MISS的NUMA內(nèi)存管理容錯(cuò)方法可以由處理器微代碼實(shí)現(xiàn),且對(duì)操作系統(tǒng)內(nèi)核完全透明。
【附圖說(shuō)明】
[0017]結(jié)合附圖,并通過(guò)參考下面的詳細(xì)描述,將會(huì)更容易地對(duì)本發(fā)明有更完整的理解并且更容易地理解其伴隨的優(yōu)點(diǎn)和特征,其中:
[0018]圖1示意性地示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的基于TLB-MISS的NUMA內(nèi)存管理容錯(cuò)方法的流程圖。
[0019]需要說(shuō)明的是,附圖用于說(shuō)明本發(fā)明,而非限制本發(fā)明。注意,表示結(jié)構(gòu)的附圖可能并非按比例繪制。并且,附圖中,相同或者類(lèi)似的元件標(biāo)有相同或者類(lèi)似的標(biāo)號(hào)。
【具體實(shí)施方式】
[0020]為了使本發(fā)明的內(nèi)容更加清楚和易懂,下面結(jié)合具體實(shí)施例和附圖對(duì)本發(fā)明的內(nèi)容進(jìn)行詳細(xì)描述。
[0021 ] 操作系統(tǒng)所使用的內(nèi)存從邏輯上看有兩個(gè)方面,一是操作系統(tǒng)內(nèi)核自身所處的內(nèi)存,二是操作系統(tǒng)管理的可供分配的物理內(nèi)存。操作系統(tǒng)內(nèi)核自身也是一個(gè)可執(zhí)行文件構(gòu)成的,當(dāng)處理器引導(dǎo)時(shí),會(huì)有更加底層的Bootloader代碼(操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序)將內(nèi)核可執(zhí)行文件加載到固定的物理地址區(qū)域。通常情況下,Bootloader代碼和內(nèi)核均假設(shè)內(nèi)核所處的內(nèi)存物理地址是固定的,當(dāng)該段物理地址由于某種原因不存在時(shí),會(huì)發(fā)生引導(dǎo)故障。本發(fā)明提出的技術(shù)即針對(duì)上述情況。下面將描述本發(fā)明的具體優(yōu)選實(shí)施例。
[0022]圖1示意性地示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的基于TLB-MISS的NUMA內(nèi)存管理容錯(cuò)方法的流程圖。
[0023]如圖1所示,根據(jù)本發(fā)明優(yōu)選實(shí)施例的基于TLB-MISS的NUMA內(nèi)存管理容錯(cuò)方法包括:
[0024]第一步驟S1:處理器上電進(jìn)入微代碼處理入口 ;
[0025]第二步驟S2:判斷內(nèi)存的可訪問(wèn)情況(即,針對(duì)所有內(nèi)存判斷內(nèi)存是否可訪問(wèn)),并且計(jì)算在位內(nèi)存(即,可訪問(wèn)內(nèi)存)的物理地址中最低地址與0的差值;
[0026]其中,例如,可能由于部分內(nèi)存條未插在對(duì)應(yīng)的內(nèi)存插槽上而導(dǎo)致內(nèi)存區(qū)域不可訪問(wèn),或是例如由于某些焊接在PCB板上的內(nèi)存顆粒因?yàn)槟撤N故障導(dǎo)致的部分內(nèi)存區(qū)域不可問(wèn)。
[0027]第三步驟S3:保存所述差值;例如,可以在第三步驟S3將所述差值填入處理器內(nèi)部寄存器;
[0028]第四步驟S4:清除處理器上所有TLB條目;
[0029]其中,TLB (Translat1n Lookaside Buffer,段表后備緩沖器或翻譯后援緩沖器)是一種處理器內(nèi)部緩存,用于存放虛擬地址到物理地址的映射關(guān)系,而且還可用于存儲(chǔ)單元加速虛擬地址到物理地址的代換速度。
[0030]第五步驟S5:執(zhí)行處理器內(nèi)核程序的第一條指令,所述第一條指令的地址為虛地址(即,執(zhí)行處理器內(nèi)核的虛地址入口),由此開(kāi)始運(yùn)行處理器內(nèi)核代碼;
[0031]換言之,內(nèi)核的虛地址入口指的是內(nèi)核的第一條指令,該指令對(duì)應(yīng)的地址為虛地址。
[0032]第六步驟S6:在運(yùn)行處理器內(nèi)核代碼的過(guò)程中觸發(fā)處理器TLB-MISS異常,進(jìn)入TLB-MISS異常處理入口以執(zhí)行TLB-MISS異常處理程序;
[0033]“TLB-MISS”指的是處理器將虛擬地址在代換到物理地址時(shí),未在TLB中查找到代換關(guān)系。
[0034]第七步驟S7:在TLB-MISS異常處理程序中根據(jù)所述差值計(jì)算虛地址和物理地址的對(duì)應(yīng)關(guān)系,并根據(jù)所述對(duì)應(yīng)關(guān)系填入正確的TLB條目;
[0035]第八步驟S8:退出TLB-MISS異常處理程序,返回觸發(fā)TLB-MISS異常的代碼并重新執(zhí)行所述觸發(fā)TLB-MISS異常的代碼。
[0036]上述處理流程的關(guān)鍵步驟有兩處,一是第二步驟S2,一處是第七步驟S7。第二步驟S2是初始化時(shí)的“預(yù)處理”階段,此時(shí)尚未運(yùn)行內(nèi)核代碼。預(yù)先根據(jù)內(nèi)存在位情況進(jìn)行計(jì)算,得到在位物理地址中最低地址與0的差值。第七步驟S7是首次執(zhí)行內(nèi)核代碼時(shí)觸發(fā),是運(yùn)行時(shí)的“后處理”階段,處理器會(huì)根據(jù)第二步驟S2中計(jì)算得到的差值裝填正確的條目,確保內(nèi)核可執(zhí)行。
[0037]根據(jù)本發(fā)明優(yōu)選實(shí)施例的基于TLB-MISS的NUMA內(nèi)存管理容錯(cuò)方法結(jié)合采用“預(yù)處理”和“后處理”的方式,解決了 NUMA操作系統(tǒng)上,由于內(nèi)存控制器故障或者顆粒故障導(dǎo)致低段物理地址缺失時(shí)的操作系統(tǒng)引導(dǎo)問(wèn)題,操作系統(tǒng)內(nèi)核無(wú)需修改虛地址入口,對(duì)操作系統(tǒng)內(nèi)核透明。
[0038]本發(fā)明的優(yōu)點(diǎn)在于針對(duì)內(nèi)存控制器故障或者顆粒故障導(dǎo)致低段物理地址缺失時(shí)的操作系統(tǒng)引導(dǎo)問(wèn)題,結(jié)合采用“預(yù)處理”和“后處理”的方式,預(yù)處理針對(duì)內(nèi)存在位情況,預(yù)先計(jì)算出差值,“后處理”針對(duì)運(yùn)行時(shí)的內(nèi)核代碼執(zhí)行,觸發(fā)TLB-MISS并裝填正確的條目,保證內(nèi)核正確執(zhí)行。“預(yù)處理”和“后處理”結(jié)合進(jìn)行,性能開(kāi)銷(xiāo)小。另外,該技術(shù)在處理器微代碼中實(shí)現(xiàn),對(duì)內(nèi)核程序完全透明。
[0039]可以理解的是,雖然本發(fā)明已以較佳實(shí)施例披露如上,然而上述實(shí)施例并非用以限定本發(fā)明。對(duì)于任何熟悉本領(lǐng)域的技術(shù)人員而言,在不脫離本發(fā)明技術(shù)方案范圍情況下,都可利用上述揭示的技術(shù)內(nèi)容對(duì)本發(fā)明技術(shù)方案作出許多可能的變動(dòng)和修飾,或修改為等同變化的等效實(shí)施例。因此,凡是未脫離本發(fā)明技術(shù)方案的內(nèi)容,依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對(duì)以上實(shí)施例所做的任何簡(jiǎn)單修改、等同變化及修飾,均仍屬于本發(fā)明技術(shù)方案保護(hù)的范圍內(nèi)。
【主權(quán)項(xiàng)】
1.一種基于TLB-MISS的NUMA內(nèi)存管理容錯(cuò)方法,其特征在于包括: 第一步驟:處理器上電進(jìn)入微代碼處理入口 ; 第二步驟:判斷內(nèi)存在位情況,計(jì)算在位內(nèi)存物理地址中最低地址與0的差值; 第三步驟:保存所述差值; 第四步驟:清除處理器上所有TLB條目; 第五步驟:執(zhí)行處理器內(nèi)核的虛地址入口,以開(kāi)始運(yùn)行處理器內(nèi)核代碼。2.根據(jù)權(quán)利要求1所述的基于TLB-MISS的NUMA內(nèi)存管理容錯(cuò)方法,其特征在于還包括: 第六步驟:在運(yùn)行處理器內(nèi)核代碼的過(guò)程中觸發(fā)處理器TLB-MISS異常,進(jìn)入TLB-MISS異常處理入口以執(zhí)行TLB-MISS異常處理程序; 第七步驟:在TLB-MISS異常處理程序中根據(jù)所述差值計(jì)算虛地址和物理地址的對(duì)應(yīng)關(guān)系,并根據(jù)所述對(duì)應(yīng)關(guān)系填入正確的TLB條目; 第八步驟:退出TLB-MISS異常處理程序,返回觸發(fā)TLB-MISS異常的代碼并重新執(zhí)行所述觸發(fā)TLB-MISS異常的代碼。3.根據(jù)權(quán)利要求1或2所述的基于TLB-MISS的NUMA內(nèi)存管理容錯(cuò)方法,其特征在于,在第三步驟將所述差值填入處理器內(nèi)部寄存器。
【專(zhuān)利摘要】本發(fā)明提供了一種基于TLB-MISS的NUMA內(nèi)存管理容錯(cuò)方法,包括:處理器上電進(jìn)入微代碼處理入口;判斷內(nèi)存在位情況,計(jì)算在位內(nèi)存物理地址中最低地址與0的差值;保存所述差值;清除處理器上所有TLB條目;執(zhí)行處理器內(nèi)核的虛地址入口,以開(kāi)始運(yùn)行處理器內(nèi)核代碼;在運(yùn)行處理器內(nèi)核代碼的過(guò)程中觸發(fā)處理器TLB-MISS異常,進(jìn)入TLB-MISS異常處理入口以執(zhí)行TLB-MISS異常處理程序;在TLB-MISS異常處理程序中根據(jù)所述差值計(jì)算虛地址和物理地址的對(duì)應(yīng)關(guān)系,并根據(jù)所述對(duì)應(yīng)關(guān)系填入正確的TLB條目;退出TLB-MISS異常處理程序,返回觸發(fā)TLB-MISS異常的代碼并重新執(zhí)行所述觸發(fā)TLB-MISS異常的代碼。
【IPC分類(lèi)】G06F12/0891, G06F12/0837
【公開(kāi)號(hào)】CN105243029
【申請(qǐng)?zhí)枴緾N201510831797
【發(fā)明人】王星焱, 鄭巖, 黃高陽(yáng), 陳斐, 朱蕾
【申請(qǐng)人】無(wú)錫江南計(jì)算技術(shù)研究所
【公開(kāi)日】2016年1月13日
【申請(qǐng)日】2015年11月24日