(57)【特許請求の範囲】
【請求項１】
メモリサブシステムのエラーを管理するための方法であって、
第２のメモリ部分とのロックステップパートナーとしてロックステップパートナーシップに設定された第１のメモリ部分のハードエラーを検出する段階であって、エラー訂正は、前記ロックステップパートナーにわたって提供される、段階と、
前記第１のメモリ部分における前記ハードエラーの検出に応答して、前記第１のメモリ部分と、前記第２のメモリ部分との間の前記ロックステップパートナーシップをキャンセルする段階と、
ロックステップパートナーとしての前記第１のメモリ部分と第３のメモリ部分との間に新しいロックステップパートナーシップを作り出す段階と、
ロックステップパートナーとしての前記第２のメモリ部分と第４のメモリ部分との間に新しいロックステップパートナーシップを作り出す段階と
を備える方法。
【請求項２】
前記ハードエラーを検出する段階は、前記ロックステップパートナーシップの第２のハードエラーを検出する段階を有する、請求項１に記載の方法。
【請求項３】
前記ロックステップパートナーシップは、前記ハードエラーがスペアメモリ部分にマッピングされた仮想ロックステップパートナーシップを有する、
請求項１または２に記載の方法。
【請求項４】
前記第１のメモリ部分および前記第２のメモリ部分は、メモリランクを有する、請求項１から３のいずれか一項に記載の方法。
【請求項５】
前記第１のメモリ部分および前記第２のメモリ部分は、メモリバンクを有する、請求項１から３のいずれか一項に記載の方法。
【請求項６】
前記第１のメモリ部分および前記第２のメモリ部分は、ＤＲＡＭ（ダイナミックランダムアクセスメモリ）デバイスを有する、請求項１から３のいずれか一項に記載の方法。
【請求項７】
前記第１のメモリ部分および前記第２のメモリ部分は、別個のランクにＤＲＡＭデバイスを有する、請求項６に記載の方法。
【請求項８】
前記第３のメモリ部分および前記第４のメモリ部分は、異なるランクにＤＲＡＭデバイスを有する、請求項６に記載の方法。
【請求項９】
ロックステップパートナーとしての前記第１のメモリ部分と第３のメモリ部分との間に前記新しいロックステップパートナーシップを作り出す段階、およびロックステップパートナーとしての前記第２のメモリ部分と第４のメモリ部分との間に前記新しいロックステップパートナーシップを作り出す段階のうちの少なくとも１つが前記ロックステップパートナーシップの粒度レベルを変更する段階を含む、
請求項１から８のいずれか一項に記載の方法。
【請求項１０】
前記第１のメモリ部分の前記ハードエラーを検出する段階は、異なる粒度レベルにて前記第１のメモリ部分とグループ化され得るメモリ部分のハードエラーを検出する段階を有し、
前記新しいロックステップパートナーシップを作り出す段階は、前記異なる粒度レベルにて前記第１のメモリ部分と前記第３のメモリ部分との間に新しいロックステップパートナーシップを作り出す段階を有する、
請求項９に記載の方法。
【請求項１１】
前記新しいロックステップパートナーシップを作り出す段階は、ロックステップテーブルのロックステップパートナーシップエントリを動的に変更する段階を有する、
請求項１から１０のいずれか一項に記載の方法。
【請求項１２】
前記ハードエラーを検出する段階は、第２のハードエラーを検出する段階を有し、さらに、前記第２のハードエラーを検出する段階の前に、前記第１のメモリ部分か、前記第２のメモリ部分のどちらかにおいて第１のハードエラーを検出する段階と、
前記第１のハードエラーを検出する段階に応答して、ロックステップパートナーとして前記第１のメモリ部分と前記第２のメモリ部分との間に元のロックステップパートナーシップを設定する段階と
を有する、
請求項１から１１のいずれか一項に記載の方法。
【請求項１３】
前記ハードエラーを検出する段階は、前記第２のメモリ部分との予め決定されたロックステップパートナーシップに設定された前記第１のメモリ部分の前記ハードエラーを検出する段階を有する、
請求項１から１１のいずれか一項に記載の方法。
【請求項１４】
関連付けられるメモリサブシステムのエラーを管理するためのメモリ管理デバイスであって、
前記メモリサブシステムの第１のメモリ部分のハードエラーを検出するエラー検出ロジックであって、前記第１のメモリ部分は、第２のメモリ部分とのロックステップパートナーとしてロックステップパートナーシップに設定され、エラー訂正は、前記ロックステップパートナーにわたって広げられる、エラー検出ロジックと、
前記第１のメモリ部分における前記ハードエラーの検出に応答して、前記第１のメモリ部分と前記第２のメモリ部分との間の前記ロックステップパートナーシップをキャンセルし、ロックステップパートナーとしての前記第１のメモリ部分と第３のメモリ部分との間に、およびロックステップパートナーとしての前記第２のメモリ部分と第４のメモリ部分との間に、新しいロックステップパートナーシップを作り出すエラー訂正ロジックと
を備えるメモリ管理デバイス。
【請求項１５】
前記ロックステップパートナーシップは、前記ハードエラーがスペアメモリ部分にマッピングされた仮想ロックステップパートナーシップを有する、
請求項１４に記載のメモリ管理デバイス。
【請求項１６】
前記第１のメモリ部分および前記第２のメモリ部分は、メモリランク、メモリバンクおよびＤＲＡＭ（ダイナミックランダムアクセスメモリ）デバイスのうちの１つを有する、
請求項１４または１５に記載のメモリ管理デバイス。
【請求項１７】
前記第１のメモリ部分および前記第２のメモリ部分は、別個のランクにＤＲＡＭデバイスを含む、
請求項１６に記載のメモリ管理デバイス。
【請求項１８】
前記第３のメモリ部分および前記第４のメモリ部分は、異なるランクにＤＲＡＭデバイスを含む、
請求項１６に記載のメモリ管理デバイス。
【請求項１９】
前記エラー訂正ロジックは、ロックステップパートナーとしての前記第１のメモリ部分と第３のメモリ部分との間に前記新しいロックステップパートナーシップを作り出す場合、またはロックステップパートナーとしての前記第２のメモリ部分と第４のメモリ部分との間に、前記新しいロックステップパートナーシップを作り出す場合、少なくとも１つのロックステップパートナーシップの粒度レベルを変更する、
請求項１４から１８のいずれか一項に記載のメモリ管理デバイス。
【請求項２０】
前記エラー検出ロジックは、異なる粒度レベルにて前記第１のメモリ部分とグループ化され得るメモリ部分の前記ハードエラーを検出し、
前記エラー訂正ロジックは、前記異なる粒度レベルにて前記第１のメモリ部分と前記第３のメモリ部分との間に前記新しいロックステップパートナーシップを作り出す、
請求項１９に記載のメモリ管理デバイス。
【請求項２１】
前記エラー訂正ロジックは、ロックステップテーブルのロックステップパートナーシップエントリを動的に変更することによって前記新しいロックステップパートナーシップを作り出す、
請求項１４から２０のいずれか一項に記載のメモリ管理デバイス。
【請求項２２】
前記エラー検出ロジックは、第２のハードエラーを検出し、さらに、前記第２のハードエラーの検出の前に、前記エラー検出ロジックは、
前記第１のメモリ部分か、前記第２のメモリ部分のどちらかに第１のハードエラーを検出し、
前記エラー訂正ロジックは、前記第１のハードエラーを検出することに応答して、ロックステップパートナーとしての前記第１のメモリ部分と前記第２のメモリ部分との間に元のロックステップパートナーシップを設定する、
請求項１４から２１のいずれか一項に記載のメモリ管理デバイス。
【請求項２３】
前記エラー検出ロジックは、前記第２のメモリ部分との予め決定されたロックステップパートナーシップに設定された前記第１のメモリ部分の前記ハードエラーを検出する、
請求項１４から２１のいずれか一項に記載のメモリ管理デバイス。
【請求項２４】
請求項１から１３のいずれか一項に記載の方法を実行する動作を行うための手段を備える、メモリサブシステムのエラーを管理するための装置。
【請求項２５】
請求項１から１３のいずれか一項に記載の方法をコンピュータに実行させるプログラム。
【請求項２６】
請求項２５に記載のプログラムを格納するためのコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連ケース］
本出願は、２０１５年２月６日に出願された米国仮出願第６２／１１３，３３７号に基づく非仮出願であり、当該仮出願の優先権の利益を主張する。仮出願は、参照することにより本明細書に組み込まれる。
【０００２】
本発明の実施形態は概して、メモリ管理に関し、より詳細には、ロックステップ構成の動的変更に関する。
［著作権表示／許可］
【０００３】
本特許書類の開示の部分は、著作権保護の対象となる材料を含み得る。著作権の所有者は、特許商標庁の特許ファイルまたは記録に見られる特許書類または特許開示の何人かによる複写に不服を申し立てないが、それ以外のすべての著作権に係る一切の権利を保留する。著作権表示は、以下に説明される、本明細書の添付の図面内のデータ全てに、ならびに以下に記載されるいずれのソフトウェアにも適用される。著作権（Ｃ）２０１５、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ、著作権所有。
【背景技術】
【０００４】
特定のタイプのメモリリソースは、大部分の他のプラットフォームコンポーネントと比較して高い故障率を有する。例えば、ＤＤＲ（二重データレート）メモリデバイスは、コンピューティングプラットフォームまたはサーバ環境の一部である大部分の他のコンポーネント（プロセッサ、ストレージ、インターフェースコンポーネントおよび／または他のものなど）よりも故障率が高い。長期のストレージコンポーネントはまた、かなりの故障率を経験する。メモリデバイスに対する故障がダウンタイムを生じさせ、システムへのサービス提供を必要とさせることを考えると、より高いプラットフォームＲＡＳ（信頼性、利用可能性および有用性）が好ましい。
【０００５】
従来、ハードＤＲＡＭ（ダイナミックランダムアクセスメモリ）の故障またはハードエラーを切り抜けるべく採用される複数の異なるスペアリング技術が存在し、それによりサービス要求を押し出すことができる。ハードエラーは、物理デバイスが正確に読み出し、および／または書き込みするのを妨げる、物理デバイスに対するエラーを指し、断続的な故障である一時的なエラーとは区別される。ハード故障に対処するべく、ＳＤＤＣ（単一デバイスデータ訂正）およびＤＤＤＣ（二重デバイスデータ訂正）という技術が知られている。しかしながら、メモリサブシステムのサービスを押し出す技術にもかかわらず、故障率は、とりわけより大きいメモリ構成に対しては、望ましいものと比べて高いままである。
【図面の簡単な説明】
【０００６】
以下の説明は、本発明の実施形態の実装の例として与えられる図解を有する図の考察を含む。図面は、限定としてではなく、例として理解されるべきである。本明細書において用いられるように、１または複数の「実施形態」への言及は、本発明の少なくとも１つの実装に含まれる特定の特徴、構造、および／または特性を説明するものと理解されたい。従って、本明細書に現れる「１つの実施形態において」または「代替的な実施形態において」などの表現は、本発明の様々な実施形態および実装を説明し、必ずしも全て同じ実施形態を意味するものではない。しかしながら、それらはまた、必ずしも相互に排他的であるわけではない。
【０００７】
【図１Ａ】動的ロックステップ管理が実装されるチャネル間にキャッシュラインを分配するシステムの実施形態のブロック図である。
【０００８】
【図１Ｂ】メモリ構造およびロックステップロジックを示す図１Ａのシステムの実施形態のブロック図である。
【０００９】
【図２】動的ロックステップ管理が実装されるシステムの適応二重デバイスデータ訂正（ＡＤＤＤＣ）実装用のステートマシンの実施形態のブロック図である。
【００１０】
【図３】図２に特定される状態のロジック表現を示す図４Ａ−９Ｉ用の説明文である。
【００１１】
【図４Ａ】最初のバンク故障のロジック表現である。
【００１２】
【図４Ｂ】最初のバンク故障に応答する領域０のＡＤＤＤＣ状態を生成するロックステップアクションのロジック表現である。
【００１３】
【図５Ａ】異なるメモリデバイスの異なるバンク故障のロジック表現である。
【００１４】
【図５Ｂ】異なるメモリデバイスの付加的なバンク故障に応答して領域１のＡＤＤＤＣ状態を生成するロックステップアクションのロジック表現である。
【００１５】
【図５Ｃ】領域０および領域１に故障を有するＡＤＤＤＣ状態にある場合の異なるメモリデバイスの同じバンク故障のロジック表現である。
【００１６】
【図５Ｄ】異なるメモリデバイスの同じバンク故障に応答してＡＤＤＤＣ＋１状態に昇格するロックステップアクションのロジック表現である。
【００１７】
【図５Ｅ】付加的な領域０故障を有するＡＤＤＤＣ＋１状態の場合に異なるメモリデバイスの付加的な同じバンク故障のロジック表現である。
【００１８】
【図５Ｆ】異なるメモリデバイスの付加的な同じバンク故障に応答して領域０および領域１の故障を有するＡＤＤＤＣ＋１状態に昇格するロックステップアクションのロジック表現である。
【００１９】
【図６Ａ】領域０の故障に対してＡＤＤＤＣ状態にある場合、異なるメモリデバイスにおける同じバンク故障のロジック表現である。
【００２０】
【図６Ｂ】異なるメモリデバイスの同じバンク故障に応答して領域０の故障を有するＡＤＤＤＣ＋１状態に昇格するロックステップアクションのロジック表現である。
【００２１】
【図７Ａ】ＡＤＤＤＣ状態にある場合にバディ領域の同じバンク故障のロジック表現である。
【００２２】
【図７Ｂ】プライマリ領域およびバディ領域の両方における同じバンクの故障に対してＡＤＤＤＣ＋１状態に昇格するロックステップアクションのロジック表現である。
【００２３】
【図７Ｃ】共通ランク内にマッピングされたバディ領域に対してＡＤＤＤＣ状態のままであるように、ロックステップパートナーシップを再割り当てするロックステップアクションのロジック表現である。
【００２４】
【図８Ａ】ＡＤＤＤＣ状態にある場合の同じデバイス、異なるバンク故障のロジック表現である。
【００２５】
【図８Ｂ】同じデバイス、付加的なバンク故障に応答する領域１のＡＤＤＤＣ状態を生成するロックステップアクションのロジック表現である。
【００２６】
【図８Ｃ】領域０および領域１の同じバンクに故障を有するＡＤＤＤＣ状態にある場合の異なるデバイス、異なるバンク故障のロジック表現である。
【００２７】
【図８Ｄ】領域０および領域１の同じバンクに故障を有するＡＤＤＤＣ状態にある場合で、異なるデバイス、同じバンク故障のロジック表現である。
【００２８】
【図８Ｅ】最初のデバイス故障のロジック表現である。
【００２９】
【図９Ａ】最初のデバイス故障に応答してバディランクのＡＤＤＤＣ状態を生成するロックステップアクションのロジック表現である。
【００３０】
【図９Ｂ】ＡＤＤＤＣ状態にある場合の故障ランクにおける付加的なデバイス故障のロジック表現である。
【００３１】
【図９Ｃ】ＡＤＤＤＣ状態の故障ランクにある場合に異なるデバイスの付加的なバンク故障のロジック表現である。
【００３２】
【図９Ｄ】付加的なデバイス故障に応答してＡＤＤＤＣ＋１状態を生成するロックステップアクションのロジック表現である。
【００３３】
【図９Ｅ】ＡＤＤＤＣ状態にある場合にバディランクにおける同じデバイス故障のロジック表現である。
【００３４】
【図９Ｆ】ＡＤＤＤＣ状態にある場合にバディランクの同じデバイスの新しいバンク故障のロジック表現である。
【００３５】
【図９Ｇ】バディランクの付加的なデバイス故障に応答してＡＤＤＤＣ＋１状態を生成するロックステップアクションのロジック表現である。
【００３６】
【図９Ｈ】バディ領域の同じデバイス故障に応答して、新しいランクにマッピングされたバディ領域に対してＡＤＤＤＣ状態のままであるように、ロックステップパートナーシップを再割り当てするロックステップアクションのロジック表現である。
【００３７】
【図９Ｉ】バディ領域の同じデバイスの新しいバンク故障に応答して、故障デバイスに対するランクのための新しいバディランクと、以前のバディランク内のバディバンクとに対してＡＤＤＤＣ状態のままであるように、ロックステップパートナーシップを再割り当てするロックステップアクションのロジック表現である。
【００３８】
【図１０】ロックステップ構成を動的に管理するためのプロセスの実施形態のフロー図である。
【００３９】
【図１１】動的ロックステップ管理が実装され得るコンピューティングシステムの実施形態のブロック図である。
【００４０】
【図１２】動的ロックステップ管理が実装され得るモバイルデバイスの実施形態のブロック図である。
【００４１】
いくつかの詳細および実装の説明が以下に続く。これらは、後述される実施形態のうちのいくつかまたは全てを示し得る図面の説明を含み、本明細書に提示される発明の概念の他の潜在的な実施形態または実装も論ずる。
【発明を実施するための形態】
【００４２】
本明細書に説明されるように、メモリサブシステムエラー管理は、ロックステップパートナーシップを動的に変更することを可能にする。ロックステップは、故障メモリリソースへの決定論的データアクセスを妨げる１つのメモリリソースのハード故障を補償する複数のメモリリソースにわたるエラー訂正の分配を指す。ロックステップパートナーシップは、エラーチェックおよび訂正が分配または共有されたメモリの２つの部分を指す。メモリサブシステムは、第１のメモリ部分のハードエラーを検出し、そこで、第１のメモリ部分は第２のメモリ部分とのロックステップパートナーシップに設定され、メモリリソース対にわたりエラー訂正を広げる。ハードエラーの検出に応答して、メモリサブシステムは、第１のメモリ部分と第２のメモリ部分との間のロックステップパートナーシップを逆転し、新しいロックステップパートナーシップを設定することができる。１つの実施形態において、ロックステップパートナーシップは、第２のメモリ部分の故障またはハードエラーの検出に応答して形成される。メモリサブシステムは、ロックステップパートナーとして第１のメモリ部分および第３のメモリ部分間と、ロックステップパートナーとして第２のメモリ部分および第４のメモリ部分間とに新しいロックステップパートナーシップを作り出すことができる。メモリサブシステムはまた、パートナーシップを変更する場合に、ロックステップパートナーシップの粒度を変更するように構成され得る。
【００４３】
ロックステップパートナーシップの動的変更は、ロックステップの任意の用途に適用され得る。１つの実施形態において、メモリコントローラは、メモリ部分間のロックステップ関係を表すロックステップテーブルを含む。部分サイズが、ロックステップの実装のために構成され得る。１つの実施形態において、ＤＤＤＣ（二重デバイスデータ訂正）の実装などにおいて、ロックステップ関係が事前設定され得る。従って、検出されたエラーは、特定のロックステップパートナー間で共有されるエラー訂正という結果になる。本明細書にて説明されるように、ロックステップパートナーシップは、動的に逆転および再割り当てされ得る。１つの実施形態において、ＡＤＤＤＣ（適応二重デバイスデータ訂正）の実装などにおいて、ロックステップ関係は、第１のエラーが検出されるまで規定されない。そのような実装に関して、ロックステップパートナーの第１の割り当ては、逆転および再割り当てされ得る。もっぱら説明のために、以下の説明の大部分および図面は、ＡＤＤＤＣの実装に言及する。動的なロックステップパートナーシップの変更、またはロックステップ構成の動的変更は、逆転および再割り当てされるように構成され得るロックステップパートナーシップを適用する任意のシステムにて実行され得ることが理解されよう。従って、ＡＤＤＤＣに関連した例は、限定ではなく、例としてのみ理解されよう。
【００４４】
図１Ａは、動的ロックステップ管理が実装されるチャネル間にキャッシュラインを分配するシステムの実施形態のブロック図である。システム１０２は、メモリサブシステムの要素を図示する。プロセッサ１１０は、コードを実行するシステム１０２のハードウェア処理リソースを表し、メモリ１２０に格納されるデータおよび／またはコードにアクセスする要求を生成する。プロセッサ１１０は、中央処理装置（ＣＰＵ）、グラフィック処理装置（ＧＰＵ）、特定用途向けプロセッサ、周辺プロセッサ、および／またはメモリ１２０から読み出し、および／またはメモリ１２０に書き込む要求を生成することができる他のプロセッサを含み得る。プロセッサ１１０は、シングルコアプロセッサおよび／またはマルチコアプロセッサであり得るか、またはシングルコアプロセッサおよび／またはマルチコアプロセッサを含み得る。プロセッサ１１０は、コード実行を通して、メモリ１２０からデータを読み出す、および／またはデータをメモリ１２０に書き込む要求を生成する。コードは、プロセッサ１１０に局所的に格納されるコード、および／またはメモリ１２０に格納されるコードを含み得る。
【００４５】
メモリコントローラ１３０は、メモリ１２０へのアクセスを管理するシステム１０２のロジックを表す。プロセッサ１１０によって生成されるアクセスリクエストに関して、メモリコントローラ１３０は、要求をサービス提供するためにメモリ１２０に送信される１または複数のメモリアクセスコマンドを生成する。１つの実施形態において、メモリコントローラ１３０は、プロセッサ１１０およびメモリ１２０によって共有されるロジックプラットフォーム上のスタンドアロンコンポーネントであり得る。１つの実施形態において、メモリコントローラ１３０は、プロセッサ１１０の一部である。１つの実施形態において、メモリコントローラ１３０は、プロセッサ１１０とは別個のチップまたはダイであり、システムオンチップ（ＳｏＣ）としてプロセッサダイ／チップと共に共通の基板上に統合される。１つの実施形態において、メモリ１２０の１または複数のメモリリソースは、プロセッサ１１０および／またはメモリコントローラ１３０と共にＳｏＣにおいて統合され得る。メモリコントローラ１３０は、メモリリソースへのアクセスの管理と関連してメモリ１２０の構成と状態を管理する。メモリコントローラ１３０は、メモリ１２０の帯域幅の利用を最大化すべく予期される方法にて、コマンドを生成し、データリソースへのアクセスを管理するように構成され得る。
【００４６】
１つの実施形態において、メモリコントローラ１３０は、システム１０２が複数のチャネル１４０間にキャッシュラインを分配するスケーラブルメモリバッファまたは他のメモリ構成としてメモリ１２０を管理する。例えば、２つのチャネル１４０−０および１４０−１を有するメモリ１２０が、図示されている。説明される技術は、より多くのチャネル１４０にわたって適用され得ることが理解されよう。１つの実施形態において、メモリコントローラ１３０は、チャネル１４０−０のＤＩＭＭ（二重インラインメモリモジュール）１４２−０上にキャッシュラインの半分を位置付け、チャネル１４０−１のＤＩＭＭ１４０−１上にキャッシュラインの他の半分を位置付けることによって、別個のチャネル間１４０にキャッシュラインを分配する。より多くのチャネルの使用は、同じ利益を提供し得るが、複数のチャネル間のキャッシュラインの分離を実装するロジックは、修正される必要がある場合がある。チャネル１４０にわたりロックステップモードのメモリチャネルを実行することにより、ＤＤＤＣ（二重デバイスデータ訂正）を適用することが可能となる利点を有する。ロックステップモードは、ロックステップパートナーシップが設定され、ロックステップパートナーがエラー訂正データを共有する動作状態を指す。各チャネル１４０は、１または複数のＤＩＭＭ１４２を含む。各ＤＩＭＭは、複数のメモリデバイス１４４を含む。１つの実施形態において、各メモリデバイス１４４は、ＤＲＡＭ（ダイナミックランダムアクセスメモリ）チップまたはデバイスである。より簡易なシステム構成において、メモリデバイス１２６をＤＩＭＭ１４２へとさらに分離することを必ずしも必要とすることなく、同様の利益がメモリデバイス１２６をチャネル１４０へと分離することによって実現され得ることが理解されよう。
【００４７】
１つの例示的な構成において、システム１０２が２つのチャネル１４０を含み、この例のために各チャネルが１つのＤＩＭＭ１４２を有し、ＤＩＭＭごとに１６個のメモリデバイス１２６と、ＣＲＣ（巡回冗長検査）用およびパリティ用にそれぞれ１つのメモリデバイス１２６とを加えて有すると考える。１つのメモリデバイス１２６が故障した場合、そのデータは、単一のデバイスデータ訂正（ＳＤＤＣ）を用いて再構成され得る。ＤＤＤＣに関して、システム１０２は、メモリコントローラ１３０を介して、ＤＩＭＭ１４２の対ごとに４個のメモリデバイス１２６を用いて、２つのＤＩＭＭ１４２からの２つのメモリデバイス１２６を組み合わせることができる。そのような技術は、３２個の「データ」デバイス、ＣＲＣ（巡回冗長検査）用の２つのデバイス、パリティ用の１つのデバイスおよび１つのスペアデバイスを提供する。メモリデバイス１２６の１つが故障した場合、スペアデバイスは、故障デバイスを置き換えることができる。１つのメモリデバイス１２６の故障後に、従来のＳＤＤＣが採用され得る。従って、ＤＤＤＣは、ＤＩＭＭ１４２上の２つの連続するＤＲＡＭ故障からの回復、ならびにＤＩＭＭ１４２上の後続の単一ビットソフトエラーからの回復を可能にする。
【００４８】
システム１０２は、ハードエラーまたはハード故障を管理すべくＡＤＤＤＣ（適応二重デバイスデータ訂正）を実装することができる。ＡＤＤＤＣは、メモリデバイス１２６用のエラー訂正を提供するロックステップを規定する。ＡＤＤＤＣは、ハード故障に遭遇すると、スペアデバイス用の空間を区分けするためにロックステップを使用することができる。システム１０２は、ロックステップランク／バンクにおける第１のメモリのデバイスの故障をスペアデバイスに置き換えることができる。メモリ１２０のランクおよびバンクアーキテクチャに関する更なる詳細は、図１Ｂのシステム１０４のものに基づき得る。ＡＤＤＤＣに関して、ロックステップランク／バンク内の第２の故障は従来、サービスイベントを引き起こすであろう。従って、同じ領域内の第２の故障は通常、サービスコールを引き起こすであろう。１つの実施形態において、ロックステップ構成を動的に変更する能力に関して、ロックステップパートナーシップの第２の故障は概して、２つの故障がロックステップパートナーシップの別個の半体である場合、サービスコールという結果にならない。
【００４９】
１つの実施形態において、メモリコントローラ１３０は、ロックステップ構成を含む、エラー応答を管理するエラーロジック１３２を含む。１つの実施形態において、ロジック１３２は、ロックステップパートナーシップを動的に変更することができる。より具体的には、ロジック１３２は、メモリコントローラが、メモリリソース対にわたりエラー訂正を広げるロックステップパートナーシップを最初に設定する、または作り出し、次にロックステップパートナーシップの付加的なエラーを検出するとロックステップパートナーシップをキャンセルまたは逆転するのを可能にすることができる。ロックステップパートナーシップを逆転した後、エラーロジック１３２を介したメモリコントローラ１３０は、サービスコールイベントの生成を防止する付加的なエラーに応答して、１または複数の新しいロックステップパートナーシップを作り出すことができ、または設定することができる。ロックステップパートナーシップを動的に逆転し、１または複数の新しいロックステップパートナーシップを設定することにより、ＡＤＤＤＣの能力を、少なくとももう１つ多い付加的なハードエラーのためにエラー訂正を処理するように拡張することができる。
【００５０】
図１Ｂは、メモリ構造およびロックステップロジックを示す図１Ａのシステムの実施形態のブロック図である。システム１０４は、図１Ｂのシステム１０２の１つの実施形態である。プロセッサ１１０は、簡素化のために除去されるが、処理リソースがメモリ１２０に対するデータアクセスリクエストを生成することは理解されよう。メモリ１２０がより詳細に図示され、メモリリソースの構成を示す。１または複数のメモリデバイス１２６は、ランク１２８においてグループ化される。１つの実施形態において、システム１０２のＤＩＭＭ１４２は、１つまたは２つのランク１２８を含むことができる。１つの実施形態において、ランク１２８は、物理ボードまたは基板にわたってメモリデバイスを含むことができる。各メモリデバイス１２６は、アドレス指定可能なグループの行１２２またはキャッシュラインである複数のバンク１２４を含む。１つの実施形態において、行１２２は、複数のキャッシュラインを含む。１つの実施形態において、それぞれの行１２２は、キャッシュラインのページを含む。各バンク１２４は、複数の行１２２を含むことができる。
【００５１】
ＡＤＤＤＣの実装を再度参照すると、システム１０４（および図１Ａのシステム１０２）は、ロックステップパートナーを動的に変更することにより改善されたＡＤＤＤＣを提供することができる。ロックステップパートナーを動的に変更することにより、メモリコントローラ１３０を介したシステム１０４は、従来サービスコールを必要とするであろう多くの情況でのサービスコールを防止することができる。従って、ＡＤＤＤＣはさらに、ロックステップのペアにおいて付加的なハード故障を切り抜ける能力を提供することによって相当なマージンでサービスレートを改善することができる。ロックステップパートナーは、ロックステップにて動作しているバンク１２４もしくはランク１２８の対、または他のメモリ部分を意味する。バンク１２４および／またはランク１２８は、メモリ１２０のＤＩＭＭおよび／またはチャネルにわたってロックステップ関係にてパートナーを組み得ることが理解されよう。１つの実施形態において、バンクまたはランクに加えて他の粒度レベルが、ロックステップ動作のために採用され得る。従って、バンクまたはランクレベルの粒度に関する説明は例示的なものと理解されるべきであり、限定されない。
【００５２】
たいていのＲＡＳ改善においては、関連する記憶容量または性能が犠牲となる。しかしながら、ロックステップパートナーの動的変更により、いずれの設計、性能または容量コストもなく、既存のＡＤＤＤＣ実装と作動し、著しくそれを改善することができる。従って、ロックステップパートナーの動的変更は、コンポーネントがサーバシャーシに搭載されるブレードであるスタンドアロンサーバおよび／またはサーバシステムなどのサーバ環境のＡＤＤＤＣに採用され得る。さらに、ロックステップパートナーの変更は、設計更新してレガシーＤＤＤＣに適用され得る。
【００５３】
従来のＡＤＤＤＣ実装は、ロックステップ領域ごとに最大で２つの連続するＤＲＡＭデバイス故障までをマッピングする仮想ロックステップを適用することが理解されよう。従来のＡＤＤＤＣ実装において、メモリ１２０は、第１のデバイス故障まで非ロックステップ構成にて開始するであろう。第１のデバイス故障後、メモリコントローラ１３０は、スペアリングエンジン（具体的に示されないが、エラーマネージャ１３４の一部とみなされ得る）が、故障領域を仮想ロックステップに変換すべく適用することができる。仮想ロックステップにおいて、キャッシュラインは、２つのメモリ位置にわたる格納状態になる。１つの実施形態において、２つのメモリ位置は、プライマリ位置およびバディ位置と呼ばれ得る。そのような用語が、本明細書にて使用されることになるが、ロックステップパートナーを変更する技術に影響することなく、他の用語が使用され得ることが理解されよう。ロックステップパートナーシップによってカバーされる領域の第２の連続故障は、ＡＤＤＤＣ＋１モードに移動することによってマッピングされ得る。従来のＡＤＤＤＣに対して、第２の連続故障は、サービスコールが故障メモリを置き換える必要性を引き起こす。
【００５４】
本明細書に説明される動的なロックステップパートナーシップの変更を採用するメモリサブシステムは、ロックステップランク／バンクに影響を与える第２の故障の約５０％を切り抜けることを可能にしたことが認められた。ロックステップのペアの第２の故障イベントさえも切り抜ける能力を提供することにより、メモリサブシステムに対するＲＡＳは著しく改善される。メモリサブシステム用の改善されたＲＡＳは、サービスコストを著しく低減することができる。従来のＡＤＤＤＣは、大きな構成に対して１０倍にサービスレートを改善することができることが認められた。大きな構成は、多数の構成パラメータを有することになることが理解されよう。従って、サービスレートの正確な数およびサービスレートの改善は、その具体的な構成に基づいてシステムごとに変わることになる。ロックステップパートナーシップの動的変更の使用により多くの場合に、システムが付加的なハード故障を切り抜けるのを可能にし得る（例えば、約５０％の確率で）。従って、ロックステップパートナーの動的変更により、さらに５倍の改善を提供し得ることが予期される。見積もりはおおよそであり、メモリ構成に基づいて大きなばらつきがあり得る。
【００５５】
１つの実施形態において、メモリコントローラ１３０はエラーマネージャ１３４を含み、それは図１Ａのシステム１０２のエラーロジック１３２の一部であり得る。１つの実施形態において、メモリコントローラ１３０はまた、エラーマネージャ１３４の一部として、および／またはエラーロジック１３２の一部としてロックステップマッピング１３６を含む。１つの実施形態において、ロックステップマッピング１３６は、エラーマネージャ１３４の一部であるが、それらは必ずしも結合されない。エラーマネージャ１３４は、メモリコントローラ１３０がエラーを検出して、エラーに対してエラー訂正を処理すべく適用するＡＤＤＤＣ状態を決定するのを可能にする。異なるＡＤＤＤＣ状態は、以下の図２から図９Ｉを参照して説明される。ロックステップマッピング１３６は、メモリのどのメモリ部分がロックステップパートナーとして現在関連付けられるか、または設定されるかのマッピングを規定する。エラーマネージャ１３４は、現在のエラー訂正レベルまたは現在のロックステップマッピング１３６が既知のハードエラーを管理するのに十分であるかどうかを決定する決定ロジックを含む。エラーマネージャ１３４は、既存のロックステップパートナーシップに生じる可能性がある付加的エラーに応答すべく、いつ、どのようにロックステップパートナーシップを変更するかを決定する決定ロジックを含む。
【００５６】
１つの実施形態において、エラーマネージャ１３４は、エラー訂正を処理すべく、仮想ロックステップパートナーを使用するＡＤＤＤＣの実装を適用する。１つの実施形態において、エラーマネージャ１３４は、仮想ロックステップパートナーでないロックステップパートナーを用いたエラー訂正を適用する。
いずれにせよ、エラーマネージャ１３４は、ロックステップパートナーシップを逆転し、新しいロックステップパートナーシップを確立するロジックを含む。本明細書に説明されるエラーマネージャ１３４および／または他のコンポーネントに関して言及される「ロジック」は、ハードウェアおよび／またはソフトウェア（ファームウェアを含む）ロジックを指し得ることは、理解されよう。ロジックは、記述されることを実現すべく動作を実行するように要素を構成する。
【００５７】
１つの実施形態において、エラーマネージャ１３６は、ロックステップマッピング１３６のロックステップパートナー構成を動的に変更することができる。従来のロックステップシステムにおいて、一度設定するとパートナーシップは、固定される。従って、ロックステップパートナーシップの設定後に生じるエラーは従来、故障部分を置き換えるべくサービスコールを必要とするであろう。本明細書に説明されるように、ロックステップパートナーシップは、取り消され得るか、または逆転され得、次に、新しいロックステップパートナーシップが設定され得る。メモリコントローラ１３０は、例えば、エラーマネージャ１３４を介して、ロックステップパートナーシップを設定および未設定にすべく順方向および逆方向のスペアリング動作の両方を実行することができる。
【００５８】
スペアリングロジックを有するメモリコントローラは、従来、順方向にてスペアリングすることが可能であり、通常単一の固定粒度にて順方向のスペアリングを実行する。逆スペアリングに関して、メモリコントローラは、ビット、デバイス、キャッシュライン、行、列、バンク、サブランク、ランクおよび二重インラインメモリモジュール（ＤＩＭＭ）などの複数の粒度でメモリスペアリングすることが可能である。逆スペアリングは、メモリコントローラが、以前に実行されたスペアリング動作を逆転する、または取り消すことを可能とし、それにより、ロックステップパートナーシップの変更、および／または故障状態の粒度変更を可能にし得る。逆スペアリングは、Ｎ＋１故障状態からＮ故障状態までの移動など、故障状態を後方に移動することを指す。
【００５９】
本明細書に使用されるように、「順方向のスペアリング」は、データをメモリの故障領域から物理的に移動すること、および当該データへの後続のアクセスが、故障位置ではなく新しい位置から検索されることとなる新しい位置にデータを格納することを意味し得る。「逆スペアリング」は、データを新しい位置から元の故障位置に物理的に移動することを意味し得る。逆スペアリングは通常、同じか、異なる粒度のどちらかで、別の部分に後続する順方向のスペアリングをする意図でなされるだろう。メモリコントローラ１３０は、逆スペアリング動作と、後続の順方向のスペアリング動作との間の暫定エラーを訂正するＥＣＣ（エラー訂正符号化）技術を使用することができる。
【００６０】
メモリ１２０は、キャッシュライン、列、行、バンク、サブランク、ランク、ＤＩＭＭおよびチャネルのサイズが、最小のものから最大のものまである、アドレス指定可能領域を備えたアーキテクチャを有し得ることが理解されよう。各メモリ故障は、１）影響を受けた特定の領域またはセクションまたは部分、および２）影響を受けた幅（ビット数）を有するものと考えてよい。メモリデバイス１２６は、受信されたコマンドアドレスをメモリに対する物理的位置に置き換えるアドレスデコーダまたはデコードロジックを含む。
【００６１】
上述のように、１つの実施形態において、エラーマネージャ１３４は、順方向および逆方向の両方にてメモリスペアリング動作を実行するように構成されるメモリスペアリングロジックを含み得る。例えば、メモリスペアリングロジックは、故障状態をＮからＮ＋１に移動するバンクレベルなどの第１の粒度レベルにて検出メモリ故障に応答して、最初に順方向のスペアリング動作を実行し得る。エラーマネージャ１３４は、別の部分にて（例えば、より高い粒度レベルにて、および／またはロックステップパートナーシップの別の部分にて）故障状態を検出した場合、故障レベルをＮ＋１からＮに移動する、逆方向のスペアリング動作を実行し得、次に、異なる粒度で、および／または異なるロックステップパートナーシップでＮからＮ＋１に故障レベルまたはエラーレベルを移動すべく順方向のスペアリングを実行し得る。
【００６２】
メモリデバイスへの言及は、異なるメモリタイプに適用し得る。メモリデバイスは、概して、揮発性メモリ技術を意味する。デバイスに対して電源が遮断されたならば、揮発性メモリは、その状態（ひいては、それに格納されたデータ）が不定となるメモリである。不揮発性メモリは、たとえ電源がデバイスに対して遮断されたとしても、その状態が確定であるメモリを意味する。動的な揮発性メモリは、状態を維持するためにデバイス内に格納されたデータをリフレッシュすることを必要とする。動的な揮発性メモリの１つの例としては、ＤＲＡＭ（ダイナミックランダムアクセスメモリ）、またはシンクロナスＤＲＡＭ（ＳＤＲＡＭ）等のなんらかの変形が挙げられる。本明細書に説明されるメモリサブシステムは、ＤＤＲ３（２００７年６月２７日にＪＥＤＥＣ（Ｊｏｉｎｔ  Ｅｌｅｃｔｒｏｎｉｃ  Ｄｅｖｉｃｅ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｃｏｕｎｃｉｌ：電子機器技術評議会）によって元々リリースされ、現在リリース２１である、二重データ速度（ｄｕａｌ  ｄａｔａ  ｒａｔｅ）バージョン３）、ＤＤＲ４（ＤＤＲバージョン４、ＪＥＤＥＣによって２０１２年９月に公表された初期の仕様）、ＬＰＤＤＲ３（ＪＥＤＥＣによる２０１３年８月の低電力ＤＤＲバージョン３、ＪＥＳＤ２０９−３Ｂ）、ＬＰＤＤＲ４（２０１４年８月に元々ＪＥＤＥＣによって公表されたＬＰＤＤＲ（ＬＯＷ  ＰＯＷＥＲ  ＤＯＵＢＬＥ  ＤＡＴＡ  ＲＡＴＥ（低電力二重データ速度）バージョン４（ＪＥＳＤ２０９−４））、ＷＩＯ２（２０１４年８月に元々ＪＥＤＥＣによって公表されたワイドＩ／Ｏ２（ワイドＩＯ２）、ＪＥＳＤ２２９−２）、ＨＢＭ（２０１３年１０月に元々ＪＥＤＥＣによって公表されたＨＩＧＨ  ＢＡＮＤＷＩＤＴＨ  ＭＥＭＯＲＹ  ＤＲＡＭ（高帯域メモリＤＲＡＭ）（ＪＥＳＤ２３５））、ＤＤＲ５（ＤＤＲバージョン５、ＪＥＤＥＣによって現在協議中）、ＬＰＤＤＲ５（ＪＥＤＥＣによって現在協議中）、ＷＩＯ３（ワイドＩ／Ｏ３、ＪＥＤＥＣによって現在協議中）、ＨＢＭ２（ＨＢＭバージョン２、ＪＥＤＥＣによって現在協議中）および／またはその他、ならびにそのような仕様の派生物もしくは拡張に基づく技術等のいくつかのメモリ技術と互換性を有し得る。
【００６３】
１つの実施形態において、揮発性メモリに加えて、または、それの代わりに、メモリデバイスへの言及は、たとえ不揮発性メモリデバイスへの電源が遮断されたとしても、その状態が確定する不揮発性メモリデバイスを意味し得る。１つの実施形態において、不揮発性メモリデバイスは、ＮＡＮＤまたはＮＯＲ技術等のブロックアドレス指定可能なメモリデバイスである。従って、メモリデバイスはまた、３次元クロスポイントメモリデバイス、または他のバイトアドレス指定可能な不揮発性メモリデバイス等の将来世代の不揮発性デバイスを含み得る。１つの実施形態において、メモリデバイスは、多閾値レベルのＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、単一または多レベルの相変化メモリ（ＰＣＭ）、抵抗メモリ、ナノワイヤメモリ、強誘電体トランジスタランダムアクセスメモリ（ＦｅＴＲＡＭ）、メモリスタ技術を組み入れる磁気抵抗ランダムアクセスメモリ（ＭＲＡＭ）、またはスピントランスファトルク（ＳＴＴ）ＭＲＡＭ、または上記のいずれか、または他のメモリの組み合わせを含み得るか、またはそれらであり得る。
【００６４】
図２は、動的ロックステップ管理が実装されるシステムの適応二重デバイスデータ訂正（ＡＤＤＤＣ）実装用のステートマシンの実施形態のブロック図である。状態の図表２００は、任意の数の可能な状態フローの一例に過ぎないことが理解されよう。図表２００にラベルで表される例示的な状態は、図４Ａ−図９Ｉに提示される。
【００６５】
１つの実施形態において、状態ＣＢ１から開始して（バンク故障のケース１）、ＡＢ１に進む（バンク故障ＣＢ１のためのアクション１）。ＡＢ１から、複数の付加的な故障シナリオがあり得る。より簡易なケースから開始すると、状態は、ＣＢ４タイプの後続のエラーについてはＡＢ１からＣＢ４（バンク故障のケース４）に進み、次にＡＢ４（バンク故障ＣＢ４のためのアクション４）に進み得る。ＡＢ４が一度実行されたなら、後続の故障はサービスコールという結果になるであろう。各ケースにおいて、１つの状態から別の状態への移動は、特定されたハード故障を受けるメモリデバイスと関連付けられるメモリコントローラによって実行されることが理解されよう。代わりに、状態は、ＣＢ５タイプの後続のエラーについてはＡＢ１からＣＢ５（バンク故障のケース５）に進み得る。メモリコントローラは、ＣＢ５に応答して、ＡＢ５（バンク故障ＣＢ５のためのアクション５）およびＡＢ６（バンク故障ＣＢ５のためのアクション５）として特定される２つのアクションのうちの１つを実行することができる。ＡＢ５か、ＡＢ６のどちらかが一度実行されたら、後続の故障は、サービスコールという結果になるであろう。
【００６６】
代わりに、状態は、ＣＢ３タイプの後続のエラーのためにＡＢ１からＣＢ３（バンク故障のケース３）に進み得る。メモリコントローラは、エラー訂正ＡＢ３（バンク故障ＣＢ３のためのアクション３）を実行することができる。状態ＡＢ３での後続のエラーは、ＣＢ７（バンク故障のケース７）という結果になり得、それに応答して、メモリコントローラは、ＡＢ７のエラー訂正アクション（バンク故障ＣＢ７のためのアクション７）を実行することができる。状態ＡＢ７から、後続のエラーは、エラータイプに応じて、サービスコールという結果になり得、または、後続のエラー状態ＣＢ８（バンク故障のケース８）という結果になり得る。状態ＣＢ８に応答して、メモリコントローラは状態ＡＢ８のエラー訂正（バンク故障ＣＢ８のためのアクション８）を実行することができる。状態ＡＢ８後、後続の故障は、サービスコールという結果になるであろう。
【００６７】
代わりに、状態は、ＣＢ２タイプの後続のエラーについては、ＡＢ１からＣＢ２（バンク故障のケース２）に進み得る。メモリコントローラは、２つの異なるエラー訂正アクションのうちの１つ、ＡＢ２（バンク故障ＣＢ２のためのアクション２）か、ＡＲ１（ランク故障のためのアクション１）のどちらかを実行することができる。状態は、ＣＢ２タイプの後続のエラーのためにバンク故障からランク故障に変更され得ることが認められよう。図表２００にて分かるように、メモリコントローラは、あるいは、最初のＣＲ１タイプのランクエラー（ランク故障のケース１）の結果として状態ＡＲ１に到達することができる。
【００６８】
状態ＡＢ２に戻ると、後続のエラーは、エラータイプに応じて、２つの後続のエラー状態のうちの１つという結果になり得る。従って、状態はＡＢ２からＣＢ１０（バンク故障のケース１０）に移動することができ、それについては、メモリコントローラは、上述のＡＲ１のエラー訂正を実行し得る。あるいは、状態は、ＡＢ２からＣＢ６に移動し得る（バンク故障のケース６）。メモリコントローラは、状態ＣＢ６に応答してＡＲ２のエラー訂正（ランク故障のためのアクション２）を実行することができる。図表２００から分かるように、状態ＡＲ１に続く故障に対して４つの潜在的なエラー状態がある。それらの故障状態のうちの２つは、ＣＲ２（ランク故障のケース２）およびＣＢ１１（バンク故障のケース１１）であり、それらに応答して、メモリコントローラは、上述の状態ＡＲ２のエラー訂正を実行することができる。
【００６９】
ＣＲ２か、ＣＢ１１のどちらかへの移動の代わりに、ＡＲ１に続くエラーは、エラーに応じて、ＣＢ９（バンク故障のケース９）またはＣＲ３（ランク故障のケース３）に移動する状態という結果になり得る。エラーが状態ＣＲ３という結果になった場合、メモリコントローラは、ＡＲ３のエラー訂正（ランク故障のためのアクション３）またはＡＲ４のエラー訂正（ランク故障のためのアクション４）を実行することができる。状態がＡＲ３に移動した場合、後続のエラーは、サービスコールという結果になるであろう。状態ＣＢ９に応答して、メモリコントローラは、ＡＲ３またはＡＲ４に移動し得、またはＡＢ９のエラー訂正を実行し得る（バンク故障ＣＢ９のためのアクション９）。
【００７０】
図３は、図２に特定される状態のロジック表現を示す図４Ａ−図９Ｉの説明文である。テーブル３００は、メモリの正常領域の空白ボックス（シェーディングまたはクロスハッチング無）を示す。そのようなメモリのセクションは、故障が無く、ロックステップパートナーシップの一部ではない。最も暗いシェーディングレベル（ほぼブラック）は、新しい故障を示す。最も明るいシェーディングレベル（ほぼグレー）は、ＡＤＤＤＣ領域０の状態を表す。従って、最も明るいグレーは、第１のハード故障のためのＡＤＤＤＣ状態のプライマリ領域およびバディ領域を示す。
【００７１】
次のグレーレベルは、ＡＤＤＤＣ領域１の状態を表す。ＡＤＤＤＣ領域１は、メモリが既に故障状態ＡＤＤＤＣにある場合の後続の故障のためにパートナーを組まれるプライマリ領域およびバディ領域を指す。次の２つのより暗いシェーディングレベルはそれぞれ、ＡＤＤＤＣ＋１領域０およびＡＤＤＤＣ＋１領域１を表す。従って、それらは、後続のエラーに対して昇格させたＡＤＤＤＣ状態のためのプライマリ領域およびバディ領域をそれぞれ表す。単一線のクロスハッチは、ある領域の第１の故障（故障０）と宣言されたメモリ部分を表す。二重線のクロスハッチは、その領域の第２の故障（故障１）と宣言されたメモリ部分を表す。
【００７２】
図４Ａは、最初のバンク故障のロジック表現であり、状態ＣＢ１と表される。表された状態の各々は、１８個のメモリデバイス（例えば、ＤＲＡＭ）を表示するＤ［１７：０］およびデバイスごとに１６個のバンクを表示するＢ［１５：０］を示す。ロジック表現のために、バンク故障は、例において考えられる最も細かい粒度であるが、他の故障粒度は、これらの例に説明される同じ技術に従った特定の実装にて構成され得る。従って、図表は、それぞれがデバイスごとに１６個のバンクを有する１８個のデバイスのランクを表すが、例は、非限定的である。従って、異なる構成が可能である。（ランクＡおよびランクＢ）の２つのランクは、ロックステップパートナーシップ部分に使用するプライマリランクおよびバディランクの例として示される。ＣＢ１は、ランクＡのデバイス０のバンク０の最初の故障を示す。
【００７３】
図４Ｂは、最初のバンク故障に応答して領域０のＡＤＤＤＣ状態を生成するロックステップアクションのロジック表現であり、状態ＡＢ１と表される。メモリコントローラは、ランクＡのバンク０（プライマリ領域）のためにバディ領域としてランクＢのバンク０を作り出すことによって状態ＡＢ１を生成する。ロックステップパートナーシップに関して、メモリサブシステムは、第１のＡＤＤＤＣ状態にある。
【００７４】
図５Ａは、異なるメモリデバイスの異なるバンク故障のロジック表現であり、状態ＣＢ３と表わされる。状態ＣＢ３は、システムが既にＡＤＤＤＣ状態にある場合の後続のバンク故障を示す。従って、ランクＡのデバイス０のバンク０は、故障０として示され、ランクのデバイス１のバンク１は、現在検出されたエラーとして示される。従って、ＣＢ３のエラーは、同じ（プライマリ）ランクの異なるデバイスの異なるバンクである。
【００７５】
図５Ｂは、異なるメモリデバイスの付加的なバンク故障に応答して領域１のＡＤＤＤＣ状態を生成するロックステップアクションのロジック表現であり、状態ＡＢ３と表わされる。ＡＢ３状態において、メモリコントローラは、バンク０の故障０およびバンク１の故障１を有するＡＤＤＤＣ状態を生成し、それらの両方が、エラー訂正のためにランクＡとバディランクＢとの間で共有される。そのようなエラー部分に対する読み出しは、順方向のスペアリングに関して上述のエラー訂正技術によって処理され得る。
【００７６】
図５Ｃは、領域０および領域１に故障を有するＡＤＤＤＣ状態にある場合の異なるメモリデバイスの同じバンク故障のロジック表現であり、状態ＣＢ７と表わされる。状態ＣＢ７において、後続のエラーは、ランクＡのデバイス２のバンク０に生じる。バンク０は既にＡＤＤＤＣによるエラー訂正を受けているので、第２のエラーは、既知のエラー訂正技術によって処理され得る最も多いエラーであることが理解されよう。後続のエラーは、プライマリランクの同じバンクであり、異なるデバイスエラーである。
【００７７】
図５Ｄは、異なるメモリデバイスの同じバンク故障に応答してＡＤＤＤＣ＋１状態に昇格するロックステップアクションのロジック表現であり、ＡＢ７状態と表わされる。状態ＡＢ７において、メモリコントローラは、バンク０が故障０および故障１であれば、バンク０の状態をＡＤＤＤＣ＋１に昇格させる。後続の故障は、処理されることができないので、サービスコールが生成され得る。
【００７８】
図５Ｅは、付加的な領域０故障を有するＡＤＤＤＣ＋１の状態にある場合の異なるメモリデバイスの付加的な同じバンク故障のロジック表現であり、状態ＣＢ８と表わされる。代わりに、後続の故障が、同じバンク１における異なるデバイス３のエラーなど、バンク１の故障１である場合、別個のエラー訂正状態が使用され得る。
【００７９】
図５Ｆは、異なるメモリデバイスの付加的な同じバンク故障に応答して、領域０および領域１の故障を有するＡＤＤＤＣ＋１状態に昇格するロックステップアクションのロジック表現であり、ＡＢ８と表わされる。ＡＢ８において、バンク１の状態をＡＤＤＤＣ＋１に昇格させる。ＡＤＤＤＣ＋１のバンク０およびＡＤＤＤＣ＋１のバンク１の両方に対して、後続の故障は、処理されることができないので、サービスコールが生成され得る。
【００８０】
図６Ａは、領域０の故障を有するＡＤＤＤＣ状態にある場合の異なるメモリデバイスにおける同じバンク故障のロジック表現であり、ＣＢ４状態と表わされる。状態ＣＢ４において、バンク０は、ランクＡのデバイス０において故障０を有し、後続の故障は、異なるデバイス１の同じバンク０において検出される。
【００８１】
図６Ｂは、異なるメモリデバイスにおける同じバンク故障に応答して、領域０の故障を有するＡＤＤＤＣ＋１状態に昇格するロックステップアクションのロジック表現であり、ＡＢ４と表わされる。２つの故障領域、故障０および故障１を見つけて、メモリコントローラは、バンク０をＡＤＤＤＣ＋１に昇格させる。同じバンク０の後続のエラーは、処理可能ではないので、メモリコントローラがサービスコールを発する場合がある。異なるバンクの後続のエラーは、付加的なバンクをＡＤＤＤＣに昇格させ得る。
【００８２】
図７Ａは、ＡＤＤＤＣ状態にある場合のバディ領域の同じバンク故障のロジック表現であり、状態ＣＢ５と表わされる。状態ＣＢ５において、エラーが既にある。ＣＢ５の後続のエラーは、ランクＢのデバイス０における同じバンク０である。従って、ランクＡおよびＢの両方が、バンク０、デバイス０にハードエラーを有する。
【００８３】
図７Ｂは、プライマリ領域およびバディ領域の両方における同じバンクの故障を有するＡＤＤＤＣ＋１状態に昇格するロックステップアクションのロジック表現であり、ＡＢ５と表わされる。状態ＡＢ５において、メモリコントローラは、ロックステップパートナーシップの対象であるバンクの２つのエラーに起因してバンク０の状態をＡＤＤＤＣからＡＤＤＤＣ＋１に昇格させる。
【００８４】
図７Ｃは、バディ領域が共通ランク内でマッピングされたＡＤＤＤＣ状態にとどまるべく、ロックステップパートナーシップを再割り当てするロックステップアクションのロジック表現であり、状態ＡＢ６と表わされる。状態ＡＢ５ｍの代わりに、１つの実施形態において、状態ＣＢ５において検出された後続のエラーに応答して、メモリコントローラは、バンク０、ランクＡおよびバンク０、ランクＢ間のロックステップパートナーシップを逆転し、ロックステップパートナーシップを再割り当てする。より具体的には、１つの実施形態において、メモリコントローラは、ランクＡのバンク１５をランクＡのバンク０のバディ部分またはバディ領域にすることができ、同様に、ランクＢのバンク１５をランクＢのバンク０のバディ部分またはバディ領域にすることができる。バンク１５は、一例であり、別のバンクが選択され得る。同じバンクが、ランクの各々にて必ずしも選択される必要はない。ロックステップパートナーシップを再割り当てした後、状態ＡＢ６は、両方のランクにおけるバンク０がＡＤＤＤＣ＋１にあるのではなく、単一のエラーに対するＡＤＤＤＣにおけるランクＡのバンク０および１５と、単一のエラーを有するＡＤＤＤＣ状態のランクＢのバンク０および１５という結果になる。従って、ロックステップパートナーシップを動的に変更することにより、ＡＤＤＤＣレベルを低減することができ、システムが同じロックステップパートナーシップを保持することを通じて、付加的な後続のエラーを維持することを可能にする。
【００８５】
図８Ａは、ＡＤＤＤＣ状態にある場合の同じデバイス、異なるバンク故障のロジック表現であり、状態ＣＢ２と表わされる。ＣＢ２状態において、ランクＡのデバイス０のバンク０は、既に故障状態にあり、バンク０は、ランクＡおよびＢにわたってＡＤＤＤＣ状態にある。検出される後続の故障は、デバイス０のバンク１における異なるバンクであり、同じデバイス故障である。
【００８６】
図８Ｂは、同じデバイスの付加的なバンク故障に応答して領域１のＡＤＤＤＣ状態を生成するロックステップアクションのロジック表現であり、ＡＢ２状態と表わされる。状態ＡＢ２において、メモリコントローラは、バンク１がプライマリランクＡおよびバディランクＢに共有された状態で、バンク１をＡＤＤＤＣに昇格させることができる。
【００８７】
図８Ｃは、領域０および領域１の同じバンクに故障を有するＡＤＤＤＣ状態にある場合の異なるデバイスの異なるバンク故障のロジック表現であり、状態ＣＢ６と表わされる。ＣＢ６において、検出される後続のエラーは、デバイス１のバンク２におけるエラーを有する異なるバンクの異なるデバイスエラーである。そのようなエラーは、バンク０およびバンク１が既にＡＤＤＤＣ状態にあるので、サービスコールという結果になり得る。１つの実施形態において、メモリコントローラは、バンク０のランクＡおよびランクＢ間のロックステップパートナーシップ、ならびにバンク１のランクＡおよびランクＢ間のロックステップパートナーシップを逆転し得る。メモリコントローラはその後、デバイス０のランクＡおよびランクＢ間のロックステップパートナーシップ、ならびにデバイス１のランクＡおよびランクＢ間のロックステップパートナーシップを作り出し得る。パートナーシップは両方とも、ＡＤＤＤＣ状態にあり得る。そのようなアクションは、図示されないが、ロックステップパートナーシップを逆転して、ロックステップの粒度を変更することにより可能である。
【００８８】
図８Ｄは、領域０および領域１の同じバンクに故障を有する、ＡＤＤＤＣ状態にある場合に同じデバイスの異なるバンク故障のロジック表現であり、状態ＣＢ１０と表わされる。状態ＣＢ１０において、検出される後続のエラーは、同じデバイス０の異なるバンク２である。
【００８９】
図８Ｅは、最初のデバイス故障のロジック表現であり、状態ＣＲ１と表わされる。状態ＣＲ１において、エラーは、ランクＡのデバイス０の全てである。ＣＢ１０のエラーがデバイス０全体であることを宣言することによって、状態ＣＢ１０のエラーがどのようにＣＲ１のエラーと一致させられ得るかが認められよう。従って、ＣＢ１０およびＣＲ１のためのエラー訂正アクションは、同じであり得る。
【００９０】
図９Ａは、最初のデバイス故障に応答してバディランクのＡＤＤＤＣ状態を生成するロックステップアクションのロジック表現であり、状態ＡＲ１と表わされる。メモリコントローラは、ＣＢ１０およびＣＲ１状態のためのエラー訂正として状態ＡＲ１を生成することができる。メモリコントローラは、ランクＡのためにバディ領域としてランクＢを作り出し、そこで、各々の完全なランクがＡＤＤＤＣ状態にあることによって示されるように、ランク全体が影響を受ける領域である。故障部分は、ランクＡのデバイス０である。
【００９１】
図９Ｂは、ＡＤＤＤＣ状態にある場合の故障ランクにおける付加的なデバイス故障のロジック表現であり、状態ＣＲ２と表わされる。状態ＣＲ２より前の状態は、デバイス０の故障に起因して、ランクＡおよびランクＢがロックステップパートナーシップ状態にある場合である。検出される後続のエラーは、故障デバイス０を有するランクＡのデバイス１である。
【００９２】
図９Ｃは、ＡＤＤＤＣ状態の故障ランクにある場合の異なるデバイスの付加的なバンク故障のロジック表現であり、状態ＣＢ１１と表わされる。状態ＣＢ１１より前の状態は、デバイス０の故障に起因して、ランクＡおよびランクＢがロックステップパートナーシップ状態にある場合である。検出される後続のエラーは、故障デバイス０を有するランクＡのデバイス１のバンク０における故障である。後続の故障が、故障０とは異なる粒度（より細かい粒度）であることが認められよう。しかしながら、より粗いランク粒度でのＡＤＤＤＣ状態は、ＣＢ１１に表わされるような故障に対してさえも保持され得る。
【００９３】
図９Ｄは、付加的なデバイス故障に応答してＡＤＤＤＣ＋１状態を生成するロックステップアクションのロジック表現であり、状態ＡＲ２と表わされる。状態ＡＲ２は、状態ＣＢ１１か、状態ＣＲ２のどちらかに応答するために使用され得ることが、認められよう。状態ＡＲ２において、デバイス１は、故障していると宣言され、ランクＡおよびＢは、ＡＤＤＤＣ＋１に昇格させられる。１つの実施形態において、状態ＡＲ２は、図９Ｈに表されるものなど、ランクＡおよびＢのエラーを異なる（変更）ロックステップパートナーシップにおける他のランクに広げることによって逆転され得る。
【００９４】
図９Ｅは、ＡＤＤＤＣ状態にある場合のバディランクにおける同じデバイス故障のロジック表現であり、状態ＣＲ３と表わされる。状態ＣＲ３において、ランクＢのデバイス０は、ランクＡおよびランクＢがＡＤＤＤＣのロックステップパートナーシップ状態に既にある場合に後続の故障として検出される。従って、ランクＢのデバイス０は故障１であり、ランクＡのデバイス０は故障０である。
【００９５】
図９Ｆは、ＡＤＤＤＣ状態にある場合にバディランクの同じデバイスにおける新しいバンク故障のロジック表現であり、状態ＣＢ９と表わされる。状態ＣＢ９において、デバイス０のバンク０の故障は、バディランクＢの同じデバイス故障である。状態ＣＢ９は、たとえ故障が異なる粒度（バンク故障対デバイス故障）であるとしても、ＣＲ３故障と等価なロジックと考えてよい。
【００９６】
図９Ｇは、バディランクの付加的なデバイス故障に応答してＡＤＤＤＣ＋１状態を生成するロックステップアクションのロジック表現であり、状態ＡＲ３と表わされる。状態ＡＲ３は、状態ＣＲ３または状態ＣＢ９のための通常のエラー訂正アクションを表わし、そこで、メモリコントローラは、故障デバイスとしてランクＢのデバイス０をマッピングする。通常、メモリコントローラはまた、故障領域が第３のデバイス故障を処理することができないので、サービスコールを開始するだろう。
【００９７】
図９Ｈは、バディ領域における同じデバイス故障に応答して、バディ領域が新しいランクにマッピングされたＡＤＤＤＣ状態のままであるように、ロックステップパートナーシップを再割り当てするロックステップアクションのロジック表現であり、ＡＲ４状態と表わされる。ＡＲ３の従来のアクションをとる代わりに、１つの実施形態において、システムは、メモリコントローラが後続の故障に応答して、ロックステップのペアの各半分のために新しいロックステップパートナーを見いだす場合にサービスコールを遅延することができる。同じロックステップ領域の第２のデバイスをマッピングし、故障をＡＤＤＤＣ＋１に昇格させる代わりに、１つの実施形態において、メモリコントローラは、他のランクにおける新しいロックステップパートナーを見いだす。１つの実施形態において、システムは、領域を非ロックステップ構成に戻す逆スペアリングを採用し、２つの順方向のスペアリング動作が続く。
【００９８】
１つの実施形態において、ロックステップパートナーシップを逆転した後（例えば、逆スペアリングを介して）、メモリコントローラは、元の故障０に対するランクＡを、利用可能な非故障ランクＣに対する新しいロックステップパートナーとして設定する。さらに、元の故障１に対するランクＢは、非故障ランクＤに対してロックステップパートナーとして適合される。ランクＢおよびランクＤが現在、ロックステップパートナーであるから、ランクＢにおけるデバイス０の故障は現在、故障０である。両方のロックステップパートナーシップが現在、ＡＤＤＤＣ状態である。従って、ＡＲ４は、２つのデバイスがマッピングされた単一のＡＤＤＤＣ＋１領域の代わりに、それぞれ１つのデバイスがマッピングされた２つのＡＤＤＤＣ領域を作り出す。それゆえ、ＡＲ４は、後続の故障のためのサービスコールを遅延することができる。
【００９９】
図９Ｉは、バディ領域の同じデバイスにおける新しいバンク故障に応答して、故障デバイスに対するランクのための新しいバディランクと、以前のバディランク内のバディバンクとに対してＡＤＤＤＣ状態に維持するように、ロックステップパートナーシップを再割り当てする、ロックステップアクションのロジック表現であり、状態ＡＢ９と表わされる。状態ＡＢ９において、状態ＡＲ４と同様に、システムは、メモリコントローラが後続の故障に応答して、ロックステップのペアの各半分のために新たなロックステップパートナーを見いだす場合、サービスコールを遅延することができる。ＡＢ９においてアドレス指定される故障は、バディランクまたはバディ領域の後続のバンク故障である。従って、メモリコントローラは、ランクＢ全体を新しい非故障ランクにマッピングする必要はないが、単に故障バンク０のためにロックステップパートナーシップを再マッピングすることができる。
【０１００】
１つの実施形態において、ロックステップパートナーシップを逆転した後（例えば、逆スペアリングを介して）、メモリコントローラは、元の故障０に対するランクＡを、利用可能な非故障ランクＣに対する新しいロックステップパートナーとして設定する。さらに、元の故障１に対するランクＢのバンク０は、ランクＢの非故障バンク１５（または、他のバンク）に対するロックステップパートナーとして適合される。ランクＢのバンク０およびバンク１５が、新しいロックステップパートナーであるから、バンク０の故障は現在、故障０である。ロックステップパートナーシップの両方は現在、ＡＤＤＤＣ状態である。従って、ＡＲ４と同様に、状態ＡＢ９は、２つのデバイスがマッピングされた単一のＡＤＤＤＣ＋１領域の代わりに、それぞれ１つのデバイスがマッピングされた２つのＡＤＤＤＣ領域を作り出す。それゆえ、ＡＢ９は、後続の故障のためのサービスコールを遅延することができる。
【０１０１】
図１０は、ロックステップ構成を動的に管理するためのプロセスの実施形態のフロー図である。プロセス１０００は、エラー訂正用のシステムにおいてロックステップパートナーシップを管理すべく、メモリコントローラのエラーエンジンおよび／または他のロックステップ管理ロジックなどのメモリコントローラによって実行され得る。メモリコントローラのエラー検出ロジックは、メモリの第１の部分のハードエラーを検出する、１００２。第１の部分は、エラー検出ロジックによって監視される任意の粒度であり得る。１つの実施形態において、ロックステップパートナーシップを通じてエラー訂正を広げるべく、メモリコントローラは、メモリの第１の部分と第２の部分との間にロックステップパートナーを設定する、１００４。１つの実施形態において、ロックステップパートナーシップは事前設定される。「第１の部分」においてエラーを検出することに言及する場合、必ずしも第１の部分の全体が故障しているわけではなく、その部分内に故障があるに過ぎないことが理解されよう。例えば、第１の部分は、ランクにおける全てのデバイスにわたるバンク全体となり得、そこで、エラーは、１つの具体的なデバイスの１つのバンクのみにて検出された。第１の部分は、同じサイズの第２の部分とロックステップパートナーとして適合される。
【０１０２】
エラー訂正を広げるべくロックステップパートナーシップを生成した後、または事前設定されたロックステップパートナーシップを適用した後、エラー検出ロジックは、ロックステップパートナーシップの別のハードエラーを検出する、１００６。後続のエラーは、上記のように多くの異なるエラーのいずれかになることができる。ロックステップパートナーシップ外のメモリの部分における後続のエラーは、異なるパートナーシップが作り出されて処理されるか、またはサービスコールで処理されるかのどちらかであり得る。しかしながら、ロックステップパートナーシップに含まれる部分の後続のエラーは、ロックステップパートナーシップの変更によって１つの実施形態において処理され得る。１つの実施形態において、後続のエラーは、第２のエラーが第１のエラーと比較してロックステップパートナーシップの他の半分にて生じる場合、サービスコールなく処理され得る。従って、１つの実施形態において、メモリコントローラは、ロックステップパートナーシップをキャンセルするか、逆転するか、または未設定にする、１００８。
【０１０３】
１つの実施形態において、第２の部分の故障が、既存のマッピングされたデバイスと同じロックステップの半分になく、新しい仮想ロックステップのペアの追加をサポートするのに十分な非故障メモリがある場合、メモリコントローラは、ロックステップパートナーを変更する。１つの実施形態において、メモリコントローラは、仮想ロックステップ（ＡＤＤＤＣなど）をサポートするシステムにおいてロックステップパートナーを動的に変更する。１つの実施形態において、メモリコントローラは、仮想ロックステップ（ＤＤＤＣなど）ではなく、ロックステップを採用するシステムにおいてロックステップパートナーを動的に変更する。ロックステップ機構と、ロックステップパートナーを変更するための機構は、異なる粒度にて適用され得る。
【０１０４】
１つの実施形態において、メモリコントローラは、以前のパートナーシップと同じ粒度で新しいロックステップパートナーシップを作り出す、または設定するかどうか、あるいは、異なる粒度の１または複数の新しいパートナーシップを使用するかどうかを決定する、１０１０。１つの実施形態において、同じ粒度が使用されるべきである場合、１０１２ＹＥＳ分岐、メモリコントローラは、メモリの第１の部分と第３の非故障部分との間に新しいロックステップパートナーシップを設定する、１０１４。メモリコントローラは、メモリの全ての部分のステータスログを保持し得、従って一部が故障であるか、または非故障であるかどうかを決定することができる。検出される後続のエラーに応答してロックステップパートナーシップを評価する際に、メモリコントローラは、代わりのロックステップパートナーとして使用すべき非故障部分があるかどうかを決定すべくメモリ部分の状態を評価することができる。１つの実施形態において、メモリコントローラは、メモリの第２の部分との第４の部分との間に新しいロックステップパートナーシップを設定する、１０１６。再度、同じ粒度が利用されるからには、第３および第４の部分は、第１および第３の部分と同じサイズであることが理解されよう。
【０１０５】
１つの実施形態において、メモリコントローラは、ロックステップパートナーシップの粒度を変更するように判定する、１０１２  ＮＯ分岐。１つの実施形態において、粒度を変更する場合、メモリコントローラは、第１の部分か第２の部分のどちらかと、異なる粒度の第３の部分との間に新しい粒度で新しいロックステップパートナーシップを設定する、１０１８。メモリコントローラは次に、他の影響を受けた部分に対して新しいロックステップパートナーシップを設定することができる、１０２０。他の新しいロックステップパートナーシップは、第１および第２の部分と同じ粒度であり得、異なる粒度でもあり得る。
【０１０６】
１つの実施形態において、粒度を変更する決定は、より高いまたはより粗い粒度を調整することによって１または複数の以前のエラーで後続のエラーがグループ化され得ることを決定し、より粗い粒度で部分間に新しいロックステップパートナーシップを設定することを含む。従って、例えば、少なくとも１つの故障バンクを既に有する同じＤＲＡＭにおける後続のバンク故障に関して、メモリコントローラは、ＤＲＡＭ全体を故障とするように決定することができる。次に、メモリコントローラは、ＤＲＡＭ全体のデータをマッピングすることによって、故障ＤＲＡＭの非故障ＤＲＡＭとの連携に基づく新しいパートナーシップを設定することができる。
【０１０７】
図１１は、動的ロックステップ管理が実装され得るコンピューティングシステムの実施形態のブロック図である。システム１１００は、本明細書に説明される任意の実施形態によるコンピューティングデバイスを表し、ラップトップコンピュータ、デスクトップコンピュータ、サーバ、ゲームもしくは娯楽制御システム、スキャナ、複写機、プリンタ、ルーティングもしくはスイッチングデバイス、または他の電子デバイスであり得る。システム１１００は、システム１１００のための命令の処理、動作管理、および実行を提供するプロセッサ１１２０を含む。プロセッサ１１２０は、システム１１００のための処理を提供する任意のタイプのマイクロプロセッサ、中央処理装置（ＣＰＵ）、処理コア、または他の処理ハードウェアを含み得る。プロセッサ１１２０は、システム１１００の動作全体を制御し、１または複数のプログラム可能な汎用もしくは専用マイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、プログラム可能なコントローラ、特定用途向け集積回路（ＡＳＩＣ）、プログラマブルロジックデバイス（ＰＬＤ）等、またはそのようなデバイスの組み合わせであるか、またはこれらを含み得る。
【０１０８】
メモリサブシステム１１３０は、システム１１００のメインメモリを表し、プロセッサ１１２０により実行されるコード、またはルーチンを実行する場合に用いられるデータ値のための一時的ストレージを提供する。メモリサブシステム１１３０は、リードオンリメモリ（ＲＯＭ）、フラッシュメモリなどの１または複数のメモリデバイス、１または複数の様々なランダムアクセスメモリ（ＲＡＭ）、もしくは他のメモリデバイス、またはそのようなデバイスの組み合わせを含み得る。メモリサブシステム１１３０は、他のもののうち、システム１１００において複数の命令を実行するためのソフトウェアプラットフォームを提供するオペレーティングシステム（ＯＳ）１１３６を格納し、ホストする。なお、他の命令１１３８が格納されて、メモリサブシステム１１３０から実行され、システム１１００のロジックおよび処理を提供する。ＯＳ１１３６および命令１１３８は、プロセッサ１１２０により実行される。メモリサブシステム１１３０は、データ、命令、プログラム、または他のアイテムを格納するメモリデバイス１１３２を含む。１つの実施形態において、メモリサブシステムは、メモリコントローラ１１３４を含み、これは、メモリデバイス１１３２にコマンドを生成して発行するメモリコントローラである。メモリコントローラ１１３４は、プロセッサ１１２０の物理的な部分であり得ることが理解されよう。
【０１０９】
プロセッサ１１２０およびメモリサブシステム１１３０は、バス／バスシステム１１１０に結合される。バス１１１０は、適切なブリッジ、アダプタ、および／またはコントローラにより接続された任意の１または複数の別個の物理的バス、通信ライン／インターフェース、および／またはポイントツーポイント接続を表す抽象的なものである。従って、バス１１１０は例えば、システムバス、周辺構成要素相互接続（ＰＣＩ）バス、ハイパートランスポートもしくは業界標準アーキテクチャ（ＩＳＡ）バス、小型コンピュータシステムインターフェース（ＳＣＳＩ）バス、ユニバーサルシリアルバス（ＵＳＢ）、または米国電気電子学会（ＩＥＥＥ）規格１３９４バス（一般に「ファイヤワイヤ」と呼ばれる）のうちの１または複数を含み得る。バス１１１０におけるバスは、ネットワークインターフェース１１５０におけるインターフェースにも対応し得る。
【０１１０】
また、システム１１００は、バス１１１０に結合された１または複数の入力／出力（Ｉ／Ｏ）インターフェース１１４０、ネットワークインターフェース１１５０、１または複数の内部大容量ストレージデバイス１１６０、および周辺機器インターフェース１１７０も含む。Ｉ／Ｏインターフェース１１４０は１または複数のインターフェースコンポーネントを含み得、ユーザはこれを介してシステム１１００とインタラクトする（例えば、ビデオ、オーディオ、および／または英数字のインターフェース）。ネットワークインターフェース１１５０は、１または複数のネットワークを介してリモートデバイス（例えば、サーバ、他のコンピューティングデバイス）と通信する能力をシステム１１００に提供する。ネットワークインターフェース１１５０は、イーサネット（登録商標）アダプタ、無線相互接続コンポーネント、ＵＳＢ（ユニバーサルシリアルバス）、または他の有線もしくは無線規格ベースのインターフェースまたはプロプライエタリインターフェースを含み得る。
【０１１１】
ストレージ１１６０は、１または複数の磁気、ソリッドステートもしくは光学ベースのディスク、または組み合わせ等の不揮発性の態様で大量のデータを格納する任意の従来媒体であるか、またはこれらを含み得る。ストレージ１１６０は、永続的な状態で、コードまたは命令およびデータ１１６２を保持する（すなわち、値はシステム１１００への電力が遮断されても保持される）。ストレージ１１６０は一般的には「メモリ」とみなされ得るが、メモリ１１３０は命令をプロセッサ１１２０に提供する実行メモリまたは動作メモリである。ストレージ１１６０は不揮発性であるが、メモリ１１３０は揮発性メモリ（すなわち、システム１１００への電力が遮断されると、データの値または状態が不定になる）を含み得る。
【０１１２】
周辺機器インターフェース１１７０は、具体的に上述されない任意のハードウェアインターフェースを含み得る。周辺機器は一般に、システム１１００に従属的に接続するデバイスを指す。従属的接続は、動作がそれらの上で実行され、ユーザがそれらを用いてインタラクトするソフトウェアおよび／またはハードウェアプラットフォームを、システム１１００が提供する接続である。
【０１１３】
１つの実施形態において、メモリサブシステム１１３０は、本明細書に説明される任意の実施形態によるメモリ管理となり得るロックステップマネージャ１１８０を含む。１つの実施形態において、ロックステップマネージャ１１８０は、メモリコントローラ１１３４の一部である。マネージャ１１８０は、順方向および逆方向のスペアリングを実行することができる。特に、マネージャ１１８０は、ロックステップパートナーシップの割り当てを逆転し、ロックステップパートナーの一方または両方を新しいロックステップパートナーシップに再割り当てする逆スペアリングを採用することができる。１つの実施形態において、システム１１００は、シャーシシステムにおいて複数のサーバボードまたはサーバブレードを含むサーバシステムである。各ブレードは、複数のプロセッサ１１７０および多くのメモリデバイス１１３２を含むことができる。１つの実施形態において、ロックステップマネージャ１１８０は、デバイス１１３２の部分のためにロックステップパートナーシップを動的に変更することができる。
【０１１４】
図１２は、動的ロックステップ管理が実装され得るモバイルデバイスの実施形態のブロック図である。デバイス１２００は、コンピューティングタブレット、携帯電話またはスマートフォン、無線対応の電子書籍リーダ、ウェアラブルコンピューティングデバイス、又は他のモバイルデバイスなどのモバイルコンピューティングデバイスを表す。コンポーネントのいくつかが概して示されており、そのようなデバイスの全てのコンポーネントがデバイス１２００に示されているわけではないことが理解されよう。
【０１１５】
デバイス１２００は、デバイス１２００の主な処理動作を実行するプロセッサ１２１０を含む。プロセッサ１２１０は、マイクロプロセッサ、アプリケーションプロセッサ、マイクロコントローラ、プログラマブルロジックデバイス、または他の処理手段などの１または複数の物理的デバイスを含む。プロセッサ１２１０により実行される処理動作は、アプリケーションおよび／またはデバイス機能が実行されるオペレーティングプラットフォームまたはオペレーティングシステムの実行を含む。処理動作は、人間ユーザまたは他のデバイスとのＩ／Ｏ（入力／出力）に関連する動作、電力管理に関連する動作、および／またはデバイス１２００を別のデバイスに接続することに関連する動作を含む。処理動作は、オーディオＩ／Ｏおよび／またはディスプレイＩ／Ｏに関連する動作も含み得る。
【０１１６】
１つの実施形態において、デバイス１２００は、オーディオサブシステム１２２０を含み、オーディオサブシステム１２２０は、オーディオ機能をコンピューティングデバイスに提供することに関連付けられたハードウェア（例えば、オーディオハードウェアおよびオーディオ回路）およびソフトウェア（例えば、ドライバ、コーデック）のコンポーネントを表わす。オーディオ機能は、スピーカおよび／またはヘッドフォン出力、ならびにマイク入力を含み得る。そのような機能のためのデバイスは、デバイス１２００へと統合され、またはデバイス１２００に接続され得る。１つの実施形態において、ユーザは、プロセッサ１２１０により受信および処理されるオーディオコマンドを提供することにより、デバイス１２００とインタラクトする。
【０１１７】
ディスプレイサブシステム１２３０は、ユーザがコンピューティングデバイスとインタラクトする視覚および／または触覚ディスプレイを提供する、ハードウェア（例えば、ディスプレイデバイス）およびソフトウェア（例えば、ドライバ）のコンポーネントを表す。ディスプレイサブシステム１２３０は、ユーザにディスプレイを提供するために使用される特定のスクリーンまたはハードウェアデバイスを含むディスプレイインターフェース１２３２を含む。１つの実施形態において、ディスプレイインターフェース１２３２は、ディスプレイに関連する少なくともいくつかの処理を実行する、プロセッサ１２１０から独立したロジックを含む。１つの実施形態において、ディスプレイサブシステム１２３０は、ユーザに対して出力および入力の両方を提供するタッチスクリーンデバイスを含む。１つの実施形態において、ディスプレイサブシステム１２３０は、出力をユーザに提供する高解像度（ＨＤ）ディスプレイを含む。高解像度は、およそ１００ＰＰＩ（インチ当たりの画素数）またはそれ以上の画素密度を有するディスプレイを指し得、フルＨＤ（例えば、１０８０Ｐ）、レティナディスプレイ、４Ｋ（超高解像度すなわちＵＨＤ）または他のものなどのフォーマットを含み得る。
【０１１８】
Ｉ／Ｏコントローラ１２４０は、ユーザとのインタラクションに関連するハードウェアデバイスおよびソフトウェアコンポーネントを表す。Ｉ／Ｏコントローラ１２４０は、オーディオサブシステム１２２０および／またはディスプレイサブシステム１２３０の部分であるハードウェアを管理するように動作し得る。なお、Ｉ／Ｏコントローラ１２４０は、デバイス１２００に接続する追加のデバイスに対する接続ポイントを図示し、ユーザはデバイス１２００を介してシステムとインタラクトし得る。例えば、デバイス１２００に取り付けられ得るデバイスは、マイクデバイス、スピーカまたはステレオシステム、ビデオシステムまたは他のディスプレイデバイス、キーボードまたはキーパッドデバイス、若しくは他の、カードリーダまたは他のデバイスなど、特定のアプリケーションにおける使用のためのＩ／Ｏデバイスを含むかもしれない。
【０１１９】
上述したように、Ｉ／Ｏコントローラ１２４０は、オーディオサブシステム１２２０および／またはディスプレイサブシステム１２３０とインタラクトし得る。例えば、マイクまたは他のオーディオデバイスを介した入力は、デバイス１２００の１または複数のアプリケーションまたは機能に対する入力またはコマンドを提供し得る。なお、ディスプレイ出力に代えて、またはこれに加えてオーディオ出力が提供され得る。別の例において、ディスプレイサブシステムがタッチスクリーンを含む場合、ディスプレイデバイスはまた、Ｉ／Ｏコントローラ１２４０によって少なくとも部分的に管理され得る入力デバイスとして機能する。Ｉ／Ｏコントローラ１２４０により管理されるＩ／Ｏ機能を提供するべく、デバイス１２００上に追加のボタンまたはスイッチも存在し得る。
【０１２０】
１つの実施形態において、Ｉ／Ｏコントローラ１２４０は、デバイス１２００に含まれ得る加速度計、カメラ、光センサもしくは他の環境センサ、ジャイロスコープ、全地球測位システム（ＧＰＳ）、または他のハードウェア等のデバイスを管理する。入力は、直接のユーザインタラクションの部分であると共に、システムの動作に影響する、システムへの環境入力（ノイズに対するフィルタリング、輝度検出のためのディスプレイの調整、カメラのフラッシュの適用、または他の機能等）を提供することの部分であり得る。１つの実施形態において、デバイス１２００は、バッテリ電力使用量、バッテリの充電、および省電力動作に関連する機能を管理する電力管理１２５０を含む。
【０１２１】
メモリサブシステム１２６０は、デバイス１２００に情報を格納するためのメモリデバイス１２６２を含む。メモリサブシステム１２６０は、不揮発性（メモリデバイスへの電源が遮断されても状態が変化しない）および／または揮発性（メモリデバイスへの電源が遮断されると、状態が不定になる）メモリデバイスを含み得る。メモリサブシステム１２６０は、システム１２００のアプリケーションおよび機能の実行に関連するアプリケーションデータ、ユーザデータ、音楽、写真、文書、または他のデータ、ならびにシステムデータ（長期的または一時的であるかに関係なく）を格納し得る。１つの実施形態において、メモリサブシステム１２６０は、（システム１２００の制御の一部ともみなされ得、潜在的にプロセッサ１２１０の一部とみなされ得る）メモリコントローラ１２６４を含む。メモリコントローラ１２６４は、メモリデバイス１２６２にコマンドを生成して発行するスケジューラを含む。
【０１２２】
接続１２７０は、デバイス１２００が外部デバイスと通信することを可能にするハードウェアデバイス（例えば、無線および／または有線コネクタ、ならびに通信ハードウェア）およびソフトウェアコンポーネント（例えば、ドライバ、プロトコルスタック）を含む。外部デバイスは、他のコンピューティングデバイス、無線アクセスポイントまたは基地局等の別個のデバイス、ならびにヘッドセット、プリンタ、または他のデバイス等の周辺機器であり得る。
【０１２３】
接続１２７０は、複数の異なるタイプの接続を含み得る。一般化するべく、デバイス１２００はセルラー接続１２７２および無線接続１２７４と共に図示される。セルラー接続１２７２は一般に、セルラーネットワーク接続を指し、ＧＳＭ（登録商標）（モバイル通信のためのグローバルシステム）または改変形態もしくは派生物、ＣＤＭＡ（ｃｏｄｅ  ｄｉｖｉｓｉｏｎ  ｍｕｌｔｉｐｌｅ  ａｃｃｅｓｓ）または改変形態もしくは派生物、ＴＤＭ（ｔｉｍｅ  ｄｉｖｉｓｉｏｎ  ｍｕｌｔｉｐｌｅｘｉｎｇ）または改変形態もしくは派生物、ＬＴＥ（ｌｏｎｇ  ｔｅｒｍ  ｅｖｏｌｕｔｉｏｎ、「４Ｇ」とも呼ばれる）、または他のセルラーサービス規格を介して提供されるもの等、無線キャリアにより提供される。無線接続１２７４は、セルラーでない無線接続を指し、パーソナルエリアネットワーク（Ｂｌｕｅｔｏｏｔｈ（登録商標）など）、ローカルエリアネットワーク（ＷｉＦｉ（登録商標）など）、および／またはワイドエリアネットワーク（ＷｉＭａｘ（登録商標）など）、または他の無線通信を含み得る。無線通信は、非固体媒体を介して変調電磁放射の使用によるデータ転送を指す。有線通信は、固体通信媒体を介して行われる。
【０１２４】
周辺接続１２８０は、周辺接続を行うハードウェアインターフェースおよびコネクタ、ならびにソフトウェアコンポーネント（例えば、ドライバ、プロトコルスタック）を含む。デバイス１２００は、他のコンピューティングデバイスに対する周辺デバイス（「ｔｏ」１２８２）であり得ると共に、それに接続された周辺デバイスを有するもの（「ｆｒｏｍ」１２８４）でもあり得ることを理解されよう。一般に、デバイス１２００は、デバイス１２００上のコンテンツの管理（例えば、ダウンロードおよび／またはアップロード、変更、同期）などを目的として他のコンピューティングデバイスに接続する「ドッキング」コネクタを有する。なお、ドッキングコネクタは、デバイス１２００がコンテンツの出力を制御することを可能にする特定の周辺機器、例えば、オーディオビジュアルシステムまたは他のシステムに、デバイス１２００が接続することを可能にし得る。
【０１２５】
独自のドッキングコネクタまたは他の独自の接続ハードウェアに加えて、デバイス１２００は一般的または規格ベースのコネクタにより周辺接続１２８０を行い得る。共通なタイプは、ユニバーサルシリアルバス（ＵＳＢ）コネクタ（複数の異なるハードウェアインターフェースのいずれかを含み得る）、ミニディスプレイポート（ＭＤＰ）を含むディスプレイポート、高解像度マルチメディアインターフェース（ＨＤＭＩ（登録商標））、ファイヤワイヤまたは他のタイプを含み得る。
【０１２６】
１つの実施形態において、メモリサブシステム１２６０は、本明細書に説明される任意の実施形態によるメモリ管理となり得るロックステップマネージャ１２６６を含む。１つの実施形態において、ロックステップマネージャ１２６６は、メモリコントローラ１２６４の一部である。マネージャ１２６６は、順方向および逆方向のスペアリングを実行することができる。特に、マネージャ１２６６は、ロックステップパートナーシップの割り当てを逆転し、ロックステップパートナーの一方または両方を新しいロックステップパートナーシップに再割り当てする逆スペアリングを採用することができる。
【０１２７】
１つの態様において、メモリサブシステムのエラーを管理するための方法は、
第２のメモリ部分とのロックステップパートナーとしてロックステップパートナーシップに設定された第１のメモリ部分のハードエラーを検出する工程であって、エラー訂正は、ロックステップパートナーにわたって広げられる、工程と、
ハードエラーの検出に応答して、第１のメモリ部分と、第２のメモリ部分との間のロックステップパートナーシップをキャンセルする工程と、
ロックステップパートナーとしての第１のメモリ部分と第３のメモリ部分との間に新しいロックステップパートナーシップを作り出す工程と、
ロックステップパートナーとしての第２のメモリ部分と第４のメモリ部分との間に新しいロックステップパートナーシップを作り出す工程と
を含む。
【０１２８】
１つの実施形態において、ハードエラーを検出する工程は、ロックステップパートナーシップの第２のハードエラーを検出する工程を含む。１つの実施形態において、ロックステップパートナーシップは、ハードエラーがスペアメモリ部分にマッピングされた仮想ロックステップパートナーシップを含む。１つの実施形態において、第１および第２のメモリ部分は、メモリランクを含む。１つの実施形態において、第１および第２のメモリ部分は、メモリバンクを含む。１つの実施形態において、第１および第２のメモリ部分は、ＤＲＡＭ（ダイナミックランダムアクセスメモリ）デバイスを含む。１つの実施形態において、第１および第２のメモリ部分は、別個のランクにＤＲＡＭデバイスを含む。１つの実施形態において、第３および第４のメモリ部分は、異なるランクにＤＲＡＭデバイスを含む。１つの実施形態において、ロックステップパートナーとしての第１のメモリ部分と第３のメモリ部分との間に新しいロックステップパートナーシップを作り出す工程、およびロックステップパートナーとしての第２のメモリ部分と第４のメモリ部分との間に新しいロックステップパートナーシップを作り出す工程のうちの少なくとも１つがロックステップパートナーシップの粒度レベルを変更する工程を含む。１つの実施形態において、第１のメモリ部分のハードエラーを検出する工程は、異なる粒度レベルにて第１のメモリ部分とグループ化され得るメモリ部分にハードエラーを検出する工程を含み、
新しいロックステップパートナーシップを作り出す工程は、異なる粒度レベルにて第１のメモリ部分と第３のメモリ部分との間に新しいロックステップパートナーシップを作り出す工程を含む。１つの実施形態において、新しいロックステップパートナーシップを作り出す工程は、ロックステップテーブルのロックステップパートナーシップエントリを動的に変更する工程を含む。１つの実施形態において、ハードエラーを検出する工程は、第２のハードエラーを検出する工程を含み、さらに、第２のハードエラーを検出する工程の前に、第１のメモリ部分か、第２のメモリ部分のどちらかにおいて第１のハードエラーを検出する工程と、第１のハードエラーを検出する工程に応答して、ロックステップパートナーとして第１のメモリ部分と第２のメモリ部分との間に元のロックステップパートナーシップを設定する工程とを含む。１つの実施形態において、ハードエラーを検出する工程は、第２のメモリ部分との予め決定されたロックステップパートナーシップに設定された第１のメモリ部分のハードエラーを検出する工程を含む。
【０１２９】
１つの態様において、関連付けられるメモリサブシステムのエラーを管理するためのメモリ管理デバイスは、
メモリサブシステムの第１のメモリ部分のハードエラーを検出するエラー検出ロジックであって、第１のメモリ部分は、第２のメモリ部分とのロックステップパートナーとしてロックステップパートナーシップに設定され、エラー訂正は、ロックステップパートナーにわたって広げられる、エラー検出ロジックと、
第１のメモリ部分におけるハードエラーの検出に応答して、第１のメモリ部分と第２のメモリ部分との間のロックステップパートナーシップをキャンセルし、ロックステップパートナーとしての第１のメモリ部分と第３のメモリ部分との間に新しいロックステップパートナーシップを作り出し、およびロックステップパートナーとしての第２のメモリ部分と第４のメモリ部分との間に、新しいロックステップパートナーシップを作り出すエラー訂正ロジックと
を含む。
【０１３０】
１つの態様において、メモリ管理デバイスは、それぞれがメモリアレイを含む複数のＤＲＡＭ（ダイナミックランダムアクセスメモリデバイス）を含むメモリサブシステムのメモリコントローラに含まれ、メモリアレイは、複数の異なる粒度レベルに従ってアドレス指定可能であり、メモリコントローラは、メモリサブシステムの第１のメモリ部分のハードエラーを検出するエラー検出ロジックであって、第１のメモリ部分は、第２のメモリ部分とのロックステップパートナーとしてロックステップパートナーシップに設定され、エラー訂正は、ロックステップパートナーにわたって広げられる、エラー検出ロジックと、
第１のメモリ部分におけるハードエラーの検出に応答して、第１のメモリ部分と第２のメモリ部分との間のロックステップパートナーシップをキャンセルし、ロックステップパートナーとしての第１のメモリ部分と第３のメモリ部分との間に、およびロックステップパートナーとしての第２のメモリ部分と第４のメモリ部分との間に、新しいロックステップパートナーシップを作り出すエラー訂正ロジックであって、メモリサブシステムは、ブレードサーバに結合すべくシャーシシステムへと組み込まれる。
【０１３１】
１つの実施形態において、ロックステップパートナーシップは、ハードエラーがスペアメモリ部分にマッピングされた仮想ロックステップパートナーシップを含む。１つの実施形態において、第１および第２のメモリ部分は、メモリランク、メモリバンクおよびＤＲＡＭ（ダイナミックランダムアクセスメモリ）デバイスのうちの１つを含む。１つの実施形態において、第１および第２のメモリ部分は、別個のランクにＤＲＡＭデバイスを含む。１つの実施形態において、第３および第４のメモリ部分は、異なるランクにＤＲＡＭデバイスを含む。１つの実施形態において、エラー訂正ロジックは、ロックステップパートナーとしての第１のメモリ部分と第３のメモリ部分との間に新しいロックステップパートナーシップを作り出す場合、およびロックステップパートナーとしての第２のメモリ部分と第４のメモリ部分との間に、新しいロックステップパートナーシップを作り出す場合、少なくとも１つのロックステップパートナーシップの粒度レベルを変更する。１つの実施形態において、エラー検出ロジックは、異なる粒度レベルにある第１のメモリ部分とグループ化され得るメモリ部分のハードエラーを検出し、エラー訂正ロジックは、異なる粒度レベルにて第１のメモリ部分と第３のメモリ部分との間に新しいロックステップパートナーシップを作り出す。１つの実施形態において、エラー訂正ロジックは、ロックステップテーブルのロックステップパートナーシップエントリを動的に変更することによって新しいロックステップパートナーシップを作り出す。１つの実施形態において、エラー検出ロジックは、第２のハードエラーであり、さらに、第２のハードエラーの検出の前に、エラー検出ロジックは、第１のメモリ部分か、第２のメモリ部分のどちらかに第１のハードエラーを検出し、エラー訂正ロジックは、第１のハードエラーの検出に応答して、ロックステップパートナーとしての第１のメモリ部分と第２のメモリ部分との間に元のロックステップパートナーシップを設定することと、を含む。１つの実施形態において、エラー検出ロジックは、第２のメモリ部分との予め決定されたロックステップパートナーシップに設定される第１のメモリ部分においてハードエラーを検出する。
【０１３２】
１つの態様において、メモリサブシステムのエラーを管理するための装置は、第２のメモリ部分に対してロックステップパートナーとしてロックステップパートナーシップに設定される第１のメモリ部分のハードエラーを検出するための手段であって、エラー訂正が、ロックステップパートナーにわたってと広げられる、手段と、ハードエラーの検出に応答して、第１のメモリ部分と、第２のメモリ部分との間のロックステップパートナーシップをキャンセルするための手段と、ロックステップパートナーとしての第１のメモリ部分と第３のメモリ部分との間に新しいロックステップパートナーシップを作り出すための手段と、ロックステップパートナーとしての第２のメモリ部分と第４のメモリ部分との間に新しいロックステップパートナーシップを作り出すための手段とを含む。装置は、上記に述べた方法の任意の実施形態による動作を実行するための手段を含むことができる。
【０１３３】
１つの態様において、それに格納されるコンテンツを有するコンピュータ可読記憶媒体を含む製造物品は、アクセスされた場合、ロックステップパートナーとしてロックステップパートナーシップに設定された第１のメモリ部分のハードエラーを第２のメモリ部分で検出することであって、エラー訂正は、ロックステップパートナーにわたって広げられることと、ハードエラーの検出に応答して、第１のメモリ部分と、第２のメモリ部分との間のロックステップパートナーシップをキャンセルすることと、ロックステップパートナーとしての第１のメモリ部分と第３のメモリ部分との間に新しいロックステップパートナーシップを作り出すことと、ロックステップパートナーとしての第２のメモリ部分と第４のメモリ部分との間に新しいロックステップパートナーシップを作り出すこととを含む動作をマシンに実行させる。製造物品は、上記に述べた方法の任意の実施形態による動作を実行するためのコンテンツを含むことができる。
【０１３４】
１つの態様において、メモリサブシステムのエラーを管理するための方法は、第１のメモリ部分のハードエラーを検出する工程と、ロックステップパートナーとしての第１のメモリ部分と第２のメモリ部分との間にロックステップパートナーシップを設定する工程であって、エラー訂正は、第１のメモリ部分と第２のメモリ部分とにわたって広げられる、工程と、ハードエラーを第２のメモリ部分で検出する工程と、第２のメモリ部分のハードエラーの検出に応答して、第１のメモリ部分と第２のメモリ部分との間のロックステップパートナーシップを逆転する工程と、ロックステップパートナーとしての第１のメモリ部分と第３のメモリ部分との間に新しいロックステップパートナーシップを設定する工程と、ロックステップパートナーとしての第２のメモリ部分と第４のメモリ部分との間に新しいロックステップパートナーシップを設定する工程とを含む。
【０１３５】
１つの実施形態において、ハードエラーを検出する工程は、ロックステップパートナーシップの第２のハードエラーを検出する工程を含む。１つの実施形態において、ロックステップパートナーシップは、ハードエラーがスペアメモリ部分にマッピングされた仮想ロックステップパートナーシップを含む。１つの実施形態において、第１および第２のメモリ部分は、メモリランクを含む。１つの実施形態において、第１および第２のメモリ部分は、メモリバンクを含む。１つの実施形態において、第１および第２のメモリ部分は、ＤＲＡＭ（ダイナミックランダムアクセスメモリ）デバイスを含む。１つの実施形態において、第１および第２のメモリ部分は、別個のランクにＤＲＡＭデバイスを含む。１つの実施形態において、第３および第４のメモリ部分は、異なるランクのＤＲＡＭデバイスを含む。１つの実施形態において、ロックステップパートナーとしての第１のメモリ部分と第３のメモリ部分との間に新しいロックステップパートナーシップを設定する工程、およびロックステップパートナーとしての第２のメモリ部分と第４のメモリ部分との間に新しいロックステップパートナーシップを設定する工程の少なくとも１つがロックステップパートナーシップの粒度レベルを変更する工程を含む。１つの実施形態において、第１のメモリ部分のハードエラーを検出する工程は、異なる粒度レベルにて第１のメモリ部分とグループ化され得るメモリ部分にハードエラーを検出する工程を含み、新しいロックステップパートナーシップを設定する工程は、異なる粒度レベルにて第１のメモリ部分と第３のメモリ部分との間に新しいロックステップパートナーシップを設定する工程を含む。１つの実施形態において、新しいロックステップパートナーシップを設定する工程は、ロックステップテーブルのロックステップパートナーシップエントリを動的に変更する工程を含む。１つの実施形態において、第１のメモリ部分と第２のメモリ部分との間にロックステップパートナーとして元のロックステップパートナーシップを設定する工程は、適応二重デバイスデータ訂正（ＡＤＤＤＣ）動作を実装する工程を含む。
【０１３６】
１つの態様において、関連付けられるメモリサブシステムのエラーを管理するためのメモリ管理デバイスは、
メモリサブシステムの第１のメモリ部分の第１のハードエラーを検出し、続いて第２のハードエラーを検出するエラー検出ロジックと、
第１のハードエラーの検出に応答して、ロックステップパートナーとしての第１のメモリ部分と第２のメモリ部分との間にロックステップパートナーシップを設定し、第１および第２のメモリ部分にわたってエラー訂正を広げ、続く第２のハードエラーの検出に応答して、第１および第２のメモリ部分間のロックステップパートナーシップを逆転するとともに、続く第２のハードエラーの検出に応答して、ロックステップパートナーとしての第１のメモリ部分と第３のメモリ部分との間に、ロックステップパートナーとしての第２のメモリ部分と第４のメモリ部分との間に新しいロックステップパートナーシップを設定するエラー訂正ロジックと
を含む。
【０１３７】
１つの態様において、メモリ管理デバイスは、それぞれがメモリアレイを含む複数のＤＲＡＭ（ダイナミックランダムアクセスメモリデバイス）を含むメモリサブシステムのメモリコントローラに含まれ、メモリアレイは、複数の異なる粒度レベルに従ってアドレス指定可能であり、メモリコントローラは、メモリサブシステムの第１のメモリ部分の第１のハードエラーを検出し、続いて第２のハードエラーを検出するエラー検出ロジックと、第１のハードエラーの検出に応答して、ロックステップパートナーとしての第１のメモリ部分と第２のメモリ部分との間にロックステップパートナーシップを設定し、第１および第２のメモリ部分にわたってエラー訂正を広げ、続く第２のハードエラーの検出に応答して、第１および第２のメモリ部分間のロックステップパートナーシップを逆転するとともに、続く第２のハードエラーの検出に応答して、ロックステップパートナーとしての第１のメモリ部分と第３のメモリ部分との間に、ロックステップパートナーとしての第２のメモリ部分と第４のメモリ部分との間に新しいロックステップパートナーシップを設定するエラー訂正ロジックとを含み、メモリサブシステムは、ブレードサーバに結合すべくシャーシシステムへと組み込まれる。
【０１３８】
１つの実施形態において、ロックステップパートナーシップは、ハードエラーがスペアメモリ部分にマッピングされる仮想ロックステップパートナーシップを含む。１つの実施形態において、第１および第２のメモリ部分は、メモリランク、メモリバンクおよびＤＲＡＭ（ダイナミックランダムアクセスメモリ）デバイスのうちの１つを含む。１つの実施形態において、第１および第２のメモリ部分は、別個のランクにＤＲＡＭデバイスを含む。１つの実施形態において、第３および第４のメモリ部分は、異なるランクにＤＲＡＭデバイスを含む。１つの実施形態において、エラー訂正ロジックは、ロックステップパートナーとしての第１のメモリ部分と第３のメモリ部分との間に新しいロックステップパートナーシップを設定する場合、またはロックステップパートナーとしての第２のメモリ部分と第４のメモリ部分との間に、新しいロックステップパートナーシップを設定する場合、少なくとも１つのロックステップパートナーシップの粒度レベルを変更する。１つの実施形態において、エラー検出ロジックは、異なる粒度レベルにある第１のメモリ部分とグループ化され得るメモリ部分にハードエラーを検出し、エラー訂正ロジックは、異なる粒度レベルにて第１のメモリ部分と第３のメモリ部分との間に新しいロックステップパートナーシップを設定する。１つの実施形態において、エラー訂正ロジックは、ロックステップテーブルのロックステップパートナーシップエントリを動的に変更することによって新しいロックステップパートナーシップを設定する。１つの実施形態において、エラー訂正ロジックは、適応二重デバイスデータ訂正（ＡＤＤＤＣ）動作の実装として、ロックステップパートナーとしての第１のメモリ部分と第２のメモリ部分との間に元のロックステップパートナーシップを設定する。
【０１３９】
本明細書において図示されるフロー図は、一連の様々な処理動作の例を提供する。フロー図は、ソフトウェアまたはファームウェアルーチンにより実行されるべき動作、ならびに物理的動作を示し得る。１つの実施形態において、フロー図は、ハードウェアおよび／またはソフトウェアの形で実装され得る有限ステートマシン（ＦＳＭ）の状態を示し得る。特定のシーケンスまたは順序で示されているが、別途指定されない限り、動作の順序は変更され得る。従って、図示される実施形態は、もっぱら例として理解されるべきであり、処理は異なる順序で実行され得、いくつかの動作は並行して実行され得る。なお、１または複数の動作は、様々な実施形態において省略され得る。従って各実施形態において、全ての動作が必要とされるわけではない。他のプロセスフローも可能である。
【０１４０】
様々な動作または機能が本明細書に説明される限りにおいて、動作または機能は、ソフトウェア、コード、命令、構成、および／またはデータとして説明され、または定義され得る。コンテンツは、直接に実行可能なもの（「オブジェクト」または「実行可能な」形式）、ソースコード、または差分コード（「デルタ」または「パッチ」コード）であり得る。本明細書に説明される実施形態におけるソフトウェアコンテンツは、コンテンツが格納された製造物品を介して、または通信インターフェースを介してデータを送信するように通信インターフェースを動作させる方法により提供され得る。機械可読ストレージ媒体は、説明される機械に機能または動作を実行させ得、記録可能／記録不可能な媒体（例えば、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスクストレージ媒体、光ストレージ媒体、フラッシュメモリデバイス等）などの機械（例えば、コンピューティングデバイス、電子システム等）によりアクセス可能な形態で情報を格納する任意のメカニズムを含む。通信インターフェースは、メモリバスインターフェース、プロセッサバスインターフェース、インターネット接続、ディスクコントローラなどのような別のデバイスに通信するハードワイヤード、無線、光などの媒体のいずれかにインターフェースで接続する任意の機構を含む。通信インターフェースは、構成パラメータを提供し、および／または信号を送信して、通信インターフェースがソフトウェアコンテンツを説明するデータ信号を提供するように準備することにより構成され得る。通信インターフェースは、通信インターフェースに送信される１または複数のコマンドまたは信号によりアクセスされ得る。
【０１４１】
本明細書に説明される様々なコンポーネントは、説明される動作または機能を実行するための手段であり得る。本明細書に説明される各コンポーネントは、ソフトウェア、ハードウェア、またはこれらの組み合わせを含む。これらのコンポーネントは、ソフトウェアモジュール、ハードウェアモジュール、専用ハードウェア（例えば、特定用途向けハードウェア、特定用途向け集積回路（ＡＳＩＣ）、デジタル信号プロセッサ（ＤＳＰ）等）、エンベデッドコントローラ、ハードワイヤード回路等として実装され得る。
【０１４２】
本明細書において説明されるもの以外にも、本発明において開示される実施形態および実装に対して、その範囲を逸脱することなく様々な変更が行われ得る。従って、本明細書における図示および例は、限定的な意味ではなく例示的な意味に解釈されるべきである。本発明の範囲は、以下の特許請求の範囲を参照することのみにより評価されるべきである。
【図１Ａ】
0006677417.tif 000002
【図１Ｂ】
0006677417.tif 000003
【図２】
0006677417.tif 000004
【図３】
0006677417.tif 000005
【図４Ａ】
0006677417.tif 000006
【図４Ｂ】
0006677417.tif 000007
【図５Ａ】
0006677417.tif 000008
【図５Ｂ】
0006677417.tif 000009
【図５Ｃ】
0006677417.tif 000010
【図５Ｄ】
0006677417.tif 000011
【図５Ｅ】
0006677417.tif 000012
【図５Ｆ】
0006677417.tif 000013
【図６Ａ】
0006677417.tif 000014
【図６Ｂ】
0006677417.tif 000015
【図７Ａ】
0006677417.tif 000016
【図７Ｂ】
0006677417.tif 000017
【図７Ｃ】
0006677417.tif 000018
【図８Ａ】
0006677417.tif 000019
【図８Ｂ】
0006677417.tif 000020
【図８Ｃ】
0006677417.tif 000021
【図８Ｄ】
0006677417.tif 000022
【図８Ｅ】
0006677417.tif 000023
【図９Ａ】
0006677417.tif 000024
【図９Ｂ】
0006677417.tif 000025
【図９Ｃ】
0006677417.tif 000026
【図９Ｄ】
0006677417.tif 000027
【図９Ｅ】
0006677417.tif 000028
【図９Ｆ】
0006677417.tif 000029
【図９Ｇ】
0006677417.tif 000030
【図９Ｈ】
0006677417.tif 000031
【図９Ｉ】
0006677417.tif 000032
【図１０】
0006677417.tif 000033
【図１１】
0006677417.tif 000034
【図１２】
0006677417.tif 000035