本發(fā)明屬于操作系統(tǒng)技術(shù)領(lǐng)域,特別是涉及一種內(nèi)存錯(cuò)誤恢復(fù)方法和裝置。
背景技術(shù):
隨著大數(shù)據(jù)相關(guān)產(chǎn)業(yè)的推動(dòng),IT供應(yīng)商正在采用越來(lái)越大規(guī)模的服務(wù)器來(lái)提供相應(yīng)的計(jì)算以及存儲(chǔ)能力。以主流4路服務(wù)器為例,最高配置為96條內(nèi)存,在數(shù)據(jù)中心,動(dòng)輒幾萬(wàn)臺(tái)的數(shù)量使得數(shù)據(jù)中心內(nèi)存數(shù)量驟增,伴隨數(shù)量增多的還有內(nèi)存發(fā)生錯(cuò)誤的幾率。內(nèi)存錯(cuò)誤分為可糾正的內(nèi)存錯(cuò)誤和不可糾正的內(nèi)存錯(cuò)誤,內(nèi)存本身存在ECC糾錯(cuò)邏輯,可糾正錯(cuò)誤就是內(nèi)存檢測(cè)到1個(gè)bit的錯(cuò)誤可以糾正,多于一個(gè)bit的錯(cuò)誤統(tǒng)稱為不可糾正錯(cuò)誤。對(duì)于可糾正錯(cuò)誤,系統(tǒng)一般只做記錄,對(duì)于不可糾正錯(cuò)誤,當(dāng)前系統(tǒng)有效的手段只有內(nèi)存鏡像,代價(jià)是犧牲一半的內(nèi)存,而且在一個(gè)內(nèi)存通道上的錯(cuò)誤只能恢復(fù)一個(gè),極高的成本和相對(duì)低的收益使得這個(gè)方法極少被實(shí)際應(yīng)用。
已經(jīng)連續(xù)發(fā)生可糾正錯(cuò)誤的內(nèi)存顆粒,通常已經(jīng)被物理上損壞,損壞顆粒上的內(nèi)存會(huì)導(dǎo)致更嚴(yán)重的不可糾正錯(cuò)誤,甚至可能帶來(lái)宕機(jī)的問(wèn)題,而現(xiàn)有技術(shù)中并沒(méi)有相關(guān)的防范措施。
技術(shù)實(shí)現(xiàn)要素:
為解決上述問(wèn)題,本發(fā)明提供了一種內(nèi)存錯(cuò)誤恢復(fù)方法和裝置,能夠使已經(jīng)連續(xù)發(fā)生可糾正錯(cuò)誤的內(nèi)存顆粒不再被操作系統(tǒng)調(diào)用,從而避免這個(gè)損壞顆粒上的內(nèi)存導(dǎo)致更嚴(yán)重的不可糾正錯(cuò)誤,以避免宕機(jī)現(xiàn)象的發(fā)生。
本發(fā)明提供的一種內(nèi)存錯(cuò)誤恢復(fù)方法,包括:
對(duì)可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)進(jìn)行累計(jì);
當(dāng)所述可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)達(dá)到預(yù)設(shè)閾值時(shí),確定出導(dǎo)致所述可糾正內(nèi)存錯(cuò)誤的損壞內(nèi)存顆粒所影響的物理地址范圍;
殺死當(dāng)前利用到所述物理地址范圍的所有進(jìn)程,釋放相應(yīng)的內(nèi)存地址;
將包含所述內(nèi)存地址的所有page進(jìn)行離線處理;
重啟所有被殺死的進(jìn)程。
優(yōu)選的,在上述內(nèi)存錯(cuò)誤恢復(fù)方法中,所述當(dāng)所述可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)達(dá)到預(yù)設(shè)閾值時(shí),確定出導(dǎo)致所述可糾正內(nèi)存錯(cuò)誤的損壞內(nèi)存顆粒所影響的物理地址范圍包括:
當(dāng)所述可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)達(dá)到預(yù)設(shè)閾值時(shí),通過(guò)觸發(fā)CMCI中斷告知操作系統(tǒng);
所述操作系統(tǒng)觸發(fā)BIOS SMI handler;
所述BIOS收集發(fā)生所述可糾正內(nèi)存錯(cuò)誤的地址所在內(nèi)存條的整個(gè)Rank的地址范圍,確定出導(dǎo)致所述可糾正內(nèi)存錯(cuò)誤的損壞內(nèi)存顆粒所影響的物理地址范圍。
優(yōu)選的,在上述內(nèi)存錯(cuò)誤恢復(fù)方法中,所述確定出導(dǎo)致所述可糾正內(nèi)存錯(cuò)誤的損壞內(nèi)存顆粒所影響的物理地址范圍之后,還包括:
將所述可糾正內(nèi)存錯(cuò)誤的地址所在內(nèi)存條的整個(gè)Rank地址范圍寫入ACPINVS中的相應(yīng)區(qū)域。
優(yōu)選的,在上述內(nèi)存錯(cuò)誤恢復(fù)方法中,所述將所述可糾正內(nèi)存錯(cuò)誤的地址所在內(nèi)存條的整個(gè)Rank地址范圍寫入ACPI NVS中的相應(yīng)區(qū)域之后,還包括:
所述操作系統(tǒng)讀取所述NVS中的所述整個(gè)Rank地址范圍。
優(yōu)選的,在上述內(nèi)存錯(cuò)誤恢復(fù)方法中,所述操作系統(tǒng)觸發(fā)BIOS SMIhandler為:
所述操作系統(tǒng)利用IO端口0xB2觸發(fā)所述BIOS SMI handler。
本發(fā)明提供的一種內(nèi)存錯(cuò)誤恢復(fù)裝置,包括:
累計(jì)部件,用于對(duì)可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)進(jìn)行累計(jì);
確定部件,用于當(dāng)所述可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)達(dá)到預(yù)設(shè)閾值時(shí),確定出導(dǎo)致所述可糾正內(nèi)存錯(cuò)誤的損壞內(nèi)存顆粒所影響的物理地址范圍;
釋放部件,用于殺死當(dāng)前利用到所述物理地址范圍的所有進(jìn)程,釋放相應(yīng)的內(nèi)存地址;
離線部件,用于將包含所述內(nèi)存地址的所有page進(jìn)行離線處理;
重啟部件,用于重啟所有被殺死的進(jìn)程。
優(yōu)選的,在上述內(nèi)存錯(cuò)誤恢復(fù)裝置中,所述確定部件包括:
告知單元,用于當(dāng)所述可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)達(dá)到預(yù)設(shè)閾值時(shí),通過(guò)CMCI中斷告知操作系統(tǒng);
觸發(fā)單元,用于利用所述操作系統(tǒng)觸發(fā)BIOS SMI handler;
確定單元,用于利用所述BIOS收集發(fā)生所述可糾正內(nèi)存錯(cuò)誤的地址所在內(nèi)存條的整個(gè)Rank地址范圍,確定出導(dǎo)致所述可糾正內(nèi)存錯(cuò)誤的損壞內(nèi)存顆粒所影響的物理地址范圍。
優(yōu)選的,在上述內(nèi)存錯(cuò)誤恢復(fù)裝置中,還包括:
寫入單元,用于將所述可糾正內(nèi)存錯(cuò)誤的地址所在內(nèi)存條的整個(gè)Rank地址范圍寫入ACPI NVS中的相應(yīng)區(qū)域。
優(yōu)選的,在上述內(nèi)存錯(cuò)誤恢復(fù)裝置中,還包括:
讀取單元,用于利用所述操作系統(tǒng)讀取所述NVS中的所述整個(gè)Rank地址范圍。
優(yōu)選的,在上述內(nèi)存錯(cuò)誤恢復(fù)裝置中,所述觸發(fā)單元具體用于利用IO端口0xB2觸發(fā)所述BIOS SMI handler。
通過(guò)上述描述可知,本發(fā)明提供的內(nèi)存錯(cuò)誤恢復(fù)方法和裝置,由于該方法包括:對(duì)可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)進(jìn)行累計(jì);當(dāng)所述可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)達(dá)到預(yù)設(shè)閾值時(shí),確定出導(dǎo)致所述可糾正內(nèi)存錯(cuò)誤的損壞內(nèi)存顆粒所影響的物理地址范圍;殺死當(dāng)前利用到所述物理地址范圍的所有進(jìn)程,釋放相應(yīng)的內(nèi)存地址;將包含所述內(nèi)存地址的所有page進(jìn)行離線處理;重啟所有被殺死的進(jìn)程,因此,能夠使已經(jīng)連續(xù)發(fā)生可糾正錯(cuò)誤的內(nèi)存顆粒不再被操作系統(tǒng)調(diào)用,從而避免這個(gè)損壞顆粒上的內(nèi)存導(dǎo)致更嚴(yán)重的不可糾正錯(cuò)誤,以避免宕機(jī)現(xiàn)象的發(fā)生。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本申請(qǐng)實(shí)施例提供的第一種內(nèi)存錯(cuò)誤恢復(fù)方法的示意圖;
圖2為本申請(qǐng)實(shí)施例提供的第一種內(nèi)存錯(cuò)誤恢復(fù)裝置的示意圖。
具體實(shí)施方式
本發(fā)明的核心思想在于提供一種內(nèi)存錯(cuò)誤恢復(fù)方法和裝置,能夠使已經(jīng)連續(xù)發(fā)生可糾正錯(cuò)誤的內(nèi)存顆粒不再被操作系統(tǒng)調(diào)用,從而避免這個(gè)損壞顆粒上的內(nèi)存導(dǎo)致更嚴(yán)重的不可糾正錯(cuò)誤,以避免宕機(jī)現(xiàn)象的發(fā)生。
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本申請(qǐng)實(shí)施例提供的第一種內(nèi)存錯(cuò)誤恢復(fù)方法如圖1所示,圖1為本申請(qǐng)實(shí)施例提供的第一種內(nèi)存錯(cuò)誤恢復(fù)方法的示意圖,該方法包括如下步驟:
S1:對(duì)可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)進(jìn)行累計(jì);
需要說(shuō)明的是,可糾正內(nèi)存錯(cuò)誤就是內(nèi)存檢測(cè)到1個(gè)bit的錯(cuò)誤,具有可以糾正的特點(diǎn),而多于一個(gè)bit的錯(cuò)誤則統(tǒng)稱為不可糾正錯(cuò)誤,這些種類的錯(cuò)誤是硬件錯(cuò)誤,可能是由電磁輻射或者射線靜電所引起。
S2:當(dāng)所述可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)達(dá)到預(yù)設(shè)閾值時(shí),確定出導(dǎo)致所述可糾正內(nèi)存錯(cuò)誤的損壞內(nèi)存顆粒所影響的物理地址范圍;
其中的預(yù)設(shè)閾值可以根據(jù)具體情況進(jìn)行相應(yīng)的設(shè)置,目前行業(yè)里面比較優(yōu)化的選擇為5000。
S3:殺死當(dāng)前利用到所述物理地址范圍的所有進(jìn)程,釋放相應(yīng)的內(nèi)存地址;
具體而言,在操作系統(tǒng)確認(rèn)損壞內(nèi)存顆粒所在的物理地址范圍后,需要將用到此應(yīng)用范圍內(nèi)的所有進(jìn)程都?xì)⑺?,從而釋放這些高風(fēng)險(xiǎn)的內(nèi)存地址。
S4:將包含所述內(nèi)存地址的所有page進(jìn)行離線處理;
其中,page是linux內(nèi)存管理的基本單元,將其offline掉之后,就能夠防止后續(xù)被調(diào)用。
S5:重啟所有被殺死的進(jìn)程。
利用該步驟,就能夠恢復(fù)之前所運(yùn)行的應(yīng)用,防止錯(cuò)誤進(jìn)一步擴(kuò)散,避免不可糾正錯(cuò)誤的發(fā)生。
通過(guò)上述描述可知,本申請(qǐng)實(shí)施例提供的第一種內(nèi)存錯(cuò)誤恢復(fù)方法,由于包括:對(duì)可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)進(jìn)行累計(jì);當(dāng)所述可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)達(dá)到預(yù)設(shè)閾值時(shí),確定出導(dǎo)致所述可糾正內(nèi)存錯(cuò)誤的損壞內(nèi)存顆粒所影響的物理地址范圍;殺死當(dāng)前利用到所述物理地址范圍的所有進(jìn)程,釋放相應(yīng)的內(nèi)存地址;將包含所述內(nèi)存地址的所有page進(jìn)行離線處理;重啟所有被殺死的進(jìn)程,因此,能夠使已經(jīng)連續(xù)發(fā)生可糾正錯(cuò)誤的內(nèi)存顆粒不再被操作系統(tǒng)調(diào)用,從而避免這個(gè)損壞顆粒上的內(nèi)存導(dǎo)致更嚴(yán)重的不可糾正錯(cuò)誤,以避免宕機(jī)現(xiàn)象的發(fā)生。
本申請(qǐng)實(shí)施例提供的第二種內(nèi)存錯(cuò)誤恢復(fù)方法,是在上述第一種內(nèi)存錯(cuò)誤恢復(fù)方法的基礎(chǔ)上,還包括如下技術(shù)特征:
所述當(dāng)所述可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)達(dá)到預(yù)設(shè)閾值時(shí),確定出導(dǎo)致所述可糾正內(nèi)存錯(cuò)誤的損壞內(nèi)存顆粒所影響的物理地址范圍包括:
當(dāng)所述可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)達(dá)到預(yù)設(shè)閾值時(shí),通過(guò)觸發(fā)CMCI中斷告知操作系統(tǒng);
所述操作系統(tǒng)觸發(fā)BIOS SMI handler,具體的,操作系統(tǒng)啟動(dòng)錯(cuò)誤恢復(fù)程序,通過(guò)IO端口0xB2觸發(fā)BIOS SMI Handler來(lái)進(jìn)一步處理;
所述BIOS收集發(fā)生所述可糾正內(nèi)存錯(cuò)誤的地址所在內(nèi)存條的整個(gè)Rank的地址范圍,確定出導(dǎo)致所述可糾正內(nèi)存錯(cuò)誤的損壞內(nèi)存顆粒所影響的物理地址范圍,然后將原始錯(cuò)誤信息清除。
本申請(qǐng)實(shí)施例提供的第三種內(nèi)存錯(cuò)誤恢復(fù)方法,是在上述第二種內(nèi)存錯(cuò)誤恢復(fù)方法的基礎(chǔ)上,還包括如下技術(shù)特征:
所述確定出導(dǎo)致所述可糾正內(nèi)存錯(cuò)誤的損壞內(nèi)存顆粒所影響的物理地址范圍之后,還包括:
將所述可糾正內(nèi)存錯(cuò)誤的地址所在內(nèi)存條的整個(gè)Rank地址范圍寫入ACPINVS中的相應(yīng)區(qū)域。
需要說(shuō)明的是,該區(qū)域是BIOS和操作系統(tǒng)在ACPI交互變量的專用區(qū)域,,比如在做內(nèi)存熱插拔交互的時(shí)候都會(huì)用到。
本申請(qǐng)實(shí)施例提供的第四種內(nèi)存錯(cuò)誤恢復(fù)方法,是在上述第三種內(nèi)存錯(cuò)誤恢復(fù)方法的基礎(chǔ)上,還包括如下技術(shù)特征:
所述將所述可糾正內(nèi)存錯(cuò)誤的地址所在內(nèi)存條的整個(gè)Rank地址范圍寫入ACPI NVS中的相應(yīng)區(qū)域之后,還包括:
所述操作系統(tǒng)讀取所述NVS中的所述整個(gè)Rank地址范圍。
需要說(shuō)明的是,該地址范圍被mapout之后,就達(dá)到了隔離的目的。
本申請(qǐng)實(shí)施例提供的第五種內(nèi)存錯(cuò)誤恢復(fù)方法,是在上述第二種內(nèi)存錯(cuò)誤恢復(fù)方法的基礎(chǔ)上,還包括如下技術(shù)特征:
所述操作系統(tǒng)觸發(fā)BIOS SMI handler為:
所述操作系統(tǒng)利用IO端口0xB2觸發(fā)所述BIOS SMI handler。
本申請(qǐng)實(shí)施例提供的第一種內(nèi)存錯(cuò)誤恢復(fù)裝置如圖2所示,圖2為本申請(qǐng)實(shí)施例提供的第一種內(nèi)存錯(cuò)誤恢復(fù)裝置的示意圖,該裝置包括:
累計(jì)部件201,用于對(duì)可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)進(jìn)行累計(jì),可糾正內(nèi)存錯(cuò)誤就是內(nèi)存檢測(cè)到1個(gè)bit的錯(cuò)誤,具有可以糾正的特點(diǎn),而多于一個(gè)bit的錯(cuò)誤則統(tǒng)稱為不可糾正錯(cuò)誤,這些種類的錯(cuò)誤是硬件錯(cuò)誤,可能是由電磁輻射或者射線靜電所引起;
確定部件202,用于當(dāng)所述可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)達(dá)到預(yù)設(shè)閾值時(shí),確定出導(dǎo)致所述可糾正內(nèi)存錯(cuò)誤的損壞內(nèi)存顆粒所影響的物理地址范圍,其中的預(yù)設(shè)閾值可以根據(jù)具體情況進(jìn)行相應(yīng)的設(shè)置,目前行業(yè)里面比較優(yōu)化的選擇為5000;
釋放部件203,用于殺死當(dāng)前利用到所述物理地址范圍的所有進(jìn)程,釋放相應(yīng)的內(nèi)存地址,在操作系統(tǒng)確認(rèn)損壞內(nèi)存顆粒所在的物理地址范圍后,需要將用到此應(yīng)用范圍內(nèi)的所有進(jìn)程都?xì)⑺?,從而釋放這些高風(fēng)險(xiǎn)的內(nèi)存地址;
離線部件204,用于將包含所述內(nèi)存地址的所有page進(jìn)行離線處理,其中,page是linux內(nèi)存管理的基本單元,將其offline掉之后,就能夠防止后續(xù)被調(diào)用;
重啟部件205,用于重啟所有被殺死的進(jìn)程,能夠恢復(fù)之前所運(yùn)行的應(yīng)用,防止錯(cuò)誤進(jìn)一步擴(kuò)散,避免不可糾正錯(cuò)誤的發(fā)生。
通過(guò)上述描述可知,本申請(qǐng)實(shí)施例提供的第一種內(nèi)存錯(cuò)誤恢復(fù)裝置能夠使已經(jīng)連續(xù)發(fā)生可糾正錯(cuò)誤的內(nèi)存顆粒不再被操作系統(tǒng)調(diào)用,從而避免這個(gè)損壞顆粒上的內(nèi)存導(dǎo)致更嚴(yán)重的不可糾正錯(cuò)誤,以避免宕機(jī)現(xiàn)象的發(fā)生。
本申請(qǐng)實(shí)施例提供的第二種內(nèi)存錯(cuò)誤恢復(fù)裝置,是在上述第一種內(nèi)存錯(cuò)誤恢復(fù)裝置的基礎(chǔ)上,還包括如下技術(shù)特征:
所述確定部件包括:
告知單元,用于當(dāng)所述可糾正內(nèi)存錯(cuò)誤的個(gè)數(shù)達(dá)到預(yù)設(shè)閾值時(shí),通過(guò)CMCI中斷告知操作系統(tǒng);
觸發(fā)單元,用于利用所述操作系統(tǒng)觸發(fā)BIOS SMI handler,具體的,操作系統(tǒng)啟動(dòng)錯(cuò)誤恢復(fù)程序,通過(guò)IO端口0xB2觸發(fā)BIOS SMI Handler來(lái)進(jìn)一步處理;
確定單元,用于利用所述BIOS收集發(fā)生所述可糾正內(nèi)存錯(cuò)誤的地址所在內(nèi)存條的整個(gè)Rank地址范圍,確定出導(dǎo)致所述可糾正內(nèi)存錯(cuò)誤的損壞內(nèi)存顆粒所影響的物理地址范圍,然后將原始錯(cuò)誤信息清除。
本申請(qǐng)實(shí)施例提供的第三種內(nèi)存錯(cuò)誤恢復(fù)裝置,是在上述第二種內(nèi)存錯(cuò)誤恢復(fù)裝置的基礎(chǔ)上,還包括如下技術(shù)特征:
還包括:
寫入單元,用于將所述可糾正內(nèi)存錯(cuò)誤的地址所在內(nèi)存條的整個(gè)Rank地址范圍寫入ACPI NVS中的相應(yīng)區(qū)域。
需要說(shuō)明的是,該區(qū)域是BIOS和操作系統(tǒng)在ACPI交互變量的專用區(qū)域,,比如在做內(nèi)存熱插拔交互的時(shí)候都會(huì)用到。
本申請(qǐng)實(shí)施例提供的第四種內(nèi)存錯(cuò)誤恢復(fù)裝置,是在上述第三種內(nèi)存錯(cuò)誤恢復(fù)裝置的基礎(chǔ)上,還包括如下技術(shù)特征:
讀取單元,用于利用所述操作系統(tǒng)讀取所述NVS中的所述整個(gè)Rank地址范圍。
需要說(shuō)明的是,該地址范圍被mapout之后,就達(dá)到了隔離的目的。
本申請(qǐng)實(shí)施例提供的第五種內(nèi)存錯(cuò)誤恢復(fù)裝置,是在上述第二種內(nèi)存錯(cuò)誤恢復(fù)裝置的基礎(chǔ)上,還包括如下技術(shù)特征:
所述觸發(fā)單元具體用于利用IO端口0xB2觸發(fā)所述BIOS SMI handler。
對(duì)所公開(kāi)的實(shí)施例的上述說(shuō)明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專業(yè)技術(shù)人員來(lái)說(shuō)將是顯而易見(jiàn)的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開(kāi)的原理和新穎特點(diǎn)相一致的最寬的范圍。