一種基于lockstep架構的錯誤恢復方法
【技術領域】
[0001]本發(fā)明屬于計算機技術,涉及一種總線監(jiān)控的鎖步(Lock-Step)計算機的錯誤恢復,以實現(xiàn)高可靠性,包括錯誤恢復的硬件機制與軟件機制。
【背景技術】
[0002]計算機的高故障檢測率對于其在安全關鍵領域的應用具有非常重要的意義。傳統(tǒng)的計算機的故障檢測主要采用看門狗、閉環(huán)檢測等方法實現(xiàn),故障檢測率很難到達到98%以上,計算結果比較監(jiān)控可實現(xiàn)很高的故障檢測率,但故障檢測的實時性不高。Lock-Step計算機是另一種實現(xiàn)高完整性計算的方法,Lock-Step既能以很高的概率檢測故障又能實時地檢測故障。在檢測出故障之后可以采用恢復機制對錯誤進行恢復,實現(xiàn)高可靠性的計算機。
【發(fā)明內(nèi)容】
[0003]為了解決【背景技術】中所存在的技術問題,本發(fā)明提供一種基于總線監(jiān)控的Lock-Step計算機的錯誤恢復機制。能實現(xiàn)計算機的實時的高概率故障檢測和隔離,并且在發(fā)生錯誤時自動進行錯誤恢復,保證計算機數(shù)據(jù)處理的高完整性。
[0004]本發(fā)明的技術解決方案是:一種基于lockstep架構的錯誤恢復方法,其特征在于:所述方法包括以下步驟:
[0005]DLock-Step模塊運行狀態(tài)與轉換=Lock-Skp模塊上電后,采用基于時間流進行狀態(tài)保存,通過硬件計時器,在一段時間之后發(fā)送一個硬件信號,軟件讀到這個狀態(tài)后保存處理器狀態(tài);
[0006]2)對硬件狀態(tài)進行切換,將硬件的保存恢復分為2個狀態(tài),即運行狀態(tài)以及保存狀態(tài),在運行狀態(tài)時如果處理器發(fā)生寫操作,該寫入不直接寫入內(nèi)存,而是寫入一個軟件可讀、硬件例化的buffer結構(SM)中,在運行狀態(tài)的時間片內(nèi)如果有對寫入SM的地址數(shù)據(jù)的操作由SM完成讀寫,以保證數(shù)據(jù)的一致;
[0007]3)在時間到達之后將處理器狀態(tài)由運行狀態(tài)轉換為保存狀態(tài),在保存狀態(tài)中將CPU內(nèi)部的寄存器保存至一片內(nèi)存中,之后將SM中數(shù)據(jù)寫入處理器內(nèi)存對應的地址,完成一次保存;保存狀態(tài)完成之后(SM中數(shù)據(jù)寫完成),處理器將自動切換為運行狀態(tài),繼續(xù)運行。
[0008]4)運行狀態(tài)下SM保證內(nèi)存一致性:在運行狀態(tài)時,每次有讀操作時,首先查詢SM的index位,如果SM中有該地址,在查詢index對應的地址高位,如果命中,說明讀地址的數(shù)據(jù)在SM中有保存,將SM中的數(shù)據(jù)作為讀數(shù)據(jù)發(fā)送給CPU ;如果未命中,說明處理器該讀操作的地址數(shù)據(jù)在SM中未出現(xiàn),則處理器從內(nèi)存中讀出該地址的數(shù)據(jù);
[0009]5)在運行狀態(tài)寫操作時,將數(shù)據(jù)不再寫入內(nèi)存,而是寫入SM中;通過寫入地址的addr的低9位作為SM的index,有index作為SM的地址進行訪問SM,將寫操作的寫地址高位與寫數(shù)據(jù)寫入該SM的addr與data位,同時將valid置1,表示SM的該index對應的地址數(shù)據(jù)有效;當連續(xù)的寫操作同樣命中SM中同一個index時,如果寫操作的地址與index對應的地址相同,說明這次寫操作的地址與index中的寫操作地址相同,則將index該條目的data項進行更新。如果寫操作的地址與index對應的地址不同,則將該寫操作的地址與數(shù)據(jù)寫入該index條目對應的其他關聯(lián)地址與數(shù)據(jù)(最大為4路組關聯(lián));當4路組關聯(lián)的SRAM均寫滿后仍存在寫操作命中該index對應的條目,則產(chǎn)生硬件控制退出運行狀態(tài),進入保存狀態(tài)。
[0010]上述方法還包括步驟6)處理器運行狀態(tài)結束,處理器進入保存狀態(tài)進行處理器的保存;保存狀態(tài)時處理器將SM中的數(shù)據(jù)按照SM的index條目中有效的地址數(shù)據(jù)寫入處理器內(nèi)存,更新處理器的內(nèi)存,保證處理器內(nèi)存的一致;同時將處理器的PC指針,堆棧列表,寄存器等保存在內(nèi)存的固定位置,如果發(fā)生錯誤可以從該內(nèi)存讀取,達到處理器狀態(tài)的恢復。
[0011 ] 上述方法還包括錯誤恢復流程:
[0012]在TO時刻,雙處理器同步運行指令,TO時刻結束進入TO的保存狀態(tài),保存TO時的寄存器狀態(tài);
[0013]TO-Tl時間,由于該時間內(nèi)無寫操作,處理器在Tl時刻的內(nèi)存與TO時刻一致,在Tl結束的保存狀態(tài),處理器保存Tl時的寄存器狀態(tài);
[0014]T1-T2時間,存在讀操作,無寫操作,處理器在T2結束的保存狀態(tài)保存T2時的寄存器狀態(tài);
[0015]T2-T3時間,存在寫操作,之后有讀該地址的操作。在寫操作時,在T3的運行狀態(tài),將該寫操作將地址數(shù)據(jù)寫入SM內(nèi),而保證內(nèi)存不變。之后的讀操作如果命中上次寫操作的地址,則從SM中取出該讀操作的數(shù)據(jù)給雙處理器;如果該讀操作未命中SM,則由內(nèi)存直接返回讀操作的數(shù)據(jù);如有其余的寫操作則依次寫入SM,直到SM寫滿;處理器直接進行保存狀態(tài)。
[0016]如果在T2-T3段發(fā)生一個錯誤,則將處理器的PC跳回T2時的保存值,同時將T2時保存的寄存器值寫入處理器寄存器;此時內(nèi)存沒有在保存狀態(tài)保存,處理器內(nèi)存狀態(tài)仍是T2狀態(tài)的內(nèi)存,由硬件將SM的valid位清零,使得SM中數(shù)據(jù)無效;如果運行到T3時刻結束的保存狀態(tài)下時,處理器保存T3狀態(tài)下的寄存器,同時將SM中的數(shù)據(jù)寫入內(nèi)存。
[0017]—種基于lockstep架構的錯誤恢復結構,其特征在于:包括內(nèi)部FPGA例化出的SRAM結構;包括索引index,地址位(addr),數(shù)據(jù)位(data),以及有效位(valid);由地址位與索引位構成讀寫指令對應的地址,數(shù)據(jù)位則為該地址對應的數(shù)據(jù);索引index為讀寫地址的低9位,作為SM的地址空間;地址位為該地址的高23位,有效位為每次對SM中該index條目進行一次寫時對該index的有效位置I。
[0018]上述錯誤恢復結構采取4路組關聯(lián),將4路相同結構的SRAM關聯(lián)在一起使用同一個index,在index命中之后比較4路中的addr,當addr命中時認為該讀寫操作命中SM ;當在運行狀態(tài)需要運行一個寫入操作,由硬件SM控制寫入的地址以及數(shù)據(jù),并不直接寫入處理器內(nèi)存,而是寫入到硬件的SM結構中,在運行狀態(tài)內(nèi)如果還存在對SM該地址的讀寫操作,則直接從SM結構中讀寫。
[0019]本發(fā)明具有的優(yōu)點是:涉及一種基于鎖步(Lock-Step)計算機架構,在該計算機架構下可以發(fā)現(xiàn)計算機運行的瞬態(tài)錯誤,并可采用恢復機制將錯誤恢復,提高計算機的容錯能力,實現(xiàn)高可靠性的計算機。本發(fā)明采用總線鎖步與監(jiān)控電路模塊,利用硬件保存處理器運行的狀態(tài),并實時監(jiān)測兩個處理器的工作狀況,一旦發(fā)現(xiàn)不一致,立即觸發(fā)錯誤恢復,將處理器狀態(tài)回退恢復至之前保存的正確狀態(tài),重新運行,達到隔離故障,從而保證計算機能高完整性地處理數(shù)據(jù)。本發(fā)明具有故障檢測率很高、故障檢測的實時性好、可自動恢復計算機瞬態(tài)故障,實現(xiàn)簡便的特點。
【附圖說明】
:
[0020]圖1是Lock-Step計算機恢復機制硬件構成圖;
[0021 ] 圖2是Lock-St印恢復SM硬件結構;
[0022]圖3是Lock-Step模塊恢復機制的運彳丁流程;
【具體實施方式】
:
[0023]本發(fā)明通過采用總線鎖步與監(jiān)控模塊(簡稱=Lock-Step模塊)對兩個處理器總線周期操作事務(讀取,寫入)進行同步“位位”比較,實時檢測兩個計算機的工作狀況,并將處理器狀態(tài)進行保存,在處理器比較發(fā)現(xiàn)不一致之后,將處理器狀態(tài)恢復至上次保存的狀態(tài),可以恢復處理器內(nèi)存由于瞬時故障產(chǎn)生的各種錯誤,內(nèi)存總線上產(chǎn)生的瞬態(tài)錯誤,以及處理器內(nèi)部運行產(chǎn)生的錯誤。從而實現(xiàn)高可靠性的處理器。
[0024]總線監(jiān)控的Lock-St印計算機組成如圖1所示,處理器部分為2個同步運行處理器,可以進行同步比較,檢測錯誤的發(fā)生。在處理器同步之后每過一個固定的時間片,將處理器狀態(tài)寫入固定的保存空間(Store Memory SM),在發(fā)生錯誤之后將Store memory內(nèi)的數(shù)據(jù)恢復回計算機,將計算機的狀態(tài)恢復至上次保存的正確狀態(tài),實現(xiàn)錯誤恢復。由本專利的SM以及固定的硬件訪問機制保證處理器硬件狀態(tài)的正確(如內(nèi)存的一致,指令流的連續(xù),重新運行時機等),由軟件在恢復之后重新讀取狀態(tài)寄存器保證處理器軟件運行的正確。
[0025]SM的結果如圖2所示,SM主要由內(nèi)部FPGA例化出的SRAM結構,大小可定制,本專利以IKbyte為標準。其結構包括索引index,地址位(addr),數(shù)據(jù)位(data),以及有效位(valid)組成。索引index為讀寫地址的低9位,作為SM的地址空間。地址位為該地址的高23位,由地址位與索引位構成讀寫指令對應的地址,數(shù)據(jù)位則為該地址對應的數(shù)據(jù)。有效位為每次對SM中該index條目進行一次寫時對該index的有效位置I。為了加大讀操作時的命中,采取4路組關聯(lián),將4路相同結構的SRAM關聯(lián)在一起使用同一個index,在index命中之后比較4路中的addr,當addr命中時認為該讀寫操作命中SM。當在運行狀態(tài)需要運行一個寫入操作,由硬件SM控制寫入的地址以及數(shù)據(jù),并不直接寫入處理器內(nèi)存,而是寫入到硬件的SM結構中,在運行狀態(tài)內(nèi)如果還存在對SM該地址的讀寫操作,則直接從SM結構中讀寫。
[0026]方案的核心部分是設計對Lock-Step模塊的錯誤恢復硬件,其余部分可采用通用器件、電路實現(xiàn)。
[0027]Lock-Step模塊運行狀態(tài)與轉換:
[0028]Lock-St印模塊上電后,采用基于時間流進行狀態(tài)保存,通過硬件計時器,在一段時間之后發(fā)送一個硬件信號,軟件讀到這個狀態(tài)后保存處理器狀態(tài)。由于只有發(fā)生L/S操作且發(fā)生Cache miss時才會在處理器總線上進行訪問,而在沒有L/S操作時,處理器狀態(tài)不會發(fā)生改變。為了減少保存次數(shù),時間保存信號的發(fā)出可以通過L/S指令流來進行控制,在時間片內(nèi)如果存在L/S指令才進行保存,如果沒有該操作則放棄保存,采用上次保存的處理器狀態(tài)。
[0029]到達時間片時,如果需要保存,保存該時的寄存器、PC等值,恢復時將載入其寄存器值,PC值。同時在一個時間片之內(nèi)如果沒有發(fā)生錯誤,認為該時間點的數(shù)據(jù)正確,將該時刻內(nèi)存進行保存,將L/S指令寫入內(nèi)存。如果在一個時間片之內(nèi)沒有L/S指令,則處理器內(nèi)存無變化,僅有寄存器堆、堆棧等變化,可以放棄這一次的保存,采用之前保存之前的內(nèi)存狀態(tài),減少開銷。
[0030]在時間片之內(nèi)如果L/S指令存在,需要保存處理器當前的狀態(tài)以及保證內(nèi)存的一致。
[0031]這樣,需要對硬件狀態(tài)進行切換,將硬件的保存恢復分為2個狀態(tài),即運行狀態(tài)以及保存狀態(tài),在運行狀態(tài)時如果處理器發(fā)生寫操作,該寫入不直接寫入內(nèi)存,而是寫入一個軟件可讀、硬件例化的buffer結構(Store memory (SM))中,在運行狀態(tài)的時間片內(nèi)如果有對寫入SM的地址數(shù)據(jù)的操作由SM完成讀寫,以保證數(shù)據(jù)的一致。在時間到達之后將處理器狀態(tài)由運行狀態(tài)轉換為保存狀態(tài),在保存狀態(tài)中將CPU內(nèi)部的寄存器(包括可能改變的堆棧PC指針等)保存至一片內(nèi)存中,之后將上述的SM中數(shù)據(jù)寫入處理