(57)【要約】システムは、中央処理装置の集合を含み、各中央処理装置は、少なくとも１つの他の中央処理装置と、少なくとも１０テラバイトの固体メモリ資源へのルートパスとに接続されている。各中央処理装置は、メインメモリへ固体メモリコンテンツをスワッピングすることなく、直接的に固体メモリ資源にアクセスする。各中央処理装置は、他の中央処理装置によるアクセスを妨げることなく固体メモリ資源に独立してアクセスする。ルートパスは、メモリインターフェースおよびブランチインターフェースを有する少なくとも１つのルートを含み、ブランチインターフェースは、個別のリーフインターフェースコントローラへのインターフェースを提供し、ブランチインターフェースは、演算資源を有するように構成されることによって、個別固体メモリリーフにおけるデータサーチおよび個別固体メモリリーフから検索したデータのデータ処理をコーディネートする。【選択図】図１
2016514881.tif 000002
【特許請求の範囲】
【請求項１】
システムであって、
中央処理装置の集合を備え、ここで、各中央処理装置は、少なくとも１つの他の中央処理装置と、少なくとも１０テラバイトの複数の固体メモリ資源へのルートパスとに接続されており、各中央処理装置は、メインメモリへ固体メモリコンテンツをスワッピングすることなく、直接的に複数の固体メモリ資源にアクセスする、システム。
【請求項２】
各中央処理装置は、他の中央処理装置によるアクセスを妨げることなく固体メモリ資源に独立してアクセスする、請求項１に記載のシステム。
【請求項３】
前記ルートパスは、メモリインターフェースおよびブランチインターフェースを有する少なくとも１つのルートを含み、該ブランチインターフェースは、個別のリーフインターフェースコントローラへのインターフェースを提供し、該ブランチインターフェースは、演算資源を有するように構成されることによって、個別固体メモリリーフにおけるデータサーチおよび該個別固体メモリリーフから検索したデータのデータ処理をコーディネートする、請求項１に記載のシステム。
【請求項４】
各個別リーフインターフェースコントローラは、演算資源を有するように構成されることによって、個別固体メモリリーフ内のデータ、および該個別固体メモリリーフからの検索されたデータのデータ処理をサーチする、請求項３に記載のシステム。
【請求項５】
中央処理装置の集合に結合した複数のルートプロセッサをさらに備え、該複数のルートプロセッサは、複数の独立固体メモリチャネルを利用して前記固体メモリ資源からデータのページを独立的に消去したり書き込んだりするように構成される、請求項１に記載のシステム。
【請求項６】
前記中央処理装置の集合は、複数のルートコントローラおよび複数のブランチコントローラの階層を介して固体メモリ資源に直接的にアクセスするように構成され、該ルートコントローラおよび該ブランチコントローラは、いかなる該中央処理装置からも指示を受けずに個別ルートコントローラおよび個別ブランチコントローラ間のデータを選択的に移動させるように構成される、請求項１に記載のシステム。
【請求項７】
リーフコントローラは、ルートコントローラまたはブランチコントローラからの要求に応答して複数のリーフ間のデータを独立的に移動させる、請求項６に記載のシステム。
【請求項８】
前記中央処理装置の集合は、複数のルートコントローラおよび複数のブランチコントローラの階層を介して固体メモリ資源に直接的にアクセスするように構成されており、該複数のルートコントローラおよび複数のブランチコントローラは、該固体メモリ資源に関連して並列処理を利用する、連鎖データ読取りのために構成される、請求項１に記載のシステム。
【請求項９】
前記複数のルートコントローラは、個別の複数リーフに対する複数のブランチ接続を利用し一連の読取り要求を分配することによって、各個別読取りが異なるリーフに方向付けられる、請求項８に記載のシステム。
【請求項１０】
前記複数のブランチコントローラは、一連の読取り要求を分配することによって、各読取りが異なるリーフに方向付けられる、請求項８に記載のシステム。
【請求項１１】
前記中央処理装置の集合は、複数のルートコントローラおよび複数のブランチコントローラの階層を介して固体メモリ資源に直接的にアクセスするように構成され、該ルートコントローラおよび該ブランチコントローラは、該固体メモリ資源への分配されたデータ書込みにより該固体メモリ資源からの後続のデータ読取りにおける並列処理を容易にするように構成されている、請求項１に記載のシステム。
【請求項１２】
前記中央処理装置の集合に接続されたルートプロセッサの集合をさらに備え、
複数の資源プールへの前記固体メモリ資源をまとめることと、
各資源プールに対する消去カウントを維持することと、
世代的ガベージコレクタープロトコルを実行することであって、資源プールの該割り当てられた世代は該資源プールに対する該消去カウントに基づいて定期的に変更されることとを行うように構成されている、請求項１に記載のシステム。
【請求項１３】
前記ルートプロセッサの集合は、前記資源プールの前記割り当てられた世代を利用することにより前記固体メモリ資源への通信チャネルに亘る通信量の平衡を保つように構成されている、請求項１２に記載のシステム。
【請求項１４】
移動ウィンドウ前方エラー訂正コードアキュムレーターをさらに備え、該移動ウィンドウ前方エラー訂正コードアキュムレーターは、到着するデータシンボルを以前に蓄積された複数のデータ訂正コードに漸増的に追加し、以前に蓄積された１つのデータ訂正コードを除去するように構成される、請求項１に記載のシステム。
【請求項１５】
前記中央処理装置の集合は、データ区分の主要ホストが利用不可能であると決定し、かつ冗長ホストから該データ区分を回収することによって固体メモリ資源に直接的にアクセスするように構成される、請求項１に記載のシステム。
【請求項１６】
前記データ区分は、前記冗長ホストから回収されたデータ保護コードから、単一の中央処理装置によって再構築される、請求項１５に記載のシステム。
【請求項１７】
前記データ区分は、前記冗長ホストから回収されたデータ保護コードから、単一のルートプロセッサによって再構築される、請求項１５に記載のシステム。
【請求項１８】
前記データ区分は、前記冗長ホストから回収されたデータ保護コードから、単一のブランチプロセッサによって再構築される、請求項１５に記載のシステム。
【請求項１９】
前記データ区分は、前記冗長ホストから回収されたデータ保護コードから、単一のリーフプロセッサによって再構築される、請求項１５に記載のシステム。
【請求項２０】
前記集合の中央処理装置は、
内部メモリ資源に読取りコマンドを発することと、
前記固体メモリ資源からデータを要求することと、
該固体メモリ資源から前記内部メモリ資源内で割り当てられた資源のコマンドを受信することと、
該割り当てられた資源に該データを満たすこととを行うように構成されている、請求項１に記載のシステム。
【請求項２１】
前記中央処理装置のネットワークは、ハードウェアにおける小さなビットエラーを訂正するように構成された複数のリーフコントローラおよび複数のブランチコントローラの階層を介して固体メモリ資源に直接的にアクセスするように構成しており、該中央処理装置は、大きなビットエラーを訂正するようソフトウェアを実行するように構成されている、請求項１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願への相互参照
本願は、２０１３年４月９日出願の米国仮特許出願第６１／８１０，１９７号に対する優先権を主張し、その内容は本明細書中で参考として援用される。
【０００２】
本発明は、概して情報処理に関する。より詳しくは、本発明は、大型かつ最適化されたフラッシュメモリ資源を有する演算システムに関する。
【背景技術】
【０００３】
より多くの量のデータが分析に利用可能になるにつれて、企業や政府機関は、より早く、かつより正確な意思決定、およびより効率的な運営のためにそのデータを活用できるようになる必要性がある。
【発明の概要】
【課題を解決するための手段】
【０００４】
システムは、中央処理装置の集合を含み、各中央処理装置は、少なくとも１つの他の中央処理装置と、少なくとも１０テラバイトの固体メモリ資源へのルートパス（ｒｏｏｔ  ｐａｔｈ）とに接続されている。各中央処理装置は、メインメモリへ固体メモリコンテンツをスワッピングすることなく、直接的に固体メモリ資源にアクセスする。
【０００５】
本発明は、付随の図面と併せて以下の詳細な説明との関連にてより十分に理解される。
【図面の簡単な説明】
【０００６】
【図１】図１は、本発明の一実施形態に従って構成されるシステムを例示する。
【図２】図２は、本発明の一実施形態に従って構成されるルートモジュールを例示する。
【図３】図３は、本発明の一実施形態に従って利用されるブランチおよびツリーのアーキテクチャを例示する。
【図４】図４は、本発明の一実施形態に従って利用されるブランチアーキテクチャを例示する。
【図５】図５は、本発明の一実施形態に従って利用されるストリーム符号化および復号化技術を例示する。
【図６】図６は、本発明の一実施形態に従って利用され得る既製部品を例示する。
【図７】図７は、本発明の一実施形態に従って利用されるメモリコントローラを例示する。
【図８】図８は、本発明の一実施形態に従って利用され得るフラッシュインターフェースを例示する。
【図９】図９は、本発明の一実施形態に従って利用される優先度ＦＩＦＯ方式を例示する。
【図１０】図１０は、本発明の一実施形態に従って利用され得るメモリアーキテクチャを例示する。
【図１１】図１１は、本発明の一実施形態に従って利用される論理装置ＦＩＦＯコントローラを例示する。
【図１２】図１２は、本発明の一実施形態に従って構成される論理装置コントローラを例示する。
【図１３】図１３は、本発明の一実施形態に従って利用されるフラッシュメモリインターフェースを例示する。
【図１４】図１４は、本発明の一実施形態に従って利用されるデータ保護システムを例示する。
【図１５】図１５は、本発明の一実施形態に従って利用されるメモリバッファを例示する。
【図１６】図１６は、本発明の一実施形態に従って利用されるルート複合体を例示する。
【図１７】図１７は、本発明の一実施形態に従って利用されるアドレスマッピングスキームを例示する。
【発明を実施するための形態】
【０００７】
図面の幾つかの表示を通して、類似の参照番号は対応する部分を参照する。
【０００８】
コンピューティング製品は、特定の演算機能を提供するように設計された統合ソフトウェアを有する、専用ハードウェア機器である。コンピューティング製品は、汎用コンピュータとは基本的にはいかなる面においても相違ないが、通常は顧客がソフトウェアを変更したりハードウェアを再構成できるようには構成されていない。本開示のシステムは、非常に幅広い範囲のアプリケーションを実行させることが可能であり、この意味においては、該システムは汎用演算マシンと考えられ得る。該システムは、非常に大きな共用メモリを効率的に作成する、費用効率が高いアーキテクチャを実装する。
【０００９】
本開示のシステムは、低コストの固体デバイスを利用することによって「Ｆｌａｓｈ  Ａｓ  Ｍｅｍｏｒｙ（登録商標）」を提供する。これが意味することは、固体デバイス（例えば、フラッシュメモリチップ）がプロセッサのメモリ空間におけるアドレスを有するということである。故に、プロセッサは、最初にそのメインメモリにデータをスワッピングする必要なく、直接的に「フラッシュメモリ」中のデータにアクセスし得る。ある実施形態において、このメモリ空間は、非常に大規模であり、例えば、数十テラバイトから数ペタバイトに及ぶ。結果として、以下に記載されるように特別な設計および技術が用いられる。これらの特別な設計および技術が、システムに亘る並行的な動作をサポートする。
【００１０】
該設計および技術は、ハードウェアおよびソフトウェアの両方から構成される、多数の相互接続された構成要素を含む。各構成要素は、完全なるシステムの動作のために必要な特有の特徴および機能を有する。相互に接続されると、これら構成要素は所望の計算能力を生み出す。
【００１１】
本発明の一実施形態のブロック図が、図１に示される。図中にて、幾つかのＣＰＵ１００が備えてあり、その各々は、時にクラスター接続と称される、メモリスピードインターフェース１０２によって相互接続される多くの演算コアを有する。各ＣＰＵは、キャッシュ１０４とローカルメモリ１０５とを有し、この場合はＤＲＡＭまたは他の類似のメモリである。各ＣＰＵ１００は、延長固体メモリとして動作可能なローカルメモリルート（ｌｏｃａｌ  ｍｅｍｏｒｙ  ｒｏｏｔ）１０８をも有する。演算コアは、ローカルメモリ１０５内、またはメモリコントローラ１１０を介して接続されるブランチ１１２上に常駐のソフトウェアスタック１０６を実行する。一実施形態において、該ソフトウェアスタックは、アプリケーションプログラム、データベース、ブロックドライバ、およびウェアレベル信頼性利用可能性保守性（ＲＡＳ）モジュールを含み、以下に論じられる。このブロック図は、本発明の可能性のある多くの構成のうちの１つを描写している。
【００１２】
コンピュータによって提供され得る同時データアクセスの数によっては、多くのデータによって起動されるアプリケーションのパフォーマンスを限定してしまう。演算コアの数を増やすことは、この問題を更に悪化させてしまう。本開示のシステムは、演算コアを収容するＣＰＵへのマルチルートの相互接続を有する、数多くのメモリチップを提供する。該システムは、データへの効率的な並行アプリケーションアクセスを提供する。特殊化したシステムソフトウェアが、演算およびデータアクセスの効率的なスケジューリングを管理する。
【００１３】
本開示のシステムは、特定の使用パターンに適した様々な構成において組立てられ得る。本発明は、多くの特定の使用において最適化され得、該使用には、例えば、Ｂｕｓｉｎｅｓｓ  Ｉｎｔｅｌｌｉｇｅｎｃｅ、Ｂｕｓｉｎｅｓｓ  Ａｎａｌｙｔｉｃｓ、Ｇｅｏ−Ｓｅｉｓｍｉｃ、Ｍｅｄｉｃａｌ  Ｉｍａｇｉｎｇ、Ｓｏｃｉａｌ  Ｎｅｔｗｏｒｋｉｎｇ、およびＰａｔｉｅｎｔ  Ｍａｎａｇｅｍｅｎｔなどの大量にメモリを消費するアプリケーションを含む。
【００１４】
一実施形態において、ルートメモリコントローラ１１０は、各々が複数のコアからなる相互接続されたＣＰＵ１００の複合体に接続し、かつブランチ１１２およびリーフ１１４の階層を駆動する。注目すべきは、各ブランチは、他のブランチ、幾つかのリーフ、またはその混成に結合している。リーフ１１４は、フラッシュメモリあるいは他の固体またはデジタルメモリから成る。特に、ブランチを介して単一のルート（ｒｏｏｔ）（例えばＦＰＧＡまたはＡＳＩＣ）に結合している１０２４個またはそれ以上のメモリチップがあり得る。各ＣＰＵ複合体は、８以上のルートに接続され得る。その結果、図１が正確かつ一定の縮尺である場合、固体メモリリーフの数は、図を圧倒するものになる。本アーキテクチャにおいて、ＣＰＵは並行にアクセスされ得る幾千ものメモリターゲットを有する。ＣＰＵ複合体におけるＣＰＵの数、ならびにメモリツリーのサイズおよび数もまた、非常に大きな数へと増加し得る。バランスが、特定の使用（アプリケーション）についての必要性をもたらす。本アーキテクチャにおける構成要素は、ハードウェアおよびソフトウェアの両方によって構成される。それら構成要素は、以下のものを含み得る。
【００１５】
１．データ管理システム
データベースまたはデータ管理システムであって、
１）マルチスレッドであり、
２）高度の並行性を達成するために、単一共用メモリモデル、または分散型メモリモデル、あるいはその両方の組合せを利用し得、大抵はそうである、データベースまたはデータ管理システム。幾つかの実施形態において、これは、キャッシュコヒーレントメモリモデルであり得、該モデル中にて、各ＣＰＵスレッドは、メモリにおけるその状態をキャッシュに入れる。
【００１６】
２．メモリ管理システム
メモリ管理システムであって、
１）大型のマルチコアシステムを活用するためにマルチスレッドであり、
２）高度に並行であり、
３）非常に大きな容量を有し、
４）喩えとして、メモリ管理システムを下りることによって並行性が増大し得、大抵はそうである、メモリ管理システム。メモリアクセスがルートからブランチ、そしてリーフへと移動するにつれて、各レベルにおいて同時に起こる動作が効率的に増す。
【００１７】
３．キャッシュ管理システム
幾つかの実施形態において、コンピュータシステムにおける個々のノード（またはコア）に亘ってデータコヒーレンシを維持するキャッシュ管理システム。
【００１８】
４．メモリシステム
上述のように、各メモリシステムは、ルート、ブランチおよびリーフから成る。一実施形態において、本明細書において時にメモリモジュール（ＭＭ）と呼ばれる４つのルートが存在する。概念上は、ルートは、コンピュータの筐体中の４つのメモリライザーカードに取って代わる。ルートは、配信網に接続することによって多くのブランチにインターフェースを提供しており、該ブランチの各々は、多くのリーフに接続している。
【００１９】
図２は、単一のルート１０８を図示しており、該ルートは、２つのメモリインターフェース２００、２つのブランチインターフェース２０２、１６のブランチ、および１６のリーフを備え、１つのリーフにつき少なくとも１つの固体デバイスを含んでいる。図３は、ブランチインターフェース２０２および対応するリーフ１１４を有する一連のブランチ１１２への該ブランチインターフェースの接続の詳細な図示である。一実施形態において、各ルートは、システム合計３２テラバイトのための計８テラバイトのフラッシュを有し、そのうち半分は、ユーザーアプリケーションのために使用可能であり、残り半分は、冗長性およびシステムの使用のために配分される。一実施形態において、アプリケーションまたは冗長性のためにメモリ資源を配分することは、異なることであり得るか、直接または間接的にアプリケーションによって制御され得る。
【００２０】
各ブランチインターフェースは、内部メモリ２０４を有することによって、ソフトウェアスタック２０６を実行する。ソフトウェアは、ダブルデータレート（ＤＤＲ）コントローラ、ターゲットルーティングソフトウェア、ＲＡＳモジュール、およびＮｏｎ−ｂｌｏｃｋｉｎｇ  Ｐａｒａｌｌｅｌ  Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｉｎｔｅｒｆａｃｅ  （ＮＢＳＩ）ドライバを含み得る。ブランチインターフェースは、ＦＰＧＡまたはＡＳＩＣＳの形式の演算資源を有し得る。
【００２１】
メモリインターフェースは、プロセッサ間データ分配網に接続されており、該分配網においては、全てのＣＰＵが全てのメモリにアクセスできる。以下に詳細に記載されるブランチおよびリーフで構成されたマルチルートのツリーとして、メモリが記載される。共用メモリマルチプロセッサとして、演算複合体が記載されるが、それは一様または一様ではない型であり得る。ルートは、多くの実例のうちの１つであり得、そのような実例は、局所的または遠隔で接続されている。相互接続の技術が該システムの機能の一部に影響し得るが、基本的なアーキテクチャまたはその動作を必ずしも変えるものではない。
【００２２】
一実施形態において、Ｍｅｍｏｒｙ  Ｍａｓｔｅｒ  Ｃｏｎｔｒｏｌｌｅｒ（ＭＭＣ）およびＭｅｍｏｒｙ  Ｓｌａｖｅ  Ｃｏｎｔｒｏｌｌｅｒ（ＭＳＣ）は、専用ハードウェアを用いて実装される。ルートはＭＭＣであり、その一方でブランチはＭＳＣであり、リーフは固体メモリデバイスである。例えば、Ａｌｔｅｒａ  Ｓｔｒａｔｉｘ  Ｖ  ＦＰＧＡが、ＭＭＣおよびＭＳＣの両方に対して用いられ得る。この場合、各ＦＰＧＡは、１２．８Ｇｂ／ｓで動作する４８のシリアルリンクを有し、各ＭＭＣからの３つのリンクが、１６のＭＳＣデバイスの各々へと行く。各ＭＳＣは、次いで１６のリーフに接続するのだが、その各々が固体メモリデバイス、例えば３２ギガバイトのＳｉｎｇｌｅ  Ｌｅｖｅｌ  Ｃｅｌｌ（ＳＬＣ）ＮＡＮＤ  Ｆｌａｓｈデバイスである。他の多くの実装が可能であり、その中には構成要素およびその相互接続がリアルタイムで変化している実装をも含む。
【００２３】
一実施形態において、図３に示すように、メモリブランチは多くのリーフが結合した構成要素であり、各リーフはフラッシュメモリチップである。図４は、ソフトウェアスタック４０２を実行するリーフインターフェースコントローラ４００を有するブランチ１１２を例示する。ソフトウェアスタック４０２は、ネットワークドライバ、ＲＡＳ、エラー訂正符号（ＥＣＣ）、データベースエンジン、データ圧縮エンジン、暗号化エンジン、および固体ドライバを含み得る。これら構成要素は、データを他の処理装置に移動させることなくリーフに記憶されている該データに演算タスクを実施する手段を提供する。注目すべきは、スタックの方がメディアにより近いということであるが、それはルートやブランチにはコンピュータ資源が存在するからである。
【００２４】
代替的な実施形態において、メモリブランチは、多くのブランチおよびリーフが結合した構成要素であり、そこでは、各ブランチは同一または異なるソフトウェアスタックを実行する。複数の異種システムにおいて、各ブランチは、その近隣について認識し得、そしてネットワークドライバ、ＲＡＳ、エラー訂正符号、データベースエンジン、データ圧縮エンジン、および固体ドライバの実装に協力し得る。
【００２５】
さらなる実施形態において、リーフに関する場合であるが、ブランチは、データがリーフに対して読まれる／書き込まれるときに高速探索または圧縮／減圧を実行する、重要な演算資源を含む。ローカルプロセッサは、ＣＰＵ、ブランチおよびルートの構成要素間での通信チャネルにおいて存在する、ヘッダおよびコマンド情報を送付、承認、符号化および復号化し得、またデータパケットを暗号化、圧縮、消去、承認、符号化および復号化し得る。
【００２６】
ブランチは、最終的にはリーフとして終わる。各リーフは、データページを読み出し、不揮発性記憶装置に書き込むように作動するデバイスである。リーフは、多くの形式によって実装され得る。メモリ管理システムは、リーフのページの使用を制御する。リーフは様々な技術において実装され得るが、既に書き込まれているデータページがさらには読まれ得るという特性を有する。リーフは、デバイスの型または動作パラメータのいずれに関しても、同種または異種である必要はない。
【００２７】
さらなる実施形態において、リーフは、データがリーフに対して読まれる／書き込まれるときに高速探索または圧縮／減圧を実行する、重要な演算資源を含む。ローカルプロセッサは、ＣＰＵ、ブランチおよびルートの構成要素間での通信チャネルにおいて存在する、ヘッダおよびコマンド情報を送付、承認、符号化および復号化し得、またデータパケットを暗号化、圧縮、消去、承認、符号化および復号化し得る。
【００２８】
幾つかの実施形態において、１つ以上の多層アーキテクチャは、該ルート−ブランチ−リーフ構造を覆い、以下に記載のように符号化および復号化のための様々な技術を含む。
【００２９】
幾つかの実施形態において、メモリリーフは、冗長システムにおけるミラーメモリ空間へのポートアクセスを有する。一実施形態において、メモリシステムのおよそ半分がデータを記憶し、該メモリ空間の残り半分が、高速データアクセスをサポートする。別の実施形態において、適切なパフォーマンスを提供するために、物理メモリのほんの一部が残されている。更なる実施形態において、メモリは、非効率性を最小限に留める特別に設計された方法を用いて個々のリーフに亘ってデータを分配する。別の実施形態において、メモリの構成要素自体は、所望の動きを共に生みだす個々の構成要素から構成され得る。更なる実施形態において、区分化されたシステムは、個々のドメインの不具合の場合に動作可能であり続ける、隔離されたドメインを有する。一実施形態において、これらの構成要素は相互依存している。全体のシステムが効率的に機能するために、相互接続された構成要素は、互いの作業が正しく機能し時宜にかなって完了するように互いに依存している。
【００３０】
本発明は、異なる使用のためのメカニズムをもたらす異なる実装を有し得る、幾つかの相互に関連のある部品から構成される演算システムである。これら構成要素の効率的な相互作用によって、達成不可能なレベルのシステムパフォーマンスさえも生み出される。以下の説示において、構成要素のうちの幾つか、およびそれらの機能について列挙する。
【００３１】
本発明の一実施形態は、メモリに対する書込みおよびウェアリングにおけるパフォーマンスの改良点を提供する。資源（演算、メモリ、接続帯域など）をプールすることは、最適化の機会を生む。多くのサーバーが同一データにアクセスを試みている多くのクライアントの要求を満たそうとするとき、データ整合性が重要な必要条件となる。マルチレベルキャッシングの使用は、アーキテクチャを更に複雑化するが、これらの問題への取り組みに用いられ得る。
【００３２】
本発明の一実施形態は、一群のデバイス全てに作業を分配することによって、それらデバイスのパフォーマンスを改善するメカニズムである。在来のＳｏｌｉｄ  Ｓｔａｔｅ  Ｄｉｓｋｓ（ＳＳＤ）は、デバイス内で確かに「ウェアレベリング」を行うが、デバイスがブロックを消去する必要があるときはいつでもそうしなくてはならない。これは、ＳＳＤがそれらのデバイス内のみでしか書込みを分配することができないからであり、たとえより高位レベルにある存在が他のデバイスに書込みを分配しようと試みても結果は同じである。単一のデバイスに対する個々の行為を実行する費用は、書込みがプールされるときの実行費用よりもはるかに高い。本開示のシステムは、全体的なパフォーマンスを促進するために、多数のチャネルに亘る消去および書込みを最適化する。それには、クライアントから見て動作の待ち時間を実質的に増やすことなく賢明に作業を分散させる、「選択」メカニズムおよびリアルタイム最適化メカニズムを含む。
【００３３】
例えば、本技術は図１および／または図２のアーキテクチャにおいて用いられる。例示的なトランザクションは、ログ構造を用いてのデータページの分配を行うことによって、消去されたブロック（例えば「ガベージコレクション」）を再要求する効率を増加させることである。メモリのページは、コアの仮想メモリアドレス空間にマッピングされている。本ページは、連続した固体メモリアドレスに逐次的に書き込まれる。メモリデバイスの帯域をさらに効率的に利用するために、これら書込み動作はグループ化され得る。例えば、４ページが、特定のフラッシュデバイスの４つの面に同時に書き込まれ得る。本方法は、次に移る前にフラッシュデバイスの１つのブロックを満たす。その結果、再び書込み動作を行う前に同様の順序にて削除動作を実施する多くのアプリケーションにとって、多くの削除されたページを同時に同一ブロックから再要求することができる。他の状況において、再要求され得るページ数を最大限にするために、書込み動作は、異なるブロックに割り当てられ得る。
【００３４】
本発明の別の局面は、メモリ階層内のメモリ構成要素間において効率的にブロックを移動させるメカニズムである。上記の例において、固体デバイスからデータにアクセスすることに付随する、プロセッサ（ＣＰＵ、ルート、ブランチ）の階層構造が存在する。階層構造のうちの１つのレベルから他のレベルへとデータが移動されるときはいつでも、パフォーマンス上で不利になることがあり得る。逆に、レベルを超えずに動作が実施される場合は、共通してパフォーマンスの改善が実感される。
【００３５】
パフォーマンスの向上を実現できる機会の一例としては、固体メディアに対する消去動作の間に見いだされる。消去の準備において、使用中（「生きている」）データを含む全てのページを移動させなくてはならない。この間、ＣＰＵは本データを調査する必要はない。故に、本データを有するＣＰＵへと階層レベルを横切らないことによって、パフォーマンスの改善が実現される。幾つかの実施形態は、ブランチからブランチへと本データを移動させ得るし、幾つかの実施形態は、ルートからルートへと移動させ得る。ルート間の移動の場合において、コピーはＣＰＵへと移動され、元のルートまたは別のルートへと戻される。これらコピーはＣＰＵ内でのメモリ空間を必要とし、結果として、ルートバッファ管理、ＣＰＵでのキャッシュ利用、およびＣＰＵバッファのために利用可能なメモリに強く影響する。ルート内またはルートからルートへのデータ移動は、ＣＰＵにおけるロード／記憶モデルの使用、またはルートにおける直接メモリアクセス（ＤＭＡ）モデルの使用によって達成され得る。ある１つのパスまたは他のパスを使用するという決断は、オペレーティングシステム層または可能性としてはルート自体において、あるいはそれら２つを組み合わせた分配メカニズムを用いることによってもなされる。
【００３６】
本発明の別の実施形態は、パフォーマンスを最大限にするために読取りを分配するメカニズムに関する。異種の待ち時間、スループットおよびアクセス方法を有するデバイスがデータに関して進化するにつれて、ＣＰＵは、データにアクセスできなくなり、ＤＲＡＭにおいて期待されてきた均一のパフォーマンスを期待することもできなくなる。本メカニズムは、非ＤＲＡＭデバイスからの非常に高いスループットを達成するために、読取りを並列処理する。これらパフォーマンスレベルは、他のアプローチよりもＤＲＡＭ速度に１０倍近い。
【００３７】
一実施形態において、長い待ち時間と複雑化したアクセスメカニズムとを有する８テラバイトデータの固体Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅを含むシステムが調べられる。特に、２５６ギガバイトのデータを有するＤＲＡＭモジュールを用いた単一の６４バイト読取りと比較して、ルート（Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）上の固体メディアは、２０４８の同時４０９６バイト読取りを可能にする。本実施形態において、システム上の各４０９６ページは、１００μ秒を必要とし、ＤＲＡＭ上の各４０９６バイト読取りは、１μ秒を必要とする。本実施形態において、同時読取り後にシステムに対して１ページごとに５μ秒追加されている。
【００３８】
ＤＲＡＭを用いると単一ページの読取りが１００倍速いが、２０４８ページの読取り時には、ＤＲＡＭは本開示のシステムと比較して５倍しか速くない。より大きな実施形態は、より多くのメモリチップを用いて構成されており、この違いを大幅に狭めている。
【００３９】
本発明は、上記の並列処理を可能にするソフトウェア、ファームウェアおよびハードウェア設計を含む。本発明は、読取り要求および／またはデータが既に分配されており故にそれに続く読取りはメモリシステムにおける並列処理を利用することが可能となるメカニズムを具現化する。その基本的な技術は、異なる（独立した）デバイス（チャネル）上で同時に読み込まれる可能性のあるデータページを配置することによって実行される。一実施形態において、各ページは、以前に書き込まれたページに関して異なるチャネル（またはブランチ）上のデバイスに書き込まれる。
【００４０】
本発明の別の局面は、バッファおよびチャネル帯域を効率的に利用しながら、書込みを分配することによってパフォーマンスを最大限にするメカニズムである。後に続く読取りが並列処理を利用できるように読取り要求および／またはデータは既に分配されていなくてはならないということが既に言及された。本発明の本実施形態は、データ書込みを分配することによって、後に続く読込みにおける並列処理を容易にするものである。
【００４１】
一実施形態において、Ｌｉｎｕｘ（登録商標）  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍが用いられる。現代のほとんどのＯｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍのように、Ｌｉｎｕｘ（登録商標）は、ＤＲＡＭのデータを回転ディスクや固体メディアのようなデータデバイスにバッファしたり該データデバイスからＤＲＡＭにバッファするＭｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍを用いる。アプリケーションは、Ｌｉｎｕｘ（登録商標）のＤＲＡＭを直接的に用いたり、Ｌｉｎｕｘ（登録商標）のＤＲＡＭをステージングエリアとして用いたり、またはアプリケーションのＤＲＡＭを参照しながらＬｉｎｕｘ（登録商標）を提供することによってデータを書き込み得る。これら全ての場合において、書込みは、時間および空間に亘り分配される。
【００４２】
本開示のシステムは、膨大な数の独立動作可能な装置を有する。それら装置に亘ってページ書込みが分配される。これは、一時的な分配なのだが、それは、書込み準備が整ったことに基づいて異なる装置にページが書き込まれるからである。
【００４３】
この分配は、２つの点においてパフォーマンスを容易にする。先ず、読取りのように、システムは独立した複数の装置（リーフ）に対して同時に書込みを行うことができ、並列処理を可能にする。第２に、それに続く読取りもまた分配されることとなり、故に並列処理を利用することが可能となる。多くのリーフが存在するため、時間的な分配と多数の装置とを考慮すると、読取りが互いと衝突する可能性は低い。
【００４４】
本発明の別の局面は、チャネルまたは論理装置に亘るウェア群を実装するメカニズムである。本開示の技術は、メモリの「消去ブロック」を効率的に再使用し、複数ページに亘り該使用を均等に分割する方法である。本技術は、ソフトウェアスタック２０６、またはルート１０８（例えば、図２のＲＡＳ）、あるいは該技術を最適に実行するように協同するその両方によって実施され得る。
【００４５】
ブロック消去メカニズムは、メモリ空間再生（例えば「ガベージコレクション」）と非常に良く似た形式で動作する。しかし、該メカニズムは、通常のガベージコレクション技術が行わない、追加された３つの複雑要素を取り扱う。先ず、ページは、再び書き込まれるようになる前に、大きく、かつ連続的なチャンクで消去されなくてはならない。第２に、ページは最終的には磨滅するので、ウェアレベリングを実行しなくてはならない。第３に、最良の読取りおよび書込みのパフォーマンスを得るために、可能な限り多くのチャネルに通信量を散らばらせることが望ましい。促進された世代別ガベージコレクターを実行することによって、依然として良好なウェアレベリングを提供しつつ（注意点２）、良好なパフォーマンスを達成できる（注意点１および３）。
【００４６】
世代別ガベージコレクターにおいて、全ての新たなオブジェクトは、若い世代のプールに配置される。ガベージコレクションが該若い世代のプールに実行された後に、コレクションを切り抜けたオブジェクトは、より古い世代のプールに配置される。２度目のコレクションを切り抜けたオブジェクトは、さらに古い世代のプールに配置されるなどである。このフラッシュを記憶メディアとして使用する単純なインプリメンテーションは、極めて悪いウェアレベリングの原因となり得る。若い記憶世代ために使用されたブロックは、より古い世代のためのブロックよりもはるかに頻繁に消去され得る。物理的フラッシュブロックがどちらの世代に属するかということを定期的に変更することによって、この問題の発生が防止される。高消去回数と共にページをより古い世代へと移動させることによって、それらページが将来見ることとなる消去の数が小さくなる。異なる世代のためのブロックは、異なるフラッシュチャネル間において平衡を保たれる。これによって、読取りおよび書込みの通信量を多くの異なるチャネルに分散できることが確実となる。
【００４７】
本発明の別の実施形態は、蓄積冗長データ保護ストライプに関する。本発明の本実施形態は、障害の影響を受けないメモリデバイス上の簡単な（例えば、ＸＯＲ）借方／貸方演算を用いてＤａｔａ  Ｐｒｏｔｅｃｔｉｏｎ  Ｓｔｒｉｐｅを蓄積する。本技術には、障害を受けたデータブロックの素早い再構築の方法を含む。本メカニズムは、システムのＣＰＵ、ルートまたはブランチにおいて具現化され得る。特定の実施形態によっては、本メカニズムは、異なる方法にてＲＡＳ実施形態と相互作用する。
【００４８】
大きな非対称の読取り−書込み時間を有するデバイスに対して適用される消去コードは、オーバーヘッドを制限し、検出されていないエラーにおいて大幅な減少を提供する方法が必要である。追加的に、低い演算的なオーバーヘッドおよび制限空間が大いに望ましい。調整可能なエラー検出および訂正レベルでの空間および時間における、低く、固定されたオーバーヘッドを達成する消去コーディングデータのためのメカニズムが提示される。
【００４９】
以下のデータ保護スキームは、本開示の書込みメカニズムの上段に作られる。図５は、１７のデータブロックのストリームを例示する。この例において、パリティ価値は一度に４つのデータブロックに対して演算されるが、該技術はいかなる数のデータブロックにも用いられ得る。パリティ価値は、データブロックのスライドウィンドウを利用する。効率を上げるために、以前の演算されたパリティ価値（例えばＰ１）は、排他的ＯＲ（ＸＯＲ）動作の影響を受け、その結果は新たなデータブロック（例えばＤ５）と組み合わされる。このアプローチは、全ての新たに到着するデータへと繋げられ得る。図５は、本アプローチの有効性を確立する、数学的基礎を提供する。本アプローチは、低く、固定された演算的なオーバーヘッドと固定された空間要件を組み合わせる。実際において、本メカニズムは、「移動ウィンドウ」を利用し、該移動ウィンドウは、パリティブロックを形成するために共にＸＯＲ処理されたデータブロックを含む。ウィンドウが動くと、新たなブロックがパリティブロックへとＸＯＲ処理され、パリティブロックへと以前にＸＯＲ処理された古いブロックは、再びパリティブロックへとＸＯＲ処理される。これは、新たなブロックを効率的に追加し、古いブロックを除去し、故に「ウィンドウを移動させる」。
【００５０】
本発明の別の実施形態は、チャネルを完了しリリースするために、直接読取りが、以前に要求された消去、または読取りよりも遅い他の動作を待っているときの、パリティからのデータの再構築に関連する。この機能は、図１のＣＰＵ上にて実行されるソフトウェアスタックにおけるソフトウェアにおいて実行され得る。特に、本実施形態においては、該機能はソフトウェアスタックの底面にて実行される。概して、該機能は一次デバイスがビジー状態にあるときに異なるデバイスに記憶されている冗長データからアクセスされたデータを再構築することによって、読取り動作の待ち時間を最小限にする方法に関連する。
【００５１】
メモリページは異なるチャネルを割り当てられる（例えば、ルートを介する、ＣＰＵからリーフへのリンク）。各リーフは、多くのデータページを記憶する。単一データページのみが、一度にリーフから読み出されたり書き込まれたりし得る。リーフ内のページは、時に消去される。読取りまたは書込みを行うよりも、消去または他の遅い動作を行うためにより長い時間がかかり、多くの読取りまたは書込みが該複数リーフに亘って同時に起こる。結果として、消去動作が進行中のリーフからの読取りは避けることが望ましい。
【００５２】
故に、データページに加えて、データ保護ページが記憶される。つまり、あるデータページＡに対して、異なるリーフに記憶されているＡのためのデータ保護ページのセットが記憶される。データページＡが紛失した場合には、Ａのためのデータ保護ページの幾つか、および他の幾つかの（Ａを含まない）データページを読み取ることによって、データページＡのコンテンツは再構築され得る。重要な点は、データページＡのコンテンツは、Ａが存在するリーフにアクセスすることなく再構築され得るということである。
【００５３】
この技術は、通常は、Ａを含むページ（または全リーフもしくはブランチ）が消失した場合にＡのコンテンツを再構築するために用いられる。しかし、以下のようにパフォーマンスを改善するためにも本メカニズムは用いられ得る。つまり、Ａを含むリーフがビジー状態であり長時間ビジー状態であり続ける場合、Ａを直接読み取る代わりに、必要なデータ保護情報からＡを再構築し得る。消去の場合は、これは、消去が完了するのを待つよりも早く、Ａに対する要求が満たされることが非常に多い。本技術は、移動ウィンドウ技術と組み合わせることによりデータを素早く再構築し得る。
【００５４】
本技術を実行する別のアプローチは、ＲＡＩＤ５の様な（または他のＲＡＩＤ）消去コードを利用することである。これは、多数のデータページの排他的ＯＲを演算することによってパリティページを作り出すこと、あるいは例えば低密度パリティチェックコードなどのより複雑なコードまたはラプターコードと呼ばれるものを演算することを意味し、これによって必要なデータのリカバリが可能になる。
【００５５】
本発明の別の実施形態は、階層メモリにおける効率的な読取りバッファ利用のためのメカニズムに関する。問題は、より効率的なバッファ利用を通じてシステムパフォーマンスを改善することにある。ソフトウェアが読取りコマンドを発するときにバッファを割り当てるのではなく、データが利用可能になる直前にバッファを割り当てるようにする（怠惰な割り当て）。これは、ソフトウェア読取りがより小さな数のバッファに亘って統計的に多重化することを可能にする。バッファの数が限定されているシステムにおいて、これは、より良い全体的なシステムパフォーマンスに繋がる。
【００５６】
ＣＰＵが、例えばフラッシュメモリから高速メモリへと、より遅い資源からより速い資源へとデータを読み込むとき、ＣＰＵは、より速い資源にバッファを割り当て、より遅いデバイスが特定されるバッファが満たされるのを待つ。動作の最初からデータが最終的に戻されるまで、該バッファは、オペレーティングシステムによって「ビジー」状態であると扱われ得る。この発想によって、システムは読取りを発するが、該データのためにバッファを予め割り当てることはない。（読み取られている）より遅いシステムは、データがＣＰＵに転送される直前にバッファを割り当て、次いで該バッファをデータで満たす。これによって、バッファが「ビジー」状態となるのはより短い期間ですむ。本メカニズムは、より速い資源におけるバッファの利用を改善し、故に、システムパフォーマンスの増加、および特定のパフォーマンスレベルに必要なバッファ数の減少に繋がる。
【００５７】
本発明の別の実施形態は、リーフ資源を最小限にしつつパフォーマンスを最適化するためのデータ保護スキームに関する。Ｄａｔａ  Ｐｒｏｔｅｃｔｉｏｎ（ＤＰ）パリティ生成は、概して単純で非常に速い。多数のビットエラーは、訂正するのに長時間かかる。実際には、遭遇するほとんどのエラーは、エラーにおけるわずかな数のビットを有する。
【００５８】
本発明の一実施形態は、多数のパリティビットを発生させ、二重構造の訂正アルゴリズムを有する。エラーにおけるわずかな数のビットは、ブランチまたはリーフいずれかにおけるハードウェアにおいて訂正され得、故にハードウェア実装を小さく留めておける。多数のビットエラーが発生した場合は、それらは、データと共に記憶されているより大きな数のパリティビットの全て（またはそれ以上）を用いることによって、ソフトウェアまたはファームウェアにおいて訂正され得る。
【００５９】
この階層メカニズムは、空間および演算の効率を改善する。本メカニズムは、Ｄａｔａ  Ｐｒｏｔｅｃｔｉｏｎを、限定的な訂正能力を有するより小さな部分と、ソフトウェア（または他の幾つかの「より高次レベル」の処理）における訂正能力を有するより遅いがより能力のある部分との、２つの部分に分割する。全ての必要な訂正のうちの９９．９９９％に対しては、リーフ内部の訂正ロジックで十分である。しかし、リーフがデータを訂正できない場合には、ソフトウェアは、その追加的能力を用いてデータを訂正する。これは、小さな、頻繁に使用されるリーフ訂正ブロックと大変まれにしか用いられないソフトウェア訂正ブロックとを合わせたものを、あまり頻繁には用いられない広範な能力を有する単一のより大きなリーフブロックと交換する。この交換によって、より小さく、かつより良く用いられるリーフブロックを導き、リーフの空間効率を改善する。該メカニズムは、幾つかのレベルへと繋げることができ、各レベルは前のレベルのデータ訂正能力に従って改善される。最終的に、他のシステムレベルデータ保護が、他のリーフ上の冗長コピーから消失したデータを回復させるために適用され得る。ブロックベースのコード（例えばＢＣＨまたはＲｅｅｄ−Ｓｏｌｏｍｏｎ）がこの機能を実行し得る。加えて、特別に設計されたＬｏｗ  Ｄｅｎｓｉｔｙ  Ｐａｒｉｔｙ  Ｃｈｅｃｋ（ＬＤＰＣ）コードが用いられ得る。この「ソフトエラー」技術は、デバイスからの再読取りを可能にし、幾つかの読取りの試みを組み合わせることによってより良いエラー率を生むことを可能にし、また、より複雑なロジックを必要とするまれな場合からエラー検出および訂正を分ける上述の技術と組み合わされ得る。
【００６０】
以下の考察は、本発明の構成要素の様々な特定の実施形態に関する。上記に考察の通り、システム構成要素は、マルチルートの、冗長的な並行アクセス可能な（枝分かれした）メモリおよびポイントツーポイント分配システムに接続されたマルチプロセッサ／マルチコア複合体を含む。該システムは、図６に示されるような市販の構成要素によって構成され得る。
【００６１】
マルチコアで、マルチプロセッサで、サーバークラスであるハードウェアプラットフォームが、本発明の一実施形態を実施するために用いられる。一例として、ＩＢＭ  ３８５０／３９５０  Ｘ５システム（Ｉｎｔｅｌ  Ｂｏｘｂｏｒｏ−ＥＸプラットフォームに基づく）が、ホストとしての役割を果たす。該ワーキングモデルは、４つのＤＲＡＭメモリボードと、６４テラバイトのフラッシュメモリを有する４つのメモリモジュール（ルート）とを含む。フラッシュメモリの一部は、ユーザーアプリケーションのために利用可能である。該一部は、使用履歴および現在の測定されたパフォーマンスレベルによって変わり得る。本システムは、高速ポイントツーポイント、キャッシュコヒーレントメモリ相互接続を有するＮｏｎ−Ｕｎｉｆｏｒｍ  Ｍｅｍｏｒｙ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＮＵＭＡ）構成において接続される、多くの多重プロセッサシステムを代表する。
【００６２】
ハードウェア構成要素は以下を含み得る。
・Ｓｙｓｔｅｍ  Ｂａｓｅｂｏａｒｄ（マザーボード）
・Ｓｃａｌａｂｌｅ  Ｍｅｍｏｒｙ  Ｉｎｔｅｒｆａｃｅ（ＳＭＩ）Ｂｏａｒｄ（ルート）
・Ｆｌａｓｈ  Ｍｏｄｕｌｅ  Ｂａｓｅｂｏａｒｄ（ブランチ）
・Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ  Ｄａｕｇｈｔｅｒ  Ｃａｒｄ（リーフ）
・支持用の機械的、熱的および電力システム
【００６３】
図６は、本発明を実行するために用いられ得るマルチコアのサーバークラスプラットフォームを示す。特に、該図は、ＩＢＭ  Ｘ５  ３８５０シャーシのブロック図である。インテルのＢｏｘｂｏｒｏ−ＥＸプラットフォームに基づくと、ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＱＰＩ）リンクを介して相互接続される４つのＸｅｏｎ  ８８７０（Ｗｅｓｔｍｅｒｅ）ＣＰＵが含まれる。各Ｘｅｏｎチップは、２つのメモリコントローラを有する。メモリ（チェックビットを有する１４４ビット）に１２８ビットの幅広データパスを実装するために、各メモリコントローラは、ロックステップにおいて２つのＩｎｔｅｌ  ＳＭＩ  （Ｓｃａｌａｂｌｅ  Ｍｅｍｏｒｙ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）リンクを実行する。各ＳＭＩリンクは、Ｉｎｔｅｌ  ７５１０  Ｓｃａｌａｂｌｅ  Ｍｅｍｏｒｙ  Ｂｕｆｆｅｒチップと通信し、該チップは、次いでＳＭＩ要求をダブルデータ型の３つ（ＤＤＲ３）の同期ＤＲＡＭトランザクションに変換する。各７５１０には２つのＤＤＲ３リンクが存在する。Ｘｅｏｎプロセッサは、１２８ビットの動作を実行し、ＤＤＲ３リンク上のデータマスクビットは使用しない。
【００６４】
メモリコントローラとＣｒｏｓｓバーは、ＭＳＣにおけるＦｌａｓｈ  ＣｏｎｔｒｏｌｌｅｒとＳｅｒｉａｌ  Ｌｉｎｋインターフェースとの間のデータページを運ぶよう設計された分散メモリ構造である。メモリコントローラは、システムにおいてブランチである。フラッシュページは、利用される特定のチップの所有物であるが、それは概して４キロバイトのメモリブロックである。消去ブロックは、フラッシュページサイズの倍数（例えば、２５６キロバイトまたは５１２キロバイト）である。
【００６５】
Ｍｅｍｏｒｙ  Ｃｏｎｔｒｏｌｌｅｒは、フラッシュページをバッファし、ＩｎｔｅｒｌａｋｅｎインターフェースとＦｌａｓｈ  Ｃｏｎｔｒｏｌｌｅｒとの間のメッセージを制御するために用いられる。Ｉｎｔｅｒｌａｋｅｎとは、ワイヤ（個別データ接続）を結合させるための相互接続プロトコルである。すなわち、それは多重チャネルを有する単一の論理接続である。ＭＳＣは、複数の結合されたデータ移送チャネル（例えば、２つのＩｎｔｅｒｌａｋｅｎインターフェース）を、各ＭＭＣにつき一つ、有する。ソフトウェアは、両ＭＭＣ間において、ブランチへのページの予定を均一に立て得る。一実施形態において、各ＭＳＣにつき３２のブランチが存在する。各ＭＭＣには入ページおよび出ページが存在するので、データパスは４つの主要部分に分けられ得る。
３２ブランチからＭＭＣ０まで多重化されるトラフィック
３２ブランチからＭＭＣ１まで多重化されるトラフィック
ＭＭＣ０からブランチへと逆多重化されるトラフィック
ＭＭＣ１からブランチへと逆多重化されるトラフィック
【００６６】
これは図７に示される。アイテム７００は、１つのデータパスを表し、アイテム７０２は、別のデータパスを表すなどである。Ｓｔａｔｉｓｔｉｃｓブロック７０４も図に示されており、これはＭＭＣ０のみにＳＴＡＴＳ（統計）メッセージを送信する。
【００６７】
この分配型メモリ設計は、Ａｌｔｅｒａチップアーキテクチャに首尾よく役立ち、該アーキテクチャは、デバイスに亘ってそのｍ２０ｋメモリを分散させる。ブランチからの１２８ビットのデータパスは、Ｉｎｔｅｒｌａｋｅｎ  ＦＩＦＯｓ  ７０６を介してブランチＦＩＦＯｓの「上面」インターフェースに運ばれる。Ｉｎｔｅｒｌａｋｅｎインターフェースとブランチとの間にはクロックドメイン変更が存在する。これは、ブランチＦＦＩＦＯｓの「底面」インターフェースにおいてなされる。例示的なインターフェースが図８に示される。
【００６８】
この全体的なＭｅｍｏｒｙ  Ｃｏｎｔｒｏｌｌｅｒは、分散型ＦＩＦＯｓ  ８００のセットとして組み立てられる。本実施形態は、簡素なＦＩＦＯｓを有するが、ヘッダのみから成るメッセージが最も重視され得る。Ｉｎｔｅｒｌａｋｅｎ  ７０６からＦｌａｓｈ  Ｃｏｎｔｒｏｌｌｅｒｓ  ８０２への「南行き」の方向において、読取り要求が書込みページを「上回る」ことが可能になる。北向きの方向において、書込み完了が読取りページを上回ることが可能になる。Ｆｌａｓｈ  Ｃｏｎｔｒｏｌｌｅｒへと向かうＦＩＦＯｓのみがＰｒｉｏｒｉｔｙ  ＦＩＦＯｓへと変更が必要となる。
【００６９】
Ｐｒｉｏｒｉｔｙ  ＦＩＦＯｓは、同時にヘッダおよびページにＩｎｔｅｒｌａｋｅｎインターフェース７０６への送信を準備させる。Ｉｎｔｅｒｌａｋｅｎインターフェース７０６が、ヘッダではなくＰａｇｅｓのためのフローコントローラである場合は、ヘッダは、読取りページの周囲をフローし得、故に、他に何も継続し得ない間に書込みを完了させる。この状態は、メモリ一貫性が維持されることを難しく、または不可能にし得る。
【００７０】
メモリコンテンツの一貫性を保証するために、優先性ベースのメカニズムが用いられ得る。図９に示される優先度ＦＩＦＯは、２つのＦＩＦＯから成り、大きな方はメモリ９００から組み立てられ、小さい方はロジック９０２から組み立てられる。入力側のｄｅ−ｍｕｘブロック９０４は、メッセージタイプをチェックし、該メッセージを適切な（短いまたは長い）ＦＩＦＯへと転送する。ＦＩＦＯの出力側において、簡素な優先度スキームを利用しているスケジューラ９０６は、どのＦＩＦＯがその（添付ページを有する）メッセージを次に送信するかを選択する。
【００７１】
一実施形態において、データパスインターフェースは、１２８データビットを有する通常の４ワイヤ（ＳＴＡＲＴ、ＥＮＤ、ＶＡＬＩＤ、ＲＥＡＤＹ）型インターフェースである。このインターフェースは，ＩｎｔｅｒｌａｋｅｎブロックおよびＦＩＦＯの両側に相互作用するために用いられ得る。これは、マルチプレクサへのトラフィックをもフロー制御するために用いられ得る。このインターフェースは、Ｍｅｍｏｒｙ  Ｃｏｎｔｒｏｌｌｅｒ内の全てのブロックのために用いられ得る。
【００７２】
図９の２つのＦＩＦＯ型は、４ワイヤ（ＳＴＡＲＴ、ＥＮＤ、ＶＡＬＩＤ、ＲＥＡＤＹ）型インターフェースを用い得るが、図２に示されるように、２つのＲｅａｄｙ信号が、ルートからどちらのキューを保持するかを選択するために用いられ得る。
【００７３】
Ｆｌａｓｈ  Ｃｏｎｔｒｏｌｌｅｒは、メモリコントローラの底部に接続し、１つのフラッシュチャネルを制御し、フラッシュデバイスの動作を制御する。図１０は、例証的なメモリおよびフラッシュコントローラのアーキテクチャを例示する。一実施形態において、各ＭＳＣは、３２のＦｌａｓｈ  Ｃｏｎｔｒｏｌｌｅｒを有する。各Ｆｌａｓｈ  Ｃｏｎｔｒｏｌｌｅｒは、１つの８ビットフラッシュチャネルと通信する。各フラッシュデバイスは、２つのチャネルを有し、各チャネル毎に４Ｌｏｇｉｃａｌ  Ｕｎｉｔｓ（ＬＵＮｓ）を有する。故に、各フラッシュコントローラは、それが通信するチャネル上の４ＬＵＮを制御する。
【００７４】
Ｌｅａｆ  Ｍｅｍｏｒｙ  Ｃｏｎｔｒｏｌｌｅｒは、Ｍｅｍｏｒｙ  Ｃｏｎｔｒｏｌｌｅｒ  ＦＩＦＯｓ１０００、１００２、１００４および１００６に接続する。この作業モデルにおいて、リーフは、「フラッシュ」メモリチップから作成される。書込みページは、Ｆｌａｓｈ  Ｃｏｎｔｒｏｌｌｅｒにたどり着いたときにＷｒｉｔｅ  Ｐａｇｅ  Ｂｕｆｆｅｒ  Ｍｅｍｏｒｙに記憶され、該データがフラッシュチャネルに送信される必要があるときには、Ｃｈａｎｎｅｌ  ＳｃｈｅｄｕｌｉｎｇおよびＣｏｎｔｒｏｌブロックによって読み出される。フラッシュから来る読取りページは、Ｒｅａｄ  Ｐａｇｅ  Ｂｕｆｆｅｒ  Ｍｅｍｏｒｙに記憶され、次いで適宜ＭＭＣ０またはＭＭＣ１に向かって送信される。
【００７５】
一実施形態において、Ｆｌａｓｈ  Ｃｏｎｔｒｏｌｌｅｒは、５つの主要部に分けられる。すなわち、ＣｏｍｍａｎｄおよびＰａｇｅ  Ｐａｒｓｅｒ１００８、ＬＵＮ  Ｃｏｎｔｒｏｌｌｅｒ  ＦＩＦＯ  １０１０、ＬＵＮ  Ｃｏｎｔｒｏｌｌｅｒ  １０１２、Ｃｈａｎｎｅｌ  ＳｃｈｅｄｕｌｉｎｇおよびＣｏｎｔｒｏｌ  １０１４、ならびにＤａｔａ  Ｐｒｏｔｅｃｔｉｏｎである。Ｆｌａｓｈ  Ｃｏｎｔｒｏｌｌｅｒへのコマンドは、本設計における多数の場所において解析され得る。これらには、Ｃｒｅｄｉｔ  Ｂａｓｅｄ  Ｆｌｏｗ  Ｃｏｎｔｒｏｌ、Ｃｏｍｍａｎｄ  Ｐａｒｓｅｒ、ＬＵＮ  Ｃｏｎｔｒｏｌｌｅｒ、Ｆｌａｓｈ  Ｃｏｎｔｒｏｌｌｅｒ上面のチャネルスケジューラおよびＤｅ−Ｍｕｘブロックを含み得る。Ｃｒｅｄｉｔ  Ｂａｓｅｄ  Ｆｌｏｗ  Ｃｏｎｔｒｏｌは、ＭＭＣからＣＲＥＤＩＴコマンドを受取り得る。これらのコマンドは、ＭＭＣからＭＳＣへのバッファ充足情報を運ぶためのみのノーオペレーション（ＮＯＰ）コマンドとして用いられる。Ｃｒｅｄｉｔ  Ｃｏｎｔｒｏｌｌｅｒは、データストリームからこれらのコマンドを除去する。そのブロックは、ＭＳＣ設計ページ上の主要ＭＳＣブロック図に示される。コマンドを解析する他の全てのブロックは、図１０に示されるＦｌａｓｈ  Ｃｏｎｔｒｏｌｌｅｒブロック図に示される。
【００７６】
図１１を参照して示されるように、Ｃｏｍｍａｎｄ  ＆  Ｐａｇｅ  Ｐａｒｓｅｒ  １００８は、特にＰａｇｅおよびＷｒｉｔｅコマンドを探す。Ｐａｇｅコマンドは、数多くの事を発生させる。最初に、バッファが書込みＰａｇｅ  Ｂｕｆｆｅｒ  Ｍｅｍｏｒｙ  １１０２から割り当てられ、そのバッファのアドレスが、アドレス指定されたＬＵＮに対するページキュー１１０４内に配置される。次いで、そのページの残りは、入力ＦＩＦＯ（例えば１０００）から割り当てられたメモリバッファへと移される。ＰＡＧＥコマンドは、次いでＣｏｍｍａｎｄ  Ｐａｒｓｅｒブロック１００８によってデータストリームから除去される。
【００７７】
Ｃｏｍｍａｎｄ  Ｐａｒｓｅｒブロック１００８は、状態マシンを用いて書込みコマンドをチェックし、もし、書込みの１ページコマンドが後に続く２ページが到着した場合は、エラーが存在する。その場合は、ＦＲＥＥ＿ＢＵＦＦＥＲコマンドがコマンドキューに挿入され、ＬＵＮコントローラは、バッファを、割り当てられて未使用のまま放置するのではなく、解放する。一旦正しい書込みコマンドが検出されると、該書込みコマンドは書込みキュー１１０６に配置される。他の全てのコマンドは、「その他」キュー１１０８に行く。ＦＲＥＥ＿ＢＵＦＦＥＲコマンドは、書込みキュー１１０６に行く。
【００７８】
ＬＵＮコントローラは、どのコマンドがフラッシュに向かうことになっており、どのコマンドを取り扱い得るかを知らなくてはならない。ＬＵＮコントローラは、ｗｒｉｔｅ＿ｅｒｒｏｒ、ｐｉｎｇおよびｆｒｅｅ＿ｂｕｆｆｅｒと直接的に取り扱い得る。他の全てのコマンドは、幾つかのフラッシュ相互作用を有し、チャネルスケジューラによって処理される。ＬＵＮコントローラは、書込みバッファメモリにおいて解放されているバッファおよび読取りバッファメモリからバッファ割当てを実行する。
【００７９】
チャネルスケジューラは、読取り、書込みおよび実行コマンドのためのオペコード（ｏｐｅｃｏｄｅ）を解析する。これらが主要なコマンドである。ＲＥＳＥＴ＿ＬＵＮおよびＲＥＳＥＴ＿ＭＳＣもまた、フラッシュデバイス上にてリセットＬＵＮ動作を行うとして理解されている。チャネルスケジューラは、フラッシュに対して適切な読取りおよび書込みコマンドを発し、バッファ間のデータを移動させる。完了したコマンドは、ＬＵＮコントローラによって、読取りコマンドのためのバッファアドレスと共に実行済キュー１１１０に移行される。
【００８０】
Ｄｅ−Ｍｕｘ１１１２は、完了したコマンドを適切なＭＭＣ  ＦＩＦＯに移行させる。オペコードも理解されなくてはならない。読取り完了は、ＬＵＮ  ＦＩＦＯにおいて平行なページアドレス情報を有する。Ｄｅ−Ｍｕｘ１１１２は、適切なＭＭＣへのフラッシュページの輸送のために、正しい形式のＰＡＧＥコマンドを生成する。
【００８１】
コマンドは、２つの群へと解析され、書込みキュー１１０６および他の全てのコマンドのためのキュー１１０８の２つのキュー上に配置される。全てのデータページは、Ｗｒｉｔｅ  Ｐａｇｅ  Ｂｕｆｆｅｒ  １１０２に配置され、バッファのアドレスはページキュー１１０４へと移行される。書込みを他のコマンドから分けることによって、読取りを書込みコマンドよりも優先させる。
【００８２】
戻り方向、すなわちフラッシュデバイスからＭＭＣへの方向において、応答のある全てのコマンドは、実行順に実行済キュー１１１２に配置される。あらゆるページデータ、すなわち読取りページは、Ｒｅａｄ  Ｐａｇｅ  Ｂｕｆｆｅｒ  １１１４に配置されたデータを有し、そのバッファのアドレスは、ページキュー１１０４に移行される。
【００８３】
ＬＵＮコントローラの一実施形態が図１２に示される。ＬＵＮコントローラは、直接的にＬＵＮ  ＦＩＦＯに接続する。ＬＵＮコントローラは、２つの主要なコマンド群を有する。即ち、Ｆｌａｓｈ  Ｄｅｖｉｃｅへと行くコマンドと、Ｆｌａｓｈ  Ｄｅｖｉｃｅへとは行かないコマンドである。例えば、ＰＩＮＧは、フラッシュデバイスへと行かないコマンドの一例である。ピングコマンドは、ＬＵＮコントローラにおいて十分に実行される。ＰＩＮＧコマンドは、コマンドスケジューラを介して入って来て、ＬＵＮ  ＦＩＦＯにおける実行済キュー１１１２へと直接的に送出される。ＷＲＩＴＥ＿＿ＥＲＲＯＲおよびＦＲＥＥ＿ＢＵＦＦＥＲもまた、ＬＵＮコントローラにおいて十分に取り扱われる。
【００８４】
他の全てのコマンドは、フラッシュデバイスと幾つかの相互作用を有する。
【００８５】
ＲＥＳＥＴ＿ＭＳＣコマンドは、読取りバッファメモリおよび書込みバッファメモリの両方における全てのバッファをリセットする。該コマンドはまた、進行中のあらゆるコマンドを停止させ、フラッシュデバイスにＲＥＳＥＴ＿ＬＵＮコマンドを発する。ＲＥＳＥＴ＿ＭＳＣコマンドは、他に進行中のコマンドが何もないときのみにスケジュールされるべきものである。
【００８６】
該して、ＬＵＮコントローラは、Ｃｈａｎｎｅｌスケジューリングコントローラにコマンドを「提示」する。これは、有効なコマンドを意味し、該コマンドは、オペコード、０、１または２のフラッシュアドレス、ならびに読取りおよび書込みバッファアドレスから成る。書込みの場合において、書込みアドレスに特定されたメモリ位置は、フラッシュアドレスにおけるフラッシュへの書込みに用いられる。読取りの場合には、フラッシュアドレスはページを読み取るために用いられ、該ページは、読取りアドレスによって特定されたバッファに書き込まれる。
【００８７】
チャネルスケジューラが該コマンドをフラッシュチャネルに移行し、結果を得るまで、ＬＵＮコントローラは、該読取り、書込みおよびフラッシュアドレスならびにオペコード（上記図の底部に示される）を保持する。コマンドの終わりに、フラッシュデバイスからのステータスは、ＬＵＮコントローラに移行され、該ＬＵＮコントローラは、ステータスビットを戻りメッセージに書込み、該コマンドを終了させる。一旦コマンドが完了すると、チャネルスケジューラは、幾つのバッファが開放されるべきか（書込みの場合）または幾つのバッファがいま割り当てられるべきか（読取りの場合）を示す。その後、コマンドスケジューラは、どのコマンドキューが読み込まれるべきかを選択し、次のコマンドが、フラッシュデバイスにおける実行のためにチャネルスケジューラに提示される。
【００８８】
図１３は、本発明の一実施形態に従って利用されるチャネルスケジューラおよび制御ブロックを例示する。チャネルスケジューラは、フラッシュデバイス初期化、コマンド要求の多重化、およびＬＵＮコントローラからのデータ転送のために構成される。一実施形態において、全てのコマンドおよびデータは、８ビットフラッシュチャネルを介してフラッシュデバイスに転送される。該初期化には、フラッシュデバイスへの最初のＲＥＳＥＴ＿ＬＵＮ指示、次いで同期転送モード（非同期モードにおいてフラッシュが現れる）を開始するコマンドを含む。ドライバ強度および他の初期化パラメータを設定する必要がある場合には、初期化ＲＯＭが、コマンドモードにおいてインターフェースを介してコマンドを方向付けるために用いられる。一旦４つ全てのＬＵＮが初期化されると、主要なコマンドポーリングループが開始される。概して、ＲＥＡＤ＿ＳＴＡＴＵＳ＿ＥＮＨＡＮＣＥＤコマンドが用いられることによって、ＬＵＮがアイドル状態かどうかが確認され、また、先にあったコマンドが完了しているかどうかが確認される。このコマンドはまた、副作用があり、特定のＬＵＮにアドレス指定したときに、他の全てのＬＵＮは、８ビットデータバスからデータを駆動させたりデータを読み取ったりすることができなくなる。
【００８９】
フラッシュデバイスにおけるＬＵＮがアイドル状態であり、コマンドが利用可能な場合には、該コマンドはＬＵＮに送られる。書込みの場合において、データはまた、チャネルを介してＬＵＮへと転送される。一旦コマンドが進行中となると、ＲＥＡＤ＿ＳＴＡＴＵＳ＿ＥＮＨＡＮＣＥＤコマンドと共に内部フラッシュＢＵＳＹステータスがポーリングされる。一旦コマンドが完了すると、該コマンドから戻ったステータスは、ＬＵＮコントローラに戻される。読取りコマンドの場合において、データは、チャネルを介してフラッシュデバイスから読み取られ、読取りページバッファメモリへと送られる。消去の場合において、フラッシュチャネルにはいかなるページデータも転送される必要がない。
【００９０】
３工程でＤａｔａ  Ｐｒｏｔｅｃｔｉｏｎが実行され得る。すなわち、元のデータに保護パリティビットを加えることと、データビットおよびパリティビットを処理し、エラーがあるかどうかを確認し（どのビットがエラーかを示すためにシンドロームが生成される）、（ある場合は）発見されたエラーを訂正することと、元のデータビットを回復させる。しばしば、最後の２つの工程はＦＩＦＯ周辺で組み合わされる。概して、データはブロックに分けられる。問題は、データの訂正にはデータブロックおよびどのビットを訂正するかについての情報が必要であり、「調整するビット」の情報が入手可能なときはしばしばブロックは「過ぎ去って」しまっているということである。これらのブロックが図１４に示される。特に、該図は、ビット１４００をチェックするブロック、ビット１４０２を調節するブロック、およびビット１４０４を追加するブロックを例示する。
【００９１】
Ａｄｄ  ＤＰ  Ｂｉｔｓブロック１４０４は、４キロバイトページをそれがＰａｇｅ  Ｐａｒｓｅｒによって書き込まれるときに受領し、５１２バイトのデータ毎に追加の１０４バイトを挿入する。ページが書き込まれるにつれて、各５１２バイトがパリティバイトを含み６１６バイトとなる。Ａｄｄ  ＤＰ  Ｂｉｔｓブロック１４０４がメモリに書込みをする必要があるときは、該ブロックはページの流れを一旦停止し、入力ＦＩＦＯを少し後退させ得る。故に、パリティビットの挿入がかなり分かりやすいものとなる。書込みページバッファにおけるフラッシュページは、ここで保護されており、フラッシュへと書き込まれ得る。
【００９２】
少し後にフラッシュからページが読み取られるときに、保護されたページはフラッシュから読み取られ、Ｃｈｅｃｋ  ＤＰ  Ｂｉｔｓブロックを介して移行される。このブロックは、読取りページバッファへと直接的にバイトを移行させるが、データバイトおよびパリティバイトを用いて各ブロックにおけるエラーが何かを示すシンドロームを生成する。シンドローム情報は、バッファアドレスと共に、ＬＵＮコントローラにおいて以前に特定されていないキューを介して移行される。
【００９３】
読取りページバッファからフラッシュページデータが読み取られるときは、シンドロームにおいて特定された訂正が６１６バイトブロックに適用され得、該ブロックは５１２バイトの訂正ブロックとしてＤｅ−Ｍｕｘブロック１４０６に書き込まれ得る。シンドロームが予期したものよりも非常に長い場合は、ＦＩＦＯが用いられ得る。
【００９４】
一実施形態において、フラッシュコントローラへの入力は、１６ビットのデータと共に４ワイヤハンドシェイクを含む。４ワイヤは、他の方向へと流れるｓｔａｒｔ＿ｂｉｔ、ｅｎｄ＿ｂｉｔ、ｖａｌｉｄおよびｒｅａｄｙである。フラッシュコントローラの底部は、実際のフラッシュデバイスに繋がっており、故にポート割当ては該デバイスのためのデータシートによって特定される。
【００９５】
Ｓｙｓｔｅｍ  Ｂａｓｅｂｏａｒｄ（ＳＢＢ）は、底部側の８つのコネクタを介してコンピュータ筐体における４つのＲｏｏｔ  Ｉｎｔｅｒｆａｃｅ  Ｂｏａｒｄｓ（ＲＩＢｓ）に装着される。４つのＭｅｍｏｒｙ  Ｍｏｄｕｌｅ  Ｂａｓｅｂｏａｒｄ（ＭＭＢＢ）カードは、ＳＢＢの上側にあるコネクタに差し込まれる。配電以外は、ＳＢＢは、コンピュータ筐体への接続を簡素化するための相互接続メカニズムなだけである。
【００９６】
Ｃａｒｒｉｅｒ  Ｃａｒｄは、１６のブランチのベースボードとしての役割を果たす。ルート毎に１つのキャリアカードがあり、システム毎に８つまでのキャリアカードがある。このボードは、適切なコネクタを介してキャリアカードに配電を提供する。冗長ホットプラグ可能なパワーサプライもまた、このボードにドッキングする。
【００９７】
ブランチカードは、フィールド交換可能ユニット（ＦＲＵ）となるように設計されている。ブランチカードは、単一のリーフコントローラおよび１６の固体デバイスから成る。６Ｕエンクロージャは、コンピュータ上の１９’’ラックに取り付けられ得る。パワーサプライおよびユニットを冷却するのに適したファンが、ＥＭＩシールディングとして含まれている。
【００９８】
２２０ＶＡＣまたは１１０ＶＡＣのいずれかで動作可能な市販の１２Ｖパワーサプライが該ユニットに電力を供給する。１２Ｖサプライレールが適切に分配され、必要なより低い電圧へと下方に調整されている。Ｌｏｃａｌ  Ｖｏｌｔａｇｅ  Ｒｅｇｕｌａｔｏｒｓ（ＶＲｓ）およびＬｏｗ−Ｄｒｏｐｏｕｔ  Ｒｅｇｕｌａｔｏｒｓ（ＬＤＯｓ）が該調整事項を提供する。
【００９９】
ユニットに電力供給するために１２Ｖを使用することによって、バッテリーバックアップ早期書込み終了（ＥＷＴ）のための最終的なサポートをより単純にする。Ｕｎｉｎｔｅｒｒｕｐｔｉｂｌｅ  Ｐｏｗｅｒ  Ｓｕｐｐｌｙ（ＵＰＳ）は、ＡＣ入力のレベルにおいて動作する。
【０１００】
メモリバッファ（例えば、Ｉｎｔｅｌ  ７５１０  Ｓｃａｌａｂｌｅ  Ｍｅｍｏｒｙ  Ｂｕｆｆｅｒ）は、ＪＥＳＤ８２−２０Ａに記載されるように、ＪＥＤＥＣ  Ｆｕｌｌｙ  Ｂｕｆｆｅｒｅｄ  Ｄｕａｌ  Ｉｎｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ（ＦＢＤＩＭＭ）  Ａｄｖａｎｃｅｄ  Ｍｅｍｏｒｙ  Ｂｕｆｆｅｒ（ＡＭＢ）に基づく。図１５は、それぞれが一対のＤＤＲ３  ＲＤＩＭＭを動作させる、２つの独立したＡＭＢ  １５００および１５０２としてのメモリバッファの論理ビューを示す。ＪＥＤＥＣ  ＡＭＢとは違って、Ｉｎｔｅｌ  ７５１０は、デイジーチェーンをサポートしない。故に、１つの７５１０チップが、ＳＭＩＢカード上の２つのＳＭＩバスのそれぞれに必要である。
【０１０１】
ブランチおよびリーフと組み合わされて、ルート複合体は、データのページのための分配ネットワークを作成し、該データのページは、リーフにおける固体メモリ（例えば、フラッシュメモリ）のページに書き込まれる。図１６は．．．を示すルート複合体の説明である。
【０１０２】
作業モデルのために作られたソフトウェアは、Ｌｉｎｕｘ（登録商標）ブロックデバイスドライバと、メモリモジュールシミュレータとを備える。シミュレーションおよびユニットテストフレームワークがＬｉｎｕｘ（登録商標）ブロックデバイスドライバおよびメモリモジュールシミュレータを実行させるために入手可能である。
【０１０３】
ソフトウェア構成要素は、典型的には、Ｂｕｓｉｎｅｓｓ  Ｉｎｔｅｌｌｉｇｅｎｃｅアプリケーション、不正行為検出アプリケーション、プログラム取引アプリケーション、または大型データセットを必要とし故に大型メモリを必要とする他のアプリケーションを含む。加えて、アプリケーションは、しばしばデータへのランダムアクセスならびに高読取り／書込み率を必要とする。これらアプリケーションは、オーナー／ユーザーが直接的に結果までの時間を利益に変換し得るタイプである。ソーシャルネットワーキング、大多数プレーヤーオンラインゲーミングおよびリアルタイムデータ検索などの、しばしばリアルタイムでの高速応答を必要とする他のアプリケーションは、大型メモリが処理中のデータを保持しなくてはならないという類似の必要条件を有する。
【０１０４】
理想的には、アプリケーションは、システムにおいて実行のための修正をほとんど、または全く必要としない。それにもかかわらず、システムのハードウェアおよびソフトウェア構成要素を活用するために、アプリケーションをチューニング／変換することによって、アプリケーションの有利な点が常に取得され得る。
【０１０５】
一またはそれ以上の実施形態において、データベースは、１００テラバイト以上にアプローチするデータセットを有するリレーショナルまたはオブジェクトデータベースである。これらデータセットは、ＤＲＡＭベースのメモリシステムを用いて費用効率良く処理され得ず、ディスクベースのシステムを用いても妥当な時間内には処理され得ない。マルチコア／マルチプロセッサ環境における実行のために設計されたデータベースは、これら環境をサポートするアルゴリズムおよびインターフェースを維持する。本発明は、これらインターフェースを大いに利用し得る。多くのメモリブロックに亘ってデータアクセスを分配する並列実行を提供するために、幾つかのデータベースは修正され得る。
【０１０６】
フラッシュ記憶装置ハードウェアは、該フラッシュ記憶装置ハードウェアの物理アドレスからオペレーティングシステムによって要求される論理データアドレスを分離する必要がある。少なくとも、オペレーティングシステムに提示されるデータアドレス空間は、フラッシュデバイスの物理アドレス空間から分離される。この再マッピングは、単一の記憶データページの粒度にて実行されなくてはならず、これは本システムのためには４０９６バイトのページとなる。良好ではないブロックの交換に対処したりウェアレベリングのためにブロックの並べ替えを実行するために、物理レベルにてフラッシュを再マッピングできることも有用である。そのような再マッピングは、ハードウェアにおいて対処され得るが、フラッシュブロック上での追加レベルでのアドレス変換を実行することによって再マッピングをソフトウェアにおいても実行することが可能である。そのようなブロックの並び替えは、消去ブロックレベルにおいて実行される。
【０１０７】
オペレーティングシステムにおいて見られるアドレス空間は、Ｄａｔａ  Ａｄｄｒｅｓｓ  Ｓｐａｃｅ（ＤＡＳ）と参照される。この空間のアドレスは、Ｄａｔａ  Ａｄｄｒｅｓｓ（ＤＡ）と呼ばれる。Ｄａｔａ  Ａｄｄｒｅｓｓのページ数部分は、Ｄａｔａ  Ｐａｇｅ  Ｎｕｍｂｅｒ（ＤＰＮ）である。
【０１０８】
フラッシュ記憶装置の仮想アドレス空間は、Ｆｌａｓｈ  Ｖｉｒｔｕａｌ  Ａｄｄｒｅｓｓ  Ｓｐａｃｅ（ＦＶＡＳ）と参照される。この空間のアドレスは、Ｆｌａｓｈ  Ｖｉｒｔｕａｌ  Ａｄｄｒｅｓｓ（ＦＶＡ）と呼ばれる。Ｆｌａｓｈ  Ｖｉｒｔｕａｌ  Ａｄｄｒｅｓｓのページ数部分は、Ｆｌａｓｈ  Ｖｉｒｔｕａｌ  Ｐａｇｅ  Ｎｕｍｂｅｒ（ＦＶＰＮ）である。
【０１０９】
最後に、フラッシュ記憶装置の物理アドレス空間は、Ｆｌａｓｈ  Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ  Ｓｐａｃｅ（ＦＰＡＳ）と参照される。この空間のアドレスは、Ｆｌａｓｈ  Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ（ＦＰＡ）と呼ばれる。Ｆｌａｓｈ  Ａｄｄｒｅｓｓのページ数部分は、Ｆｌａｓｈ  Ｐｈｙｓｉｃａｌ  Ｐａｇｅ  Ｎｕｍｂｅｒ（ＦＰＰＮ）である。ｘ８６において、既に周知の用語、Ｖｉｒｔｕａｌ  Ａｄｄｒｅｓｓ（ＶＡ）、Ｖｉｒｔｕａｌ  Ｐａｇｅ  Ｎｕｍｂｅｒ（ＶＰＮ）、Ｌｉｎｅａｒ  Ａｄｄｒｅｓｓ（ＬＡ）、Ｌｉｎｅａｒ  Ｐａｇｅ  Ｎｕｍｂｅｒ（ＬＰＮ）、Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ（ＰＡ）、およびＰｈｙｓｉｃａｌ  Ｐａｇｅ  Ｎｕｍｂｅｒ（ＰＰＮ）があることに留意されたい。同一の頭字語とｘ８６の用語との混乱を避けるため、論理アドレスや物理アドレスといった用語の使用は望まれない。故に、単にＶｉｒｔｕａｌまたはＰｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓと言及する代わりに、Ｆｌａｓｈ  ＶｉｒｔｕａｌまたはＦｌａｓｈ  Ｐｈｙｓｉｃａｌアドレスと参照することによって明確に曖昧さをなくす。Ｄａｔａ  Ａｄｄｒｅｓｓ  Ｓｐａｃｅ、Ｆｌａｓｈ  Ｖｉｒｔｕａｌ  Ａｄｄｒｅｓｓ  Ｓｐａｃｅ、およびＦｌａｓｈ  Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ間のマッピングが図１７に示される。
【０１１０】
並行にデータを提供することに関与するファームウェアは、サイズの異なり得る複数のデータブロック上において動作する。より小さなブロックは、より大きなブロックよりもより素早く提供される。ファームウェアは、ＡＳＩＣまたは他のハードウェアにおいて実行され得る。
【０１１１】
本発明の１つの実施形態は、様々なコンピュータ実行オペレーションを実行するためのコンピュータコードを有する非一時的コンピュータ読取可能記憶媒体を有する、コンピュータ記憶装置製品に関する。該媒体およびコンピュータコードは、本発明の目的のために特別に設計および作成されたものであり得、または、コンピュータソフトウェア技術における当業者に周知かつ利用可能な種であり得る。コンピュータ読取可能媒体の例としては、これらに限定されるものではないが、特定用途向け集積回路（「ＡＳＩＣ」）、プログラム可能論理デバイス（「ＰＬＤ」）ならびにＲＯＭおよびＲＡＭデバイスなどのプルグラムコードを記憶および実行するように特別に構成されたハードウェアデバイス、光磁気媒体、光媒体、および磁気媒体を含む。コンピュータコードの例としては、インタープリターを用いるコンピュータによって実行されるより高レベルのコードを含むファイル、およびコンパイラーによって提供されるものなどの、マシーンコードを含む。例えば、本発明の１つの実施形態は、ＪＡＶＡ（登録商標）、Ｃ＋＋または他のオブジェクト指向プログラミング言語および開発ツールを用いて実行され得る。本発明の別の実施形態は、マシン実行ソフトウェア命令の代わりに、またはそれと組み合わせて、ハードワイヤ回路において実行され得る。
【０１１２】
前述の記載は、本発明の完全な理解を提供するために特定の専門語を用いた。しかし、本発明を実施するためには特定の詳説を必要としないことが当業者には認識される。故に、本発明の特定の実施形態についての前述の記載は、例示および記載の目的で提示される。それらは、包括的であることも、開示された正確な形式のみに本発明を限定することも意図しない。明らかに、上記教示を考慮すると多くの修正および変化が可能である。本実施形態は、本発明の原理およびその実際の適用を最良に説明するために選択および記載された。故に、本実施形態は、熟考される特定の使用に適するように、当業者が本発明および様々な修正を含む様々な実施形態を最良に利用することを可能にする。以下の請求項はおよびその同等物は、本発明の範囲を規定することが意図される。
【図５】
2016514881.tif 000003
【図１】
2016514881.tif 000004
【図２】
2016514881.tif 000005
【図３】
2016514881.tif 000006
【図４】
2016514881.tif 000007
【図６】
2016514881.tif 000008
【図７】
2016514881.tif 000009
【図８】
2016514881.tif 000010
【図９】
2016514881.tif 000011
【図１０】
2016514881.tif 000012
【図１１】
2016514881.tif 000013
【図１２】
2016514881.tif 000014
【図１３】
2016514881.tif 000015
【図１４】
2016514881.tif 000016
【図１５】
2016514881.tif 000017
【図１６】
2016514881.tif 000018
【図１７】
2016514881.tif 000019
【手続補正書】
【提出日】平成27年11月20日(2015.11.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
システムであって、
中央処理装置の集合を備え、ここで、各中央処理装置は、少なくとも１つの他の中央処理装置と、少なくとも１０テラバイトの複数の固体メモリ資源へのルートパスとに接続されており、各中央処理装置は、メインメモリへ固体メモリコンテンツをスワッピングすることなく、直接的に複数の固体メモリ資源にアクセスする、システム。
【請求項２】
各中央処理装置は、他の中央処理装置によるアクセスを妨げることなく固体メモリ資源に独立してアクセスする、請求項１に記載のシステム。
【請求項３】
前記ルートパスは、メモリインターフェースおよびブランチインターフェースを有する少なくとも１つのルートを含み、該ブランチインターフェースは、個別のリーフインターフェースコントローラへのインターフェースを提供し、該ブランチインターフェースは、演算資源を有するように構成されることによって、個別固体メモリリーフにおけるデータサーチおよび該個別固体メモリリーフから検索したデータのデータ処理をコーディネートする、請求項１に記載のシステム。
【請求項４】
各個別リーフインターフェースコントローラは、演算資源を有するように構成されることによって、個別固体メモリリーフ内のデータ、および該個別固体メモリリーフからの検索されたデータのデータ処理をサーチする、請求項３に記載のシステム。
【請求項５】
中央処理装置の集合に結合した複数のルートプロセッサをさらに備え、該複数のルートプロセッサは、複数の独立固体メモリチャネルを利用して前記固体メモリ資源からデータのページを独立的に消去したり書き込んだりするように構成される、請求項１に記載のシステム。
【請求項６】
前記中央処理装置の集合は、複数のルートコントローラおよび複数のブランチコントローラの階層を介して固体メモリ資源に直接的にアクセスするように構成され、該ルートコントローラおよび該ブランチコントローラは、いかなる該中央処理装置からも指示を受けずに個別ルートコントローラおよび個別ブランチコントローラ間のデータを選択的に移動させるように構成される、請求項１に記載のシステム。
【請求項７】
リーフコントローラは、ルートコントローラまたはブランチコントローラからの要求に応答して複数のリーフ間のデータを独立的に移動させる、請求項６に記載のシステム。
【請求項８】
前記中央処理装置の集合は、複数のルートコントローラおよび複数のブランチコントローラの階層を介して固体メモリ資源に直接的にアクセスするように構成されており、該複数のルートコントローラおよび複数のブランチコントローラは、該固体メモリ資源に関連して並列処理を利用する、連鎖データ読取りのために構成される、請求項１に記載のシステム。
【請求項９】
前記複数のルートコントローラは、個別の複数リーフに対する複数のブランチ接続を利用し一連の読取り要求を分配することによって、各個別読取りが異なるリーフに方向付けられる、請求項８に記載のシステム。
【請求項１０】
前記複数のブランチコントローラは、一連の読取り要求を分配することによって、各読取りが異なるリーフに方向付けられる、請求項８に記載のシステム。
【請求項１１】
前記中央処理装置の集合は、複数のルートコントローラおよび複数のブランチコントローラの階層を介して固体メモリ資源に直接的にアクセスするように構成され、該ルートコントローラおよび該ブランチコントローラは、該固体メモリ資源への分配されたデータ書込みにより該固体メモリ資源からの後続のデータ読取りにおける並列処理を容易にするように構成されている、請求項１に記載のシステム。
【請求項１２】
前記中央処理装置の集合に接続されたルートプロセッサの集合をさらに備え、
複数の資源プールへの前記固体メモリ資源をまとめることと、
各資源プールに対する消去カウントを維持することと、
世代的ガベージコレクタープロトコルを実行することであって、資源プールの該割り当てられた世代は該資源プールに対する該消去カウントに基づいて定期的に変更されることと
を行うように構成されている、請求項１に記載のシステム。
【請求項１３】
前記ルートプロセッサの集合は、前記資源プールの前記割り当てられた世代を利用することにより前記固体メモリ資源への通信チャネルに亘る通信量の平衡を保つように構成されている、請求項１２に記載のシステム。
【請求項１４】
移動ウィンドウ前方エラー訂正コードアキュムレーターをさらに備え、該移動ウィンドウ前方エラー訂正コードアキュムレーターは、到着するデータシンボルを以前に蓄積された複数のデータ訂正コードに漸増的に追加し、以前に蓄積された１つのデータ訂正コードを除去するように構成される、請求項１に記載のシステム。
【請求項１５】
前記集合の中央処理装置は、
内部メモリ資源に読取りコマンドを発することと、
前記固体メモリ資源からデータを要求することと、
該固体メモリ資源から前記内部メモリ資源内で割り当てられた資源のコマンドを受信することと、
該割り当てられた資源に該データを満たすことと
を行うように構成されている、請求項１に記載のシステム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００４
【補正方法】変更
【補正の内容】
【０００４】
システムは、中央処理装置の集合を含み、各中央処理装置は、少なくとも１つの他の中央処理装置と、少なくとも１０テラバイトの固体メモリ資源へのルートパス（ｒｏｏｔ  ｐａｔｈ）とに接続されている。各中央処理装置は、メインメモリへ固体メモリコンテンツをスワッピングすることなく、直接的に固体メモリ資源にアクセスする。
本明細書は、例えば、以下を提供する。
（項目１）
システムであって、
中央処理装置の集合を備え、ここで、各中央処理装置は、少なくとも１つの他の中央処理装置と、少なくとも１０テラバイトの複数の固体メモリ資源へのルートパスとに接続されており、各中央処理装置は、メインメモリへ固体メモリコンテンツをスワッピングすることなく、直接的に複数の固体メモリ資源にアクセスする、システム。
（項目２）
各中央処理装置は、他の中央処理装置によるアクセスを妨げることなく固体メモリ資源に独立してアクセスする、項目１に記載のシステム。
（項目３）
上記ルートパスは、メモリインターフェースおよびブランチインターフェースを有する少なくとも１つのルートを含み、該ブランチインターフェースは、個別のリーフインターフェースコントローラへのインターフェースを提供し、該ブランチインターフェースは、演算資源を有するように構成されることによって、個別固体メモリリーフにおけるデータサーチおよび該個別固体メモリリーフから検索したデータのデータ処理をコーディネートする、項目１に記載のシステム。
（項目４）
各個別リーフインターフェースコントローラは、演算資源を有するように構成されることによって、個別固体メモリリーフ内のデータ、および該個別固体メモリリーフからの検索されたデータのデータ処理をサーチする、項目３に記載のシステム。
（項目５）
中央処理装置の集合に結合した複数のルートプロセッサをさらに備え、該複数のルートプロセッサは、複数の独立固体メモリチャネルを利用して上記固体メモリ資源からデータのページを独立的に消去したり書き込んだりするように構成される、項目１に記載のシステム。
（項目６）
上記中央処理装置の集合は、複数のルートコントローラおよび複数のブランチコントローラの階層を介して固体メモリ資源に直接的にアクセスするように構成され、該ルートコントローラおよび該ブランチコントローラは、いかなる該中央処理装置からも指示を受けずに個別ルートコントローラおよび個別ブランチコントローラ間のデータを選択的に移動させるように構成される、項目１に記載のシステム。
（項目７）
リーフコントローラは、ルートコントローラまたはブランチコントローラからの要求に応答して複数のリーフ間のデータを独立的に移動させる、項目６に記載のシステム。
（項目８）
上記中央処理装置の集合は、複数のルートコントローラおよび複数のブランチコントローラの階層を介して固体メモリ資源に直接的にアクセスするように構成されており、該複数のルートコントローラおよび複数のブランチコントローラは、該固体メモリ資源に関連して並列処理を利用する、連鎖データ読取りのために構成される、項目１に記載のシステム。
（項目９）
上記複数のルートコントローラは、個別の複数リーフに対する複数のブランチ接続を利用し一連の読取り要求を分配することによって、各個別読取りが異なるリーフに方向付けられる、項目８に記載のシステム。
（項目１０）
上記複数のブランチコントローラは、一連の読取り要求を分配することによって、各読取りが異なるリーフに方向付けられる、項目８に記載のシステム。
（項目１１）
上記中央処理装置の集合は、複数のルートコントローラおよび複数のブランチコントローラの階層を介して固体メモリ資源に直接的にアクセスするように構成され、該ルートコントローラおよび該ブランチコントローラは、該固体メモリ資源への分配されたデータ書込みにより該固体メモリ資源からの後続のデータ読取りにおける並列処理を容易にするように構成されている、項目１に記載のシステム。
（項目１２）
上記中央処理装置の集合に接続されたルートプロセッサの集合をさらに備え、
複数の資源プールへの上記固体メモリ資源をまとめることと、
各資源プールに対する消去カウントを維持することと、
世代的ガベージコレクタープロトコルを実行することであって、資源プールの該割り当てられた世代は該資源プールに対する該消去カウントに基づいて定期的に変更されることとを行うように構成されている、項目１に記載のシステム。
（項目１３）
上記ルートプロセッサの集合は、上記資源プールの上記割り当てられた世代を利用することにより上記固体メモリ資源への通信チャネルに亘る通信量の平衡を保つように構成されている、項目１２に記載のシステム。
（項目１４）
移動ウィンドウ前方エラー訂正コードアキュムレーターをさらに備え、該移動ウィンドウ前方エラー訂正コードアキュムレーターは、到着するデータシンボルを以前に蓄積された複数のデータ訂正コードに漸増的に追加し、以前に蓄積された１つのデータ訂正コードを除去するように構成される、項目１に記載のシステム。
（項目１５）
上記中央処理装置の集合は、データ区分の主要ホストが利用不可能であると決定し、かつ冗長ホストから該データ区分を回収することによって固体メモリ資源に直接的にアクセスするように構成される、項目１に記載のシステム。
（項目１６）
上記データ区分は、上記冗長ホストから回収されたデータ保護コードから、単一の中央処理装置によって再構築される、項目１５に記載のシステム。
（項目１７）
上記データ区分は、上記冗長ホストから回収されたデータ保護コードから、単一のルートプロセッサによって再構築される、項目１５に記載のシステム。
（項目１８）
上記データ区分は、上記冗長ホストから回収されたデータ保護コードから、単一のブランチプロセッサによって再構築される、項目１５に記載のシステム。
（項目１９）
上記データ区分は、上記冗長ホストから回収されたデータ保護コードから、単一のリーフプロセッサによって再構築される、項目１５に記載のシステム。
（項目２０）
上記集合の中央処理装置は、
内部メモリ資源に読取りコマンドを発することと、
上記固体メモリ資源からデータを要求することと、
該固体メモリ資源から上記内部メモリ資源内で割り当てられた資源のコマンドを受信することと、
該割り当てられた資源に該データを満たすこととを行うように構成されている、項目１に記載のシステム。
（項目２１）
上記中央処理装置のネットワークは、ハードウェアにおける小さなビットエラーを訂正するように構成された複数のリーフコントローラおよび複数のブランチコントローラの階層を介して固体メモリ資源に直接的にアクセスするように構成しており、該中央処理装置は、大きなビットエラーを訂正するようソフトウェアを実行するように構成されている、項目１に記載のシステム。
【国際調査報告】
2016514881.tif 000020