(58)【調査した分野】(Int.Cl.,DB名)
前記帯域幅最適化符号語は、4分の1ページ・コンテナ又は2分の1ページ・コンテナ内に格納され、前記符号化率最適化符号語は、1ページ・コンテナ内に格納される、請求項1に記載の方法。
ターボ製品コードを用いて、前記帯域幅最適化符号語及び前記符号化率最適化符号語を生成することをさらに含み、前記第1のアクセス・レベル及び前記第2のアクセス・レベルは同じ値に対応する、請求項1に記載の方法。
前記帯域幅最適化符号語及び前記符号化率最適化符号語は、前記不揮発性メモリ・アレイ内に格納されるとき、パディングを含まない、請求項10に記載のデータ・ストレージ・システム。
前記帯域幅最適化符号語は、4分の1ページ・コンテナ又は2分の1ページ・コンテナ内に格納され、前記符号化率最適化符号語は、1ページ・コンテナ内に格納される、請求項8に記載のデータ・ストレージ・システム。
ターボ製品コードを用いて、前記帯域幅最適化符号語及び前記符号化率最適化符号語を生成することをさらに含み、前記第1のアクセス・レベル及び前記第2のアクセス・レベルは同じ値に対応する、請求項8に記載のデータ・ストレージ・システム。
【発明を実施するための形態】
【0009】
当業者であれば理解するように、本発明の態様は、システム、方法又はコンピュータ・プログラム製品として具体化することができる。従って、本発明の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形態をとることができ、本明細書においては、これらは全て、一般的に「回路」、「モジュール」又は「システム」と呼ぶことがある。さらに、本発明の態様は、媒体内に具体化されたコンピュータ可読プログラム・コードを有する、1つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータ・プログラム製品の形態をとることができる。
【0010】
1つ又は複数のコンピュータ可読媒体のいずれかの組み合わせを用いることもできる。コンピュータ可読媒体は、コンピュータ可読信号媒体又はコンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子、磁気、光学、電磁気、赤外線若しくは半導体のシステム、装置若しくはデバイス、又は上記のもののいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例(非網羅的なリスト)として、以下のもの、即ち、1つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能なプログラム可能読み出し専用メモリ(EPROM又はフラッシュ・メモリ)、光ファイバ、ポータブル・コンパクト・ディスク型読み出し専用メモリ(CD−ROM)、光記憶装置、磁気記憶装置、又は上記のもののいずれかの適切な組み合わせが挙げられる。本明細書の文脈においては、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって又はそれらと関連して用いるためのプログラムを収容又は格納することが可能な任意の有形媒体とすることができる。
【0011】
コンピュータ可読信号媒体は、例えばベースバンド内に、又は搬送波の一部として、具体化されたコンピュータ可読プログラム・コードをその中に有する、伝搬されるデータ信号を含むことができる。このような伝搬信号は、これらに限定されるものではないが、電磁気、光又はそれらのいずれかの適切な組み合わせを含む、種々の形態のいずれかを取ることができる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、かつ、命令実行システム、装置若しくはデバイスによって、又はこれらと関連して用いるためのプログラムを伝達し、伝搬し、又は搬送することができる任意のコンピュータ可読媒体とすることができる。
【0012】
コンピュータ可読媒体上に具体化されたプログラム・コードは、これらに限定されるものではないが、無線、有線、光ファイバ・ケーブル、無線周波数等、又は上記のもののいずれかの適切な組み合わせを含む任意の適切な媒体を用いて伝送することができる。
【0013】
本発明の態様の動作を実行するためのコンピュータ・プログラム・コードは、Java、Smalltalk、C++などのようなオブジェクト指向型プログラミング言語、及び、「C」プログラミング言語又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、1つ又は複数のプログラミング言語の任意の組み合わせで記述することができる。プログラム・コードは、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。後者のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある(例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて)。
【0014】
本発明の態様は、本発明の実施形態による方法、装置(システム)及びコンピュータ・プログラム製品のフローチャート図及び/又はブロック図を参照して説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図におけるブロックの組み合わせは、コンピュータ・プログラム命令によって実装できることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えて、マシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装するための手段を作り出すようにすることができる。
【0015】
これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装する命令を含む製品を製造するようにもすることができる。
【0016】
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他の装置上にロードして、そのコンピュータ、他のプログラム可能データ処理装置、又は他の装置上で行われる一連の動作ステップによりコンピュータ実装プロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装するためのプロセスを提供することもできる。
【0017】
ターボ製品符号(TPC)は、例えば、携帯電話、衛生通信、無線通信及びテープ媒体などの種々の用途で使用されている1つのクラスの誤り訂正符号(ECC)である。一般に、TPCは、比較的高い符号化率を有し、雑音環境においてうまく機能し、特定用途向け集積回路(ASIC)及びフィールド・プログラマブル・ゲート・アレイ(データ・ストレージ・システム120)内に容易に実装することができる。TPCは、本質的に反復型であり、比較的高い生のビット誤り率(RBER)を確実に訂正することができ、一般に、比較的高い符号化率は、TPCを騒音環境にとって理想的なものにする。例えば、TPCは、例えばNANDフラッシュ・メモリ(又は、単にNANDフラッシュ)などの、種々のタイプの不揮発性ストレージ・デバイスと共に有利に用いることができる。
【0018】
一般に、TPCは、不揮発性ストレージ・デバイス(例えば、フラッシュを含むソリッド・ステート・デバイス(SSD)など)で使用し、2パーセントまでのRBERを訂正することができ、このように、不揮発性ストレージ・デバイスが経済的であり、企業アプリケーションにおいて信頼できる時点まで不揮発性ストレージ・デバイスの平均寿命を延ばす際の重要なツールとして用いることができる。TPC語が比較的長い場合、TPCは特に、RBERを低減させるのに長けている。例えば、400列及び352行のマトリックスを有するTPCは、各行及び各列における3ビット及びパリティ・ビットを訂正して、誤り訂正を最小にすることを可能にする。15,066バイトのデータ・ペイロードを有する17,600バイト符号語の場合、符号化率(データ・ペイロードを総バイト量(すなわち、データ・ペイロードにオーバーヘッド・チェック情報を加えたもの)で割ったもの)は、約85.6パーセントである。この場合、(17,600バイト符号語内に)格納される情報の約14.4パーセントは、オーバーヘッド・チェック及び訂正情報であり、17,600バイト符号語の85.6%は、データ・ペイロード(例えば、顧客データ))である。400列及び352行のマトリックスを有するTPCは、約1.09%までRBERを確実に訂正することができる。400列及び352行のマトリックスを有するTPC(例えば、372列及び324行のデータ・ペイロード)は、一行の3ビット及び一列の3ビットを訂正することができるとき、3×3のチェック強度を有すると言われる。開示される技術は、異なるマトリックス・サイズにも、及びこれに対応して異なるチェック強度にも適用可能であることを理解されたい、さらに、開示される技術は、TPC以外のECCを用いて生成される符号語にも適用可能であることも考えられる。
【0019】
400列及び352行のマトリックスを有するTPCは比較的強力であるが、例えばフラッシュ(NANDフラッシュ)を含むソリッド・ステート・デバイス(SSD)などのこうしたTPCを不揮発性ストレージ・デバイス内に配備することにより、比較的大きい符号語がもたらされる。例えば、フラッシュを配備するデータ・ストレージ・システムにおける4キロバイト(kB)又は4096バイトのホスト要求データサイズについては、フラッシュと関連したストレージ・バスにおいて比較的大きい読み出し増幅が生じる。この例において、4096バイトの読み出しでは、要求される4096バイトを戻す前に、1つ又は2つの完全な17600バイト符号語を読み出し、デコードを行うことが必要である。後者の場合、2つの完全符号語の読み出しは、要求されるデータが2つの符号語にまたがるときに生じる。平均して、17600バイトの長さを有する符号語からの4096バイトの読み出しにより、5より多い平均読み出し増幅がもたらされる。つまり、5の計算された読み出し増幅及び毎秒200k 4kBの入力/出力(I/O)操作(IOP)の所望の読み出しスループットを有する17,600バイト符号語の場合、フラッシュ・コントローラは、4GB/秒より多いデータを読み出して、およそ800MB/秒のデータをホストに戻すことが必要とされる。フラッシュ・コントローラが4GB/秒より多いデータを読み出して、800MB/秒のデータをホストに戻すことを必要とすることは、無駄な帯域幅及び比較的高い電力損をもたらす。
【0020】
無駄な帯域幅を最小にする1つの解決法は、より短いTPC語を用いることである。しかしながら、3×3のチェック強度を有する1つの4kBページを保持するTPC語は、(およそ4つの4kBページを有する場合と比較して)比較的低い符号化率(例えば、70パーセントから80パーセントまでの間)を有する。こうした符号は比較的強力であり、比較的高いRBERを処理することができるが、フラッシュ・コントローラに対してこうしたECCスキームを用いることは、比較的多数のNANDビットを訂正専用にすることを必要とし、結果として得られるフラッシュ・ドライブは、恐らく、コストの観点からすると競争力が高くない。この問題に対処するために、可変強度ECCを用いる設計が提案されている。可変強度ECCを用いる設計においては、RBERの増加に応答して、設計は、低レベルECCからより強力な高レベルECCに切り換わる。残念なことに、NANDフラッシュにおける低レベルECCからより強力な高レベルECCへの変更は、関連したデバイスが古くなるにつれて、ECCがより多くのNANDフラッシュ・ビットを消費することを意味する。フラッシュ内のビット誤りの分布によっては、関連したデバイスが古くなるにつれて付加的なNANDフラッシュ・ビットを消費するECCが許容可能である場合がある。
【0021】
本開示の1つの態様によると、入ってくるワークロードを分離し、より頻繁にアクセスされるデータ(すなわち、ホット・データ)をより小さいコンテナ・サイズ(container size)に割り当て、(たとえ低減した符号化率でも)無駄な帯域幅を最小にする技術が開示される。あまり頻繁にアクセスされない・データ(すなわち、コールド・データ)又は一般的に連続的にアクセスされるパターンでアクセスされるデータは、大きなコンテナ内に格納されるので、(たとえより高い帯域幅要件でも)関連した符号化率は、より効率的なフラッシュの使用をもたらす。データに比較的少ししかアクセスされないと仮定して、符号化率を増大させるためにより大きいコンテナを用いることは望ましい。本開示の態様によると、効率を向上させるために同じ内部アレイを用いて(その結果、1つのTPCエンジンしか必要とされない)、異なるECC機構を実装することができる。
【0022】
例えば、17,600バイトまで保持することができる(15,066バイトの最大データ・ペイロード及び2,534バイトのチェック及び訂正情報を有する)TPCエンジン及びマトリックスを生成することができる。次に、1バイトから、15,066バイト(符号語をエンコード/デコードするのに必要に応じてゼロをパディングする)のデータ・ペイロード及び2,534バイトのチェック情報までを含むコンテナを定めることができる。1つの実施形態において、訂正は、3つの異なるコンテナ・サイズに対して行われ、付加的な作業は必要とされない(エンコード/デコードの前に、全てのコンテナが未使用のデータ・バイトをゼロでパディングするので)。例えば、4,400バイトを含む4分の1ページ(one-quarter page)コンテナ、8,800バイトを含む2分の1ページ(one-halfpage)コンテナ、及び17,600バイトを含む1ページ(one page)コンテナを定めることができる。
【0023】
4分の1ページ・コンテナは、1,866バイトまでのデータ・ペイロードと、2,534バイトのオーバーヘッド・チェック情報(フラッシュとの間で読み書きされないが、エンコード/デコード・プロセスの際に付加される、少なくとも13,200バイトのパディングされたゼロを有する)とを含むことができる。2分の1ページ・コンテナは、6,26バイトまでのデータ・ペイロードと、2,534バイトのオーバーヘッド・チェック情報(フラッシュから読み書きされていないが、エンコード/デコード・プロセス中に付加される、少なくとも8,800バイトのパディングされたゼロを有する)とを含むことができる。1ページ・コンテナは、15,066バイトまでのデータ・ペイロードと、2,534バイトのオーバーヘッド・チェック情報(データ・ペイロードの未使用バイトに用いられるパディングされたゼロを有する)とを含むことができる。一般に、エンコーダの出力は、データ・ペイロードと関連したバイト及びオーバーヘッド・チェック情報のバイト(すなわち、パディングされたゼロが排除される)のみを提供する。このように、フラッシュ・コントローラによりフラッシュ・アレイに書き込まれた情報が低減される(パディングされたゼロはフラッシュ・アレイに書き込まれないので、パディングされたゼロが存在すると仮定する)。
【0024】
少なくとも1つの実施形態において、フラッシュ・ブロックがフラッシュ・アレイに書き込まれた時点で、フラッシュ・コントローラは、ストレージ・ブロック(例えば、ページ)内に適合できるような、多くの異なるサイズのコンテナとしてパックするように構成される。コンテナ・サイズ、データ・ペイロードのバイト数、及びコンテナの各々についてのアドレスも格納される(例えば、ストレージ・ブロック内又は別の位置に)ことを理解されたい。代替的に、簡単にするために、フラッシュ・ブロック書き込みが、ストア操作のために複数のデータ・ペイロード・タイプの1つだけを保持すると示されるとき、コンテナ・サイズは、フラッシュ・ブロック・パラメータに対応し得る。
【0025】
1つ又は複数の実施形態において、ホスト読み出しが行われると、フラッシュ・コントローラは、所望のデータ・ペイロードがフラッシュ及び所望のデータ・ペイロード用のコンテナ・タイプ内に物理的に格納される(データ構造にアクセスすることにより)場所を判断する。次に、1つ又は複数のコンテナは、必要に応じてゼロがパディングされたデコーダ(例えば、TPCデコーダ)を通して読み出され、処理されて、データ・ペイロードを与える。次に、デコードの後、要求されたデータがホストに戻される。読み出される付加的なコンテナ(すなわち、要求されたデータを含まないが、要求されたデータを戻すために読み出されたコンテナ)が廃棄されても、又は付加的なコンテナ内のデータ・ペイロードが要求されるイベントにおいて一定の時間バッファ内に保持されてもよい。
【0026】
どのコンテナを特定のホスト書き込みアクセスに割り当てるかを判断する際、フラッシュ・コントローラは、書き込みアクセスと関連したデータが、典型的に、どのように読み出されるかを示す収集された統計値を利用することができる(アドレス又はアドレス範囲に基づいて)。例えば、読み出されたある量のデータが特定サイズのページ・コンテナに対応する可能性が高い場合、データは、アクセス頻度に関係なく、特定サイズのコンテナに格納することができる。一例として、一般的に、所定のデータが、2分の1ページ・コンテナのデータ・ペイロードに対応する量で読み出された場合、所定のデータは2分の1ページ・コンテナ内に格納される。要求されたデータが読み出される方法について統計値が利用可能でないイベントにおいて、フラッシュ・コントローラは、アクセス頻度を用いて、データ・ペイロードに対するコンテナを選択するときに、データがホットであるか又はコールドであるかを判断することができる。
【0027】
一例として、フラッシュ・コントローラは、最もホットなホスト・アクセス(例えば、100ミリ秒未満ごとにアクセスされるデータ)に対する4分の1ページ・コンテナ;2番目にコールドなアクセス(例えば、100ミリ秒ごとから200ミリ秒ごとまでの間にアクセスされるデータ)に対する2分の1ページ・コンテナ;及び最もコールドなアクセス(例えば、200ミリ秒ごとに1回を下回る頻度でアクセスされるデータ)に対する1ページ・コンテナを選ぶように構成することができる。少なくとも1つの実施形態において、2分の1ページの転送について、フラッシュ・コントローラは、符号化率の非効率のために、4分の1ページ・コンテナを使用しない。この場合、2分の1ページ・コンテナ又は1ページ・コンテナのいずれかが、フラッシュ・コントローラにより選択される。本明細書での議論は、4分の1ページ、2分の1ページ及び1ページ・コンテナに焦点を合わせているが、開示される技術は、一般的にデータがフラッシュに書き込まれる方法に応じて、3つのより多い又は少ないサイズのコンテナ及びコンテナに対する異なるページ・サイズ粒度を用いるデータ・ストレージ・システムにおいて用いることができる(例えば、ストレージ・システムは、16分の1ページ・コンテナ、8分の1ページ・コンテナ、4分の1ページ・コンテナ、2分の1ページ・コンテナ及び1ページ・コンテナを用いることができる)ことを理解されたい。さらに、符号語は、フラッシュ・ページ毎の符号語の数が、例えば、3分の1ページ・コンテナ又は6分の1ページ・コンテナなど2の整数乗でないように定めることができる。
【0028】
ここで図を、特に
図1を参照すると、本明細書でさらに説明されるようなNANDフラッシュ・メモリ(又は、単にNANDフラッシュ)を用いるデータ・ストレージ・システムを含む例示的データ処理環境100の高レベル・ブロック図が示される。図示のように、データ処理環境100は、命令及びデータを処理する1つ又は複数のプロセッサ104を有する少なくとも1つのプロセッサ・システム102を含む。プロセッサ・システム102は、プログラム・コード、オペランド及び/又はプロセッサ104により実行される処理の実行結果を格納することができるローカル・ストレージ106(例えば、ダイナミック・ランダム・アクセス・メモリ(DRAM)及び/又はディスク)をさらに含むことができる。種々の実施形態において、プロセッサ・システム102は、例えば、モバイル・コンピューティング・デバイス(スマートフォン又はタブレットなど)、ラップトップ又はディスクトップ・パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム(インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なPOWER(商標)シリーズの1つのような)、又はメインフレーム・コンピュータ・システムとすることができる。プロセッサ・システム102はまた、ARM(商標)、PowerPC(商標)、Intel(商標)X86のような種々のプロセッサ、又はメモリ・キャッシュ、メモリ・コントローラ、ローカル・ストレージ、入力/出力(I/O)バス・ハブ等と結合されたいずれかの他のプロセッサを用いた、埋め込まれたプロセッサ・システムとしてもよい。
【0029】
プロセッサ・システム102は、I/Oチャネル110を介してデータ・ストレージ・システム120に直接(すなわち、介在するデバイスなしに)又は間接的に(すなわち、少なくとも1つの中間デバイスを通して)結合されたI/Oアダプタ108をさらに含む。種々の実施形態において、I/Oチャネル110は、例えば、ファイバ・チャネル(FC)、FCオーバー・イーサネット(FCoE)、インターネット・スモール・コンピュータ・システム・インターフェース(iSCI)、Transport control protocol/Internet protocol(TCP/IP)、peripheral component interconnect express(PCIe)等を含む、周知の又は将来開発される通信プロトコルのうちのいずれか1つ又はその組み合わせを用いることができる。I/Oチャネル110を介して通信されるI/O操作には、プロセッサ・システム102がデータ・ストレージ・システム120からデータを要求する読み出しI/O操作と、プロセッサ・システム102がデータ・ストレージ・システム120内へのデータの格納を要求する書き込みI/O操作とが含まれる。
【0030】
示される実施形態において、データ・ストレージ・システム120は、データ・ストレージ・システム120がI/Oチャネル110を介してプロセッサ・システム102から要求を受け取り、これに応答する、インターフェース122を含む。インターフェース122は、関連したフラッシュ・コントローラ・メモリ126(例えば、ダイナミック・ランダム・アクセス・メモリ(DRAM))を有するフラッシュ・コントローラ124(例えば、特定用途向け集積回路(ASIC)及びフィールド・プログラマブル・ゲート・アレイ(FPGA))に結合される。1つ又は複数の実施形態において、フラッシュ・コントローラ124は、NANDフラッシュ・メモリ・アレイ140内に格納される情報をエンコード/デコードするのに用いられるエンコーダ/デコーダ127を含むECCエンジン123(例えば、TPCエンジン)を含む。本開示によると、フラッシュ・コントローラ124は、符号語をNANDフラッシュ・メモリ・アレイ140内に格納する前に、エンコードされた符号語からパディングされたゼロを除去するように構成される。フラッシュ・コントローラ124はまた、読み出された符号語をデコードする前に、NANDフラッシュ・メモリ・アレイ140から読み出された符号語内にパディングされたゼロを挿入するようにも構成される。示されるように、マトリックス125をフラッシュ・コントローラ・メモリ126内に形成して、符号語の形成を容易にすることができる。例えば、マトリックス125は、400列及び352行を有するTPCマトリックスとすることができる。マトリックス125は、必要に応じて、データ・ストレージ・システム120の異なる部分にプロビジョニングできることを理解されたい。フラッシュ・コントローラ124は、関連したCPUメモリ130(例えば、DRAM)を有するCPU128に付加的に結合され、NANDフラッシュ・メモリ・アレイ140にさらに結合される。
【0031】
フラッシュ・コントローラ124がFPGAと共に実装される実施形態において、CPU128は、データ・ストレージ・システム120の起動中にフラッシュ・コントローラ124をプログラムし、構成することができる。起動後、一般的な操作において、フラッシュ・コントローラ124は、I/Oチャネル110及びインターフェース122を介して読み出し及び書き込みI/O操作を受け取り、NANDフラッシュ・メモリ・アレイ140内に格納されたデータを読み出し、及び/又はデータをNANDフラッシュ・メモリ・アレイ140内に書き込む。フラッシュ・コントローラ124は、例えば、NANDフラッシュ・メモリ・アレイ140にアクセスして、NANDフラッシュ・メモリ・アレイ140との間で要求されたデータを読み書きすることによって、又はNANDフラッシュ・メモリ・アレイ140と関連したメモリ・キャッシュ(図示せず)にアクセスすることによって、これらのI/O操作をサービスする。上述のように、フラッシュ・コントローラ124はまた、NANDフラッシュ・メモリ・アレイ140に書き込まれるデータをエンコードし、NANDフラッシュ・メモリ・アレイ140から読み出されるデータをデコードするためのエンコーダ/デコーダ127を含む、ECCエンジン123を有するように構成することもできる。上述のようにデータをエンコード/デコードする際、フラッシュ・コントローラ124は、例えば、フラッシュ・コントロール・メモリ126内に実装することができるマトリックス125にアクセスする。
【0032】
フラッシュ・コントローラ124はまた、論理−物理アドレス変換を提供して、NANDフラッシュ・メモリ・アレイ140内の特定のメモリ位置へのアクセスを可能にするフラッシュ変換層(FTL)を実装することもできる。一般に、プロセッサ・システム102のようなホスト・デバイスからフラッシュ・コントローラ124により受信される要求は、データがアクセスされる(読み出し又は書き込みが行われる)論理ブロック・アドレス(LBA)を含み、書き込み操作の場合、書き込みデータはデータ・ストレージ・システム120に格納される。要求はまた、アクセスされるデータの量(又はサイズ)を指定することもできる。データ・ストレージ・システム120がサポートするプロトコル及び機能に応じて、他の情報を伝達することもできる。従って、ホスト・デバイスによって与えられるLBAは、論理アドレス空間内のページに対応する。フラッシュ変換層は、LBAを、NANDフラッシュ・メモリ・アレイ140内の対応する物理位置に割り当てられた物理アドレスに変換する。フラッシュ・コントローラ124は、アドレス変換を行い、及び/又は、論理アドレスと物理アドレスとの間のマッピングを、フラッシュ・コントローラ・メモリ126内に格納することができる、変換テーブル(TT)150などの論理−物理変換データ構造内に格納することができる。
【0033】
図1にさらに示されるように、フラッシュ・コントローラ124は、NANDフラッシュ・メモリ・アレイ140に関する情報を追跡するために1つ又は複数の付加的なデータ構造を維持することができ、そのデータ構造をフラッシュ・コントローラ・メモリ126内のバッファに入れることもできる。これらのデータ構造は、例えば、消去されたNANDフラッシュ・メモリ・アレイ140内の物理メモリのブロックを識別する消去ブロックリスト(EBL)152、書き込みI/O操作の書き込みデータを用いたプログラミングに利用可能なNANDフラッシュ・メモリ・アレイ140内の物理メモリのブロックを識別する利用可能ブロック・キュー(ABQ)、及び頻繁にアクセスされるLBAを識別し、書き込みI/O操作上のデータ・ペイロードに対して選択すべきコンテナ・サイズの判断に用いることができるホット・リスト156を含むことができる。当業者には理解されるように、種々の実施形態において、フラッシュ・コントローラ124は、共通のデータ構造内のこれらのデータ構造の1つ又は複数を結合すること、及び/又は、NANDフラッシュ・メモリ・アレイ140を管理するために付加的なデータ構造を実装することができる。
【0034】
種々の実施形態において、NANDフラッシュ・メモリ・アレイ140は、異なる形態をとることができる。ここで
図2〜
図5を参照すると、本開示によるNANDフラッシュ・メモリ・アレイ140内の物理メモリの1つの例示的構成が示される。
【0035】
図2に示されるように、NANDフラッシュ・メモリ・アレイ140は、32個の別個にアドレス指定可能なNANDフラッシュ・ストレージ・デバイスから形成することができる。示される例において、フラッシュ・ストレージ・デバイスM0a〜M15bの各々は、例えば、シングル・レベル・セル(SLC)、マルチ・レベル・セル(MLC)、3レベル・セル(TLC)、又は4レベル・セル(QLC)のNANDフラッシュ・モジュールなどの、ボード実装フラッシュ・モジュールの形態をとることができる。32個のNANDフラッシュ・モジュールは、2つの(M0a、M0b)乃至(M15a、M15b)の16のグループの形に構成される。物理アドレッシング・スキームのために、2つのモジュールの各グループは、「チャネル」とも呼ぶことができる「レーン」を形成することができ、NANDフラッシュ・メモリ・アレイ140は、16個のチャネル又はレーン(レーン0〜レーン15)を含む。
【0036】
1つの実施形態において、個々のレーンの各々は、レーンをフラッシュ・コントローラ124に結合する、それぞれの関連したバスを有する。従って、特定の通信バスの1つへの通信を指示することによって、フラッシュ・コントローラ124は、フラッシュ・モジュールのレーンの1つへの通信を指示することができる。所定のレーンについての各通信バスは、他のレーンについての通信バスと独立しているので、フラッシュ・コントローラ124は、コマンドを発行し、同時に種々の通信バスにわたってデータを送受信し、フラッシュ・コントローラ124が、同時に又はほぼ同時に個々のレーンに対応するフラッシュ・モジュールにアクセスすることが可能になる。
【0037】
ここで
図3を参照すると、
図2のフラッシュ・モジュールM0a〜M15bのいずれかを実装するために用いることができる例示的フラッシュ・モジュール300が示される。
図3に示されるように、フラッシュ・モジュール300により与えられる物理ストレージ位置は、チップ・イネーブル(CE)を通してアドレス指定する及び/又は識別することができる物理位置にさらに細分される。
図3の例において、各フラッシュ・モジュール300の物理メモリは、各々がフラッシュ・コントローラ124によりアサートされ、対応するCE内の物理メモリ位置との間のアクセスを可能にするそれぞれのCEラインを有する、4つのチップ・イネーブル(CE0、CE1、CE2及びCE3)に分割される。次に、各々のCEは、各々が2つのプレーン(プレーン0及びプレーン1)を有する複数のダイ(例えば、ダイ0及びダイ1)に細分される。各々のプレーンは、フラッシュ・モジュールの物理的レイアウトのために、互いに物理的に関連付けられ、読み書き操作のような種々の操作の性能のために共通の回路(例えば、I/Oバッファ)を用いる、ブロックの集合(後述する)を表す。
【0038】
図4及び
図5にさらに示されるように、
図3のフラッシュ・モジュール300内のプレーンのいずれかを実装するために用いることができる例示的プレーン400が、例えば、2048のブロックの物理メモリを含む。一般に、ブロック500は、典型的には物理的に互いに関連付けられた物理ページの集合である。この関連付けにより、ブロックは、NANDフラッシュ・メモリ・アレイ140内で消去することができる物理ストレージ位置の最小粒度となるように定められる。
図5の実施形態において、各ブロック500は、例えば、256の物理ページを含み、物理ページは、書き込みアクセスのための最小の別個にアドレス指定可能なデータ単位となるように定められる。例示的システムにおいて、データの各物理ページは、データ・ストレージに、以下により詳細に説明されるメタデータのための付加的なストレージを加えた共通の容量(例えば、16kB)を有する。従って、データは、ページ毎に、NANDフラッシュ・メモリ・アレイ140内に書き込まれるが、ブロック毎に消去される。
【0039】
データは、2ステップ・プロセスで、NANDフラッシュ・メモリ・アレイ140から取り出す(読み出す)ことができる。フェッチ操作としても知られる第1のステップにおいて、フラッシュ・ページ全体が、基礎をなすフラッシュ・ストレージ媒体から取り出され、出力データ・バッファに転送される。データ転送操作としても知られる第2のステップにおいて、既にフェッチされたデータのいずれかのサブセットをフラッシュメモリ・デバイスから転送することができる。従って、各読み出し操作のフェッチ・コンポーネントは、最小粒度の単一フラッシュ・ページを有し、一方、各読み出し操作のデータ転送コンポーネントは、可能な限り単一バイトと同じくらい小さい、はるかに小さい粒度を有する。
図5にさらに示されるように、各ブロック500は、使用されなくなった(retired)(すなわち、使用をやめた)又は使用されている(not-retired)(すなわち、アクティブ又は依然として使用中)といった、そのブロック500内の各物理ページの状態を示す、ページ状態情報502を含むことが好ましい。種々の実装において、PSI 502を収集して、ブロック500内の単一のデータ構造(例えば、ベクトル又はテーブル)にすること、ブロック500内に分散させること(例えば、各物理ページに添付されるメタデータの1つ又は複数のビットとして)、又はデータ・ストレージ・システム120内のどこかに維持すること(例えば、フラッシュ・コントローラ・メモリ126のデータ構造内に)ができる。
【0040】
上述のように、データ・ストレージ・システム120は、通常、外部デバイスがNANDフラッシュ・メモリ・アレイ140内の物理メモリ位置に直接アドレス指定する、及び/又はアクセスすることを許可しない。代わりに、データ・ストレージ・システム120は、通常、単一の連続した論理アドレス空間を外部デバイスに与えるように構成され、従って、ホスト・デバイスが論理アドレス空間内のLBAとの間でデータを読み書きするのを可能にしながら、フラッシュ・コントローラ124及びCPU128が、種々のLBAと関連したデータが、NANDフラッシュ・メモリ・アレイ140を含む物理メモリ位置内に実際に常駐する場所を制御することを可能にしながら、ホスト・デバイスが論理アドレス空間内のLBAとの間でデータを読み書きするのを可能にする。このように、NANDフラッシュ・メモリ・アレイ140の性能及び寿命をインテリジェントに管理及び最適化することができる。
【0041】
データ・ストレージ・システム120に書き込みが行われると、フラッシュ・コントローラ124及びCPU128は、NANDフラッシュ・メモリ・アレイ140内の消去ブロックの1つの物理ページの1つに格納されたデータを無効にする。新しいデータは、書き込まれているデータと併合され、最終的に、NANDフラッシュ・メモリ・アレイ140内の異なる位置に格納される。ページ又はページの部分は無効にされ、従って、NANDフラッシュ・メモリ・アレイ140の部分は未使用になる。フラッシュ・コントローラ124及びCPU128は、最終的に、ガベージ・コレクション(garbage collection)と呼ばれるプロセスを通して無効にされたページ又はページの部分を再利用する必要がある。特定の消去ブロックは、消去ブック内のデータのどれだけが無効かを含む、多数の要因に基づいて選択される。フラッシュ・コントローラ124は、EBL 152内の消去ブロックの物理ブロック・アドレス(PBA)を記録する。有効なデータが、ホストからの新しい書き込みと共に読み出され、ABQ154から割り当てられたブロック内に書き込まれる。
【0042】
データ・ストレージ・システム120により実装されるフラッシュ変換層は、NANDフラッシュ・メモリ・アレイ140内の物理メモリから、ホスト・デバイスに利用可能にされた論理アドレス空間を分離するので、NANDフラッシュ・メモリ・アレイ140のサイズが、ホスト・デバイスに与えられた論理アドレス空間のサイズと等しい必要はない。大部分の実施形態において、利用可能な総物理メモリを下回る論理アドレス空間を与えること(すなわち、NANDフラッシュ・メモリ・アレイ140をオーバー・プロビジョニング(over-provisioning)すること)は、有利である。このようなオーバー・プロビジョニングは、上述のように特定量の無効データの存在が与えられた場合でも、論理アドレス空間が完全に利用されたときに、物理メモリ・リソースが利用であることを保証する。まだ再利用されていない無効データに加えて、オーバー・プロビジョニングされた空間を用いて、ECC、巡回冗長検査(CRC)及びパリティのようなデータ保護スキームの使用に伴うメモリ故障及びメモリ・オーバーヘッドの存在が与えられた場合でも、十分な論理空間が存在することを保証することができる。
【0043】
1つ又は複数の実施形態において、データは、本明細書では「ページ・ストライプ」と呼ばれる、NANDフラッシュ・メモリ・アレイ140の関連した物理ページのグループに書き込まれる。NANDフラッシュ・メモリ・アレイ140内に格納された種々のページ・ストライプの長さは、変化することができ、好ましくは変化するが、1つの実施形態においては、各ページ・ストライプは、2乃至15の書き込みデータ・ページ(一般的には、ホスト・デバイスにより与えられる)と、書き込みデータについてのデータ保護情報を格納するために用いられる1つの付加的ページ(「データ保護ページ」)とを含む。例えば、
図6は、N個のデータ・ページ(すなわち、Dページ00乃至DページN−1)と、1つのデータ保護ページ(すなわち、PページN)とを含む例示的ページ・ストライプ600を示す。
【0044】
図7は、ページ・ストライプ700内の各データ・ページの例示的フォーマットを示す。この例において、データ・ページ700は、16kBデータ・フィールド702と、データ・ページ記述するメタデータのための付加的フィールドとを含む。示される例において、これらのメタデータ・フィールドは、データ・ページ700のLBAを含むLBAフィールド704と、データ・フィールド702及びLBAフィールド704の組み合わせについて計算されたCRC値を含むCRCフィールド706と、示される例では、データ・フィールド702、LBAフィールド704及びCRCフィールド706のコンテンツの組み合わせから計算されたECC値を含むECCフィールド708とを含む。
【0045】
図8は、ページ・ストライプのデータ保護ページ800の例示的フォーマットを示す。示される例では、データ保護ページ800は、ページ・ストライプ600内のデータ・ページ700のデータ・フィールド702のビット単位(bit-by-bit)XORを含むデータ排他的OR(XOR)フィールド802を含む。データ保護ページ800は、ページ・ストライプ600内のデータ・ページ700のLBAフィールド704のビット単位XORを含むLBA XORフィールド804をさらに含む。データ保護ページ800は、最後に、それぞれ、データ保護ページ800についてのCRC値及びECC値を格納するためのCRCフィールド806及びECCフィールド808を含む。こうした保護スキームは、パリティ・フィールドが必ずしも1つの特定のフラッシュ・プレーン(flash plane)上に配置されないので、一般に、RAID5と呼ばれる。しかしながら、リード・ソロモン(Reed-Solomon)のような代替的データ保護スキームを用い得ることを理解されたい。
【0046】
上述したデータ・ページ及びデータ保護ページ用のフォーマットは、複数の異なる保護機構を用いてページ・ストライプ内に格納されたデータを保護する。最初に、各データ・ページ内のECCビットの使用は、フラッシュ・ページ内のビット誤りの幾らかの数の訂正を可能にする。用いられるECC方法に応じて、NANDフラッシュ・ページ内の何百ものビット又は何千ものビットさえも訂正することが可能であり得る。ECCチェック及び訂正が行われた後、訂正されたデータを検証するために、訂正されたCRCフィールドが用いられる。併用されると、これらの2つの機構は、ローカルなページ内情報のみを用いて、比較的良性の誤り(benign error)の訂正及びより重大な誤りの検出を可能にする。訂正不能な誤りがデータ・ページ内に発生した場合、例えば、データ・ページを格納するのに用いられる物理ページの故障により、ページ・ストライプについての他のデータ・ページ及びデータ保護ページから、故障データ・ページのデータ・フィールド及びLBAフィールドのコンテンツを再構成することができる。
【0047】
データ・ストライプのデータ・ページ及びデータ保護ページが内部に存在する物理メモリ位置は、NANDフラッシュ・メモリ・アレイ140内で変化するが、1つの実施形態において、所定のページ・ストライプを含むデータ・ページ及びデータ保護ページは、データ・ストレージ・システム120の動作全体を最適化するために選択される物理メモリ位置に格納される。例えば、幾つかの実施形態において、ページ・ストライプを含むデータ・ページ及びデータ保護ページは、異なる物理レーンがデータ・ページ及びデータ保護ページの各々を格納するために用いられるように格納される。フラッシュ・コントローラ124はページ・ストライプを含むデータのページの全てに同時に又はほぼ同時にアクセスできるので、幾つかの実施形態は、ページ・ストライプへの効率的なアクセスをサポートすることができる。レーンへのページの割り当ては連続的である必要はなく(すなわち、データ・ページは、いずれかのレーン内に任意の順序で格納することができる)、ページ・ストライプが全長ページ・ストライプ(例えば、15のデータ・ページ及び1つのデータ保護ページを含む)でない限り、ページ・ストライプを格納するために利用されるレーンを隣接させる必要はない。
【0048】
データ・ストレージ・システム120の一般的な物理構造及び動作を説明してきたが、ここで、NANDフラッシュ・メモリ・アレイ140に書き込まれたデータ・ペイロードに対するコンテナ・サイズを選択することに関する態様を含む、データ・ストレージ・システム120の特定の動作態様を説明する。
【0049】
一般に、フラッシュ・コントローラ124は、アクセス履歴又はデータ・アクセスの頻度に基づき、入ってくるワークロードを分離するように構成される。
図9を参照すると、NANDフラッシュ・メモリ・アレイ140内に格納されるページ900が示される。ページ900は、2分の1ページ・コンテナ902及び2つの4分の1ページ・コンテナ904を含む。400×352のマトリックスの場合、4分の1ページ・コンテナは、1,866バイトまでのデータ・ペイロードと、2,534バイトのオーバーヘッド・チェック情報(NANDフラッシュ・メモリ・アレイ140との間で読み書きされないが、エンコード/デコード・プロセスの際にフラッシュ・コントローラ124により付加される、少なくとも13,200バイトのパディングされたゼロを有する)とを含む。2分の1ページ・コンテナは、6,266バイトまでのデータ・ペイロードと、2,534バイトのオーバーヘッド・チェック情報(NANDフラッシュ・メモリ・アレイ140との間で読み書きされないが、エンコード/デコード・プロセスの際にフラッシュ・コントローラ124により付加される、少なくとも8,800バイトのパディングされたゼロを有する)とを含む。
【0050】
本開示によると、フラッシュ・コントローラ124は、入ってくるワークロードを分離し、より頻繁にアクセスされるデータ(すなわち、ホット・データ)はより小さいコンテナ・サイズに割り当てられるので、無駄な帯域幅が最小にされ(たとえ減少した符号化率においても)、あまり頻繁にアクセスされないデータ(すなわち、コールド・データ)又は一般的に連続的アクセス・パターンでアクセスされるデータは、より大きいコンテナに割り当てられるので、関連した符号化率は、フラッシュのより効率的な使用をもたらす(より高い帯域幅要件においても)。
図9において、コンテナ902内に格納されたデータは、コンテナ904内に格納されたデータと比べて、あまり頻繁にアクセスされない。
図10を参照すると、4つの4分の1ページ・コンテナ904を含むページ1000が示される。この場合、フラッシュ・コントローラ124は、データ・アクセス頻度、又は入ってくるワークロードと関連したデータ・アクセスの履歴に基づき、4つの入ってくるワークロードを4つのそれぞれの4分の1ページ・コンテナ904に割り当てている。
【0051】
ここで
図11を参照すると、データ・ストレージ・システム120内に書き込まれる、入ってくるデータに対するコンテナ・サイズを選択するための例示的プロセスの高レベル論理フローチャートが説明される。コンテナ選択プロセスは、例えば、ハードウェア、ファームウェア、ソフトウェア、又はこれらの組み合わせの形で、フラッシュ・コントローラ124及び/又はCPU128により実施することができる。説明を簡単にするために、以下、プロセスはフラッシュ・コントローラ124により実施されると仮定する。
【0052】
プロセスはブロック1100で始まり、次に、フラッシュ・コントローラ124がプロセッサ・システム102などのホスト・デバイスからの書き込み要求の受信を待つ、決定ブロック1102に進む。書き込み要求は、例えば、NANDフラッシュ・メモリ・アレイ140に書き込まれるデータと、ホスト・デバイスがデータの格納を望むターゲットLBAの表示とを含む。書き込み要求の受信に応答して、プロセスは、ブロック1102から、コントローラ124がデータ・アクセスの頻度(例えば、論理・物理アドレス変換テーブル150を参照することによって)、又は書き込み要求内で指定されるアドレスについてのアクセス履歴を求める、ブロック1104に進む。次に、随意的な決定ブロック1105において、フラッシュ・コントローラ124は、アクセス履歴が書き込み要求に利用可能であるかどうかを判断する。ブロック1105において、アクセス要求が書き込み要求に利用可能であることに応答して、制御は、ラッシュ・コントローラ124が履歴に基づいてコンテナ・サイズを選択する、ブロック114に移る。
【0053】
例えば、格納されたデータが2分の1ページ・コンテナにおいて常に読み出されることをアクセス履歴が示すことに応答して、フラッシュ・コントローラ124は、書き込み要求に対して2分の1ページ・コンテナを選択する。履歴が書き込み要求に利用可能でないか又は履歴がコンテナ・サイズの選択の際に利用されない場合、制御は、ブロック1105から決定ブロック1106に移る。ブロック1106において、フラッシュ・コントローラ124は、書き込みアクセスのターゲットLBAのアクセス頻度が第1のアクセス・レベル(すなわち、データが「ホット・データ」であることを示すアクセス・レベル)を上回るかどうかを判断する。ブロック1106において、アクセス頻度が第1のアクセス・レベルを上回ることに応答して、制御は、ブロック1108に移る。ブロック1108において、フラッシュ・コントローラ124は、帯域幅最適化符号語に対するコンテナ・サイズ(例えば、4分の1ページ・コンテナ)を選択する。上述のように、より小さいコンテナの選択(符号化率を低減させるが)は、帯域幅の効率を改善する。ブロック1108から、制御は、次の書き込み要求がデータ・ストレージ・システム120により受信されるまで、ブロック112に移る。
【0054】
ブロック1106において、アクセス・レベルが第1のアクセス・レベルを上回らないことに応答して、制御は、決定ブロック1110に移る。ブロック1110において、フラッシュ・コントローラ124は、書き込みアクセスのターゲットLBAのアクセス頻度が第2のレベルを下回るかどうかを判断する。ブロック1110において、アクセス頻度が第2のアクセス・レベルを下回ることに応答して、制御は、フラッシュ・コントローラ124が符号化率最適化符号語に対するコンテナ・サイズ(例えば、1ページ・コンテナ)を選択する、ブロック1112に移る。
【0055】
上述のように、より大きいコンテナの選択は(帯域幅効率を減少させるが)、符号化率を改善する。ブロック1112から、制御は、次の書き込み要求がデータ・ストレージ・システム120により受信されるまで、ブロック1112に移る。ブロック1110において、アクセス・レベルが第2のアクセス・レベルを下回らない場合、制御は、フラッシュ・コントローラ124が、可能な場合は、履歴に基づいてコンテナ・サイズ(例えば、2分の1ページ・コンテナ)を選択する、決定ブロック1114に移る。履歴が利用可能でない場合、フラッシュ・コントローラ124は、デフォルトのコンテナ・サイズを選択することができる。ブロック1112から、制御は、ブロック1122に移る。データ・ペイロードに対するコンテナ・サイズの選択において、2つより多いアクセス・レベルを指定することができることを理解されたい。
【0056】
図内のフローチャート及びブロック図は、本発明の種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点で、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に記された機能は、図内で記された順序ではない順序で生じ得ることにも留意されたい。例えば、連続して示された2つのブロックが、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はときとして逆順で実行されることもある。ブロック図及び/又はフローチャート図の各ブロック、及びブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する専用のハードウェア・ベースのシステム、又は専用のハードウェアとコンピュータ命令との組み合わせによって実装することができることにも留意されたい。
【0057】
本発明は、1つ又は複数の実施形態を参照して特に示されるが、当業者であれば、本発明の趣旨及び範囲から逸脱することなく、形態及び細部における種々の変更をなし得ることが理解されるであろう。例えば、特定の機能を指示するフラッシュ・コントローラを含むデータ・ストレージ・システムに関して態様が説明されたが、本発明は、こうした機能を実施する又はこうした機能を実施させるために、プロセッサにおり処理することができるプログラム・コードを格納するストレージ・デバイスを含むプログラム製品として代替的に実装できることを理解されたい。本明細書で用いられる場合、「ストレージ・デバイス」とは、法定製造物品のみを含み、かつ、一時的伝搬媒体それ自体を排除するように具体的に定められる。
【0058】
さらに、NANDフラッシュ・メモリの使用を含む実施形態が説明されているが、本明細書における本発明は、NANDフラッシュ・メモリと共に使用することに限定されるものではなく、代わりに、いずれかの他の不揮発性ランダム・アクセス・メモリ(NVRAM)技術にも適用可能であることを理解されたい。例えば、開示される技術は、相変化メモリ(PCM)、磁気抵抗RAM(MRAM)及び抵抗RAM(RRAM)に適用することができる。
【0059】
上述の図面及び以下の特定の構造及び機能の説明は、本出願人が発明したものの範囲又は添付の特許請求の範囲の範囲を制限するために与えられるものではない。むしろ、図面及び説明は、特許保護を求める本発明を作成及び使用するために、当業者に教示するために与えられる。当業者であれば、明確化及び理解のために、本発明の商業的実施形態の全ての特徴が説明又は図示されているわけではないことを理解するであろう。当業者であれば、商業的実施形態についての開発者の最終目標を達成するために、本発明の態様を組み込む実際の商業的実施形態の開発には、多数の実装固有の決定が必要であることも理解するであろう。そうした実装固有の決定は、特定の実装、位置により及びその時々に変化することがある、システム関連、事業関連、政府関連及び他の制約の遵守を含むことがあり、恐らくそれらに限定されない。開発者の努力は、絶対的な意味で非常に複雑で時間がかかるものであり得るが、それにも関わらず、こうした努力は、この開示の利益を受ける当業者にとっては日常業務たり得る。本明細書で開示され教示される本発明には、多数の様々な修正及び代替的形態の余地があることも理解されたい。最後に、これに限定されるものではないが、「a(1つの)」のような単数形の用語の使用は、項目の数を限定することを意図するものではない。