(57)【特許請求の範囲】
【請求項１】
コントローラにより制御される不揮発性メモリ・アレイを含むデータ・ストレージ・システムを動作させる方法であって、
帯域幅最適化符号語で、アクセス頻度が第１のアクセス・レベルを上回る第１のデータを前記不揮発性メモリ・アレイ内に格納することと、
符号化率最適化符号語で、アクセス頻度が第２のアクセス・レベルを下回る第２のデータを前記不揮発性メモリ・アレイ内に格納することと、
を含む方法。
【請求項２】
前記第１のデータについての前記アクセス頻度を求めることと、
前記第２のデータについての前記アクセス頻度を求めることと、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記帯域幅最適化符号語は、前記符号化率最適化符号語より小さいコンテナ内に格納される、請求項１に記載の方法。
【請求項４】
前記帯域幅最適化符号語及び前記符号化率最適化符号語は、前記不揮発性メモリ・アレイ内に格納されるとき、パディングを含まない、請求項３に記載の方法。
【請求項５】
前記不揮発性メモリ・アレイは、ＮＡＮＤフラッシュ・メモリ・アレイである、請求項１に記載の方法。
【請求項６】
前記帯域幅最適化符号語は、４分の１ページ・コンテナ又は２分の１ページ・コンテナ内に格納され、前記符号化率最適化符号語は、１ページ・コンテナ内に格納される、請求項１に記載の方法。
【請求項７】
ターボ製品コードを用いて、前記帯域幅最適化符号語及び前記符号化率最適化符号語を生成することをさらに含み、前記第１のアクセス・レベル及び前記第２のアクセス・レベルは同じ値に対応する、請求項１に記載の方法。
【請求項８】
不揮発性メモリ・アレイに結合されたコントローラを含み、前記コントローラは、
帯域幅最適化符号語で、アクセス頻度が第１のアクセス・レベルを上回る第１のデータを前記不揮発性メモリ・アレイ内に格納し、
符号化率最適化符号語で、アクセス頻度が第２のアクセス・レベルを下回る第２のデータを前記不揮発性メモリ・アレイ内に格納する、
ように構成される、データ・ストレージ・システム。
【請求項９】
前記コントローラは、
前記第１のデータについての前記アクセス頻度を求め、
前記第２のデータについての前記アクセス頻度を求める、
ようにさらに構成される、請求項８に記載のデータ・ストレージ・システム。
【請求項１０】
前記帯域幅最適化符号語は、前記符号化率最適化符号語より小さいコンテナ内に格納される、請求項８に記載のデータ・ストレージ・システム。
【請求項１１】
前記帯域幅最適化符号語及び前記符号化率最適化符号語は、前記不揮発性メモリ・アレイ内に格納されるとき、パディングを含まない、請求項１０に記載のデータ・ストレージ・システム。
【請求項１２】
前記不揮発性メモリ・アレイは、ＮＡＮＤフラッシュ・メモリ・アレイである、請求項８に記載のデータ・ストレージ・システム。
【請求項１３】
前記帯域幅最適化符号語は、４分の１ページ・コンテナ又は２分の１ページ・コンテナ内に格納され、前記符号化率最適化符号語は、１ページ・コンテナ内に格納される、請求項８に記載のデータ・ストレージ・システム。
【請求項１４】
ターボ製品コードを用いて、前記帯域幅最適化符号語及び前記符号化率最適化符号語を生成することをさらに含み、前記第１のアクセス・レベル及び前記第２のアクセス・レベルは同じ値に対応する、請求項８に記載のデータ・ストレージ・システム。
【請求項１５】
不揮発性メモリ・アレイを含むデータ・ストレージ・システムのためのプログラムであって、
前記データ・ストレージ・システムのコントローラにより実行されたとき、前記データ・ストレージ・システムに、
帯域幅最適化符号語で、アクセス頻度が第１のアクセス・レベルを上回る第１のデータを前記不揮発性メモリ・アレイ内に格納することと、
符号化率最適化符号語で、アクセス頻度が第２のアクセス・レベルを下回る第２のデータを前記不揮発性メモリ・アレイ内に格納することと、
前記システムに実行させる、前記ストレージ・デバイス内に格納されるプログラム・コードを含む、プログラム。
【請求項１６】
前記プログラム・コードは、前記コントローラにより実行されたとき、前記データ・ストレージ・システムに、
前記第１のデータについての前記アクセス頻度を求めることと、
前記第２のデータについての前記アクセス頻度を求めることと、
をさらに実行させる、請求項１５に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ・アクセス頻度に基づき、データを不揮発性メモリ内に格納することに関し、より具体的には、データ・アクセス頻度に基づき、帯域幅最適化符号語（bandwidth optimized code word）又は符号化率最適化符号語（codingrate optimized code word）で、データを不揮発性メモリ内に格納することに関する。
【背景技術】
【０００２】
フラッシュメモリ（又は、単にフラッシュ）は、トランジスタの浮遊ゲート上の電荷としてメモリセルごとに１つ又は複数のデータ・ビットを格納する不揮発性メモリ技術である。次の世代のフラッシュ技術において、セル密度及びフラッシュ内のセルごとに格納されるビットの数が増大し続けるにつれて、メモリセル内に格納されるデータは、読み出しディスターブ（read disturb）、高い周囲温度、長いストレージ期間、及び他の要因によって引き起こされるビット誤り（bit error）に脆弱になる。その結果、ストレージ密度及びデータの単位当たりのコストが改善している間でも、一般に、フラッシュメモリ・デバイスを評価する読み出し／書き取りサイクルの数は、低下している。
【０００３】
デジタル伝送及びストレージにおいて、データが誤りを含むものとして検出され、データが訂正又は廃棄されることがある。特定のビットが、何らかの誤り訂正（error correction）を行う前に、誤っているとして検出される可能性は、生のビット誤り率（raw bit error rate、ＲＢＥＲ）として知られる。訂正不能ビット誤り率（uncorrectederror rate、ＵＢＥＲ）は、デジタル伝送及びストレージにおける別の品質メトリックである。ＵＢＥＲは、何らかの誤り訂正を行った後に、所定のビットが誤っている可能性を特徴付ける。誤り訂正符号（ＥＣＣ）は（通常、冗長情報を元のデータに付加することにより）格納された又は伝送されたデータを修正し、データの受信又は取得後に誤りを訂正することができる。ＥＣＣメモリは、例えば、一般的に、データの破損を許容できないデータ処理システム（例えば、科学又は金融コンピューティング）で用いることができる。例えば、フラッシュメモリ・コントローラはＥＣＣを実装し、ハードディスク・ドライブ（ＨＤＤ）の代わりに使用される、フラッシュ・ドライブなどのソリッド・ステート・ドライブ（ＳＤＦ）で用いることができる。
【０００４】
フラッシュの設計のため、フラッシュメモリ・デバイスのデータは、直接上書きすることができない（直接上書きすることができるＨＤＤ上のデータとは対照的に）。データがフラッシュに最初に書き込まれると、フラッシュのメモリセルは全て、消去された状態で開始し、データは通常、ページ単位（例えば、１６キロバイト（ｋＢ）ページ）でメモリセルに書き込まれる。一般に、フラッシュ・ドライブのフラッシュ・コントローラは、フラッシュを管理し、フラッシュ変換層（ＦＴＬ）により与えられる論理・物理マッピング・システム（論理ブロック・アドレッシング（ＬＢＡ）として一般に知られる）を用いて、ホスト・システムとインターフェース接続する。メモリセルに既に書き込まれた古いデータと置き換えるために、フラッシュ・コントローラにより新しいデータが受信されると、フラッシュ・コントローラは、新しいデータを新しい物理位置に書き込み、新しい物理位置を指し示すように論理マッピングを更新する。この場合、古い物理位置内のデータはもはや有効ではなく、データを古い物理位置に再び書き込む前に、消去する必要がある。周知のように、フラッシュは、フラッシュの寿命にわたって、限られた回数（最大プログラム／消去（Ｐ／Ｅ）サイクル数とも呼ばれる）しか、プログラム及び消去することができない。一般に、シングル・レベル・セル（single-level cell、ＳＬＣ）フラッシュは、より高い性能及びより長い持続時間用に設計され、典型的には、５０，０００サイクルから１００，０００サイクルまでの間動作することができる。ＳＬＣフラッシュと対照的に、マルチ・レベル・セル（multi-level cell、ＭＬＣ）フラッシュは、より低コストの用途用に設計され、低減したＰ／Ｅサイクル・カウントを有する（すなわち、ＭＬＣフラッシュについてのＰ／Ｅサイクル・カウントは、一般的に、３，０００Ｐ／Ｅサイクルから５，０００Ｐ／Ｅサイクルまでの間である）。
【０００５】
周知のように、書き込み増幅（write amplification、ＷＡ）は、実際の書き込まれた物理情報量が、書き込むことを意図した論理量の倍数となる、不揮発性メモリ（例えば、フラッシュ）と関連した望ましくない現象である。フラッシュは、フラッシュに再書き込みできる前に消去されるように設計されているので、書き込み操作を行うためのプロセスにより、ユーザデータ及びメタデータは２回以上移動される（又は、再書き込みされる）ことになる。この増倍効果は、フラッシュの寿命にわたって必要とされる書き込み回数を増加させ、そのことは、フラッシュが確実に動作できる期間を短くする。書き込み回数の増加はまた、フラッシュに対する帯域幅を消費し、そのことは、フラッシュのランダム書き込み性能を低下させる。一般に、ＷＡが小さいとデータをフラッシュに書き込むためのＰ／Ｅサイクル数が低減し、従って、フラッシュ・ドライブの寿命が増大するので、フラッシュのＷＡが小さいことが望ましい。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本開示は、一般に、コントローラにより制御される不揮発性メモリ・アレイを含むデータ・ストレージ・システムを動作させるための技術に向けられる。
【課題を解決するための手段】
【０００７】
この技術は、帯域幅最適化符号語で、アクセス頻度が第１のアクセス・レベルを上回る第１のデータを不揮発性メモリ・アレイ内に格納することを含む。アクセス頻度が第２のアクセス・レベルを下回る第２のデータは、符号化率最適化符号語で、不揮発性メモリ・アレイ内に格納される。１つ又は複数の実施形態において、第１及び第２のアクセス・レベルは同じとすることができる。
【図面の簡単な説明】
【０００８】
【図１】本開示の１つの実施形態に従って構成されたデータ処理環境の高レベル・ブロック図である。
【図２】本開示の１つの実施形態による、ＮＡＮＤフラッシュ・メモリ・アレイ内の物理メモリの例示的構成を示す。
【図３】本開示の１つの実施形態による、ＮＡＮＤフラッシュ・メモリ・アレイ内の物理メモリの例示的構成を示す。
【図４】本開示の１つの実施形態による、ＮＡＮＤフラッシュ・メモリ・アレイ内の物理メモリの例示的構成を示す。
【図５】本開示の１つの実施形態による、ＮＡＮＤフラッシュ・メモリ・アレイ内の物理メモリの例示的構成を示す。
【図６】本開示の実施形態による、ページ・ストライプの例示的実装を示す。
【図７】本開示の１つの実施形態による例示的データ・ページを示す。
【図８】本開示の１つの実施形態による例示的データ保護ページを示す。
【図９】１つの２分の１ページ・コンテナ及び２つの４分の１ページ・コンテナを含む、本開示の１つの実施形態に従って構成された、不揮発性メモリ・アレイに書き込まれる例示的ページを示す。
【図１０】４つの４分の１ページ・コンテナを含む、本開示の１つの実施形態に従って構成された、不揮発性メモリ・アレイに書き込まれる別の例示的ページを示す。
【図１１】アクセス頻度又はアクセス履歴に基づいて、データ・ペイロードに対するコンテナ・サイズを選択するための、例えばフラッシュ・コントローラにより実行される、例示的プロセスのフローチャートを示す。
【発明を実施するための形態】
【０００９】
当業者であれば理解するように、本発明の態様は、システム、方法又はコンピュータ・プログラム製品として具体化することができる。従って、本発明の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコード等を含む）、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形態をとることができ、本明細書においては、これらは全て、一般的に「回路」、「モジュール」又は「システム」と呼ぶことがある。さらに、本発明の態様は、媒体内に具体化されたコンピュータ可読プログラム・コードを有する、１つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータ・プログラム製品の形態をとることができる。
【００１０】
１つ又は複数のコンピュータ可読媒体のいずれかの組み合わせを用いることもできる。コンピュータ可読媒体は、コンピュータ可読信号媒体又はコンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子、磁気、光学、電磁気、赤外線若しくは半導体のシステム、装置若しくはデバイス、又は上記のもののいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例（非網羅的なリスト）として、以下のもの、即ち、１つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能なプログラム可能読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク型読み出し専用メモリ（ＣＤ−ＲＯＭ）、光記憶装置、磁気記憶装置、又は上記のもののいずれかの適切な組み合わせが挙げられる。本明細書の文脈においては、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって又はそれらと関連して用いるためのプログラムを収容又は格納することが可能な任意の有形媒体とすることができる。
【００１１】
コンピュータ可読信号媒体は、例えばベースバンド内に、又は搬送波の一部として、具体化されたコンピュータ可読プログラム・コードをその中に有する、伝搬されるデータ信号を含むことができる。このような伝搬信号は、これらに限定されるものではないが、電磁気、光又はそれらのいずれかの適切な組み合わせを含む、種々の形態のいずれかを取ることができる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、かつ、命令実行システム、装置若しくはデバイスによって、又はこれらと関連して用いるためのプログラムを伝達し、伝搬し、又は搬送することができる任意のコンピュータ可読媒体とすることができる。
【００１２】
コンピュータ可読媒体上に具体化されたプログラム・コードは、これらに限定されるものではないが、無線、有線、光ファイバ・ケーブル、無線周波数等、又は上記のもののいずれかの適切な組み合わせを含む任意の適切な媒体を用いて伝送することができる。
【００１３】
本発明の態様の動作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのようなオブジェクト指向型プログラミング言語、及び、「Ｃ」プログラミング言語又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、１つ又は複数のプログラミング言語の任意の組み合わせで記述することができる。プログラム・コードは、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。後者のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある（例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて）。
【００１４】
本発明の態様は、本発明の実施形態による方法、装置（システム）及びコンピュータ・プログラム製品のフローチャート図及び／又はブロック図を参照して説明される。フローチャート図及び／又はブロック図の各ブロック、並びにフローチャート図及び／又はブロック図におけるブロックの組み合わせは、コンピュータ・プログラム命令によって実装できることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えて、マシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装するための手段を作り出すようにすることができる。
【００１５】
これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装する命令を含む製品を製造するようにもすることができる。
【００１６】
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他の装置上にロードして、そのコンピュータ、他のプログラム可能データ処理装置、又は他の装置上で行われる一連の動作ステップによりコンピュータ実装プロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装するためのプロセスを提供することもできる。
【００１７】
ターボ製品符号（ＴＰＣ）は、例えば、携帯電話、衛生通信、無線通信及びテープ媒体などの種々の用途で使用されている１つのクラスの誤り訂正符号（ＥＣＣ）である。一般に、ＴＰＣは、比較的高い符号化率を有し、雑音環境においてうまく機能し、特定用途向け集積回路（ＡＳＩＣ）及びフィールド・プログラマブル・ゲート・アレイ（データ・ストレージ・システム１２０）内に容易に実装することができる。ＴＰＣは、本質的に反復型であり、比較的高い生のビット誤り率（ＲＢＥＲ）を確実に訂正することができ、一般に、比較的高い符号化率は、ＴＰＣを騒音環境にとって理想的なものにする。例えば、ＴＰＣは、例えばＮＡＮＤフラッシュ・メモリ（又は、単にＮＡＮＤフラッシュ）などの、種々のタイプの不揮発性ストレージ・デバイスと共に有利に用いることができる。
【００１８】
一般に、ＴＰＣは、不揮発性ストレージ・デバイス（例えば、フラッシュを含むソリッド・ステート・デバイス（ＳＳＤ）など）で使用し、２パーセントまでのＲＢＥＲを訂正することができ、このように、不揮発性ストレージ・デバイスが経済的であり、企業アプリケーションにおいて信頼できる時点まで不揮発性ストレージ・デバイスの平均寿命を延ばす際の重要なツールとして用いることができる。ＴＰＣ語が比較的長い場合、ＴＰＣは特に、ＲＢＥＲを低減させるのに長けている。例えば、４００列及び３５２行のマトリックスを有するＴＰＣは、各行及び各列における３ビット及びパリティ・ビットを訂正して、誤り訂正を最小にすることを可能にする。１５，０６６バイトのデータ・ペイロードを有する１７，６００バイト符号語の場合、符号化率（データ・ペイロードを総バイト量（すなわち、データ・ペイロードにオーバーヘッド・チェック情報を加えたもの）で割ったもの）は、約８５．６パーセントである。この場合、（１７，６００バイト符号語内に）格納される情報の約１４．４パーセントは、オーバーヘッド・チェック及び訂正情報であり、１７，６００バイト符号語の８５．６％は、データ・ペイロード（例えば、顧客データ））である。４００列及び３５２行のマトリックスを有するＴＰＣは、約１．０９％までＲＢＥＲを確実に訂正することができる。４００列及び３５２行のマトリックスを有するＴＰＣ（例えば、３７２列及び３２４行のデータ・ペイロード）は、一行の３ビット及び一列の３ビットを訂正することができるとき、３×３のチェック強度を有すると言われる。開示される技術は、異なるマトリックス・サイズにも、及びこれに対応して異なるチェック強度にも適用可能であることを理解されたい、さらに、開示される技術は、ＴＰＣ以外のＥＣＣを用いて生成される符号語にも適用可能であることも考えられる。
【００１９】
４００列及び３５２行のマトリックスを有するＴＰＣは比較的強力であるが、例えばフラッシュ（ＮＡＮＤフラッシュ）を含むソリッド・ステート・デバイス（ＳＳＤ）などのこうしたＴＰＣを不揮発性ストレージ・デバイス内に配備することにより、比較的大きい符号語がもたらされる。例えば、フラッシュを配備するデータ・ストレージ・システムにおける４キロバイト（ｋＢ）又は４０９６バイトのホスト要求データサイズについては、フラッシュと関連したストレージ・バスにおいて比較的大きい読み出し増幅が生じる。この例において、４０９６バイトの読み出しでは、要求される４０９６バイトを戻す前に、１つ又は２つの完全な１７６００バイト符号語を読み出し、デコードを行うことが必要である。後者の場合、２つの完全符号語の読み出しは、要求されるデータが２つの符号語にまたがるときに生じる。平均して、１７６００バイトの長さを有する符号語からの４０９６バイトの読み出しにより、５より多い平均読み出し増幅がもたらされる。つまり、５の計算された読み出し増幅及び毎秒２００ｋ  ４ｋＢの入力／出力（Ｉ／Ｏ）操作（ＩＯＰ）の所望の読み出しスループットを有する１７，６００バイト符号語の場合、フラッシュ・コントローラは、４ＧＢ／秒より多いデータを読み出して、およそ８００ＭＢ／秒のデータをホストに戻すことが必要とされる。フラッシュ・コントローラが４ＧＢ／秒より多いデータを読み出して、８００ＭＢ／秒のデータをホストに戻すことを必要とすることは、無駄な帯域幅及び比較的高い電力損をもたらす。
【００２０】
無駄な帯域幅を最小にする１つの解決法は、より短いＴＰＣ語を用いることである。しかしながら、３×３のチェック強度を有する１つの４ｋＢページを保持するＴＰＣ語は、（およそ４つの４ｋＢページを有する場合と比較して）比較的低い符号化率（例えば、７０パーセントから８０パーセントまでの間）を有する。こうした符号は比較的強力であり、比較的高いＲＢＥＲを処理することができるが、フラッシュ・コントローラに対してこうしたＥＣＣスキームを用いることは、比較的多数のＮＡＮＤビットを訂正専用にすることを必要とし、結果として得られるフラッシュ・ドライブは、恐らく、コストの観点からすると競争力が高くない。この問題に対処するために、可変強度ＥＣＣを用いる設計が提案されている。可変強度ＥＣＣを用いる設計においては、ＲＢＥＲの増加に応答して、設計は、低レベルＥＣＣからより強力な高レベルＥＣＣに切り換わる。残念なことに、ＮＡＮＤフラッシュにおける低レベルＥＣＣからより強力な高レベルＥＣＣへの変更は、関連したデバイスが古くなるにつれて、ＥＣＣがより多くのＮＡＮＤフラッシュ・ビットを消費することを意味する。フラッシュ内のビット誤りの分布によっては、関連したデバイスが古くなるにつれて付加的なＮＡＮＤフラッシュ・ビットを消費するＥＣＣが許容可能である場合がある。
【００２１】
本開示の１つの態様によると、入ってくるワークロードを分離し、より頻繁にアクセスされるデータ（すなわち、ホット・データ）をより小さいコンテナ・サイズ（container size）に割り当て、（たとえ低減した符号化率でも）無駄な帯域幅を最小にする技術が開示される。あまり頻繁にアクセスされない・データ（すなわち、コールド・データ）又は一般的に連続的にアクセスされるパターンでアクセスされるデータは、大きなコンテナ内に格納されるので、（たとえより高い帯域幅要件でも）関連した符号化率は、より効率的なフラッシュの使用をもたらす。データに比較的少ししかアクセスされないと仮定して、符号化率を増大させるためにより大きいコンテナを用いることは望ましい。本開示の態様によると、効率を向上させるために同じ内部アレイを用いて（その結果、１つのＴＰＣエンジンしか必要とされない）、異なるＥＣＣ機構を実装することができる。
【００２２】
例えば、１７，６００バイトまで保持することができる（１５，０６６バイトの最大データ・ペイロード及び２，５３４バイトのチェック及び訂正情報を有する）ＴＰＣエンジン及びマトリックスを生成することができる。次に、１バイトから、１５，０６６バイト（符号語をエンコード／デコードするのに必要に応じてゼロをパディングする）のデータ・ペイロード及び２，５３４バイトのチェック情報までを含むコンテナを定めることができる。１つの実施形態において、訂正は、３つの異なるコンテナ・サイズに対して行われ、付加的な作業は必要とされない（エンコード／デコードの前に、全てのコンテナが未使用のデータ・バイトをゼロでパディングするので）。例えば、４，４００バイトを含む４分の１ページ（one-quarter page）コンテナ、８，８００バイトを含む２分の１ページ（one-halfpage）コンテナ、及び１７，６００バイトを含む１ページ（one page）コンテナを定めることができる。
【００２３】
４分の１ページ・コンテナは、１，８６６バイトまでのデータ・ペイロードと、２，５３４バイトのオーバーヘッド・チェック情報（フラッシュとの間で読み書きされないが、エンコード／デコード・プロセスの際に付加される、少なくとも１３，２００バイトのパディングされたゼロを有する）とを含むことができる。２分の１ページ・コンテナは、６，２６バイトまでのデータ・ペイロードと、２，５３４バイトのオーバーヘッド・チェック情報（フラッシュから読み書きされていないが、エンコード／デコード・プロセス中に付加される、少なくとも８，８００バイトのパディングされたゼロを有する）とを含むことができる。１ページ・コンテナは、１５，０６６バイトまでのデータ・ペイロードと、２，５３４バイトのオーバーヘッド・チェック情報（データ・ペイロードの未使用バイトに用いられるパディングされたゼロを有する）とを含むことができる。一般に、エンコーダの出力は、データ・ペイロードと関連したバイト及びオーバーヘッド・チェック情報のバイト（すなわち、パディングされたゼロが排除される）のみを提供する。このように、フラッシュ・コントローラによりフラッシュ・アレイに書き込まれた情報が低減される（パディングされたゼロはフラッシュ・アレイに書き込まれないので、パディングされたゼロが存在すると仮定する）。
【００２４】
少なくとも１つの実施形態において、フラッシュ・ブロックがフラッシュ・アレイに書き込まれた時点で、フラッシュ・コントローラは、ストレージ・ブロック（例えば、ページ）内に適合できるような、多くの異なるサイズのコンテナとしてパックするように構成される。コンテナ・サイズ、データ・ペイロードのバイト数、及びコンテナの各々についてのアドレスも格納される（例えば、ストレージ・ブロック内又は別の位置に）ことを理解されたい。代替的に、簡単にするために、フラッシュ・ブロック書き込みが、ストア操作のために複数のデータ・ペイロード・タイプの１つだけを保持すると示されるとき、コンテナ・サイズは、フラッシュ・ブロック・パラメータに対応し得る。
【００２５】
１つ又は複数の実施形態において、ホスト読み出しが行われると、フラッシュ・コントローラは、所望のデータ・ペイロードがフラッシュ及び所望のデータ・ペイロード用のコンテナ・タイプ内に物理的に格納される（データ構造にアクセスすることにより）場所を判断する。次に、１つ又は複数のコンテナは、必要に応じてゼロがパディングされたデコーダ（例えば、ＴＰＣデコーダ）を通して読み出され、処理されて、データ・ペイロードを与える。次に、デコードの後、要求されたデータがホストに戻される。読み出される付加的なコンテナ（すなわち、要求されたデータを含まないが、要求されたデータを戻すために読み出されたコンテナ）が廃棄されても、又は付加的なコンテナ内のデータ・ペイロードが要求されるイベントにおいて一定の時間バッファ内に保持されてもよい。
【００２６】
どのコンテナを特定のホスト書き込みアクセスに割り当てるかを判断する際、フラッシュ・コントローラは、書き込みアクセスと関連したデータが、典型的に、どのように読み出されるかを示す収集された統計値を利用することができる（アドレス又はアドレス範囲に基づいて）。例えば、読み出されたある量のデータが特定サイズのページ・コンテナに対応する可能性が高い場合、データは、アクセス頻度に関係なく、特定サイズのコンテナに格納することができる。一例として、一般的に、所定のデータが、２分の１ページ・コンテナのデータ・ペイロードに対応する量で読み出された場合、所定のデータは２分の１ページ・コンテナ内に格納される。要求されたデータが読み出される方法について統計値が利用可能でないイベントにおいて、フラッシュ・コントローラは、アクセス頻度を用いて、データ・ペイロードに対するコンテナを選択するときに、データがホットであるか又はコールドであるかを判断することができる。
【００２７】
一例として、フラッシュ・コントローラは、最もホットなホスト・アクセス（例えば、１００ミリ秒未満ごとにアクセスされるデータ）に対する４分の１ページ・コンテナ；２番目にコールドなアクセス（例えば、１００ミリ秒ごとから２００ミリ秒ごとまでの間にアクセスされるデータ）に対する２分の１ページ・コンテナ；及び最もコールドなアクセス（例えば、２００ミリ秒ごとに１回を下回る頻度でアクセスされるデータ）に対する１ページ・コンテナを選ぶように構成することができる。少なくとも１つの実施形態において、２分の１ページの転送について、フラッシュ・コントローラは、符号化率の非効率のために、４分の１ページ・コンテナを使用しない。この場合、２分の１ページ・コンテナ又は１ページ・コンテナのいずれかが、フラッシュ・コントローラにより選択される。本明細書での議論は、４分の１ページ、２分の１ページ及び１ページ・コンテナに焦点を合わせているが、開示される技術は、一般的にデータがフラッシュに書き込まれる方法に応じて、３つのより多い又は少ないサイズのコンテナ及びコンテナに対する異なるページ・サイズ粒度を用いるデータ・ストレージ・システムにおいて用いることができる（例えば、ストレージ・システムは、１６分の１ページ・コンテナ、８分の１ページ・コンテナ、４分の１ページ・コンテナ、２分の１ページ・コンテナ及び１ページ・コンテナを用いることができる）ことを理解されたい。さらに、符号語は、フラッシュ・ページ毎の符号語の数が、例えば、３分の１ページ・コンテナ又は６分の１ページ・コンテナなど２の整数乗でないように定めることができる。
【００２８】
ここで図を、特に図１を参照すると、本明細書でさらに説明されるようなＮＡＮＤフラッシュ・メモリ（又は、単にＮＡＮＤフラッシュ）を用いるデータ・ストレージ・システムを含む例示的データ処理環境１００の高レベル・ブロック図が示される。図示のように、データ処理環境１００は、命令及びデータを処理する１つ又は複数のプロセッサ１０４を有する少なくとも１つのプロセッサ・システム１０２を含む。プロセッサ・システム１０２は、プログラム・コード、オペランド及び／又はプロセッサ１０４により実行される処理の実行結果を格納することができるローカル・ストレージ１０６（例えば、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）及び／又はディスク）をさらに含むことができる。種々の実施形態において、プロセッサ・システム１０２は、例えば、モバイル・コンピューティング・デバイス（スマートフォン又はタブレットなど）、ラップトップ又はディスクトップ・パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム（インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なＰＯＷＥＲ（商標）シリーズの１つのような）、又はメインフレーム・コンピュータ・システムとすることができる。プロセッサ・システム１０２はまた、ＡＲＭ（商標）、ＰｏｗｅｒＰＣ（商標）、Ｉｎｔｅｌ（商標）Ｘ８６のような種々のプロセッサ、又はメモリ・キャッシュ、メモリ・コントローラ、ローカル・ストレージ、入力／出力（Ｉ／Ｏ）バス・ハブ等と結合されたいずれかの他のプロセッサを用いた、埋め込まれたプロセッサ・システムとしてもよい。
【００２９】
プロセッサ・システム１０２は、Ｉ／Ｏチャネル１１０を介してデータ・ストレージ・システム１２０に直接（すなわち、介在するデバイスなしに）又は間接的に（すなわち、少なくとも１つの中間デバイスを通して）結合されたＩ／Ｏアダプタ１０８をさらに含む。種々の実施形態において、Ｉ／Ｏチャネル１１０は、例えば、ファイバ・チャネル（ＦＣ）、ＦＣオーバー・イーサネット（ＦＣｏＥ）、インターネット・スモール・コンピュータ・システム・インターフェース（ｉＳＣＩ）、Ｔｒａｎｓｐｏｒｔ  ｃｏｎｔｒｏｌ  ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  ｐｒｏｔｏｃｏｌ（ＴＣＰ／ＩＰ）、ｐｅｒｉｐｈｅｒａｌ  ｃｏｍｐｏｎｅｎｔ  ｉｎｔｅｒｃｏｎｎｅｃｔ  ｅｘｐｒｅｓｓ（ＰＣＩｅ）等を含む、周知の又は将来開発される通信プロトコルのうちのいずれか１つ又はその組み合わせを用いることができる。Ｉ／Ｏチャネル１１０を介して通信されるＩ／Ｏ操作には、プロセッサ・システム１０２がデータ・ストレージ・システム１２０からデータを要求する読み出しＩ／Ｏ操作と、プロセッサ・システム１０２がデータ・ストレージ・システム１２０内へのデータの格納を要求する書き込みＩ／Ｏ操作とが含まれる。
【００３０】
示される実施形態において、データ・ストレージ・システム１２０は、データ・ストレージ・システム１２０がＩ／Ｏチャネル１１０を介してプロセッサ・システム１０２から要求を受け取り、これに応答する、インターフェース１２２を含む。インターフェース１２２は、関連したフラッシュ・コントローラ・メモリ１２６（例えば、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ））を有するフラッシュ・コントローラ１２４（例えば、特定用途向け集積回路（ＡＳＩＣ）及びフィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ））に結合される。１つ又は複数の実施形態において、フラッシュ・コントローラ１２４は、ＮＡＮＤフラッシュ・メモリ・アレイ１４０内に格納される情報をエンコード／デコードするのに用いられるエンコーダ／デコーダ１２７を含むＥＣＣエンジン１２３（例えば、ＴＰＣエンジン）を含む。本開示によると、フラッシュ・コントローラ１２４は、符号語をＮＡＮＤフラッシュ・メモリ・アレイ１４０内に格納する前に、エンコードされた符号語からパディングされたゼロを除去するように構成される。フラッシュ・コントローラ１２４はまた、読み出された符号語をデコードする前に、ＮＡＮＤフラッシュ・メモリ・アレイ１４０から読み出された符号語内にパディングされたゼロを挿入するようにも構成される。示されるように、マトリックス１２５をフラッシュ・コントローラ・メモリ１２６内に形成して、符号語の形成を容易にすることができる。例えば、マトリックス１２５は、４００列及び３５２行を有するＴＰＣマトリックスとすることができる。マトリックス１２５は、必要に応じて、データ・ストレージ・システム１２０の異なる部分にプロビジョニングできることを理解されたい。フラッシュ・コントローラ１２４は、関連したＣＰＵメモリ１３０（例えば、ＤＲＡＭ）を有するＣＰＵ１２８に付加的に結合され、ＮＡＮＤフラッシュ・メモリ・アレイ１４０にさらに結合される。
【００３１】
フラッシュ・コントローラ１２４がＦＰＧＡと共に実装される実施形態において、ＣＰＵ１２８は、データ・ストレージ・システム１２０の起動中にフラッシュ・コントローラ１２４をプログラムし、構成することができる。起動後、一般的な操作において、フラッシュ・コントローラ１２４は、Ｉ／Ｏチャネル１１０及びインターフェース１２２を介して読み出し及び書き込みＩ／Ｏ操作を受け取り、ＮＡＮＤフラッシュ・メモリ・アレイ１４０内に格納されたデータを読み出し、及び／又はデータをＮＡＮＤフラッシュ・メモリ・アレイ１４０内に書き込む。フラッシュ・コントローラ１２４は、例えば、ＮＡＮＤフラッシュ・メモリ・アレイ１４０にアクセスして、ＮＡＮＤフラッシュ・メモリ・アレイ１４０との間で要求されたデータを読み書きすることによって、又はＮＡＮＤフラッシュ・メモリ・アレイ１４０と関連したメモリ・キャッシュ（図示せず）にアクセスすることによって、これらのＩ／Ｏ操作をサービスする。上述のように、フラッシュ・コントローラ１２４はまた、ＮＡＮＤフラッシュ・メモリ・アレイ１４０に書き込まれるデータをエンコードし、ＮＡＮＤフラッシュ・メモリ・アレイ１４０から読み出されるデータをデコードするためのエンコーダ／デコーダ１２７を含む、ＥＣＣエンジン１２３を有するように構成することもできる。上述のようにデータをエンコード／デコードする際、フラッシュ・コントローラ１２４は、例えば、フラッシュ・コントロール・メモリ１２６内に実装することができるマトリックス１２５にアクセスする。
【００３２】
フラッシュ・コントローラ１２４はまた、論理−物理アドレス変換を提供して、ＮＡＮＤフラッシュ・メモリ・アレイ１４０内の特定のメモリ位置へのアクセスを可能にするフラッシュ変換層（ＦＴＬ）を実装することもできる。一般に、プロセッサ・システム１０２のようなホスト・デバイスからフラッシュ・コントローラ１２４により受信される要求は、データがアクセスされる（読み出し又は書き込みが行われる）論理ブロック・アドレス（ＬＢＡ）を含み、書き込み操作の場合、書き込みデータはデータ・ストレージ・システム１２０に格納される。要求はまた、アクセスされるデータの量（又はサイズ）を指定することもできる。データ・ストレージ・システム１２０がサポートするプロトコル及び機能に応じて、他の情報を伝達することもできる。従って、ホスト・デバイスによって与えられるＬＢＡは、論理アドレス空間内のページに対応する。フラッシュ変換層は、ＬＢＡを、ＮＡＮＤフラッシュ・メモリ・アレイ１４０内の対応する物理位置に割り当てられた物理アドレスに変換する。フラッシュ・コントローラ１２４は、アドレス変換を行い、及び／又は、論理アドレスと物理アドレスとの間のマッピングを、フラッシュ・コントローラ・メモリ１２６内に格納することができる、変換テーブル（ＴＴ）１５０などの論理−物理変換データ構造内に格納することができる。
【００３３】
図１にさらに示されるように、フラッシュ・コントローラ１２４は、ＮＡＮＤフラッシュ・メモリ・アレイ１４０に関する情報を追跡するために１つ又は複数の付加的なデータ構造を維持することができ、そのデータ構造をフラッシュ・コントローラ・メモリ１２６内のバッファに入れることもできる。これらのデータ構造は、例えば、消去されたＮＡＮＤフラッシュ・メモリ・アレイ１４０内の物理メモリのブロックを識別する消去ブロックリスト（ＥＢＬ）１５２、書き込みＩ／Ｏ操作の書き込みデータを用いたプログラミングに利用可能なＮＡＮＤフラッシュ・メモリ・アレイ１４０内の物理メモリのブロックを識別する利用可能ブロック・キュー（ＡＢＱ）、及び頻繁にアクセスされるＬＢＡを識別し、書き込みＩ／Ｏ操作上のデータ・ペイロードに対して選択すべきコンテナ・サイズの判断に用いることができるホット・リスト１５６を含むことができる。当業者には理解されるように、種々の実施形態において、フラッシュ・コントローラ１２４は、共通のデータ構造内のこれらのデータ構造の１つ又は複数を結合すること、及び／又は、ＮＡＮＤフラッシュ・メモリ・アレイ１４０を管理するために付加的なデータ構造を実装することができる。
【００３４】
種々の実施形態において、ＮＡＮＤフラッシュ・メモリ・アレイ１４０は、異なる形態をとることができる。ここで図２〜図５を参照すると、本開示によるＮＡＮＤフラッシュ・メモリ・アレイ１４０内の物理メモリの１つの例示的構成が示される。
【００３５】
図２に示されるように、ＮＡＮＤフラッシュ・メモリ・アレイ１４０は、３２個の別個にアドレス指定可能なＮＡＮＤフラッシュ・ストレージ・デバイスから形成することができる。示される例において、フラッシュ・ストレージ・デバイスＭ０ａ〜Ｍ１５ｂの各々は、例えば、シングル・レベル・セル（ＳＬＣ）、マルチ・レベル・セル（ＭＬＣ）、３レベル・セル（ＴＬＣ）、又は４レベル・セル（ＱＬＣ）のＮＡＮＤフラッシュ・モジュールなどの、ボード実装フラッシュ・モジュールの形態をとることができる。３２個のＮＡＮＤフラッシュ・モジュールは、２つの（Ｍ０ａ、Ｍ０ｂ）乃至（Ｍ１５ａ、Ｍ１５ｂ）の１６のグループの形に構成される。物理アドレッシング・スキームのために、２つのモジュールの各グループは、「チャネル」とも呼ぶことができる「レーン」を形成することができ、ＮＡＮＤフラッシュ・メモリ・アレイ１４０は、１６個のチャネル又はレーン（レーン０〜レーン１５）を含む。
【００３６】
１つの実施形態において、個々のレーンの各々は、レーンをフラッシュ・コントローラ１２４に結合する、それぞれの関連したバスを有する。従って、特定の通信バスの１つへの通信を指示することによって、フラッシュ・コントローラ１２４は、フラッシュ・モジュールのレーンの１つへの通信を指示することができる。所定のレーンについての各通信バスは、他のレーンについての通信バスと独立しているので、フラッシュ・コントローラ１２４は、コマンドを発行し、同時に種々の通信バスにわたってデータを送受信し、フラッシュ・コントローラ１２４が、同時に又はほぼ同時に個々のレーンに対応するフラッシュ・モジュールにアクセスすることが可能になる。
【００３７】
ここで図３を参照すると、図２のフラッシュ・モジュールＭ０ａ〜Ｍ１５ｂのいずれかを実装するために用いることができる例示的フラッシュ・モジュール３００が示される。図３に示されるように、フラッシュ・モジュール３００により与えられる物理ストレージ位置は、チップ・イネーブル（ＣＥ）を通してアドレス指定する及び／又は識別することができる物理位置にさらに細分される。図３の例において、各フラッシュ・モジュール３００の物理メモリは、各々がフラッシュ・コントローラ１２４によりアサートされ、対応するＣＥ内の物理メモリ位置との間のアクセスを可能にするそれぞれのＣＥラインを有する、４つのチップ・イネーブル（ＣＥ０、ＣＥ１、ＣＥ２及びＣＥ３）に分割される。次に、各々のＣＥは、各々が２つのプレーン（プレーン０及びプレーン１）を有する複数のダイ（例えば、ダイ０及びダイ１）に細分される。各々のプレーンは、フラッシュ・モジュールの物理的レイアウトのために、互いに物理的に関連付けられ、読み書き操作のような種々の操作の性能のために共通の回路（例えば、Ｉ／Ｏバッファ）を用いる、ブロックの集合（後述する）を表す。
【００３８】
図４及び図５にさらに示されるように、図３のフラッシュ・モジュール３００内のプレーンのいずれかを実装するために用いることができる例示的プレーン４００が、例えば、２０４８のブロックの物理メモリを含む。一般に、ブロック５００は、典型的には物理的に互いに関連付けられた物理ページの集合である。この関連付けにより、ブロックは、ＮＡＮＤフラッシュ・メモリ・アレイ１４０内で消去することができる物理ストレージ位置の最小粒度となるように定められる。図５の実施形態において、各ブロック５００は、例えば、２５６の物理ページを含み、物理ページは、書き込みアクセスのための最小の別個にアドレス指定可能なデータ単位となるように定められる。例示的システムにおいて、データの各物理ページは、データ・ストレージに、以下により詳細に説明されるメタデータのための付加的なストレージを加えた共通の容量（例えば、１６ｋＢ）を有する。従って、データは、ページ毎に、ＮＡＮＤフラッシュ・メモリ・アレイ１４０内に書き込まれるが、ブロック毎に消去される。
【００３９】
データは、２ステップ・プロセスで、ＮＡＮＤフラッシュ・メモリ・アレイ１４０から取り出す（読み出す）ことができる。フェッチ操作としても知られる第１のステップにおいて、フラッシュ・ページ全体が、基礎をなすフラッシュ・ストレージ媒体から取り出され、出力データ・バッファに転送される。データ転送操作としても知られる第２のステップにおいて、既にフェッチされたデータのいずれかのサブセットをフラッシュメモリ・デバイスから転送することができる。従って、各読み出し操作のフェッチ・コンポーネントは、最小粒度の単一フラッシュ・ページを有し、一方、各読み出し操作のデータ転送コンポーネントは、可能な限り単一バイトと同じくらい小さい、はるかに小さい粒度を有する。図５にさらに示されるように、各ブロック５００は、使用されなくなった（retired）（すなわち、使用をやめた）又は使用されている（not-retired）（すなわち、アクティブ又は依然として使用中）といった、そのブロック５００内の各物理ページの状態を示す、ページ状態情報５０２を含むことが好ましい。種々の実装において、ＰＳＩ  ５０２を収集して、ブロック５００内の単一のデータ構造（例えば、ベクトル又はテーブル）にすること、ブロック５００内に分散させること（例えば、各物理ページに添付されるメタデータの１つ又は複数のビットとして）、又はデータ・ストレージ・システム１２０内のどこかに維持すること（例えば、フラッシュ・コントローラ・メモリ１２６のデータ構造内に）ができる。
【００４０】
上述のように、データ・ストレージ・システム１２０は、通常、外部デバイスがＮＡＮＤフラッシュ・メモリ・アレイ１４０内の物理メモリ位置に直接アドレス指定する、及び／又はアクセスすることを許可しない。代わりに、データ・ストレージ・システム１２０は、通常、単一の連続した論理アドレス空間を外部デバイスに与えるように構成され、従って、ホスト・デバイスが論理アドレス空間内のＬＢＡとの間でデータを読み書きするのを可能にしながら、フラッシュ・コントローラ１２４及びＣＰＵ１２８が、種々のＬＢＡと関連したデータが、ＮＡＮＤフラッシュ・メモリ・アレイ１４０を含む物理メモリ位置内に実際に常駐する場所を制御することを可能にしながら、ホスト・デバイスが論理アドレス空間内のＬＢＡとの間でデータを読み書きするのを可能にする。このように、ＮＡＮＤフラッシュ・メモリ・アレイ１４０の性能及び寿命をインテリジェントに管理及び最適化することができる。
【００４１】
データ・ストレージ・システム１２０に書き込みが行われると、フラッシュ・コントローラ１２４及びＣＰＵ１２８は、ＮＡＮＤフラッシュ・メモリ・アレイ１４０内の消去ブロックの１つの物理ページの１つに格納されたデータを無効にする。新しいデータは、書き込まれているデータと併合され、最終的に、ＮＡＮＤフラッシュ・メモリ・アレイ１４０内の異なる位置に格納される。ページ又はページの部分は無効にされ、従って、ＮＡＮＤフラッシュ・メモリ・アレイ１４０の部分は未使用になる。フラッシュ・コントローラ１２４及びＣＰＵ１２８は、最終的に、ガベージ・コレクション（garbage collection）と呼ばれるプロセスを通して無効にされたページ又はページの部分を再利用する必要がある。特定の消去ブロックは、消去ブック内のデータのどれだけが無効かを含む、多数の要因に基づいて選択される。フラッシュ・コントローラ１２４は、ＥＢＬ  １５２内の消去ブロックの物理ブロック・アドレス（ＰＢＡ）を記録する。有効なデータが、ホストからの新しい書き込みと共に読み出され、ＡＢＱ１５４から割り当てられたブロック内に書き込まれる。
【００４２】
データ・ストレージ・システム１２０により実装されるフラッシュ変換層は、ＮＡＮＤフラッシュ・メモリ・アレイ１４０内の物理メモリから、ホスト・デバイスに利用可能にされた論理アドレス空間を分離するので、ＮＡＮＤフラッシュ・メモリ・アレイ１４０のサイズが、ホスト・デバイスに与えられた論理アドレス空間のサイズと等しい必要はない。大部分の実施形態において、利用可能な総物理メモリを下回る論理アドレス空間を与えること（すなわち、ＮＡＮＤフラッシュ・メモリ・アレイ１４０をオーバー・プロビジョニング（over-provisioning）すること）は、有利である。このようなオーバー・プロビジョニングは、上述のように特定量の無効データの存在が与えられた場合でも、論理アドレス空間が完全に利用されたときに、物理メモリ・リソースが利用であることを保証する。まだ再利用されていない無効データに加えて、オーバー・プロビジョニングされた空間を用いて、ＥＣＣ、巡回冗長検査（ＣＲＣ）及びパリティのようなデータ保護スキームの使用に伴うメモリ故障及びメモリ・オーバーヘッドの存在が与えられた場合でも、十分な論理空間が存在することを保証することができる。
【００４３】
１つ又は複数の実施形態において、データは、本明細書では「ページ・ストライプ」と呼ばれる、ＮＡＮＤフラッシュ・メモリ・アレイ１４０の関連した物理ページのグループに書き込まれる。ＮＡＮＤフラッシュ・メモリ・アレイ１４０内に格納された種々のページ・ストライプの長さは、変化することができ、好ましくは変化するが、１つの実施形態においては、各ページ・ストライプは、２乃至１５の書き込みデータ・ページ（一般的には、ホスト・デバイスにより与えられる）と、書き込みデータについてのデータ保護情報を格納するために用いられる１つの付加的ページ（「データ保護ページ」）とを含む。例えば、図６は、Ｎ個のデータ・ページ（すなわち、Ｄページ００乃至ＤページＮ−１）と、１つのデータ保護ページ（すなわち、ＰページＮ）とを含む例示的ページ・ストライプ６００を示す。
【００４４】
図７は、ページ・ストライプ７００内の各データ・ページの例示的フォーマットを示す。この例において、データ・ページ７００は、１６ｋＢデータ・フィールド７０２と、データ・ページ記述するメタデータのための付加的フィールドとを含む。示される例において、これらのメタデータ・フィールドは、データ・ページ７００のＬＢＡを含むＬＢＡフィールド７０４と、データ・フィールド７０２及びＬＢＡフィールド７０４の組み合わせについて計算されたＣＲＣ値を含むＣＲＣフィールド７０６と、示される例では、データ・フィールド７０２、ＬＢＡフィールド７０４及びＣＲＣフィールド７０６のコンテンツの組み合わせから計算されたＥＣＣ値を含むＥＣＣフィールド７０８とを含む。
【００４５】
図８は、ページ・ストライプのデータ保護ページ８００の例示的フォーマットを示す。示される例では、データ保護ページ８００は、ページ・ストライプ６００内のデータ・ページ７００のデータ・フィールド７０２のビット単位（bit-by-bit）ＸＯＲを含むデータ排他的ＯＲ（ＸＯＲ）フィールド８０２を含む。データ保護ページ８００は、ページ・ストライプ６００内のデータ・ページ７００のＬＢＡフィールド７０４のビット単位ＸＯＲを含むＬＢＡ  ＸＯＲフィールド８０４をさらに含む。データ保護ページ８００は、最後に、それぞれ、データ保護ページ８００についてのＣＲＣ値及びＥＣＣ値を格納するためのＣＲＣフィールド８０６及びＥＣＣフィールド８０８を含む。こうした保護スキームは、パリティ・フィールドが必ずしも１つの特定のフラッシュ・プレーン（flash plane）上に配置されないので、一般に、ＲＡＩＤ５と呼ばれる。しかしながら、リード・ソロモン（Reed-Solomon）のような代替的データ保護スキームを用い得ることを理解されたい。
【００４６】
上述したデータ・ページ及びデータ保護ページ用のフォーマットは、複数の異なる保護機構を用いてページ・ストライプ内に格納されたデータを保護する。最初に、各データ・ページ内のＥＣＣビットの使用は、フラッシュ・ページ内のビット誤りの幾らかの数の訂正を可能にする。用いられるＥＣＣ方法に応じて、ＮＡＮＤフラッシュ・ページ内の何百ものビット又は何千ものビットさえも訂正することが可能であり得る。ＥＣＣチェック及び訂正が行われた後、訂正されたデータを検証するために、訂正されたＣＲＣフィールドが用いられる。併用されると、これらの２つの機構は、ローカルなページ内情報のみを用いて、比較的良性の誤り（benign error）の訂正及びより重大な誤りの検出を可能にする。訂正不能な誤りがデータ・ページ内に発生した場合、例えば、データ・ページを格納するのに用いられる物理ページの故障により、ページ・ストライプについての他のデータ・ページ及びデータ保護ページから、故障データ・ページのデータ・フィールド及びＬＢＡフィールドのコンテンツを再構成することができる。
【００４７】
データ・ストライプのデータ・ページ及びデータ保護ページが内部に存在する物理メモリ位置は、ＮＡＮＤフラッシュ・メモリ・アレイ１４０内で変化するが、１つの実施形態において、所定のページ・ストライプを含むデータ・ページ及びデータ保護ページは、データ・ストレージ・システム１２０の動作全体を最適化するために選択される物理メモリ位置に格納される。例えば、幾つかの実施形態において、ページ・ストライプを含むデータ・ページ及びデータ保護ページは、異なる物理レーンがデータ・ページ及びデータ保護ページの各々を格納するために用いられるように格納される。フラッシュ・コントローラ１２４はページ・ストライプを含むデータのページの全てに同時に又はほぼ同時にアクセスできるので、幾つかの実施形態は、ページ・ストライプへの効率的なアクセスをサポートすることができる。レーンへのページの割り当ては連続的である必要はなく（すなわち、データ・ページは、いずれかのレーン内に任意の順序で格納することができる）、ページ・ストライプが全長ページ・ストライプ（例えば、１５のデータ・ページ及び１つのデータ保護ページを含む）でない限り、ページ・ストライプを格納するために利用されるレーンを隣接させる必要はない。
【００４８】
データ・ストレージ・システム１２０の一般的な物理構造及び動作を説明してきたが、ここで、ＮＡＮＤフラッシュ・メモリ・アレイ１４０に書き込まれたデータ・ペイロードに対するコンテナ・サイズを選択することに関する態様を含む、データ・ストレージ・システム１２０の特定の動作態様を説明する。
【００４９】
一般に、フラッシュ・コントローラ１２４は、アクセス履歴又はデータ・アクセスの頻度に基づき、入ってくるワークロードを分離するように構成される。図９を参照すると、ＮＡＮＤフラッシュ・メモリ・アレイ１４０内に格納されるページ９００が示される。ページ９００は、２分の１ページ・コンテナ９０２及び２つの４分の１ページ・コンテナ９０４を含む。４００×３５２のマトリックスの場合、４分の１ページ・コンテナは、１，８６６バイトまでのデータ・ペイロードと、２，５３４バイトのオーバーヘッド・チェック情報（ＮＡＮＤフラッシュ・メモリ・アレイ１４０との間で読み書きされないが、エンコード／デコード・プロセスの際にフラッシュ・コントローラ１２４により付加される、少なくとも１３，２００バイトのパディングされたゼロを有する）とを含む。２分の１ページ・コンテナは、６，２６６バイトまでのデータ・ペイロードと、２，５３４バイトのオーバーヘッド・チェック情報（ＮＡＮＤフラッシュ・メモリ・アレイ１４０との間で読み書きされないが、エンコード／デコード・プロセスの際にフラッシュ・コントローラ１２４により付加される、少なくとも８，８００バイトのパディングされたゼロを有する）とを含む。
【００５０】
本開示によると、フラッシュ・コントローラ１２４は、入ってくるワークロードを分離し、より頻繁にアクセスされるデータ（すなわち、ホット・データ）はより小さいコンテナ・サイズに割り当てられるので、無駄な帯域幅が最小にされ（たとえ減少した符号化率においても）、あまり頻繁にアクセスされないデータ（すなわち、コールド・データ）又は一般的に連続的アクセス・パターンでアクセスされるデータは、より大きいコンテナに割り当てられるので、関連した符号化率は、フラッシュのより効率的な使用をもたらす（より高い帯域幅要件においても）。図９において、コンテナ９０２内に格納されたデータは、コンテナ９０４内に格納されたデータと比べて、あまり頻繁にアクセスされない。図１０を参照すると、４つの４分の１ページ・コンテナ９０４を含むページ１０００が示される。この場合、フラッシュ・コントローラ１２４は、データ・アクセス頻度、又は入ってくるワークロードと関連したデータ・アクセスの履歴に基づき、４つの入ってくるワークロードを４つのそれぞれの４分の１ページ・コンテナ９０４に割り当てている。
【００５１】
ここで図１１を参照すると、データ・ストレージ・システム１２０内に書き込まれる、入ってくるデータに対するコンテナ・サイズを選択するための例示的プロセスの高レベル論理フローチャートが説明される。コンテナ選択プロセスは、例えば、ハードウェア、ファームウェア、ソフトウェア、又はこれらの組み合わせの形で、フラッシュ・コントローラ１２４及び／又はＣＰＵ１２８により実施することができる。説明を簡単にするために、以下、プロセスはフラッシュ・コントローラ１２４により実施されると仮定する。
【００５２】
プロセスはブロック１１００で始まり、次に、フラッシュ・コントローラ１２４がプロセッサ・システム１０２などのホスト・デバイスからの書き込み要求の受信を待つ、決定ブロック１１０２に進む。書き込み要求は、例えば、ＮＡＮＤフラッシュ・メモリ・アレイ１４０に書き込まれるデータと、ホスト・デバイスがデータの格納を望むターゲットＬＢＡの表示とを含む。書き込み要求の受信に応答して、プロセスは、ブロック１１０２から、コントローラ１２４がデータ・アクセスの頻度（例えば、論理・物理アドレス変換テーブル１５０を参照することによって）、又は書き込み要求内で指定されるアドレスについてのアクセス履歴を求める、ブロック１１０４に進む。次に、随意的な決定ブロック１１０５において、フラッシュ・コントローラ１２４は、アクセス履歴が書き込み要求に利用可能であるかどうかを判断する。ブロック１１０５において、アクセス要求が書き込み要求に利用可能であることに応答して、制御は、ラッシュ・コントローラ１２４が履歴に基づいてコンテナ・サイズを選択する、ブロック１１４に移る。
【００５３】
例えば、格納されたデータが２分の１ページ・コンテナにおいて常に読み出されることをアクセス履歴が示すことに応答して、フラッシュ・コントローラ１２４は、書き込み要求に対して２分の１ページ・コンテナを選択する。履歴が書き込み要求に利用可能でないか又は履歴がコンテナ・サイズの選択の際に利用されない場合、制御は、ブロック１１０５から決定ブロック１１０６に移る。ブロック１１０６において、フラッシュ・コントローラ１２４は、書き込みアクセスのターゲットＬＢＡのアクセス頻度が第１のアクセス・レベル（すなわち、データが「ホット・データ」であることを示すアクセス・レベル）を上回るかどうかを判断する。ブロック１１０６において、アクセス頻度が第１のアクセス・レベルを上回ることに応答して、制御は、ブロック１１０８に移る。ブロック１１０８において、フラッシュ・コントローラ１２４は、帯域幅最適化符号語に対するコンテナ・サイズ（例えば、４分の１ページ・コンテナ）を選択する。上述のように、より小さいコンテナの選択（符号化率を低減させるが）は、帯域幅の効率を改善する。ブロック１１０８から、制御は、次の書き込み要求がデータ・ストレージ・システム１２０により受信されるまで、ブロック１１２に移る。
【００５４】
ブロック１１０６において、アクセス・レベルが第１のアクセス・レベルを上回らないことに応答して、制御は、決定ブロック１１１０に移る。ブロック１１１０において、フラッシュ・コントローラ１２４は、書き込みアクセスのターゲットＬＢＡのアクセス頻度が第２のレベルを下回るかどうかを判断する。ブロック１１１０において、アクセス頻度が第２のアクセス・レベルを下回ることに応答して、制御は、フラッシュ・コントローラ１２４が符号化率最適化符号語に対するコンテナ・サイズ（例えば、１ページ・コンテナ）を選択する、ブロック１１１２に移る。
【００５５】
上述のように、より大きいコンテナの選択は（帯域幅効率を減少させるが）、符号化率を改善する。ブロック１１１２から、制御は、次の書き込み要求がデータ・ストレージ・システム１２０により受信されるまで、ブロック１１１２に移る。ブロック１１１０において、アクセス・レベルが第２のアクセス・レベルを下回らない場合、制御は、フラッシュ・コントローラ１２４が、可能な場合は、履歴に基づいてコンテナ・サイズ（例えば、２分の１ページ・コンテナ）を選択する、決定ブロック１１１４に移る。履歴が利用可能でない場合、フラッシュ・コントローラ１２４は、デフォルトのコンテナ・サイズを選択することができる。ブロック１１１２から、制御は、ブロック１１２２に移る。データ・ペイロードに対するコンテナ・サイズの選択において、２つより多いアクセス・レベルを指定することができることを理解されたい。
【００５６】
図内のフローチャート及びブロック図は、本発明の種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点で、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための１つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に記された機能は、図内で記された順序ではない順序で生じ得ることにも留意されたい。例えば、連続して示された２つのブロックが、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はときとして逆順で実行されることもある。ブロック図及び／又はフローチャート図の各ブロック、及びブロック図及び／又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する専用のハードウェア・ベースのシステム、又は専用のハードウェアとコンピュータ命令との組み合わせによって実装することができることにも留意されたい。
【００５７】
本発明は、１つ又は複数の実施形態を参照して特に示されるが、当業者であれば、本発明の趣旨及び範囲から逸脱することなく、形態及び細部における種々の変更をなし得ることが理解されるであろう。例えば、特定の機能を指示するフラッシュ・コントローラを含むデータ・ストレージ・システムに関して態様が説明されたが、本発明は、こうした機能を実施する又はこうした機能を実施させるために、プロセッサにおり処理することができるプログラム・コードを格納するストレージ・デバイスを含むプログラム製品として代替的に実装できることを理解されたい。本明細書で用いられる場合、「ストレージ・デバイス」とは、法定製造物品のみを含み、かつ、一時的伝搬媒体それ自体を排除するように具体的に定められる。
【００５８】
さらに、ＮＡＮＤフラッシュ・メモリの使用を含む実施形態が説明されているが、本明細書における本発明は、ＮＡＮＤフラッシュ・メモリと共に使用することに限定されるものではなく、代わりに、いずれかの他の不揮発性ランダム・アクセス・メモリ（ＮＶＲＡＭ）技術にも適用可能であることを理解されたい。例えば、開示される技術は、相変化メモリ（ＰＣＭ）、磁気抵抗ＲＡＭ（ＭＲＡＭ）及び抵抗ＲＡＭ（ＲＲＡＭ）に適用することができる。
【００５９】
上述の図面及び以下の特定の構造及び機能の説明は、本出願人が発明したものの範囲又は添付の特許請求の範囲の範囲を制限するために与えられるものではない。むしろ、図面及び説明は、特許保護を求める本発明を作成及び使用するために、当業者に教示するために与えられる。当業者であれば、明確化及び理解のために、本発明の商業的実施形態の全ての特徴が説明又は図示されているわけではないことを理解するであろう。当業者であれば、商業的実施形態についての開発者の最終目標を達成するために、本発明の態様を組み込む実際の商業的実施形態の開発には、多数の実装固有の決定が必要であることも理解するであろう。そうした実装固有の決定は、特定の実装、位置により及びその時々に変化することがある、システム関連、事業関連、政府関連及び他の制約の遵守を含むことがあり、恐らくそれらに限定されない。開発者の努力は、絶対的な意味で非常に複雑で時間がかかるものであり得るが、それにも関わらず、こうした努力は、この開示の利益を受ける当業者にとっては日常業務たり得る。本明細書で開示され教示される本発明には、多数の様々な修正及び代替的形態の余地があることも理解されたい。最後に、これに限定されるものではないが、「ａ（１つの）」のような単数形の用語の使用は、項目の数を限定することを意図するものではない。
【符号の説明】
【００６０】
１００：データ処理環境
１０２：プロセッサ・システム
１０４：プロセッサ
１０６：ローカル・ストレージ
１０８：Ｉ／Ｏアダプタ
１１０：Ｉ／Ｏチャネル
１２０：データ・ストレージ・システム
１２２：インターフェース
１２３：ＥＣＣエンジン
１２４：フラッシュ・コントローラ
１２５：マトリックス
１２６：フラッシュ・コントローラ・メモリ
１２７：エンコーダ／デコーダ
１２８：ＣＰＵ
１３０：ＣＰＵメモリ
１４０：ＮＡＮＤフラッシュ・メモリ・アレイ
３００：フラッシュ・モジュール
４００：プレーン
５００：ブロック
６００、７００：ページ・ストライプ
８００：データ保護ページ
９００、１０００：ページ
９０２：２分の１ページ・コンテナ
９０４：４分の１ページ・コンテナ
【図１】
0006342013.tif 000002
【図２】
0006342013.tif 000003
【図３】
0006342013.tif 000004
【図４】
0006342013.tif 000005
【図５】
0006342013.tif 000006
【図６】
0006342013.tif 000007
【図７】
0006342013.tif 000008
【図８】
0006342013.tif 000009
【図９】
0006342013.tif 000010
【図１０】
0006342013.tif 000011
【図１１】
0006342013.tif 000012