[go: up one dir, main page]

TWI430084B - 記憶體系統中錯誤校正與偵測之系統及方法 - Google Patents

記憶體系統中錯誤校正與偵測之系統及方法 Download PDF

Info

Publication number
TWI430084B
TWI430084B TW097123487A TW97123487A TWI430084B TW I430084 B TWI430084 B TW I430084B TW 097123487 A TW097123487 A TW 097123487A TW 97123487 A TW97123487 A TW 97123487A TW I430084 B TWI430084 B TW I430084B
Authority
TW
Taiwan
Prior art keywords
memory
error
raid
modules
dimm
Prior art date
Application number
TW097123487A
Other languages
English (en)
Other versions
TW200919171A (en
Inventor
James A O'connor
Luis A Lastras-Montano
Luiz C Alves
William J Clarke
Timothy J Dell
Thomas J Dewkett
Kevin C Gower
Original Assignee
Ibm
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Ibm filed Critical Ibm
Publication of TW200919171A publication Critical patent/TW200919171A/zh
Application granted granted Critical
Publication of TWI430084B publication Critical patent/TWI430084B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/16Protection against loss of memory contents
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/10Indexing scheme relating to G06F11/10
    • G06F2211/1002Indexing scheme relating to G06F11/1076
    • G06F2211/1045Nested RAID, i.e. implementing a RAID scheme in another RAID scheme
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/10Indexing scheme relating to G06F11/10
    • G06F2211/1002Indexing scheme relating to G06F11/1076
    • G06F2211/1057Parity-multiple bits-RAID6, i.e. RAID 6 implementations
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/10Indexing scheme relating to G06F11/10
    • G06F2211/1002Indexing scheme relating to G06F11/1076
    • G06F2211/1064Parity-single bit-RAID3, i.e. RAID 3 implementations

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Hardware Redundancy (AREA)

Description

記憶體系統中錯誤校正與偵測之系統及方法 【相關申請案參照】
本專利申請案係與同時提出申請之代理人案號POU920070156US1,名稱為「用以提供一高故障容忍度的記憶體系統(System and Method for Providing a High Fault Tolerant Memory System)」一案具有同一專利權人,並在此完整引用作為參考。
本發明一般係有關於電腦記憶體裝置,以及更特別地,係有關於在RAID記憶體系統中進行錯誤偵測與校正。
電腦系統通常需要相當大量的高速隨機存取記憶體(RAM),在電腦開機作業時,用來維持像是作業系統軟體、程式以及其他資料等資訊。資訊通常為二進位,由資料的位元,所謂1和0的類型所組成。在較高的等級中,資料的位元分組與經過組織,比如說,一個位元組,通常由8個位元組成,而該位元組,同時也包含,用於識別以及/或者錯誤校正所用的資訊時,會加入額外的位元(例如:9、10等)。此一二位元資訊,通常會在電腦系統開機與初始程式載入(IPL)的時候,會由非揮發性儲存裝置(NVS)像是硬碟(HDD)載入至RAM。在正常電腦運作中,資料也會從非揮發性儲存裝置中讀出或寫入。一般來說,一個電腦系統所用的所有程式與資訊,無法裝 進較小、成本較高的動態記憶體(DRAM),而且即使裝得進去,在電腦系統關機時,資料也會遺失。目前非揮發性儲存裝置系統,通常是用數目眾多的硬碟來建構。
電腦的隨機存取記憶體,通常會設計成可插拔的次系統,通常為模組的形式,所以每一台電腦可以陸續的加入更多的RAM,而由特定的記憶體需求和應用而定。DIMM所指為雙直列記憶體模組(DIMM),目前應該是最為普遍的記憶體模組。DIMM是薄型的矩形記憶卡,包含一或多個記憶體裝置,而且同樣也包括一或多個暫存器、緩衝器、集線器裝置、以及/或者非揮發性儲存(例如可抹除程式化唯讀記憶體,或稱為EPROM)還有各種被動裝置(例如電阻與電容),均裝設於卡上。DIMM通常係採用動態記憶體晶片或動態記憶體,而需要定期的更新,以避免儲存於其中的資料流失。一般來說,動態記憶體晶片為非同步裝置,然而,現代的晶片,同步DRAM(SDRAM)(比如說單一資訊速率或(SDR),雙資料速率或(DDR、DDR2、DDR3…等))具有同步介面以提升效能。DDR裝置通常採用預先取回和其他提升速度的技術,以增進記憶體頻寬,並降低延遲。舉例來說,DDR3具有8個叢發長度。
隨著電腦系統變得更為強大,記憶體裝置密度也持續增加。目前單一電腦的RAM容量中具有數百兆位元者比比皆是。不幸地,一個RAM裝置只要有一部份故障,就會導致整 個電腦系統故障。當記憶體錯誤發生時,其可為「硬」(重複的)或「軟」(一次或間歇性的)故障,這些故障,可能是發生在單一晶格、多重位元、全晶片或全DIMM的故障,而整個或部份的RAM可能在修復前都無法使用。修復時間可能會是數小時或甚至數天,對於仰賴電腦系統的業務來說,會是相當大的衝擊。
在正常操作中碰到RAM故障的機率隨著現代電腦的記憶體儲存容量的增加,而持續的上升。
過去數十年來,用以偵測與校正位元錯誤的技術,已經發展為相當精密的科技。也許最基本的偵測技術,就是利用將資料字元中的1和0的數目用XOR計算後,以產生一同位位元(parity bit),就是所謂的奇或偶同位。舉例來說,具有偶數個1的資料字元,會具有0的同位位元,而具有奇數個1的資料字元,會具有1的同位位元,而這個同位位元資料,會附加在所儲存的記憶體資料中。如果在讀取操作中,資料字元發生一個錯誤,將資料重新產生同位位元,然後檢查看它是否符合所儲存的同位位元(原來就已經產生的),就可找出錯誤。
Richard Hamming瞭解到,同位技術可不限於偵測錯誤,而且可以經由加上一個XOR欄位,以校正錯誤,即所謂的錯誤校正碼(ECC)欄位。ECC欄位是經由XOR處理的字元中,不同位元的組合,使得錯誤(資料字元的細小改變)可被輕易 的偵測、鎖定以及校正。可被偵測與校正的錯誤的數目,係直接與附加於資料字元的ECC欄位的長度相關。這個技術包括確保在有效資料字元與碼字元組合之間的一最小分離距離(minimum separation distance)。需要被偵測與校正的錯誤的數目愈多,碼字元就愈長,因此讓有效的碼字元之間的距離增長。介於有效碼字元最小的距離,就稱之為最小Hamming距離。
這些錯誤偵測與校正技術,通常都是用來在有雜訊的通訊傳輸媒體中將資料恢復為原來/正確的形式,或者是用於儲存媒體中因為實體特性而所產生的有限可能的資料錯誤。記憶體裝置通常是以電壓位準來代表儲存於RAM中的1或0的資料,因此容易受到裝置故障和由於高能量宇宙射線和α粒子所造成的狀態改變。同樣的,在磁性表面上以磁場來儲存1和0的資料的硬碟,也會由於磁性媒體的缺陷和其他會造成原有資料改變的機制而受到影響。
在1980年代,RAM記憶體的大小首度達到會受到α粒子撞擊和宇宙射線影響的程度。這些粒子並不會損害裝置,但是會造成記憶體錯誤,這些就被稱之為軟錯誤,而且通常只會影響單一位元,一旦被找出來之後,該位元故障可經由重寫該記憶體位置而獲得校正。軟錯誤的發生頻率已經達到影響整體系統可靠度的程度。
記憶體錯誤校正碼(ECC),像是由Hamming所提議的,在資料字元的不同位元位置,使用同位碼的組合來偵測與校正錯誤。每一次當資料字元被寫入記憶體時,新的ECC字元會被產生並與資料一起儲存,藉此在被讀出記憶體的資料所包含的ECC碼,不符合由被讀出的資料所產生的新ECC碼的時候,作為資料偵測與校正之用。
一開始被用於電腦系統的RAM的ECC碼,是為了提升系統的故障容忍度。二進位的ECC碼,可用於雙位元錯誤偵測(DED)以及單一位元錯誤校正(SEC)。此一SEC/DED ECC同樣也可做到單一位元的硬錯誤的復原。
擦拭常式(Scrubbing routine)也被提出,藉由一互補/重新互補的流程找出軟錯誤,以協助降低記憶體錯誤,使得軟錯誤可被偵測與校正。
有些儲存裝置製造商,會使用先進的ECC技術,像是Reed-Solomon碼,以校正全記憶體晶片的故障。有一些記憶體系統設計會具有標準保留記憶體晶片(例如閒置的晶片)用以自動的替換有問題的晶片。這些改良技術,大幅提升了RAM的可靠度。但隨著記憶體尺寸持續增加,而消費者對可靠度的要求與日俱增,因此需要更進一步的提升。現在對系統的要求是能夠容忍整個DIMM的故障,並且在系統操作的同時更換該DIMM。此外,也必須考慮到一些會影響到一或更多個 DIMM,以及記憶體控制器/嵌入式處理器之間的連結的單點故障的故障模式。舉例來說,在記憶體控制器與記憶體裝置之間的一些連結,可能包括一或多個位於記憶體控制器外部,並位於DIMM之上或之外的中介緩衝器,有可能會成為影響單一DIMM故障、全DIMM故障,或更廣泛的記憶體系統故障之部份原因。
儘管目前確有需要使用更先進的錯誤校正技術來提升電腦RAM的可靠度(通常也稱為故障容忍度),但是這麼做也會影響到可用的記憶體、效能、空間、熱…等等。如果使用備援來加上額外的資料備份或更多精密的錯誤編碼技術,會使得成本增加,設計複雜化,也可能會影響到另外一個相當重要的商業考量:上市時間。舉例來說,用記憶體鏡射(mirroring)已經成為許多儲存裝置製造公司所提供的功能,使用記憶體鏡射可以讓系統躲過更嚴重的記憶體故障,但是,因為這麼做會需要記憶體容量加倍,更遑論還要加上基本的SEC/DEC ECC設計,使得用戶只能用到所安裝的RAM的一半容量,因此接受度相當低。
ECC技術已經用來校正硬碟故障,提高儲存系統可用性,使得用戶不會因為硬碟的故障,而遭致資料流失或資料整合度的問題,並且進一步的保護他們免於一些較小的故障模式的困擾。
有些儲存系統的供應商已經成功地使用獨立磁碟冗餘陣列(RAID)技術來提升硬碟的可用性。在許多方面,使用RAID技術可輕易復原硬碟故障,因為在硬碟中要隔離錯誤,比在RAM中要容易得多。硬碟通常具有嵌入的檢查碼,像是ECC,以偵測壞軌。此外可在硬碟電子裝置或磁碟轉接器內嵌入循環冗餘檢查(CRC)以及縱向冗餘檢查(LRC),或者是用較高層級的碼以及應用程式來偵測硬碟錯誤。CRC與LRC會與資料同時被寫入,以協助偵測資料錯誤。CRC與LRC為所謂的散列定址法,用以從資料產生一組小而實質上獨特的位元典型。當由硬碟讀出資料時,核對和(check sum)會被重新產生,並與儲存於硬碟中的核對和相比較,二者的簽章(signatures)必須完全符合,以確定從磁碟上所取回的資料和原先寫入磁碟的資料相同。
RAID系統係用來提升效能以及/或者提高磁碟儲存系統的可用性。RAID將資料分配於數個獨立的硬碟,目前有許多種不同的RAID機制,每一種都具有不同的特性,也具有個別的優缺點。效能、可用性,以及使用度/效率(磁碟可實際容納資料的比例)也許是最重要的一些因素。各種不同的RAID機制之間都有取捨,因為提升其中一種屬性,通常會影響到另一種。
RAID-0將資料分配在多個硬碟中以提升效能,RAID-1為資料鏡射,在兩個不同的硬碟上,保留兩份完全相同的資 料,以提升可用度並預防資料流失。有些RAID機制,可一起使用,以增加相乘的效益。舉例來說,RAID-10是在一陣列中兼具分割與鏡射資料的功能,以提升效能與可靠性。
RAID-3、RAID-4,以及RAID-5都非常類似,因為它們都用單一XOR核對和以校正單一資料元件錯誤。RAID-3為具有專屬同位硬碟的位元組層級資料分割;RAID-4為具有專屬同位硬碟的區塊層級資料分割;RAID-5和RAID-4一樣為區塊層級資料分割,但具有分散的同位,也就是沒有專屬的同位硬碟。同位被實質上均勻地分配於所有的硬碟,因此省除了專屬的同位硬碟,避免效能瓶頸。RAID-3、RAID-4以及RAID-5的主要屬性為,當故障位置可透過某些獨立的方法來鎖定時,它們可以對單一資料元件故障進行校正。
RAID-6並沒有業界單一通用的定義,一般來說,RAID-6所指為具有雙核對和之區塊或位元組層級的資料分割。RAID-6的一個重要屬性是當故障可經由某些獨立的方法來鎖定時,可以修正最多兩個資料元件錯誤。同時它也可以在無法得知故障位置時,鎖定與校正單一故障。
第一圖所示為由一整合的處理器晶片100所組成的現代電腦系統,其中包含一或多個處理器元件以及一個整合的記憶體控制器110。在第一圖所示的設定組態中,多個獨立串接的互連記憶體介面匯流排106,係邏輯地被聚集在一起,以共同 操作來支援較高頻寬並具有被分配或分割於平行匯流排與相關裝置的資料與錯誤偵測/校正資訊之單一獨立存取要求。記憶體控制110附接至四個窄/高速點對點記憶體匯流排106,每一個匯流排106連接數個獨特的記憶體控制器介面通道至串接的互連記憶體子系統103(或記憶體模組,也就是DIMM),其中,記憶體子系統103包括至少一個集線器裝置,與一或多個記憶體裝置109。有些系統進一步可做到讓記憶體匯流排106的一子集分佈於記憶體子系統103中,在此情況下,一或多個分佈的記憶體匯流排108可共同操作,以支援單一存取要求。
第二圖所示為具有串接的記憶體模組103與單向匯流排106之記憶體結構,在此串接結構中的記憶體模組103的集線器裝置104所提供的一種功能是重新驅動(re-drive)以在單向匯流排106上傳送訊號至其它記憶體模組103,或至其它記憶體控制器110。第二圖包括記憶器控制器110和四個記憶體模組103,由兩個記憶體匯流排106的其中之一(一個具有24線的下游記憶體匯流排以及一具有25線的上游記憶體匯流排),以直接或串接的方式連接至記憶體控制器110。位於記憶體控制器110旁的記憶體模組103,是以直接的方式連接至記憶體控制器110,其它的記憶體模組103,是以串接的方式連接至記憶體控制器110。儘管在圖中未顯示,記憶體控制器110可整合於處理器100之中,並可連接至一個以上的記憶體匯流排106,如第一圖所示。
因此,有需要在記憶體系統中提供可故障偵測與校正的技術,讓記憶體系統能夠免於全DIMM故障的影響,以及能夠在系統操作的同時,更換DIMM。
一示範實施例包括一具有記憶體控制器、複數個記憶體模組與機制的記憶體系統。記憶體模組係與記憶體控制器以及複數個記憶體裝置通訊。該機制偵測到其中一個記憶體模組之故障可能與另一記憶體模組上的記憶體裝置故障同時發生,該機制允許在有記憶體模組故障以及記憶體裝置故障的情況下記憶體系統未受阻礙地執行。
另一示範實施例包括具有連接複數個記憶體模組與機制的介面之記憶體控制器。該些記憶體模組係與複數個記憶體裝置通訊。該機制偵測到其中一個記憶體模組之故障可能與另一記憶體模組上的記憶體裝置故障同時發生,該機制允許在有記憶體模組故障以及記憶體裝置故障的情況下記憶體系統繼續未受阻礙地執行。
又另一示範實施例包括在記憶體系統中用以偵測與校正錯誤的方法,該方法包括偵測在該記憶體系統中一或多個錯誤。該記憶體系統包括複數個具有記憶體裝置的記憶體模組,該些記憶體模組因應記憶體命令而被共同地存取。該方法同以 包括利用三角測量以隔離記憶體裝置和記憶體模組的其中一個或兩者所發生的一或多個錯誤,以便識別錯誤的類型。一或多個錯誤係利用水平地被應用於在多個記憶體模組內的記憶體裝置之第一錯誤校正碼與垂直地被應用於在記憶體模組內的記憶體裝置之第二錯誤校正碼來校正。在有與一記憶體裝置故障同時發生的記憶體模組故障的情況下記憶體系統可以未受阻礙地執行。
本發明的一示範實施例利用二個獨立的碼(水平地應用與垂直地應用於RAM的區段)以偵測和校正可能與最大至全晶片(例如DRAM)故障同時發生之全DIMM故障。這麼做可同時修復故障的DIMM並允許電腦系統記憶體在修復期間持續操作,即使在有一次級晶片錯誤(secondary chip error)的情況下亦然。可處理次級晶片錯誤的能力,是新穎並有關鍵的重要性,因為在完成DIMM修復前,次級錯誤的發生率為有限的機率,特別是記憶體錯誤。
在此,同時發生係指發生二或更多個錯誤型態。在一範例中,發生了一可校正的錯誤,在第一可校正的錯誤被修復之前,發生了第二個故障。該第一與第二個故障即為同時發生。修復時間通常會大於0,而且修復時間愈長,愈有可能第二故障會恰與第一故障同時發生。在識別出一DIMM故障前,示範實施例可用以校正一DIMM故障以及很有可能最多一個額 外晶片錯誤。一旦識別出DIMM故障,本發明的示範實施例可用以校正一DIMM故障以及在任何時間的一個額外晶片錯誤。儘管在此是使用「DIMM故障」或「記憶體模組故障」,本發明的示範實施例所要防護的故障模式一般還包括將資料從DIMM傳達至記憶體控制器的通訊媒體的故障。
示範實施例為由RAM裝置(例如DRAM、SDRAM等)所組成的電腦記憶體系統提供透明的復原與完整的線上同時DIMM修復。本發明提供透明的復原,最多可用於與一記憶體晶片故障同時發生之完整記憶體子系統(例如DIMM)的故障。示範實施例使用電腦系統RAM的節點結構配合ECC的創新應用,讓任何記憶體節點都能夠被關閉而不會影響到被儲存於RAM的系統資料的存取。因此,電腦系統記憶體可持續未受阻礙地執行,提供儲存於RAM中所有資料的存取,就好比所有的記憶體節點都存在、並在開機的狀態完整的操作。在此,記憶體節點所指為與單一邏輯行(logical column)相關的所有DIMM的集合。邏輯行包含與在一資料條內的單一符號位置相關的符號,在此所述的示範實施例中,這些就是RAID-3ECC碼的單一符號。通常但不是永遠是,單一行係與單一記憶體通道相關。以本發明所述的方式來建構節點的重要性,是要提供ECC碼能夠在節點被從系統移除時,重新產生所有遺失的符號。
在一示範的實施例中,係使用DDR3 SDRAM晶片。DIMM 係採用DDR3 SDRAM晶片,每一晶片包含儲存在DIMM上的所有資料的一相等部份。本示範實施例更使用具有四個輸入/輸出針腳(例如四個裝置(x4)),其中每一存取具有8的叢發長度。換句話說,對於每一次記憶體存取,每一個SDRAM提供以8的叢發(burst)之4位元的資料,得到總共32位元或4位元組的資料(4位元×8叢發長度=32位元=4位元組)。
業界所使用的RAID技術有許多不一致與混淆之處,以下的定義,除非有另外說明,為用於本說明書的術語。一個陣列是硬碟的組合,用以實施RAID清除碼的一或更多個實例。一個符號或一個元件為資料或同位的基礎單元,清除碼的建構區塊。在編碼理論中,這是被指定至該符號內的一個位元的資料,通常是一組連續的區間(sectors)。一元件是由固定數目的位元組所組成,通常也可將元件定義為固定數目個區塊,區塊為固定數目的位元組,一資料帶(stripe)為資料與同位元件的完整與相連集合,其與同位計算方式有關。在編碼系統中,資料帶為碼字元或碼實例。資料條(strip)為單一硬碟上的連續元件之集合,資料條包含來自同一磁碟和資料條的資料元件、同位元件或二者。資料條與列的術語可互換。在編碼理論中,資料條係與碼字元相關,通常會被稱之為資料帶單元,在一碼字元內的資料條集合,會形成一資料帶。在有些情況下,資料帶可被集合在一起以形成較高層級的結構,又稱之為資料幅(stride)。
RAID-6是較為通用的RS錯誤校正碼的特定範例。RS碼一開始是由Irving Reed與Gus Solomon在1960年的論文中發表。這些威力強大的碼,已經被廣泛地使用於從深太空問題到DVD播放器的碟片錯誤上。RS碼為非二進位的循環碼,被用於資料元件或符號上。RS(n, k)碼可被定義為:k是資料符號的數目,m是位元的符號長度以及n為符號的總數。因此,0<k<n<2^(m+1)。
進一步定義,當位置並非獨立決定時,c為符號錯誤校正能力,即n-k=2c。換句話說,符號總數與資料符號的數目係與RS碼的資料校正能力直接呈比例對應。RS碼對於任何線性碼來說,可達到最大可能的最小距離,對於非二進位碼來說,最小的Hamming距離為:dmin=n-k+1。
進一步定義,e為清除校正能力(erasure correcting capability)(也就是當故障位置可獨立決定時,用以校正的能力),使得e=dmin-1=n-k=2c。換句話說,當位置未知相較於位置已透過某些獨立的方式決定的情況下,前者只能夠校正一半的故障。
RS碼利用一連串同時的計算等式來找出未知,這些未知可能是資料符號或有錯誤的符號的位置。舉例來說,RAID-6使用二個計算等式來產生二個獨立核對和,應用於每一例的每一資料元件。定義Q(x)=R-S核對和(checksum),其中x=a; P(x)=R-S核對和,其中x=1;以及d0, d1,…, dN為多項式係數,讓R-S核對和等式,可以多項式的方式表示為Q(x0)=d0+d1*x+d2*x^2+…d(N-1)*x^(N-1)。這個等式可用來找出一係數,用以校正一資料元件,以及/或者如果錯誤的位置為未知,可用於找出x的乘冪以鎖定位置。
由多項式可看出,RAID-3、RAID-4以及RAID-5的簡單XOR運算是x=1時的多項式和的特例。因此,等式會變成P(x)=d0+d1+d2+…d(N+1)。此一通用等式有許多變化,可用於本發明的示範實施例中,主要的要求是它必須是一原始多項式。也就是說,它類似一質數,沒有共同的根。這樣可以保證解答對於一有限欄位,例如Galois欄位,永遠是唯一的。
第三圖所示為一示範實施例中電腦記憶體系統配置的方式,記憶體係加入五個DIMM 302的區塊(一群)314的系統中,其中每一DIMM 302具有18個DRAM晶片。所以,在每一記憶體區塊314有總共90個DRAM晶片,跨越五個DIMM 302。其中64個DRAM晶片包含用戶可用之資料,而26個DRAM晶片是用來儲存核對和(標號為304的DRAM晶片與連接至記憶體通道306e位於DIMM 304上的區塊314之DRAM晶片)。每一記憶體區塊存取提供360個位元組的資料(假設DRAM為四個位元組),其中256個位元組是可用的用戶資料,而104個位元組係用於核對和。如此會產生28.9%的可靠性與服務性(RAS)的固定支出(overhead)。顯然地,本 發明並不限於此一特定記憶體組態配置,而其可應用於其他許多使用不同的DRAM晶片與DIMM結構之記憶體組態配置。
在第三圖所示的示範實施例中,包括五個記憶體節點316,每一個包括三個記憶體模組(DIMM 302)串接互連至一記憶體通道306。在此示範實施例中,五個記憶體通道306a-e係連接至位於一主機系統內的記憶體控制器308。每一個DIMM 302包括一集線器裝置312,用以與記憶體裝置(例如DRAM晶片)以及記憶體通道306通訊。
在此示範實施例中,ECC係產生於64個資料位元組的區塊,用以利用關鍵字元優先政策(也就是記憶體被設計為根據重要性取回字元)提供切細的叢發模式支援與低延遲存取。在DDR3裝置中,「叢發切細模式(burst chopped mode)」的支援,讓DRAM存取可以用4的叢發,代替DDR3一般所指定的8的叢發。用於此發明中的ECC也可應用於128位元組的區塊,而仍可支援叢發切細模式。ECC碼可應用於64、128或256個位元組的區塊。然而,如果該些碼是應用在取回完全的256個位元組或儲存於一單一記憶體存取中,在此情況下就無法支援叢發切細模式,因為所有256個位元組的資料會用來產生或重新產生核對和,以便與原先儲存的核對和比較來找出錯誤。
第三圖為根據本發明的一實施例之RAM系統結構的實施例高階視圖。每一個記憶體節點316係由三個DIMM 312所 組成,每一個記憶體節點316的DIMM 312的數目,可經由在許多以集線器為基礎的模組上所使用的擴充匯流排(以串接互連方式)延伸為包括超過三個DIMM 312。第三圖中的記憶體節點結構可允許任何記憶體節點316被關閉並且進行DIMM更換,而不會影響到系統記憶體的操作。該記憶體系統在任何單一記憶體節點316關閉的情況下,仍可持續未受阻礙地執行。
在第三圖中,標示為304的DRAM晶片與所有在連接至記憶體通道306e的記憶體節點316中的DRAM晶片維持特定的ECC碼,可達成同時的DIMM修復功能,在DIMM 302上的其他DRAM,則是儲存可用的用戶資料。
DIMM 302在系統中是以每五個DIMM區塊來增加,在第三圖中最上列的五個DIMM代表系統的第一DIMM區塊314。它同時可代表最小的記憶體配置,下一個五個DIMM區塊是其正下方的列。
在每一列中的第五個DIMM(例如每一列中連接至記憶體通道306e的DIMM),也就是在最右邊的節點具有包含一RAID-3核對和的DRAM晶片,該核對和是以跨其他記憶體節點內的DIMM所計算而得。連接至記憶體通道306e的DRAM不包含(或極少)的用戶可用資料。硬碟比較常用RAID-5而不用RAID-3,因為它將核對和分散於所有的硬碟以避免瓶 頸。在此實施例中,並不會有類似的瓶頸,因為在一記憶體區塊內的所有DRAM晶片都是同時地存取,因此,並不需要分配核對和。在此實施例中,資料元件具有一個位元組的符號長度,因為在一單一存取中是執行64個位元組的資料區塊。其他的實施例以RAID-4來取代RAID-3,包括具有較長符號大小的資料元件。在以下的說明中,提到RAID-3的地方,也可同樣視為RAID-4,其重點在於分散的同位,就像RAID-5用來提升硬碟配置上的做法一樣,但在此處並不需要用到RAID-5。RAID-3核對和是使用在第三圖中對應至DIMM 302的列之其他記憶體節點316內的每一對應的DRAM晶片中的對應資料元件來計算。藉由對每一DIMM使用RAID-3,可透過獨立的方式來找出有錯誤的特定DIMM 302,進而校正全DIMM故障。
示範實施例使用二個獨立的ECC碼,一個水平地應用而一個垂直地應用,以提供有效的錯誤偵測與錯誤隔離功能。要偵測與鎖定DRAM晶片錯誤,尤其是有些微小的錯誤,像是單一位元失誤(單一晶格錯誤)要比廣泛地使用RAID-3和RAID-6碼來校正硬碟的錯誤要困難得多。硬碟通常會使用嵌入至裝置上與每一資料元件或資料元件群相關的碼來偵測與鎖定較微小的錯誤,這些碼包括簡單的同位以及CRC與LRC,用以提供較佳的錯誤偵測與隔離。使用RAID-3與RAID-6來校正錯誤的有效性,在錯誤可透過獨立的方式鎖定時,效果更能加倍。從磁碟配接器到硬碟的介面通常為一命令 /回應型態的介面,其可提供完整故障硬碟的偵測,比連接每一DRAM晶片的介面要好得多。
硬碟介面係設計為磁碟轉接器會立即得知一特定硬碟並無反應,但是如果一個DRAM晶片故障,除非取回的資料與原先儲存的不符,否則無法得知有錯誤,因此需要其他獨立的方式來偵測。硬碟儲存較便宜,而且儲存的量大,所以加上檢查機制所帶來的固定成本不會像用於RAM一樣來得昂貴。在RAM之中,加上嵌入的檢查碼,可提升錯誤偵測效能,但會大幅影響記憶體密度、功率消耗、效能、整體記憶體大小乃至於電腦系統的成本。因此RAM ECC碼必須盡可能地有效率。
為了克服上述限制,示範實施例描述了水平地應用RAID-3碼垂直地應用RAID-6碼以及二維三角測量,用以有效地隔離錯誤。一旦將錯誤隔離後,RAID-3列碼與RAID-6行碼可用來校正錯誤。如上所述RAID-3碼係應用於跨DIMM,而RAID-6碼,例如在示範實施例中的一個[18,16]R-S碼,是獨立地應用於每一DIMM。在第三圖中標號304的DRAM晶片儲存了用於個別的DIMM 302之[18, 16]R-S核對和。這些[18, 16]R-S核對和是利用在每一DIMM 302上的其他16個DRAM晶片的對應資料元件計算而得。
藉由將這些獨立的ECC碼水平地與垂直地應用於每一資料元件,RAID-3應用於列中跨DIMM的DRAM晶片資料元 件,而RAID-6應用於行中跨DIMM的DRAM晶片資料元件,實質上增進了錯誤隔離與錯誤校正能力,而不會有明顯的固定支出。此一新的ECC具有28.9%的固定支出,或比目前應用於高階系統中的許多ECC要多17.8%。一個用於高階系統記憶體的ECC碼的範例為一個[35, 32]R-S碼,其可提供單一晶片錯誤校正以及雙晶片錯誤偵測能力。
在此所述的示範實施例可提供100%的偵測與機率高的校正,最大可至全DIMM故障(18個DRAM晶片)。對於在單一DIMM上大於二個DRAM晶片錯誤來說,有很小的機率RAID-6行計算會錯誤地產生看來是有效的解答。在此情況下,對列應用RAID-6不一定可偵測到錯誤,然而,只要在單一DIMM中有包含錯誤,則RAID-5檢查碼在任何時間都可找到錯誤。一旦識別出故障的DIMM,本發明的示範實施例可在任何時間提供最大到全DIMM的故障校正。
如下所述,示範實施例也可提供100%的偵測與機率高的校正,最大可至恰有可能與全DIMM故障(19個DRAM晶片)同時發生的全晶片故障。可由次級錯誤復原的能力是相當重要的,儘管同時性的故障事件相當少見,但是在可執行或完成同時的DIMM修復之前或其過程中,仍有可能遇到恰與另一DIMM故障同時發生的全DIMM故障之次級錯誤,尤其對於單一晶格的次級故障來說更有可能。如前所述,一旦識別出故障的DIMM,本發明的示範實施例可在任何時間校正恰有 可能與一晶片(在此也可稱為記憶體裝置)錯誤同時發生的全DIMM故障。
以下為示範的錯誤情境,用以顯示本發明的示範實施例如何提供增進的復原能力及其限制。
第四圖所示為第三圖的記憶體系統組態之邏輯檢視。在以下說明中,Dxy為資料元件;Pxy為RAID-3列核對和;Pxy'為重新產生的核對和;Qxy為RAID-6核對和;Qxy'為重新產生的核對和;Q0x為一個RAID-6列核對和(這是RAID-6的RAID-5核對和,例如Q01=D01+D11+D21+…+DF1,其中“+”為一XOR運算);Q1y為另一RAID-6列核對和(例如Q11=D01+D11*x+D21*x^2+…+DF1*x^15);exy、zxy與wxy為錯誤(加在正確資料上以產生錯誤的隨機變數);Rxy為Qxy核對和的行RAID-3核對和。
參考第四圖,最右邊的邏輯表示圖描述了一完整的電腦記憶體組態配置。每一行代表一由18個DRAM晶片所組成的單一DIMM,在每一DRAM晶片上的資料元件,係以Dxy表示。RAID-3核對和元件402(Pxy和Rxy),係於跨DIMM上根據每一個DRAM資料元件逐列地產生。對RAID-3來說,核對和為每一列中的資料元件的XOR計算:Px0=Dx0+Dx1+Dx2+Dx3。舉例來說,當x=2,P20=D20+D21+D22+D23。
RAID-6核對和元件404被表示為Qxy,是由相關行內的每一資料元件所產生。
第四圖所示為如何偵測與校正單一DRAM晶片錯誤的方法,左邊的邏輯表示圖顯示為沒有錯誤的完整功能的記憶體。第四圖右側顯示在DRAM晶片中標示為D42的位置有錯誤,該錯誤可以是單一位元錯誤、多位元錯誤或任何其它錯誤的組合,有可能是全DRAM晶片的故障。本發明的示範實施例可提供單一DRAM錯誤的100%的偵測與校正。
具有錯誤的特定DRAM晶片會以所謂的二維三角測量加以隔離,其中會共同使用RAID-3列核對和與RAID-6行核對和以鎖定錯誤的位置。在一記憶體讀取操作中,RAID-3核對和Pxy'和RAID-6核對和Qxy'會由從記憶體所讀取的資料重新產生。重新產生的核對和Pxy'、Qxy',以及Rxy'會與先前儲存的核對和Pxy、Qxy以及Rxy相比較。如果它們都相等:Pxy'=Pxy, Qxy'=Qxy,以及Rxy'=Rxy,則可假設沒有資料錯誤而由記憶體所取回的資料會被驗證為正確的。如果只有單一被重新產生的核對和Qxy'並不符合所儲存的核對和,則表示儲存該核對和的DRAM晶片有錯誤,由於在此範例中用戶資料仍然有效,因此不需要校正資料。
如第四圖所示,重新產生的RAID-3核對和Pxy'和所儲存 的核對和並不符合時,表示在該列中有一個錯誤。在此範例中,P40並不符合P40',所以表示包含D40、D41、D42、D43和P40的列有錯誤。有可能是資料元件D40、D41、D42、D43,或該列RAID-3核對和P40係與錯誤有關,其中甚至可能有多個錯誤。將重新產生的列RAID-3核對和P40'與所儲存的核對和P40比較,只能夠隔離該列,RAID-6行核對和可用來進行進一步的隔離。如果重新產生的RAID-6核對和Qxy'符合所儲存的核對和Qxy,那麼RAID-3核對和DRAM晶片Pxy有錯誤。在此範例中,重新產生的RAID-6核對和Q02'和Q12'並不符合所儲存的核對和Q02和Q12,在此使用二維三角測量,可鎖定錯誤為D42,也就是具有錯誤的DRAM晶片。
一旦隔離出錯誤,只要將其它列資料元件和RAID-3儲存的RAID-3核對和作XOR運算,即可校正錯誤:D42=D40+D41+D43+P04,或者將行資料元件與所儲存的RAID-6核對和作XOR運算:D42=D02+D12+D22+D32+D52+…+DB2+DC2+DD2+DE2+DF2+Q02。其它RAID-6, [18, 16]R-S等式也可用來校正錯誤。
由於這是單一DRAM晶片錯誤,三個重新產生的核對和,RAID-3核對和與二個RAID-6核對和不能符合所儲存的核對和,而所有其它重新產生的RAID-3與RAID-6核對和必須符合所儲存的核對和。在此範例中,P40'不符合P40,而重新產生與所儲存的RAID-6核對和Q02'與Q02,以及Q12'與 Q12不符合,如此可得知D42有一DRAM晶片錯誤。同樣地,如果RAID-6核對和Q0y'或Q1y的其中一個並不符合其中一個所儲存的RAID-3核對和Q0y或Q1y,則可得知其為錯誤的來源。對於有一單一資料元件錯誤Dxy來說,重新產生與所儲存的核對和Q0y'和Q0y,以及Q1y'和Q1y必須有一不符合的情形,Pxy'和Pxy亦然。
以下將描述較為複雜的錯誤類型以便瞭解本發明的示範實施例之所有功能。
第五圖顯示為本發明的方法可輕易延伸至處理單一DIMM上的多個DRAM晶片錯誤,以及處理在該DIMM上所有18個DRAM晶片的全DIMM故障。首先描述的是單一DIMM故障的情況,在此範例中,許多,或許所有的,重新產生的RAID-3列核對和Pxy'與所儲存的Pxy並不符合,顯示多個列有錯誤。然而,在此範例中,比較重新產生的RAID-6核對和Qxy'與所儲存的Qxy時,可看出只有與單一行相關的二個核對和不符合,因此,可知錯誤係發生於單一DIMM中。在此範例中,重新產生的核對和Q02'與Q12'並不符合所儲存的核對和Q0'與Q12,所以可知道故障係與第三條DIMM有關。有極小的可能性為在DIMM中的錯誤使得相關的RAID-6核對和為0,在此情況下,本發明只能提供錯誤偵測,而非錯誤校正。
只要是只有單一行有錯誤,整個DIMM的資料可被重置,使用列RAID-3校正的資料如下:Dx2=Dx0+Dx1+Dx3+Px0,其中x=0, 1, 2,…, F。這是一個非常重要的功能,因為要進行同時DIMM修復就必須要有全DIMM故障復原功能。當DIMM被熱插拔時,它看起來會像是全DIMM故障,為每一個DIMM加上一個偵測線,可以保証在DIMM被從系統中移除時維持隔離。
第六圖所示為當二個DRAM錯誤發生在二個不同的DIMM時的處理方式,二個隨機錯誤同時發生的機率幾乎為0。然而,在第一個故障被同時修復動作清除或有一DRAM分出動作之前,也有可能發生第二個故障。
在第六圖中,有與D42和D91相關的實際DRAM晶片錯誤。錯誤可由先前所述相同的核對和重新產生步驟來偵測,在此,重新產生的RAID-3核對和P40'和P90'並不符合所儲存的核對和P40和P90,因此可知,錯誤係與此二行相關。此外,與第二行相關的RAID-6核對和Q01'和Q11'並不符合所儲存的核對和Q01和Q11,所以可知道,在第二行中有一個錯誤。進一步來說,重新產生的RAID-6核對和Q02'和Q12'並不符合所儲存的Q02和Q12,所以可知道第三行有一個錯誤。二維三角測量可用獨立的核對和來鎖定具有錯誤的DRAM。P40和Q02或Q12的交叉明顯鎖定了D42為具有錯誤的DRAM晶片。P90和Q01或Q11同樣清楚地與正確地鎖定D91為具 有錯誤的DRAM晶片。
另外,P40與Q01或Q11的交叉鎖定了D41,而P90與Q02或Q12的交叉鎖定了D92。然而,這些DRAM晶片並沒有錯誤。用上述的資料無法決定四個DRAM晶片中,哪一個有錯誤,不過這並不是問題,RAID-6, [18,16]R-S碼具有3的最小距離,可隔離和校正單一錯誤,或者當位置可由另一獨立方法鎖定時,校正二個錯誤。在此情況下,RAID-3列核對和可以鎖定該列,而RAID-6行核對和可以鎖定行。現在有四個等式與四個未知數D41、D42、D91、D92,可用來校正可能有問題的四個DRAM晶片:Q01=D01+D11+D21+D31+D41+D51+D61+D71+D81+D91+…+DF1; Q11=D01+D11*x+D21*x^2+…+DF1*X^15; Q03=D02+D12+D22+D32+D42+D52+D62+D72+D82+D92+…+DF2;以及Q12=D02+D12*x+D22*x^2+…+DF2*X^15。
第六圖所示為最多任何二個DRAM錯誤,在任何時間都能被隔離與校正。
第七圖所示為恰有與最大至全DIMM故障同時發生的次級DRAM晶片故障所遭遇到的問題。如果無法將第一個故障 隔離和鎖定,那麼只是比較重新產生和所儲存的核對和,無法決定在這二條DIMM上是哪一DRAM晶片有錯誤。這是因為大多數的RAID-3列檢查碼Pxy和Rxy只能顯示列有錯誤,然而Pxy列檢查碼與Qxy行檢查碼的交叉顯示在二條DIMM上所有的DRAM晶片都可能有錯誤。不過仍有方法可以解決此一困難之處。
第八圖所示為當有全DIMM故障並恰有另一單一DRAM晶片錯誤發生在另一DIMM上的時候,錯誤如何在校正過程中傳播的細部情形。在此情況下並不需要知道哪一個錯誤先發生,才能提供100%的偵測與可能性高的錯誤類型校正。如前所述,當有一全DIMM故障恰與另一單一DRAM晶片錯誤同時發生時,大多數,或許所有重新產生的RAID-3列核對和Pxy'並不符合所儲存的核對和Pxy,顯示在列中有錯誤。然而,在此例中,為第一DIMM重新產生的RAID-6行核對和Q00'和Q10'並不符合所儲存的核對和Q00和Q10,顯示第一DIMM有錯誤。此外,為第一DIMM重新產生的RAID-6行核對和Q02'和Q12'並不符合所儲存的核對和Q02和Q12,顯示第三DIMM有錯誤(可能性高)。在此例中,故障的DIMM並沒有被鎖定,所以要在沒有該資訊的情況下想辦法復原錯誤。資料只有在當一條DIMM上最多有一單一DRAM晶片錯誤,而另一DIMM(最多19個DRAM晶片錯誤上)上恰有一全DIMM故障同時發生時,才可以被校正。為了達成此目的,必須假設每一條有問題的DIMM具有全DIMM故障,而另一DIMM具 有單一DRAM晶片錯誤,以找出單一有效的解答。
回到第八圖,其中正確地假定第三條DIMM具有全DIMM故障而第一條DIMM具有單一DRAM晶片錯誤,RAID-3行等式可用來校正在第三條DIMM上的資料:Dx2=Dx0+Dx1+Dx3+Px0,其中x=0, 1, 2,…, F。
在嘗試使用RAID-3校正第三條DIMM故障時,錯誤典型變成如右圖所示,D40與D42仍然包含e40,更糟糕的是,錯誤無法由列RAID-3加以偵測,因為在XOR運算中,同樣的錯誤會被抵銷掉,所儲存的P40和重新產生的P40'比較後顯示沒有錯誤,不過,實際上仍然有至少一個錯誤存在,所以系統繼續執行並使用行RAID-6等式來鎖定與校正錯誤。這麼做可以清除與D40和D42相關的e40錯誤,讓所有的RAID-3和RAID-6重新產生與所儲存的核對和相符。現在則假設另一條DIMM具有全DIMM故障,來確認這並非有效的解答。
第九圖所示為當錯誤地假設第一條DIMM具有全DIMM故障而第三條DIMM具有單一DRAM晶片錯誤時,會發生的情況。如前所述,RAID-3行等式係用來校正在第三條DIMM上的資料:Dx0=Dx1+Dx2+Dx3+Px0,其中x=0, 1, 2,…, F。其結果為在第九A圖中右區塊所示的錯誤典型,所有與第三條DIMM上的DRAM晶片相關的錯誤會傳播至在第一DIMM上對應的DRAM晶片。由於它們是同樣的錯誤,比較所有重 新產生的RAID-3列核對和Pxy'與所儲存的核對和,顯示它們相同。RAID-3列核對和不會偵測出任何錯誤,所以也無法顯示有列錯誤。然而,第一與第三RAID-6行核對和會顯示在這些行中有錯誤的存在,所以,由目前重新產生與所儲存的核對和來看,似乎假設另一DIMM具有全DIMM故障是正確的,只不過錯誤已經傳播至第一與第三條DIMM上的每一條DRAM晶片。
第九B圖所示為在做出正確的假設前,試著使用RAID-6行來鎖定與校正二個單一晶片錯誤所會發生的情形。在大多數情況下,當試著解出RAID-6等式時,會產生無效的解答,在發生此情況時,可知道答案是錯誤的,而另一答案是正確的。然而,在255個可能性中,有18個有效的位置,所以有相當高的可能性:(18/255)=0.0706不會偵測到錯誤。所以有7%的機會,會產生看起來有效的無效解答,而不會被加以偵測。在此情況下,執行並完成RAID-6校正,會發現重新產生的核對和等於所儲存的核對和,也會發現所有的核對和符合包括RAID-3和RAID-6的核對和。使用RAID-6等式,在行中有超過一個錯誤時,會產生錯誤的結果(在此,RAID-6是用做單一錯誤校正碼,而不是二個被清除的符號錯誤校正碼)。在此範例中,於第九B圖計算結果會產生如右圖的錯誤典型,其中與每一列中的每一對應DRAM晶片相關的錯誤會相同:s00=Q00+Q00'=z02+z12+z22+…ZF2+W02以及s02=Q02+Q02'=Z02+Z12+Z22+…+ZF2+W02,所以:s00=s02。
如此指出RAID-6等式的解答係獨立於所儲存的資料,而僅與二行相同的錯誤相關。由於錯誤相同,因此無效的解答不會被偵測到,而且會列對準(row align),讓RAID-3或RAID-6核對和無法偵測錯誤。只要錯誤而不被偵測到的解答為列對準,在RAID-6行校正後,RAID-3列核對和就無法偵測出錯誤(假設RAID-6校正不會產生無法校正的錯誤(uncorrectable error, UE))。在此範例中,所儲存的P60符合重新產生的P60'核對和,因為在XOR操作中於D60與D62二者中的S00+z62會被抵銷。
不過,對此問題有一個相當簡單的解決方法,如第九C圖所示,RAID-6等式的解答為錯誤資訊的函數,以下所示為在RAID-6校正後如何解決未偵測到的錯誤之列與錯誤量對準問題。
參考第九A圖的第一行中的Q00核對和,Q00所儲存的核對和為:Q00=D00+D10+D20+…+DF0。在使用RAID-3列等式嘗試校正錯誤後,所儲存的核對和變成:Qmod00+D00+D10+D20+…+DF0+w02=Q00+w02。重新生產的核對和將會是:Q00'=D00+D10+D20+…+DF0+z02+z12+z22+…+zF2。當比較重新產生與所儲存的核對和,結果是:S00=Qmod00+Q00'=Q00+w02+Q00'=z02+z12+z22+…+zF2+w02。
對第三行執行同一操作,會產生Q02,其所儲存的核對和等於:D02+D12+D22+…+DF2。在使用RAID-3列等式嘗試校正錯誤後,所儲存的核對和變成:Qmod02=D02+D12+D22+…+DF2+w02=Q02+w02。重新生產的核對和將會是:Q02'=D02+D12+D22+…+DF2+z02+z12+z22+…+zF2。當比較重新產生與所儲存的核對和,結果是:S02=Qmod02+Q02'=Q02+w02+Q02'=z02+z12+z22+…+zF2+w02。
因此,很明顯的,對第一與第三行的第一RAID-6核對和會有相同的解答:S00=S02=z02+z12+z22+…+zF2=w02。對第二個核對和進行類似的分析會產生:S10=S12=z02+z128X+z22*X^2+…+zF2*X^15+w12。因此,如果錯誤恰與產生看起來像是有效的解答相同,錯誤將會為列對準而無法被RAID-3列檢查偵測到。
不過在第九C圖中,有一個簡單的步驟可以避免此一對準情況的發生,定義四個常數a、b、c、d為彼此不相等的數目,而且都不是0。第一個RAID-6核對和會被修正為:Q00=D00+D10+D20+…+DF0,Q01=D01+D11+D21+…+DF1,Q02=D02+D12+D22+…+DF2,以及Q03=D03+D13+D23+…+DF3,也就是:Q00=a*(D00+D12+D20+…+DF0),Q01=b*(D01+D11+D21+…+DF1),Q02= c*(D02+D12+D22+…+DF2),以及Q03=d*(D03+D13+D23+…+DF3)。
接著再用第九A圖做為範例,所儲存的Q00核對和為:Q00=a*(D00+D10+D20+…+DF0)。在使用RAID-3例等式來修正所儲存的核對和後,變成:Qmod00=a*(D00+D10+D20+…+DF0)+w02=Q00+w02。重新產生的核對和為:Q00'=a*(D00+D10+D20+…+DF0+z02+z12+z22+…+zF2)。當比較重新產生與所儲存的核對和,結果為:S00=Qmod00+Q00'=Q00+w02+Q00'=a*(z02+z12+z22+…+zF2)+w02。在此,除以a可得到所儲存的資料數值,也就是:S00/a=z02+z12+z22+…+zF2+w02/a。
在第三行中,所取回的第一核對和為:Q02=QW02+c*(D02+D12+…+DF2),而重新產生的核對和為:Q02'+c*(D02+D12+…+DF2+Z02+Z12+…+ZF2)。所以S02=Q02+Q02'=W02+c*(Z02+Z12+…+ZF2)。很明顯的,如果w02不等於0,那麼S02/c與S00/a會不相同,如此預防對行1與行3所做的單一符號校正為同一校正,這個方法可藉由對每一DIMM上第二個冗餘晶片所儲存的核對和執行類似的修正而加以改進。
由此可看出,在第一與第二行內的第一RAID-6核對和的解答不會相同,這是因為在W02不為0的情形下,w02/a與 w02/c並不相同。在此範例中,透過RAID-6校正錯誤會在DRAM晶片D62與D90中產生可由列RAID-3核對和偵測到的錯誤。
以下敘述顯示在第八圖的第一種情況下,其中正確地假設第三DIMM具有全DIMM故障,再加上偏移(offset)時,仍然有效。如前所述,RAID-3行等式可用來校正第三條DIMM上的資料:Dx2=Dx0+Dx1+Dx3+Px0,其中x=1, 2,…, F。在試圖使用RAID-3校正第三條DIMM的錯誤時,結果如同右圖的錯誤典型,D40與D42仍然包含錯誤e40,在此,由於它是同樣的錯誤,因此無法由列RAID-3加以偵測,所以在列RAID-3 XOR運算中,會被抵銷。所儲存的P40與重新產生的P40'比較的結果會顯示沒有錯誤。不過系統中至少還會有一個錯誤,所以演算法會繼續執行,並且用修正的行RAID-6等式,也就是具有偏移的等式來鎖定與校正錯誤。
具有偏移的修正RAID-6等式為;Q00=a*(D00+D10+D20+…+DF0),Q01=b*(D01+D11+D21+…+DF1),Q02=c*(D02+D12+D22+…+DF2),以及Q03=d*(D03+D13+D23+…+DF3)。Q00的所儲存的核對和為:Q00=a*(D00+D10+D20+…+DF0)。當使用RAID-3列等式來校正錯誤後,所儲存的核對和變成:Qmod00=a*(D00+D10+D20+…+DF0+e40)。重新產生的核對和為:Q00'=a*(D00+D10+D20+…+DF0+e40)。當比較重新產生的核對和與所儲存的核對和 時,結果為:S00=Qmod00+Q00'=a*(e40),經過除法運算後,可將a除去,剩下e40,其與使用偏移前所得到的結果相同。
現在對第三行執行同樣的操作,所儲存的核對和Q02為:Q02=c*(D02+D12+D22+…+DF2+e40),在使用RAID-3列等式來校正錯誤後,所儲存的核對和變成:Qmod02=c*(D02+D12+D22+…+DF2)=Q02。重新產生的核對和為:Q02'=c*(D02+D12+D22+…+DF2+e40)。當比較重新產生與所儲存的核對和時,結果為:S02=Qmod02+Q02'=c*(e40)。經過除法運算後,可將c除去,剩下e40,其與使用偏移前所得到的結果相同。因此,偏移在兩種情況下都可正常的使用。
第十圖所示為全DIMM失效(在此也稱為一DIMM故障),加上二個額外的DRAM裝置(在此也稱為DRAM晶片)錯誤同時發生在另一DIMM的情形,這種情形相當少見。在此,首先正確地假設第三條DIMM具有全DIMM故障,接著使用RAID-3來嘗試校正錯誤會得到如左圖所示的錯誤典型。如前所述,這些錯誤都無法由RAID-3列核對和Pxy加以偵測,而這些錯誤可由RAID-6行核對和加以偵測,但是由於在每一個行中有超過一個的錯誤,所以RAID-6無法鎖定與校正這些錯誤。如果假設每一行有一個錯誤,而嘗試用RAID-6等式來偵測,有7%的機會(18/255=0.0706的可能性)找不出錯誤來。用偏移無法找出錯誤的原因是沒有錯誤係與行核對和 相關。當沒有偵測到錯誤時,解答將會列對準,因此無法偵測到問題。
存在偵測(presence detect)(用以指示以安裝DIMM,以及DIMM屬性)與故障紀錄,可用來提升本發明的示範實施例之有效性。
第十一A圖至第十一C圖所示為可由示範實施例執行的示範流程,此一機制可以執行由位於記憶體控制器308上的軟體以及/或者硬體所實施的流程。在另一示範實施例中,某部份的機制係位於記憶體控制器308上,而某部份係位於一或更多個記憶體模組302上,例如在集線器裝置312中的處理,係由記憶體控制器308與記憶體模組302共同分擔。在另一替代的示範實施例中,所有或部份的機制係位於主機處理器310上。
參考第十一A圖,流程由區塊1102開始。在區塊1104,接收一讀取要求(例如一主要儲存快取線讀取要求)。在區塊1106,因應讀取要求決定在所傳回的資料中是否有錯誤,如果所有的核對和結果並不等於0,表示有錯誤,如果沒有錯誤,則流程進至區塊1108,其中將所要求的資料回傳給要求者(例如將正確資料傳送給快取)。
如果在區塊1106決定有一錯誤存在,那麼在區塊1112決 定錯誤簽章是否為單一資料符號錯誤簽章(例如Px=1、Q0y=1以及Q1y=1)。若是的話,則執行區塊1114以使用二維三角測量鎖定符號錯誤位置。在區塊1116,決定三角測量的結果是否為已知已鎖定的單一符號錯誤(SD1)。對多個錯誤來說,可用錯誤鎖定的方式來找出正確的錯誤簽章,且正確率較高,因此可降低在一些稀有事件中遇到模稜兩可的情況,提升偵測與校正的有效性。如果三角測量的結果為已知被鎖定的單一符號錯誤(SD1),如區塊1116所決定的,那麼流程進至區塊1120,若否的話,則執行區塊1118,將錯誤位置與錯誤類型儲存下來,以鎖定錯誤。接著,流程進至1120,其中Px0、Q0y或Q1y核對和會被儲存至記憶體以用來校正清除錯誤(erasure),流程繼續進至區塊1108。
如果在區塊1112決定錯誤簽章並非單一資料符號錯誤簽章,則執行區塊1122。在區塊1122決定該錯誤簽章是否為影響一列和一行的單一核對和錯誤簽章(例如Px=1、Q0y=1以及Q1y=1)。若是的話,在區塊1124利用二維三角測量以鎖定符號錯誤位置。在區塊1126,決定三角測量的結果是否為已知被鎖定的單一符號錯誤(SE1),若是的話,流程進至區塊1130,若否的話,執行區塊1128,而將錯誤的位置與錯誤類型儲存下來,以鎖定錯誤。接著流程進至區塊1130,其中重新產生Px0、Q0y或Q1y核對和並寫入記憶體。流程繼續進至區塊1108。
如果在區塊1122決定錯誤簽章並非單一核對和錯誤簽章,則執行區塊1132。在區塊1132決定該錯誤簽章是否為一雙核對和錯誤簽章(例如Px=1與Q0y=1或Px與Q1y=1),若是的話,在區塊1136利用二維三角測量鎖定符號錯誤位置。在區塊1138決定該三角測量的結果是否為已知被鎖定的雙符號錯誤(SD2)。若是的話,流程進至區塊1142,若否的話,執行區塊1140,而錯誤位置與錯誤類型會被記錄以鎖定錯誤。流程接著進至區塊1141,其中重新產生Px0、Q0y或Q1y核對和並寫入記憶體。流程繼續進至區塊1108。
如果在區塊1132決定該錯誤簽章並非雙核對和錯誤簽章,則執行第十一B圖的區塊1134。接著,執行在第十一B圖中的區塊1144以決定該錯誤簽章是否為影響二列與二行的雙資料符號錯誤簽章(例如Px=2與Q0y=2與Q1y=2)。若是的話,則執行區塊1146,以利用二維三角測量來鎖定二個符號錯誤位置。在區塊1148決定三角測量的結果是否為已知被鎖定的單一符號錯誤(SD1),若是的話,則流程進至區塊1152,若否的話,則執行區塊1150,而錯誤位置與錯誤類型會被記錄以鎖定錯誤。在區塊1152,Px0、Q0y或Q1y核對和係用來校正二個錯誤,而所校正的資料會被寫入記憶體。流程繼續進至第十一A圖的區塊1110。
如果在區塊1144決定該錯誤簽章並非影響二列與二行的雙資料符號錯誤簽章,則執行區塊1154以決定該錯誤簽章是 否為影響一列與二行的雙資料符號錯誤簽章(例如Px=1與Q0y=2與Q1y=2)。若是的話,則執行區塊1156,以利用二維三角測量來鎖定二個符號錯誤位置。在區塊1158決定三角測量的結果是否為已知被鎖定的二個符號錯誤(SD1),若是的話,則流程進至區塊1162,若否的話,則執行區塊1160,而錯誤位置與錯誤類型會被記錄以鎖定錯誤。在區塊1162,Q0y或Q1y核對和係用來校正二個錯誤,而所校正的資料會被寫入記憶體。流程繼續進至第十一A圖的區塊1110。
如果在區塊1154決定該錯誤簽章並非影響一列與二行的雙資料符號錯誤簽章,則執行區塊1164以決定該錯誤簽章是否為影響二列與一行的雙資料符號錯誤簽章(例如Px=2與Q0y=1與Q1y=1)。若是的話,則執行區塊1168,以利用二維三角測量來鎖定二個符號錯誤位置。在區塊1170決定三角測量的結果是否為已知被鎖定的二個符號錯誤(SD1),若是的話,則流程進至區塊1174,若否的話,則執行區塊1172,而錯誤位置與錯誤類型會被記錄以鎖定錯誤。在區塊1174,Px0核對和係用來校正二個錯誤,而所校正的資料會被寫入記憶體。流程繼續進至第十一A圖的區塊1110。
如果在區塊1164決定該錯誤簽章並非影響二列與一行的雙資料符號錯誤簽章,則執行第十一C圖的區塊1166。接著在第十一C圖的區塊1176決定該錯誤簽章是否為影響所有列與一行的單一DIMM錯誤簽章(例如Px>2與Q0y=1與Q1y =1)。若是的話,則執行區塊1178,以利用二維三角測量來鎖定DIMM位置。在區塊1180決定該三角測量的結果是否為已知被鎖定的單一DIMM錯誤(SD5),若是的話,則流程進至區塊1184,若否的話,則執行區塊1182,而錯誤位置與錯誤類型會被記錄以鎖定DIMM。在區塊1184,Py0核對和係用來校正錯誤,而所校正的資料會被寫入記憶體。流程繼續進至第十一A圖的區塊1110。
如果在區塊1176決定該錯誤簽章並非影響所有列與一行的單一DIMM錯誤簽章,則執行第十一C圖的區塊1186。接著,在第十一C圖的區塊1186決定該錯誤簽章是否為影響所有列與二行的單一DIMM與單一DRAM晶片錯誤簽章(例如Px>2與Q0y=2與Q1y=2)。若是的話,則執行區塊1190,在假設DIMM故障(D0a, D1a, D2a,…DFa, Q0a, Q1a,其中Q0y和Q1y為y=a, b)的情況下嘗試校正錯誤。區塊1190至1198所述的流程,已經在第七圖至第十圖中描述。接下來,執行區塊1192,以找出額外的符號錯誤Dxa與Dxb,並以Q0a、Q1a、Q0b與Q1b RAID-6演算法加以校正。在重新產生所有結果並發現它們均不為0的情況下執行區塊1193。
接著執行區塊1194,在假設DIMM故障(D0b, D1b, D2b,…DFb, Q0b, Q1b,其中Q0y和Q1y為y=a, b)的情況下嘗試校正錯誤。接下來,執行區塊1195,以找出額外的符號錯誤Dxa與Dxb,並以Q0a、Q1a、Q0b與Q1b RAID-6演 算法加以校正。在重新產生所有結果並發現它們均不為0的情況下執行區塊1196。
接下來,執行區塊1197,以決定是否只有DIMM a或DIMM b產生所有非0的結果。如果只有DIMM a或DIMM b產生所有非0的結果(也就是錯誤是在DIMM a或DIMM b),則執行區塊1198以將校正的數值寫入至記憶體而回傳與所有非0結果相關的校正資料。接著,流程進至第十一A圖的區塊1110。
如果在區塊1197決定DIMM a和DIMM b均產生所有非0結果(也就是錯誤可在DIMM a或DIMM b),那麼流程進至區塊1188,此外,如果在區塊1186決定錯誤簽章並非影響所有列和二行的單一DIMM與單一DRAM晶片錯誤簽章,則流程進至區塊1188。在區塊1188,會判定該錯誤為無法校正的記憶體錯誤。
第十二圖所示為可用來執行二維三角測量的示範流程圖,流程由區塊1202開始。在區塊1204,Px0、Q0y或Q1y核對和會被重新產生,並由讀取自記憶體的資料寫入並加至所儲存的核對和。在區塊1206決定是否與資料相關的所有核對和結果等於0(也就是資料沒有錯誤)。如果資料沒有錯誤,流程進至區塊1208,而「沒有錯誤」的結果會在區塊1210傳回給要求者。
如果在區塊1206決定資料中有一錯誤,則執行區塊1212以識別Px0的所有x和Qzy的所有y中非0的項目。在區塊1214,將錯誤分類(利用第十三圖的表)為SD1、SD2、SD3、SD4、SD5、SD6、SE1或SE2。接著,執行區塊1216,而將被分類為SD1、SD2、SD3與SD4的符號錯誤的位置設定為Dxy。接著,執行區塊1218,而將被分類為SD5的錯誤的符號錯誤的位置設定為DIMM D0y、D1y、D2y、…Dfy、Q0y、Q1y。接著,執行區塊1220,而將被分類為SD6,其中y=a, b的符號錯誤的位置設定為DIMM D0a、D1a、D2a、…Dfa、Q0a與Q1a或D0b、D1b、D2b、…DFb、Q0b、Q1b。接著,執行區塊1222,而將額外的符號錯誤的位置設定為Dxa與Dxb,並於猜測正確的DIMM與匹配結果後,由Q0a、Q1a、Q0b以及Q1b RAID-6演算法鎖定與校正。流程繼續進至區塊1210。
第十三圖所示為第十一A圖至第十一C圖與第十二圖的流程所用的錯誤分類表。
在此所述的流程與分類僅為示範性質,而在不悖離本發明的範疇的情況下,可採用其它流程與分類方式。
在示範實施例中,集線器裝置可透過多點或點對點匯流排結構(其可進一步包括一連接至一或更多個額外集線器裝置的串接連線)連接至記憶體控制器。記憶體存取要求係由記憶體 控制器透過匯流排結構(例如記憶體匯流排)傳送至所選擇的集線器。因應接收到的記憶體存取要求,集線器裝置將記憶體存取要求轉譯以控制記憶體裝置儲存來自集線器裝置的資料或提供讀取的資料給集線器裝置。讀取的資料會被編碼為一或更多個通訊封包,並透過記憶體匯流排傳輸至記憶體控制器。
在另一示範實施例中,記憶體控制器可與一或更多個處理器晶片與支援邏輯整合在一起,並被封裝於獨立的晶片(一般稱為北橋晶片)中,並與一或更多個處理器以及/或者支援邏輯被包含於一多晶片載體,或被封裝於最適合該應用/環境的各種替代形式中。任何的解決方案可以或不採用一或更多個窄/高速連結以連接至一或更多個集線器晶片以及/或者記憶體裝置。
記憶體模組可以用各種技術來實施,其中包括DIMM、單直列記憶體模組(SIMM)以及/或者其它記憶體模組或機卡結構。一般來說,DIMM所指為基本上由在一或雙側的RAM或裸晶所組成的小電路板,在機板的二側均有訊號以及/或者電力針腳。相形之下,SIMM為基本上由在一或雙側的RAM或裸晶所組成的小電路板,以及沿著機板的一長側有單一列的針腳。第一圖所示的DIMM包括168個針腳,而其它的DIMM可有從100到超過300個針腳。在此敘述的示範實施例中,記憶體模組可包括二或更多個集線器裝置。
在示範實施例中,記憶體匯流排是用多點以及/或者點對點連線連結至在記憶體模組上的集線器裝置。控制器介面(或記憶體匯流排)的下游部份,又稱為下游匯流排,可包括傳送至在記憶體模組上的集線器裝置之命令、位址、資訊及其它操作、初始化或狀態資訊。每一集線器裝置可經由旁路電路簡單地將資訊傳送給後續的集線器裝置;如果決定要給一下游集線器裝置,則接收、轉譯與重新驅動資訊;重新驅動所有或部份的資訊,而不事先轉譯資訊,以決定所需要的接收者;或執行這些選項的一子集或組合。
記憶體匯流排的上游部份,又稱之為上游匯流排,傳回所需要的讀取資料以及/或者錯誤、狀態或其它操作資訊,而此資訊可經由旁路電路簡單地將資訊傳送給後續的集線器裝置;如果決定要給一上游集線器裝置以及/或者在處理器結構中的記憶體控制器,則接收、轉譯與重新驅動資訊;重新驅動所有或部份的資訊,而不事先轉譯資訊,以決定所需要的接收者;或執行這些選項的一子集或組合。
在一替代的示範實施例中,點對點匯流排包括一交換器或旁路機制,讓匯流排資訊在與下游通訊(從記憶體控制器傳遞至記憶體模組上的集線器裝置之通訊)的過程中,被引導至二或更多個集線器裝置的其中之一,以及通常透過一或更多個上游集線器裝置引導上遊資訊(從記憶體模組上的集線器裝置傳遞至記憶體控制器的通訊)。進一步的實施例包括使用連續的 模組,如熟悉此技藝者所知,可被放置於一串接互連記憶體系統內的記憶體控制器與第一個連續的集線器裝置(例如與一或更多個記憶體裝置通訊的集線器裝置)之間,使得任何介於記憶體控制器與第一連續集線器裝置之間的中介集線器裝置位置,包括一工具,即使在該一或更多個中介集線器裝置位置並不包括一集線器裝置時,在記憶體控制器與第一連續的集線器裝置之間傳遞的資訊也可被接收。接續模組(continuity module)可被安裝於任何模組位置,而可根據任何匯流排限制而變動,包括第一位置(最靠近主記憶體控制器),最後位置(在任何所附的終端前)或任何中介位置。在多模組串接互連匯流排結構中使用接續模組特別有利的地方在於,在一記憶體模組上的中介集線器裝置被移除或由一接續模組取代時,系統仍可持續的運作。在較常用的實施例中,接續模組可包括互連接線以從輸入端傳輸所有需要的訊號至對應的輸出端,或透過一中繼器裝置重新驅動。接續模組可進一步包括非揮發性儲存裝置(像是EEPROM),但不會包括主記憶體儲存裝置。
在示範實施例中,記憶體裝置包括在一或更多個記憶體模組上透過一串接互連記憶體進匯流排連接至記憶體控制器的一或更多個集線器裝置,然而,本發明也可實施其它像是點對點匯流排、多點記憶體匯流排或共享匯流排的記憶體結構。根據所使用的傳訊方法、操作頻率、空間、電力、成本以及其它限制,也可考慮使用其它替代的匯流排結構。點對點匯流排在以電氣訊號互連的系統中,可提供最佳的效能,因為少了分支 訊號線、交換器裝置或短分支(stub)所帶來的訊號衰減。然而,在需要與多個裝置或子系統通訊的系統中,此方法通常會造成元件成本明顯增加、系統消耗電力提高,也可能因為需要中介緩衝以及/或者重新驅動而降低可用的記憶體密度。
儘管在圖中未顯示,記憶體模組或集線器裝置也可包括一各別的匯流排,像是一「存在偵測」匯流排、I2C匯流排以及/或者SMBus,用於各種用途,包括像是決定集線器裝置以及/或者記憶體模組屬性(一般在開機後),將故障或狀態資訊報告給系統,在開機後或正常操作中設定集線器裝置以及/或者記憶體子系統,或其它目的,根據匯流排特性,匯流排可提供一工具,讓集緣器裝置以及/或者記憶體模組將操作有效完成的資訊回報給記憶體控制器,或者是在執行主記憶體控制器要求的過程中,識別出故障。
藉由增加交換器裝置,也可達到如同點對點匯流排結構相近的效能。這些和其它解決方案提供低功率下更高的記憶體封裝密度,同時保有許多點對點匯流排的特性。多點匯流排提供替代的選擇,不過通常僅限於低操作頻率,但是以成本/效能來說,適合許多應用。光纖匯流排解決方案可提供明顯提升的頻率與頻寬,但是會造成成本與空間的問題。
在此所用的「緩衝器」或「緩衝器裝置」所指為暫時儲存單元(在電腦中),特別是以一種速率接收資訊而以另一種速 率傳遞的裝置。在示範實施例中,緩衝器為提供二種訊號相容性的電子裝置(例如改變電壓位準或電流的能力)。「集線器」有時會與「緩衝器」互通。集線器是一種具有多個埠而連接至數個其它裝置之裝置,埠為執行多種I/O功能的介面的一部份(埠可用來在點對點連結或匯流排的其中之一上傳送與接收資料、位址以及控制資訊)。集線器可以是連接數個系統、子系統,或網路的中央裝置,一被動式集線器可只用來傳遞訊息,而一主動式集線器、或中繼器,放大與更新資料串連,使其不會因為經過一距離而衰減。在此所用的集線器裝置一詞,所指為包括用以執行記憶體功能的邏輯(硬體以及/或者軟體)的集線器晶片。
同樣地,「匯流排」一詞所指為連接電腦中二或更多個功能單元的多組導體的其中之一(例如接線,以及印刷電路板排線或在一積體電路中的連結)。資料匯流排、位址匯流排與控制訊號儘管名稱不同,但是由於通常缺一不可,實際上係組成一單一匯流排。匯流排可包括複數個訊號線,每一訊號線具有二或更多個連結點,用以形成電氣地連接二或更多個收發器、發射器以及/或者接收器的主要傳輸路徑。「匯流排」一詞與「通道」一詞形成對比,後者通常是用來描述與一記憶體系統內的記憶體控制器有關的一個「埠」的功能,其可包括一或更多個匯流排或匯流排組。「通道」一詞在此係指一記憶體控制器上的一埠。要注意的是,通道通常與I/O或其它週邊設備配合使用,然而,通道一詞也被一些人用來描述介於一處理器或 記憶體控制器與一或更多個記憶體子系統的其中之一之間的介面。
此外,「菊鍊(daisy chain)」所指為一種匯流排接線結構,其中,舉例來說,裝置A係連接至裝置B,裝置B係連接至裝置C…等等。最後一個裝置通常連接至一電阻或終端器(terminator)。所有的裝置可接收同樣的訊號,其與一簡單匯流排不同,在後者中的每一裝置可修改一或更多個訊號,再加以傳送。「串接(cascade)」或「串接互連」係指為一系列的級或單元或互連網路裝置的集合,通常為集線器,其中集線器的作用如同邏輯中繼器,進一步允許合併資料可匯入現有的資料流中。同樣地,「點對點」匯流排以及/或者連結所指為複數條訊號線,每一條可包括一或更多個終端器。在一點對點匯流排以及/或者連結中,每一訊號線具有二個收發器連接點,每一個收發器連接點耦接至發射器電路、接收器電路或收發器電路。訊號線所指為一或更多個電氣導體或光學載體,通常被設定為單一載體或二或更多個載體,形成為互絞、並連,或同心的配置,用來傳輸至少一個邏輯訊號。
記憶體裝置通常被定義為主要由記憶體(儲存)晶格組成的積體電路,像是動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、鐵電隨機存取記憶體(FeRAM)、磁性隨機存取記憶體(MRAM)、快閃記憶體以及其它形式的隨機存取及相關記憶體,以電氣、光學、磁性、生物或其它方式儲存資訊。 動態記憶體裝置的類型可包括非同步記憶體裝置,像是快速分頁模式動態隨機存取記憶體(FPM DRAM)、EDO、DRAM、叢發EDO DRAM(BEDO DRAM)、單資料速率同步DRAM(SDR DRAM)、雙資料速率同步DRAM(DDR DRAM)或任何後續的裝置,像是DDR2、DDR3、DDR4與相關的技術,像是圖形RAM、視訊RAM、LP RAM(低功率),通常具有與相關DRAM相同的基礎功能、特點以及/或者介面。
記憶體裝置可為晶片(裸晶)以及/或者單一或多晶片封裝的各種類型與組態配置之形式。在多晶片封裝中,記憶體裝置可與其它裝置類型,像是其它記憶體裝置,邏輯晶片,類比裝置以及可程式裝置等一起封裝,並可包括被動裝置,像是電阻、電容與電感。這些封裝可包括整合的散熱片或其它散熱技術,其可進一步附接至直接載體或其它相鄰載體或熱移除系統。
模組支援裝置(像是緩衝器、集線器、集線器邏輯晶片、暫存器、PLL、DLL、非揮發性記憶體等)可由多個獨立的晶片以及/或者元件所組成,可以多個獨立晶片被結合至一或多個基板,可被結合至單一封裝或甚至整合至單一裝置上,視技術,電力,空間,成本與其它取捨而定。除此之外,各種被動裝置,像是電阻、電容可被整合至支援晶片封裝內,或基板、機板,或機卡本身,視技術,電力,空間,成本與其它取捨而定。這些封裝可包括一整合的散熱片或其它散熱技術,其可進 一步附接至直接載體或其它相鄰載體或熱移除系統。
記憶體裝置、集線器、緩衝器、暫存器、時脈裝置、被動或其它記憶體支援裝置以及/或者元件,可透過各種方法,包括像是焊接互連、導電膠、插槽結構、壓力接點或其它能夠透過電氣、光學或替代方法在二或多個裝置間通訊的方法附接至記憶體子系統以及/或者集線器裝置。
一或多個記憶體模組(或記憶體子系統)以及/或者集線器裝置,可透過一或更多種方法,包括像是焊接互連、連接器、導電膠、光學互連與其它通訊及電力傳送方法,電氣地連接至記憶體系統、處理器群、電腦系統或其它系統環境。連接器系統可包括在一個載體上的耦合連接器(公/母)、導電接點以及/或者針腳,與一公或母連接器、光學連結、壓力接點(通常與保持機構配合使用)以及/或者一或多個其它通訊與電力傳送方法耦合。互連可沿著記憶體組件的一或多個邊緣放置以及/或者放置在距離記憶體子系統的邊緣有一距離的地方,視應用需求,像是易於升級/修復、可用空間/容量、熱傳輸、元件大小與形狀以及其它有關的實體、電氣、光學、可視/實體存取的而定。在一記憶體模組上的電氣互連,通常稱之為接點、針腳或凸起(tab)。在一連接器上的電氣互連通常稱之為接點或針腳。
如所述,記憶體子系統所指為,但不限於:一或多個記憶 體裝置;一或多個記憶體裝置與相關的介面以及/或者時序/控制電路;以及/或者一或更多個與一記憶體緩衝器、集線器裝置,以及/或者交換器配合之記憶體裝置。記憶體子系統也可是一或多個記憶體裝置,除了任何相關的介面以及/或者時序/控制電路以及/或者記憶體緩衝器,集線器裝置或交換器以外,被裝配至一基板、一機卡,一模組或相關的配件,其也可包括一連接器或電氣地附接記憶體子系統與其它電路的類似方式。記憶體模組也可是記憶體子系統,因為它們包括一或多個記憶體裝置與集線器裝置。
位於記憶體子系統以及/或者集線器裝置內的額外功能包括像是寫入以及/或者讀取緩衝器、一或多個記憶體快取層級、本地預先取回邏輯、資料加密/解密、壓縮/解壓縮、協定轉譯、命令優先化邏輯、電壓以及/或者層級轉譯、錯誤偵測以及/或者校正電路、資料擦拭(data-scrubbing)、本地電力管理電路以及/或者報告、運算以及/或者暫存器、初始化電路、效能監測以及/或者控制、一或多個共同處理器、插尋引擎及其它可位於其它記憶體子系統內的功能。將一功能放置於記憶體子系統當地,對於該特定功能可提供額外的效能,同時常常可用到子系統中沒有用到的電路。
記憶體子系統支援裝置可直接地附接至同一基板,或被裝配至記憶體裝置附接的地方,或可被架設於一獨立的中介器(interposer)或可用一或多個各種塑膠、矽、陶瓷或其它材料製 造的基板,而包括電氣、光學,或其它通訊路徑以將支援裝置功能地連接至記憶體裝置以及/或者其它電腦系統或記憶體的元件。
透過一匯流排、通道、連結,或其它傳統上可應用於互連方法的機制來傳輸資訊(例如封包)可利用一或更多種傳訊方式來完成。這些傳訊方式可包括像是單端、插洞、光學,或其它方法,而電氣傳訊更包括像是使用單或多層級方式的電壓或電流傳訊。訊號可用利像是時間或頻率、非歸零(non-return to zero)、相移鍵(phase shift keying)、振幅調變以及其它方法來調變。電壓位準預料會持續的降低,從1.5V、1.2V到1V,以及相關積體電路本身在操作上因電源供應電壓的降低,而訊號電壓隨著降低。
在記憶體子系統與記憶體系統本身可使用一或多個計時(clocking)方法,包括全區計時、來源同步計時、編碼計時或上述與其它方法的組合。時脈傳訊可與訊號線本身的傳訊相同,或可使用較有利於所需時脈頻率,以及在各個子系統中所需的時脈數目之條列或替代方法的其中之一。單一時脈可與來自或前往記憶體的所有通訊相關,也可與所有在記憶體子系統中的計時功能有關,或可使用先前所述的一或更多種方法來採用多重時脈。當使用多重時脈時,在記憶體子系統內的功能可與獨立供給該子系統的時脈相關,或者是根據由傳輸到或來自記憶體子系統(像是與一編碼的時脈有關)的資訊相關的時脈 來推導。替代地,傳輸至記憶體子系統的資訊可採用唯一的時脈,而來自一或更多個記憶體子系統的資訊可採用另外的時脈。時脈本身可以相同於或數倍於通訊或功能頻率的頻率操作,也可相對於資料、命令或位址資訊而被邊緣對準、中央對準或放置在一替代時序位置。
傳送到記憶體子系統的資訊通常會包括位址、命令以及資料,還有其它一般與需求或報告狀態或錯誤情形、重設記憶體、完成記憶體或邏輯初始化和其它功能、設定或相關資訊有關的其它訊號。記憶體子系統傳送的資訊可包括任何或所有傳送至記憶體子系統的資訊,然而,通常不會包括位址和命令資訊。此資訊可利用符合正常記憶體裝置介面規格(通常為並列)的通訊方法來傳送,資訊可被編碼為「封包」結構,其可與未來的記憶體介面一致或被用來提升通訊頻寬以及/或者藉由將所接收到的資訊轉換為接收裝置所需的格式,讓子系統可獨立於記憶體技術來操作。
記憶體子系統的初始化可透過一或更多個方法,根據可用的介面匯流排所需的初始化速度、可用的空間、成本/複雜性問題、子系統互連結構來完成。在此,也可使用替代的處理器(像是服務處理器)來進行此項任務。在一實施例中,高速匯流排可被用來完成記憶體子系統的初始化,一般為先完成一訓練流程以建立可靠的通訊,接著詢問與各種組件相關的屬性或「存在偵測」資料,以及/或者與該子系統相關的特性,以及 最後在該系統中以與所需操作相關的資訊來程式化適當的裝置。在一串接的系統中,會先建立與第一記憶體子系統的通訊,接著再延著串接互連匯流排的對應位置與後續(下游)的子系統通訊。
第二種初始化方法,可包括在初始化流程中以一種頻率操作高速匯流排,然後在正常操作中,使用第二種頻率(通常為更高頻率)。在此實施例中,可以在完成詢問以及/或者程式化每一子系統前,先初始化在串接互連匯流排上的所有記憶體子系統,這是因為在較低頻率操作下,時序邊際(timing margin)較高的原因。
第三種初始化方法,可包括在正常操作頻率下,操作串接互連匯流排,同時增加與每一位址、命令,以及/或者資料傳輸相關的週期數目。在一實施例中,包含所有或一部份的位址、命令以及/或者資料資訊的封包,於正常操作中,可在一時脈週期內傳送,可是在初始化過程中,相同數量以及/或者類型的資訊可以二、三或更多的週期來傳送。所以此一初始化流程是使用「慢」的命令,而非「正常」命令,而此一模式可以在每一個子系統以及記憶體控制器開機以及/或者重新啟動的某一點,藉由在每一子系統內的POR (power-on-reset)自動開始。
第四種初始化方法,可用一獨立的匯流排,像是一存在偵 測匯流排(如美國專利5,513,135所定義),一I2C匯流排(在JEDEC標準中於21-C revision 7R8所公告之168針腳的DIMM系列)以及/或者廣泛地在使用此類記憶體模組的電腦系統中所採用的SMBUS。此一匯流排可連接至一或更多個在記憶體系統中的模組,以菊鍊/串接互連、多點或替代結構連接,提供詢問記憶體子系統程式化該一或更多個記憶體子系統的每一個的獨立方法,以便在整體系統環境中操作,並且在正常系統操作中根據效能、溫度、組態設定以及其它系統環境所需或偵測到的變動來調整操作特性。
本發明也可使用它的初始化方法,獨立或配合上述方法使用。使用各別的匯流排,像是在上述第四個方法中所述,也具有可以一種獨立的方法用於初始化與非初始化用途的好處,如美國專利6,381,685一案所述,包括即時變動子系統操作特性以及因應像是利用率、溫度資料、故障資訊及其它用途等子系統操作資訊進行報告的功能。
由於蝕刻技術的進步、較佳的製程控制、使用較低電阻的材料、提高的面積以及其它半導體製程改良、提高的裝置電路密度(通常與提高的裸晶尺寸相關),有助於提升積體電路裝置的功能以及整合原先在不同裝置上的功能。此一整合將可提升所需功能的整體效能,同時達到提升儲存密度、降低功率、降低空間要求、降低成本與其它有利於製造者與消費者的特點。整合是自然的演進過程,而且需要系統本身基礙架構的變 動才能達成。
使用一或更多個故障偵測以及/或者校正方法,可達成與記憶體系統或子系統的每一元件相關之通訊路徑、資料儲存內容以及所有功能操作之整合。任何或所有的元件可包括錯誤偵測以及/或者校正方法,像是循環冗餘碼(CRC)、錯誤偵測與校正(EDC)、同位或其它適於此目的之編碼/解碼方法。進一步,要提升可靠度,可包括重新嘗試操作(以克服與資料傳輸有關的間歇故障),使用一或更多個替代的通訊路徑來取代故障的路徑以及/或者線路,以及在電腦、通訊或相關系統中所用的互補、重新互補技術或替代的方法。
在像是點對點連線這麼簡單的匯流排或多點結構這麼複雜的匯流排上,使用匯流排終端器,隨著效能的要求而變得更為普遍。各種終端器方法都可使用,並且可使用像是電阻、電容、電感或上述元件的組合,讓這些元件連接於訊號線以及電源供應電壓或接地、終端電壓或其它訊號之間。終端裝置可為一被動或主動終端結構的一部份,可位於一或更多條訊號線的一或更多個位置上,以及/或者作為發射器以及/或者接收裝置的一部份。終端器可用來匹配傳輸線阻抗或透過替代的方法來將可用的頻率、操作範圍以及其它和成本、空間、電力以及其它限制有關的屬性最大化。
本發明的效用與優點包括在有一記憶體模組故障恰與一 記憶體裝置故障同時發生時,讓記憶體系統未受阻礙地執行。如此可大幅提升記憶體系統的可用性與服務性。
如上述,本發明的實施例可以電腦上的流程,和執行這些流程的裝置來具體實施。本發明的實施例也可用包含指令的有形媒體,像是軟碟、CD-ROM、硬碟或其它電腦可讀儲存媒體來實施,其中當電腦程式碼被載入並由電腦來執行,該電腦就成為實施本發明的一種設備。本發明也可以電腦程式碼的形式來實施,舉例來說,不論是儲存於一儲存媒體內載入至並由電腦執行,或透過某些傳輸媒體來傳送,像是透過電氣接線、透過光纖、或透過電磁幅射,其中當電腦程式碼被載入並由電腦執行,該電腦就成為實施本發明的一種設備。如果以通用的微處理器來實施,該電腦程式碼區段可設定該微處理器以建立特定的邏輯電路。
儘管本發明已經透過較佳示範實施例加以說明,但是熟悉此技藝者應可了解,在本發明的範疇內,可對本發明的各種元件進行各種變動與等效的替代,此外,可針對特定的情況或材料做各種修改,而不悖離本發明的實質範圍。因此,本發明並不限於特定最佳模式之實施例,附屬的申請專利範圍可視為涵蓋所有的修改與變動。此外,使用第一、第二等術語,並不代表任何次序或重要性,而只是用來區分不同的元件。
處理器晶片‧‧‧100
記憶體子系統‧‧‧103
集線器裝置‧‧‧104
互連記憶體介面匯流排‧‧‧106
記憶體匯流排‧‧‧108
記憶體裝置‧‧‧109
記憶體控制器‧‧‧110
記憶體子系統‧‧‧103
互連記憶體介面匯流排‧‧‧106
記憶體裝置‧‧‧109
記憶體控制器‧‧‧110
DIMM‧‧‧302
DRAM晶片‧‧‧304
記憶體通道‧‧‧306a-e
記憶體控制器‧‧‧308
主機‧‧‧310
集線器裝置‧‧‧312
記憶體區塊‧‧‧314
記憶體節點‧‧‧316
RAID-3核對和元件‧‧‧402
RAID-6核對和元件‧‧‧404
RAID-3核對和元件‧‧‧402
RAID-6核對和元件‧‧‧404
在示範的圖示中,類似的標號代表類似的元件。
第一圖所示為具有單向匯流排的串接互連記憶體系統;第二圖所示為具有單向匯流排的串接互連記憶體系統;第三圖所示為本發明的一示範實施例所使用的一示範電腦記憶體系統組態之方塊圖;第四圖所示為校正單一DRAM晶片錯誤的邏輯檢視之方塊圖;第五圖所示為校正一全DIMM故障的邏輯檢視之方塊圖;第六圖所示為校正二個DRAM晶片錯誤的邏輯檢視之方塊圖;第七圖所示為校正一恰與一次級DRAM晶片故障同時發生的全DIMM故障所遭遇的困難之邏輯檢視之方塊圖;第八圖所示為校正一恰與一次級DRAM晶片故障同時發生的全DIMM故障所遭遇的困難之邏輯檢視之方塊圖;第九A圖至九C圖描述用以校正一恰與一次級DRAM晶片故障同時發生的全DIMM故障的各種方式;第十圖所示為校正一恰與二個額外的DRAM裝置故障同時發生的全DIMM故障之邏輯檢視之方塊圖;第十一A圖至十一C圖為利用本發明的一示範實施例用以執行錯誤校正與偵測的流程圖;第十二圖所示為可被用來執行二維三角測量的示範流程;以及第十三圖所示為本發明的示範實施例所用來分類錯誤的 摘要表。
DIMM‧‧‧302
DRAM晶片‧‧‧304
記憶體通道‧‧‧306a-e
記憶體控制器‧‧‧308
主機‧‧‧310
集線器裝置‧‧‧312
記憶體區塊‧‧‧314
記憶體節點‧‧‧316

Claims (17)

  1. 一種記憶體系統,包含:一記憶體控制器;複數個記憶體模組,與該記憶體控制器及複數個記憶體裝置通訊;複數個錯誤碼相關於至少兩個不同且功能地獨特的錯誤檢查手段,每一個錯誤碼相關於一結果以及該記憶體裝置的一子集,以及至少兩個子集具有彼此共同的記憶體裝置;以及一合併機制,被組態用以利用由該不同且功能地獨特的錯誤檢查手段產生的至少兩個不為0之結果,藉由額外識別位在相關於該非為0之結果的該記憶體裝置的交叉子集中可能故障的記憶體裝置,以進一步延伸整體錯誤校正效能,以及在該記憶體裝置故障的情況下讓該記憶體系統繼續未受阻礙地執行;其中該複數個錯誤碼包括一應用在組織為跨越多個記憶體模組的一列(row)之該記憶體裝置的一RAID-3錯誤校正碼,從而延伸複數個記憶體裝置跨越記憶體模組,以及一應用在組織為跨越一單一記憶體模組之行(column)之記憶體裝置的RAID-6錯誤校正碼,從而僅延伸一記憶體模組,其中僅只有一單一資料元件是在任何一行或列之間共享。
  2. 如申請專利範圍第1項之記憶體系統,其中該複數個記憶體模組之每一個包括一或多個記憶體裝置,用於該記憶體模組的錯誤檢測與校正。
  3. 如申請專利範圍第1項之記憶體系統,其中實質上在該複數個記憶體模組之每一個上的所有記憶體裝置,被利用於係跨越記憶體模組之錯誤檢測與校正。
  4. 如申請專利範圍第1項之記憶體系統,其中該識別包括使用三角測量來隔離(isolate)該複數個記憶體模組與該複數個記憶體裝置的故障。
  5. 如申請專利範圍第1項之記憶體系統,其中該複數個記憶體模組包括透過五個不同通道與該記憶體控制器通訊的五個記憶體模組,而該五個記憶體模組中包括四個記憶體模組,該四個記憶體模組具有用於該記憶體模組的錯誤偵測與校正的二個記憶體裝置,與具有用於跨越該四個記憶體模組的錯誤偵測與校正的記憶體裝置之一記憶體模組。
  6. 如申請專利範圍第1項之記憶體系統,其中一偏移多重移動係與該RAID-6錯誤校正碼配合使用,以確保該校正不會產生列對準的錯誤與變得無法偵測。
  7. 如申請專利範圍第1項之記憶體系統,其中該記憶體系統的機械封裝係適於在系統操作的同時允許實體移除並替代其中一個記憶體模組。
  8. 如申請專利範圍第1項之記憶體系統,其中該記憶體系統的機械封裝係適於在系統操作的同時允許實體移除並替代其中一個或多個記憶體模組。
  9. 如申請專利範圍第1項之記憶體系統,其中該機制更偵測一記憶體模組與該記憶體控制器之間的通訊故障,而此通訊故障可能與該一記憶體裝置故障同時發生,以及該機制更可讓該記憶體系統在該記憶體模組與該記憶體控制器之間有通訊故障與該記憶體裝置故障的情況下未受阻礙地執行。
  10. 一種記憶體控制器,包含:一介面,用以連接複數個記憶體模組,而該些模組係與複數個記憶體裝置通訊;複數個錯誤碼,相關於至少兩個不同且功能地獨特的錯誤檢查手段,每一個錯誤碼相關於一結果以及記憶體裝置的一子集,以及至少兩個子集具有彼此共同的記憶體裝置;以及一合併機制,被組態用以利用由該不同且功能地獨特的錯誤檢查手段產生的至少兩個不為0之結果,藉由額外識別位在相關於該非為0之結果的該記憶體裝置的交叉子集中可能故障的記憶體裝置,以進一步延伸整體錯誤校正效能,以及在該記憶體裝置故障的情況下讓該記憶體系統繼續未受阻礙地執行;其中該複數個錯誤碼包括一應用在組織為跨越多個記憶體模組的一列(row)之該記憶體裝置的一RAID-3錯誤校正 碼,從而延伸複數個記憶體裝置跨越記憶體模組,以及一應用在組織為跨越一單一記憶體模組之行(column)之記憶體裝置的RAID-6錯誤校正碼,從而僅延伸一記憶體模組,其中僅只有一單一資料元件是在任何一行或列之間共享。
  11. 如申請專利範圍第10項之記憶體控制器,其中該複數個記憶體模組之每一個包括一或多個記憶體裝置,用於該記憶體模組的錯誤檢測與校正。
  12. 如申請專利範圍第10項之記憶體控制器,其中該識別包括使用三角測量來隔離該複數個記憶體模組與該複數個記憶體裝置的故障。
  13. 如申請專利範圍第10項之記憶體控制器,其中該複數個記憶體模組包括透過五個不同通道與該記憶體控制器通訊的五個記憶體模組,而該五個記憶體模組中包括四個記憶體模組,該四個記憶體模組具有用於該記憶體模組的錯誤偵測與校正的二個記憶體裝置,與具有用於跨越該四個記憶體模組的錯誤偵測與校正的記憶體裝置之一記憶體模組。
  14. 如申請專利範圍第10項之記憶體控制器,其中一偏移多重移動係與該RAID-6錯誤校正碼配合,使用以確保該校正不會產生列對準的錯誤與變得無法偵測。
  15. 一種在一記憶體系統中用以偵測與校正錯誤的方法,該方法包含:偵測在該記憶體系統中的一或多個錯誤,該記憶體系統包括具有記憶體裝置之複數個記憶體模組,該些記憶體模組因應記憶體命令而共同地被存取,該記憶體系統包括複數個錯誤碼,相關於至少兩個不同且功能地獨特的錯誤檢查手段,每一個錯誤碼相關於一結果以及記憶體裝置的一子集,以及至少兩個子集具有彼此共同的記憶體裝置,該偵測包含偵測至少兩個該結果不為0;藉由交叉相關於具有一非為0結果的每一個錯誤碼之該記憶體裝置的子集以識別錯誤的類型,以隔離該一或多個錯誤至一記憶體裝置和一記憶體模組的其中之一或兩者;以及使用該複數個錯誤碼校正該一或多個錯誤,同時在該錯誤的情況下讓該記憶體系統繼續未受阻礙地執行;其中該複數個錯誤碼包括一應用在組織為跨越多個記憶體模組的一列(row)之該記憶體裝置的一RAID-3錯誤校正碼,從而延伸複數個記憶體裝置跨越記憶體模組,以及一應用在組織為跨越一單一記憶體模組之行(column)之記憶體裝置的RAID-6錯誤校正碼,從而僅延伸一記憶體模組,其中僅只有一單一資料元件是在任何一行或列之間共享。
  16. 如申請專利範圍第15項之方法,其中一偏移多重移動係與該第二錯誤校正碼配合使用以確保該校正不會產生列對準的錯誤與變得無法偵測。
  17. 如申請專利範圍第15項之方法,其中當識別出一故障的記憶體模組,該故障的記憶體模組的身分係作為在該複數個錯誤碼內的一參數,以便改進該記憶體系統的可靠度。
TW097123487A 2007-06-28 2008-06-24 記憶體系統中錯誤校正與偵測之系統及方法 TWI430084B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US11/769,929 US8041990B2 (en) 2007-06-28 2007-06-28 System and method for error correction and detection in a memory system

Publications (2)

Publication Number Publication Date
TW200919171A TW200919171A (en) 2009-05-01
TWI430084B true TWI430084B (zh) 2014-03-11

Family

ID=40090304

Family Applications (1)

Application Number Title Priority Date Filing Date
TW097123487A TWI430084B (zh) 2007-06-28 2008-06-24 記憶體系統中錯誤校正與偵測之系統及方法

Country Status (7)

Country Link
US (1) US8041990B2 (zh)
EP (1) EP2171586B1 (zh)
JP (1) JP5349470B2 (zh)
KR (1) KR101119358B1 (zh)
CN (1) CN101681283B (zh)
TW (1) TWI430084B (zh)
WO (1) WO2009000639A2 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI653536B (zh) 2015-07-08 2019-03-11 美商萬國商業機器公司 用於調整最佳化參數以自訂用於共用匯流排上目標晶片之信號眼之方法、系統及電腦程式產品
TWI722496B (zh) * 2019-06-20 2021-03-21 慧榮科技股份有限公司 使用者資料的加解密方法及裝置

Families Citing this family (96)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9384818B2 (en) 2005-04-21 2016-07-05 Violin Memory Memory power management
US8452929B2 (en) * 2005-04-21 2013-05-28 Violin Memory Inc. Method and system for storage of data in non-volatile media
US8200887B2 (en) 2007-03-29 2012-06-12 Violin Memory, Inc. Memory management system and method
US9286198B2 (en) 2005-04-21 2016-03-15 Violin Memory Method and system for storage of data in non-volatile media
US8028186B2 (en) * 2006-10-23 2011-09-27 Violin Memory, Inc. Skew management in an interconnection system
US9632870B2 (en) * 2007-03-29 2017-04-25 Violin Memory, Inc. Memory system with multiple striping of raid groups and method for performing the same
US11010076B2 (en) 2007-03-29 2021-05-18 Violin Systems Llc Memory system with multiple striping of raid groups and method for performing the same
US7979616B2 (en) * 2007-06-22 2011-07-12 International Business Machines Corporation System and method for providing a configurable command sequence for a memory interface device
US8041989B2 (en) * 2007-06-28 2011-10-18 International Business Machines Corporation System and method for providing a high fault tolerant memory system
US8041990B2 (en) 2007-06-28 2011-10-18 International Business Machines Corporation System and method for error correction and detection in a memory system
US7900084B2 (en) * 2007-12-21 2011-03-01 Intel Corporation Reliable memory for memory controller with multiple channels
US20100095188A1 (en) * 2008-10-09 2010-04-15 Transwitch Corporation Apparatus and method for detecting and correcting errors in control characters of a multimedia interface
US8472199B2 (en) * 2008-11-13 2013-06-25 Mosaid Technologies Incorporated System including a plurality of encapsulated semiconductor chips
US20100138717A1 (en) * 2008-12-02 2010-06-03 Microsoft Corporation Fork codes for erasure coding of data blocks
US20100162037A1 (en) * 2008-12-22 2010-06-24 International Business Machines Corporation Memory System having Spare Memory Devices Attached to a Local Interface Bus
US8924819B2 (en) * 2009-01-23 2014-12-30 Macronix International Co., Ltd. Memory device and operation method thereof
US8189420B2 (en) * 2009-06-04 2012-05-29 Micron Technology, Inc. Advanced detection of memory device removal, and methods, devices and connectors
US8046628B2 (en) 2009-06-05 2011-10-25 Micron Technology, Inc. Failure recovery memory devices and methods
CN102576330B (zh) 2009-06-12 2015-01-28 提琴存储器公司 具有持久化无用单元收集机制的存储系统
EP2264604A1 (en) * 2009-06-15 2010-12-22 Thomson Licensing Device for real-time streaming of two or more streams in parallel to a solid state memory device array
US8255773B2 (en) * 2009-06-29 2012-08-28 Sandisk Technologies Inc. System and method of tracking error data within a storage device
US9361955B2 (en) 2010-01-28 2016-06-07 Hewlett Packard Enterprise Development Lp Memory access methods and apparatus
US20110258520A1 (en) * 2010-04-16 2011-10-20 Segura Theresa L Locating and correcting corrupt data or syndrome blocks
US8719675B1 (en) * 2010-06-16 2014-05-06 Google Inc. Orthogonal coding for data storage, access, and maintenance
US8484529B2 (en) 2010-06-24 2013-07-09 International Business Machines Corporation Error correction and detection in a redundant memory system
US8631271B2 (en) 2010-06-24 2014-01-14 International Business Machines Corporation Heterogeneous recovery in a redundant memory system
US8898511B2 (en) 2010-06-24 2014-11-25 International Business Machines Corporation Homogeneous recovery in a redundant memory system
US8549378B2 (en) * 2010-06-24 2013-10-01 International Business Machines Corporation RAIM system using decoding of virtual ECC
US8327080B1 (en) 2010-09-28 2012-12-04 Emc Corporation Write-back cache protection
US9003153B2 (en) 2010-11-08 2015-04-07 Greenliant Llc Method of storing blocks of data in a plurality of memory devices in a redundant manner, a memory controller and a memory system
US8522122B2 (en) 2011-01-29 2013-08-27 International Business Machines Corporation Correcting memory device and memory channel failures in the presence of known memory device failures
US8732557B2 (en) * 2011-05-31 2014-05-20 Micron Technology, Inc. Data protection across multiple memory blocks
TWI446160B (zh) 2011-07-21 2014-07-21 Silicon Motion Inc 快閃記憶體控制器及資料讀取方法
TWI476589B (zh) * 2011-08-25 2015-03-11 Macronix Int Co Ltd 記憶體編程方法及應用其之快閃記憶體裝置
WO2013071931A1 (en) 2011-11-15 2013-05-23 Kk-Electronic A/S A system and method for identifying suggestions to remedy wind turbine faults
US20130318393A1 (en) * 2011-11-15 2013-11-28 Ocz Technology Group Inc. Solid-state mass storage device and methods of operation
WO2013095538A1 (en) 2011-12-22 2013-06-27 Intel Corporation Interconnection of multiple chips in a package utilizing on-package input/output interfaces
US10379971B2 (en) 2012-01-31 2019-08-13 Hewlett Packard Enterprise Development Lp Single and double chip space
US9690673B2 (en) 2012-01-31 2017-06-27 Gary Gostin Single and double chip spare
US8990646B2 (en) 2012-05-31 2015-03-24 Hewlett-Packard Development Company, L.P. Memory error test routine
CN104246898B (zh) * 2012-05-31 2017-03-22 慧与发展有限责任合伙企业 局部错误检测和全局错误纠正
CN103577274B (zh) 2012-07-31 2016-07-06 国际商业机器公司 管理存储器阵列的方法和装置
WO2014061161A1 (ja) * 2012-10-19 2014-04-24 富士通株式会社 記録再生装置、誤り訂正方法および制御装置
US8966348B2 (en) 2012-11-30 2015-02-24 Hewlett-Packard Development Company, L.P. Memory error identification based on corrupted symbol patterns
US20140173170A1 (en) * 2012-12-14 2014-06-19 Hewlett-Packard Development Company, L.P. Multiple subarray memory access
JP6005533B2 (ja) 2013-01-17 2016-10-12 株式会社東芝 記憶装置および記憶方法
US9430418B2 (en) 2013-03-15 2016-08-30 International Business Machines Corporation Synchronization and order detection in a memory system
CN104347122B (zh) * 2013-07-31 2017-08-04 华为技术有限公司 一种消息式内存模组的访存方法和装置
WO2015016880A1 (en) * 2013-07-31 2015-02-05 Hewlett-Packard Development Company, L.P. Global error correction
TWI649760B (zh) * 2013-08-23 2019-02-01 慧榮科技股份有限公司 存取快閃記憶體中儲存單元的方法以及使用該方法的裝置
CN107193684B (zh) * 2013-08-23 2020-10-16 慧荣科技股份有限公司 存取快闪存储器中储存单元的方法以及使用该方法的装置
CN104424127A (zh) * 2013-08-23 2015-03-18 慧荣科技股份有限公司 存取快闪存储器中储存单元的方法以及使用该方法的装置
CN108447516B (zh) * 2013-08-23 2020-04-24 慧荣科技股份有限公司 存取快闪存储器中存储单元的方法以及使用该方法的装置
CN104425018B (zh) 2013-08-23 2019-07-23 慧荣科技股份有限公司 存取快闪存储器中储存单元的方法以及使用该方法的装置
US9343181B2 (en) 2013-08-30 2016-05-17 Hewlett Packard Enterprise Development Lp Memory module errors
US9805775B1 (en) 2013-11-08 2017-10-31 Altera Corporation Integrated circuits with improved memory controllers
US9946590B2 (en) 2013-12-19 2018-04-17 Hewlett Packard Enterprise Development Lp Transmission of command strings and status strings via memory bus
KR102110767B1 (ko) * 2013-12-24 2020-06-09 삼성전자 주식회사 메모리 컨트롤러 구동방법 및 메모리 컨트롤러
US9354818B2 (en) 2014-02-25 2016-05-31 Kabushiki Kaisha Toshiba Memory device and data storing method
US9268660B2 (en) * 2014-03-12 2016-02-23 International Business Machines Corporation Matrix and compression-based error detection
US9251054B2 (en) * 2014-03-27 2016-02-02 International Business Machines Corporation Implementing enhanced reliability of systems utilizing dual port DRAM
US9672880B2 (en) 2014-06-16 2017-06-06 Honeywell International Inc. Radiation upset detection
US9754684B2 (en) 2014-11-06 2017-09-05 Samsung Electronics Co., Ltd. Completely utilizing hamming distance for SECDED based ECC DIMMs
US9747035B2 (en) 2014-12-17 2017-08-29 Empire Technology Development Llc Reducing memory overhead associated with memory protected by a fault protection scheme
US10261697B2 (en) 2015-06-08 2019-04-16 Samsung Electronics Co., Ltd. Storage device and operating method of storage device
CN104991833B (zh) * 2015-06-15 2018-03-27 联想(北京)有限公司 一种错误检测方法及电子设备
US20160378594A1 (en) * 2015-06-26 2016-12-29 Intel Corporation Method and apparatus to decode low density parity codes
CN106373616B (zh) * 2015-07-23 2020-02-07 深圳市中兴微电子技术有限公司 一种检测随机存储器故障的方法、装置和网络处理器
CN105183579B (zh) * 2015-09-24 2019-09-24 联想(北京)有限公司 一种数据校验方法及装置、电子设备
US10594491B2 (en) * 2015-12-24 2020-03-17 Intel Corporation Cryptographic system memory management
GB2548407A (en) 2016-03-18 2017-09-20 Memoscale As Coding technique
US10078567B2 (en) 2016-03-18 2018-09-18 Alibaba Group Holding Limited Implementing fault tolerance in computer system memory
US10268541B2 (en) * 2016-08-15 2019-04-23 Samsung Electronics Co., Ltd. DRAM assist error correction mechanism for DDR SDRAM interface
KR102638789B1 (ko) 2016-09-05 2024-02-22 에스케이하이닉스 주식회사 테스트방법 및 이를 이용한 반도체시스템
US10379939B2 (en) * 2017-01-04 2019-08-13 Samsung Electronics Co., Ltd. Memory apparatus for in-chip error correction
KR102243582B1 (ko) * 2017-04-24 2021-04-23 에스케이하이닉스 주식회사 반도체장치
GB201715073D0 (en) 2017-09-19 2017-11-01 Memoscale As Data security
CN109800103B (zh) * 2017-11-17 2025-05-27 英特尔公司 密码系统存储器管理
US10303545B1 (en) 2017-11-30 2019-05-28 International Business Machines Corporation High efficiency redundant array of independent memory
CN110348244B (zh) * 2018-04-02 2023-03-17 深信服科技股份有限公司 基于仲裁的多校验和验证方法、系统、装置及存储介质
KR102870853B1 (ko) * 2019-04-29 2025-10-13 삼성전자주식회사 메모리 컨트롤러, 이를 포함하는 메모리 시스템 및 메모리 컨트롤러의 동작 방법
KR20210013387A (ko) 2019-07-24 2021-02-04 삼성전자주식회사 메모리 시스템
US11042432B1 (en) 2019-12-20 2021-06-22 Western Digital Technologies, Inc. Data storage device with dynamic stripe length manager
US11256587B2 (en) * 2020-04-17 2022-02-22 Pure Storage, Inc. Intelligent access to a storage device
KR20210138241A (ko) 2020-05-12 2021-11-19 삼성전자주식회사 메모리 컨트롤러, 메모리 시스템 및 메모리 모듈
KR102837309B1 (ko) 2020-09-03 2025-07-24 삼성전자주식회사 메모리 모듈, 메모리 모듈의 보호 장치 및 메모리 모듈 보호 시스템
CN115237061B (zh) * 2021-04-22 2025-01-07 宝山钢铁股份有限公司 一种提高电站发电机组dcs系统模块可靠性的方法
CN115705262A (zh) * 2021-08-17 2023-02-17 华为技术有限公司 一种内存故障恢复方法、系统以及内存
WO2023106434A1 (ko) * 2021-12-06 2023-06-15 주식회사 딥아이 Ddr sdram 인터페이스를 이용한 dram 지원 에러 정정 방법
US11681581B1 (en) * 2022-06-21 2023-06-20 Western Digital Technologies, Inc. Data integrity protection with partial updates
KR20240003823A (ko) 2022-07-04 2024-01-11 삼성전자주식회사 정정된 에러를 관리하는 전자 장치 및 전자 장치의 동작 방법
CN118503005B (zh) * 2023-02-16 2026-01-02 华为技术有限公司 一种内存纠错方法、系统及设备
US12038809B1 (en) 2023-03-06 2024-07-16 SK Hynix Inc. Failure analysis for uncorrectable error events
US12287700B2 (en) 2023-04-06 2025-04-29 Sap Se Systems and methods for predictive memory maintenance visualization
US12277029B2 (en) 2023-04-27 2025-04-15 Sap Se Systems and methods for predictive memory maintenance
US12511180B2 (en) * 2023-04-27 2025-12-30 Sap Se Systems and methods for predictive memory maintenance

Family Cites Families (63)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4464747A (en) * 1982-02-18 1984-08-07 The Singer Company High reliability memory
EP0333207B1 (en) 1988-03-18 1997-06-11 Kabushiki Kaisha Toshiba Mask rom with spare memory cells
GB8926004D0 (en) 1989-11-17 1990-01-10 Inmos Ltd Repairable memory circuit
JP2659283B2 (ja) 1991-01-14 1997-09-30 シャープ株式会社 半導体記憶装置の製造方法
KR100296850B1 (ko) 1992-05-28 2001-10-24 썬 마이크로시스템즈, 인코포레이티드 캐시램용다수의뱅크열용장성초기화제어기
EP1031928B1 (en) 1993-06-04 2005-05-18 Network Appliance, Inc. A method for providing parity in a raid sub-system using non-volatile memory
US5488691A (en) 1993-11-17 1996-01-30 International Business Machines Corporation Memory card, computer system and method of operation for differentiating the use of read-modify-write cycles in operating and initializaiton modes
US5499253A (en) * 1994-01-05 1996-03-12 Digital Equipment Corporation System and method for calculating RAID 6 check codes
US5463643A (en) 1994-03-07 1995-10-31 Dell Usa, L.P. Redundant memory channel array configuration with data striping and error correction capabilities
US5513135A (en) 1994-12-02 1996-04-30 International Business Machines Corporation Synchronous memory packaged in single/dual in-line memory module and method of fabrication
US5680564A (en) 1995-05-26 1997-10-21 National Semiconductor Corporation Pipelined processor with two tier prefetch buffer structure and method with bypass
US6012839A (en) 1995-06-30 2000-01-11 Quantum Corporation Method and apparatus to protect data within a disk drive buffer
WO1998009219A1 (de) * 1996-08-30 1998-03-05 Siemens Aktiengesellschaft Fehlererkennung in einem speichersystem
US5835425A (en) 1997-09-04 1998-11-10 Siemens Aktiengesellschaft Dimension programmable fusebanks and methods for making the same
US6223301B1 (en) 1997-09-30 2001-04-24 Compaq Computer Corporation Fault tolerant memory
CN100383886C (zh) * 1998-02-25 2008-04-23 松下电器产业株式会社 纠错装置和纠错方法
US6173382B1 (en) 1998-04-28 2001-01-09 International Business Machines Corporation Dynamic configuration of memory module using modified presence detect data
US6505305B1 (en) 1998-07-16 2003-01-07 Compaq Information Technologies Group, L.P. Fail-over of multiple memory blocks in multiple memory modules in computer system
US6854070B2 (en) 2000-01-25 2005-02-08 Hewlett-Packard Development Company, L.P. Hot-upgrade/hot-add memory
US6845472B2 (en) 2000-01-25 2005-01-18 Hewlett-Packard Development Company, L.P. Memory sub-system error cleansing
US6715116B2 (en) 2000-01-26 2004-03-30 Hewlett-Packard Company, L.P. Memory data verify operation
US6820072B1 (en) * 2000-08-22 2004-11-16 Hewlett-Packard Development Company, L.P. Validation of probabilistic troubleshooters and diagnostic system
US6418068B1 (en) 2001-01-19 2002-07-09 Hewlett-Packard Co. Self-healing memory
US6763444B2 (en) 2001-05-08 2004-07-13 Micron Technology, Inc. Read/write timing calibration of a memory array using a row or a redundant row
JP3565798B2 (ja) 2001-06-14 2004-09-15 英二 藤原 バースト誤りパターン生成方法及びバーストおよびバイト誤り検出・訂正装置
KR100413762B1 (ko) 2001-07-02 2003-12-31 삼성전자주식회사 뱅크 수를 가변할 수 있는 반도체 장치 및 그 방법
US6845474B2 (en) 2001-09-10 2005-01-18 Hewlett-Packard Development Company, L.P. Problem detector and method
US7028213B2 (en) 2001-09-28 2006-04-11 Hewlett-Packard Development Company, L.P. Error indication in a raid memory system
US6973612B1 (en) 2001-11-13 2005-12-06 Unisys Corporation Familial correction with non-familial double bit error detection for directory storage
JP2003303139A (ja) 2002-04-09 2003-10-24 Nec Corp 冗長メモリモジュールおよびメモリコントローラ
US6948091B2 (en) 2002-05-02 2005-09-20 Honeywell International Inc. High integrity recovery from multi-bit data failures
US7293138B1 (en) 2002-06-27 2007-11-06 Adaptec, Inc. Method and apparatus for raid on memory
EP1547252A4 (en) 2002-07-29 2011-04-20 Robert Halford MULTIDIMENSIONAL DATA PROTECTION AND MIRRORING METHOD FOR MICROBIAL DATA
US6957365B2 (en) * 2002-08-16 2005-10-18 Sun Microsystems, Inc. Method and apparatus for using acoustic signals to identify disk drives that are likely to fail
US7149945B2 (en) 2003-05-09 2006-12-12 Hewlett-Packard Development Company, L.P. Systems and methods for providing error correction code testing functionality
JP3892832B2 (ja) * 2003-08-11 2007-03-14 株式会社東芝 半導体記憶装置
US7099994B2 (en) * 2003-09-29 2006-08-29 Hewlett-Packard Development Company, L.P. RAID memory system
US8645622B2 (en) 2003-11-18 2014-02-04 International Business Machines Corporation Method to protect data on a disk drive from uncorrectable media errors
US7191257B2 (en) * 2003-12-22 2007-03-13 National Instruments Corp. System and method for real-time processing of nondeterministic captured data events
US20050164373A1 (en) 2004-01-22 2005-07-28 Oldham Mark F. Diffusion-aided loading system for microfluidic devices
JP2005242797A (ja) 2004-02-27 2005-09-08 Oki Electric Ind Co Ltd エラー訂正回路
US8464093B1 (en) 2004-09-03 2013-06-11 Extreme Networks, Inc. Memory array error correction
US7395488B2 (en) * 2004-12-29 2008-07-01 Zoran Corporation System and method for efficient use of memory device bandwidth
US8107714B2 (en) * 2005-01-18 2012-01-31 The Board Of Regents Of The University Of Texas System Methods for detecting and tagging scene changes
US7424648B2 (en) * 2005-03-10 2008-09-09 Matsushita Electric Industrial Co., Ltd. Nonvolatile memory system, nonvolatile memory device, data read method, and data read program
JP4474648B2 (ja) * 2005-03-25 2010-06-09 日本電気株式会社 メモリシステム及びそのホットスワップ方法
CA2604827C (en) 2005-04-18 2012-03-20 Research In Motion Limited Method for handling a detected error in a script-based application
US8200887B2 (en) 2007-03-29 2012-06-12 Violin Memory, Inc. Memory management system and method
US20060256615A1 (en) * 2005-05-10 2006-11-16 Larson Thane M Horizontal and vertical error correction coding (ECC) system and method
US7721182B2 (en) 2005-05-27 2010-05-18 International Business Machines Corporation Soft error protection in individual memory devices
US8060774B2 (en) 2005-06-24 2011-11-15 Google Inc. Memory systems and memory modules
US7227797B2 (en) * 2005-08-30 2007-06-05 Hewlett-Packard Development Company, L.P. Hierarchical memory correction system and method
US7307902B2 (en) * 2005-08-30 2007-12-11 Hewlett-Packard Development Company, L.P. Memory correction system and method
US7379316B2 (en) * 2005-09-02 2008-05-27 Metaram, Inc. Methods and apparatus of stacking DRAMs
US8386702B2 (en) * 2005-10-27 2013-02-26 Hewlett-Packard Development Company, L.P. Memory controller
US7577899B2 (en) 2006-02-13 2009-08-18 Harris Corporation Cyclic redundancy check (CRC) based error correction method and device
US8375064B2 (en) 2006-05-05 2013-02-12 International Business Machines Corporation Apparatus, system, and method for read back verification of stored data
US7484138B2 (en) 2006-06-09 2009-01-27 Taiwan Semiconductor Manufacturing Co., Ltd. Method and system for improving reliability of memory device
US7895502B2 (en) 2007-01-04 2011-02-22 International Business Machines Corporation Error control coding methods for memories with subline accesses
US7596648B2 (en) * 2007-03-08 2009-09-29 Dell Products L.P. System and method for information handling system error recovery
US7656727B2 (en) * 2007-04-25 2010-02-02 Hewlett-Packard Development Company, L.P. Semiconductor memory device and system providing spare memory locations
US8041989B2 (en) * 2007-06-28 2011-10-18 International Business Machines Corporation System and method for providing a high fault tolerant memory system
US8041990B2 (en) 2007-06-28 2011-10-18 International Business Machines Corporation System and method for error correction and detection in a memory system

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI653536B (zh) 2015-07-08 2019-03-11 美商萬國商業機器公司 用於調整最佳化參數以自訂用於共用匯流排上目標晶片之信號眼之方法、系統及電腦程式產品
TWI722496B (zh) * 2019-06-20 2021-03-21 慧榮科技股份有限公司 使用者資料的加解密方法及裝置
US11651707B2 (en) 2019-06-20 2023-05-16 Silicon Motion, Inc. Method and apparatus for encrypting and decrypting user data

Also Published As

Publication number Publication date
WO2009000639A3 (en) 2009-05-28
CN101681283B (zh) 2012-07-25
JP2010531499A (ja) 2010-09-24
TW200919171A (en) 2009-05-01
WO2009000639A2 (en) 2008-12-31
KR20090118031A (ko) 2009-11-17
CN101681283A (zh) 2010-03-24
JP5349470B2 (ja) 2013-11-20
EP2171586A2 (en) 2010-04-07
US20090006886A1 (en) 2009-01-01
KR101119358B1 (ko) 2012-03-13
EP2171586B1 (en) 2013-05-08
US8041990B2 (en) 2011-10-18

Similar Documents

Publication Publication Date Title
TWI430084B (zh) 記憶體系統中錯誤校正與偵測之系統及方法
JP5142138B2 (ja) メモリ・システム内の障害メモリ要素を識別する方法及びメモリ・システム
US7949931B2 (en) Systems and methods for error detection in a memory system
US8201069B2 (en) Cyclical redundancy code for use in a high-speed serial link
US8041989B2 (en) System and method for providing a high fault tolerant memory system
US7984329B2 (en) System and method for providing DRAM device-level repair via address remappings external to the device
US8055976B2 (en) System and method for providing error correction and detection in a memory system
US7584336B2 (en) Systems and methods for providing data modification operations in memory subsystems
US8327105B2 (en) Providing frame start indication in a memory system having indeterminate read data latency
US8359521B2 (en) Providing a memory device having a shared error feedback pin
EP2027538B1 (en) Systems and methods for providing remote pre-fetch buffers
US8234540B2 (en) Error correcting code protected quasi-static bit communication on a high-speed bus
US8255783B2 (en) Apparatus, system and method for providing error protection for data-masking bits
JP7249719B2 (ja) 共通の高ランダム・ビット・エラーおよび低ランダム・ビット・エラー修正ロジック
US8024642B2 (en) System and method for providing constrained transmission and storage in a random access memory
US20250123921A1 (en) Low latency memory controller multibit ecc (error correction code) decoder
US12461821B2 (en) Low cost high performance LRAID

Legal Events

Date Code Title Description
MM4A Annulment or lapse of patent due to non-payment of fees