(57)【要約】  記憶媒体にデータを書き込むためにシステム、方法、装置及び技術が提供される。１又は複数のデータ転送チャネルを通じて記憶媒体のストライプが接続され、ストライプが記憶媒体の複数のページを有する。データストリームが受信され、データストリームが複数のアロケーションユニット（複数のＡＵ）に分割され、複数のＡＵの各ＡＵが、予め定められたバイト長を持つ。複数のＡＵから選択されたＡＵのバイトを複数のページのうちの第１ページ上の開始バイトから複数のページのうちの第２ページ上の終了バイトまで連続して書き込むことによって、選択されたＡＵの第１部分が第１ページに書き込まれ、選択されたＡＵの第２部分が第２ページに書き込まれる。
2015511040.tif 000002
【特許請求の範囲】
【請求項１】
記憶媒体にデータを書き込むシステムであって、前記システムは、
１又は複数のデータ転送チャネルを通じて前記記憶媒体のストライプと接続し、前記ストライプが前記記憶媒体の複数のページを有するインタフェース回路と、
データストリームを受信して、前記データストリームを複数のアロケーションユニット（複数のＡＵ）に区画化する区画化回路と、
前記複数のＡＵから選択されたＡＵのバイトを前記複数のページのうちの第１ページ上の開始バイトから前記複数のページのうちの第２ページ上の終了バイトまで連続して書き込むことによって、前記選択されたＡＵの第１部分を前記第１ページに書き込み、前記選択されたＡＵの第２部分を前記第２ページに書き込む書き込み回路と
を備え、
前記複数のＡＵの各ＡＵは、予め定められたバイト長を持つ
システム。
【請求項２】
前記書き込み回路は、前記複数のページの順序付けされたシーケンスに基づいて、前記複数のＡＵを前記ストライプに書き込む
請求項１に記載のシステム。
【請求項３】
前記書き込み回路は、書き込みバッファを有し、前記書き込み回路は、前記ストライプの長さに等しいデータ量が前記書き込みバッファ内に蓄積した後に前記記憶媒体に書き込む
請求項１又は２に記載のシステム。
【請求項４】
前記複数のページは、複数の記憶デバイスに配置されている
請求項１から３のいずれか１項に記載のシステム。
【請求項５】
前記書き込み回路は、前記１又は複数のデータ転送チャネルのうちの１つめのデータ転送チャネルを用いて前記複数のページのうちの１つめにアクセスし、前記１又は複数のデータ転送チャネルのうちの２つめを用いて前記複数のページのうちの２つめにアクセスする
請求項１から４のいずれか１項に記載のシステム。
【請求項６】
前記複数のＡＵの各ＡＵは、前記１又は複数のデータ転送チャネルからの最大２つのデータ転送チャネルに関連付けられ、前記２つのデータ転送チャネルは隣接している
請求項１から５のいずれか１項に記載のシステム。
【請求項７】
訂正回路
を更に備え、
前記訂正回路は、
前記記憶媒体に記憶されたデータを読み出し、
前記読み出しデータ中の複数の未書き込みのバイトを検出し、
前記読み出しデータを、前記記憶媒体に再書き込みし、
前記再書き込みは、前記複数の未書き込みのバイトに渡って書き込む
請求項１から６のいずれか１項に記載のシステム。
【請求項８】
前記記憶媒体のストライプに記憶されているデータを読み出して、前記読み出されたデータに対応する誤り訂正シーケンスを計算する誤り訂正回路（ＥＣＣ回路）
を更に備える請求項１から７のいずれか１項に記載のシステム。
【請求項９】
前記書き込み回路は、前記誤り訂正シーケンスを受信し、前記誤り訂正シーケンスを前記記憶媒体の前記ストライプの最後のページに書き込む
請求項８に記載のシステム。
【請求項１０】
前記書き込み回路は、前記ストライプの第２部分に書き込まれない状態にしたまま、前記複数のＡＵを前記ストライプの第１部分に書き込む
請求項１から９のいずれか１項に記載のシステム。
【請求項１１】
記憶媒体にデータを書き込む方法であって、
１又は複数のデータ転送チャネルを通じて前記記憶媒体のストライプと接続する段階であって、前記ストライプが前記記憶媒体の複数のページを有する段階と、
データストリームを受信して、前記データストリームを複数のアロケーションユニット（複数のＡＵ）に区画化する段階と、
前記複数のＡＵから選択されたＡＵのバイトを前記複数のページのうちの第１ページ上の開始バイトから前記複数のページのうちの第２ページ上の終了バイトまで連続して書き込むことによって、前記選択されたＡＵの第１部分を前記第１ページに書き込み、前記選択されたＡＵの第２部分を前記第２ページに書き込む段階と
を備え、
前記複数のＡＵの各ＡＵは、予め定められたバイト長を持つ
方法。
【請求項１２】
前記複数のページの順序付けされたシーケンスに基づいて、前記複数のＡＵを前記ストライプに書き込む段階
を更に備える請求項１１に記載の方法。
【請求項１３】
前記ストライプの長さに等しいデータ量が書き込みバッファ内に蓄積したとの判断に応じて前記記憶媒体に書き込む段階
を更に備える請求項１１又は１２に記載の方法。
【請求項１４】
前記複数のページは、複数の記憶デバイスに配置されている
請求項１１から１３のいずれか１項に記載の方法。
【請求項１５】
前記１又は複数のデータ転送チャネルのうちの１つめのデータ転送チャネルを用いて前記複数のページのうちの１つめにアクセスし、前記１又は複数のデータ転送チャネルのうちの２つめを用いて前記複数のページのうちの２つめにアクセスする段階
を更に備える請求項１１から１４のいずれか１項に記載の方法。
【請求項１６】
前記複数のＡＵの各ＡＵは、前記１又は複数のデータ転送チャネルからの最大２つのデータ転送チャネルに関連付けられ、前記２つのデータ転送チャネルは隣接している
請求項１１から１５のいずれか１項に記載の方法。
【請求項１７】
前記記憶媒体に記憶されたデータを読み出す段階と、
前記読み出しデータ中の複数の未書き込みのバイトを検出する段階と、
前記読み出しデータを、前記記憶媒体に再書き込みする段階と
を更に備え、
前記再書き込みする段階は、前記複数の未書き込みのバイトに渡って書き込む
請求項１１から１６のいずれか１項に記載の方法。
【請求項１８】
前記記憶媒体のストライプに記憶されているデータを読み出す段階と、
前記読み出されたデータに対応する誤り訂正シーケンスを計算する段階と
を更に備える請求項１１から１７のいずれか１項に記載の方法。
【請求項１９】
前記誤り訂正シーケンスを受信する段階と、
前記誤り訂正シーケンスを前記記憶媒体の前記ストライプの最後のページに書き込む段階と
を更に備える請求項１８に記載の方法。
【請求項２０】
前記ストライプの第２部分に書き込まれない状態にしたまま、前記複数のＡＵを前記ストライプの第１部分に書き込む段階
を更に備える請求項１１から１９のいずれか１項に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ＮＡＮＤフラッシュ記憶媒体を含む記憶媒体に効率的にデータを書き込む技術に関する。
【０００２】
関連出願のクロスレファレンス.  本特許文書は、２０１２年３月１６日に出願された米国仮出願６１／６１２，１４０の利益及び優先権を主張し、ここでその開示はその全体が本明細書中に参照として組み込まれる。
【背景技術】
【０００３】
本明細書において提供される背景説明は、本開示の文脈を一般的に提示することを目的とする。本明細書の発明者の成果は、出願時の従来技術として特にみなし得ない説明の態様だけでなく、この背景技術のセクション内に成果が記述されている範囲で、本開示に対する従来技術として明示的にも暗示的にも認められない。
【０００４】
ソリッドステートドライブ（ＳＳＤ）は、例えばＮＡＮＤフラッシュメモリデバイス又はダイナミック・ランダムアクセスメモリ（ＤＲＡＭ）デバイス等のデバイスからデータを読み書きする。ＮＡＮＤフラッシュメモリの場合、ＳＳＤは、典型的には、ＮＡＮＤフラッシュメモリから及びＮＡＮＤフラッシュメモリにデータを転送するためのいくつかのデータチャネルを持つＳＳＤコントローラを有する。更に、ＳＳＤコントローラは、典型的には、複数のアロケーションユニット（複数のＡＵ）として知られる固定バイトサイズ単位でデータを管理するファームウェアを実行する。伝統的に、データはＮＡＮＤフラッシュメモリの所与のページに単一のオペレーションで書き込まれ、書き込みオペレーションは、ＡＵのバイトサイズの整数倍のバイト数を含む。ＮＡＮＤフラッシュのページサイズがＡＵサイズの整数倍でない場合、ＮＡＮＤフラッシュのメモリは、十分に利用されていないかもしれない。
【発明の概要】
【０００５】
システム、方法、装置及び技術が、記憶媒体にデータを書き込むために提供される。システムは、１又は複数のデータ転送チャネルを通じて記憶媒体のストライプと接続するよう構成され、ストライプが記憶媒体の複数のページを有するインタフェース回路を有する。システムは、データストリームを受信して、データストリームを複数のＡＵに区画化するよう構成された区画化回路を更に備える。複数のＡＵの各ＡＵは、予め定められたバイト長を持つ。システムは、複数のＡＵから選択されたＡＵのバイトを複数のページのうちの第１ページ上の開始バイトから複数のページのうちの第２ページ上の終了バイトまで連続して書き込むことによって、選択されたＡＵの第１部分を第１ページに書き込み、選択されたＡＵの第２部分を第２ページに書き込むよう構成された書き込み回路を更に備える。
【０００６】
いくつかの実装において、書き込み回路は、複数のページの順序付けされたシーケンスに基づいて、複数のＡＵをストライプに書き込むよう構成される。いくつかの実装において、書き込み回路は、書き込みバッファを有し、書き込み回路は、ストライプの長さに等しいデータ量が書き込みバッファ内に蓄積した後に記憶媒体に書き込むよう構成される。いくつかの実装において、システムは、記憶媒体のストライプに記憶されているデータを読み出して、読み出されたデータに対応する誤り訂正シーケンスを計算するよう構成された誤り訂正（ＥＣＣ）回路を有する。いくつかの実装において、書き込み回路は、誤り訂正シーケンスを受信し、誤り訂正シーケンスを記憶媒体のストライプの最後のページに書き込むよう構成される。
【０００７】
方法は、１又は複数のデータ転送チャネルを通じて記憶媒体のストライプと接続する段階であって、ストライプが記憶媒体の複数のページを有する段階を備える。方法は、データストリームを受信して、データストリームを複数のＡＵに区画化する段階を更に有する。複数のＡＵの各ＡＵは、予め定められたバイト長を持つ。方法は、複数のＡＵから選択されたＡＵのバイトを複数のページのうちの第１ページ上の開始バイトから複数のページのうちの第２ページ上の終了バイトまで連続して書き込むことによって、選択されたＡＵの第１部分を第１ページに書き込み、選択されたＡＵの第２部分を第２ページに書き込む段階を更に有する。
【図面の簡単な説明】
【０００８】
上記及び他の態様並びにこの発明の利点は、同様の参照文字が全体を通して同様の部分を参照する下記の添付の図面と併せて、以下の詳細な説明を考慮することにより、明らかになるであろう。
【０００９】
【図１】いくつかの実施形態に従う、記憶媒体のためのデータ割り当て技術の例示的な従来技術を表す。
【００１０】
【図２】いくつかの実施形態に従う、記憶媒体内のページへのＡＵの２つの例示的な割り当てを表す。
【００１１】
【図３】いくつかの実施形態に従う、単一のストライプにページを割り当てるためのＳＳＤコントローラのファームウェアによって用いられ得る例示的な技術を表す。
【００１２】
【図４】いくつかの実施形態に従う、２つの異なるＡＵ値及び様々なストライプサイズのための記憶媒体上の記憶デバイスにおける低利用の割合（"不使用"）を表す。
【００１３】
【図５】いくつかの実施形態に従う、ストライプに含まれることになる記憶媒体のページ数を決定するためのＳＳＤコントローラのファームウェアによって実行される例示的な処理を表す。
【００１４】
【図６】いくつかの実施形態に従う、ＳＳＤコントローラが書き込みバッファを用いるシステムのために部分的に書き込まれたストライプを含む記憶媒体のページを表す。
【００１５】
【図７】いくつかの実施形態に従う、ＳＳＤコントローラが書き込みバッファを用いないシステムのために部分的に書き込まれたストライプを含む記憶媒体のページを表す。
【００１６】
【図８】いくつかの実施形態に従う、単一のチャネル又は最大２個の隣接チャネルによって単一のＡＵがアクセス可能な場合を示す。
【００１７】
【図９】いくつかの実施形態に従う、７個のＡＵ及びそれら各々の関連付けられるチャネルを表す。
【００１８】
【図１０】いくつかの実施形態に従う、本明細書に記述された任意の処理を実行するコンピューティングデバイスの例示的なブロック図を示す。
【発明を実施するための形態】
【００１９】
本明細書に開示されたものは、ストライプベースの論理構造に基づいて、ＮＡＮＤフラッシュ記憶媒体を含む記憶媒体の利用を向上させる技術である。
【００２０】
図１は、いくつかの実施形態に従う、記憶媒体用のデータ割り当て技術の例示的な従来技術を表す。特に、イラスト１００は、記憶媒体に属し、個々のページがＰ０、Ｐ１、Ｐ２及びＰ３でラベル付けされた４個のページ１１０のセットを表す。イラスト１００は、更に、ＳＳＤコントローラによって、全部で１２個のＡＵが４個のページ１１０のセットに書き込まれる様子を表す。例示的な目的で、４個のページ１１０のセットの各ページが、２，０４８バイトのサイズを持ち、各ＡＵが５２０バイトのサイズを持つと仮定する。典型的なシステムにおいて、任意のＡＵは、記憶デバイスの複数のページに渡り得ず、代わりに、単一ページに完全に書き込まれなければならない。従って、イラスト１００において、Ａ０、Ａ１及びＡ２を有するＡＵのブロック１２０は、記憶デバイスのページＰ０の最初の５２０×３＝１，５６０バイトに書き込まれる。しかしながら、書き込みオペレーション後にページＰ０内に４８８バイトしか残らないので、ページＰ０にＡ３の全体を書き込むスペースがない。
【００２１】
従って、Ａ３は、記憶媒体の新しいページＰ１に代わりに書き込まれる。特に、図１に表されるように、Ｐ０、Ｐ１、Ｐ２及びＰ３の各ページは、まさに３個のＡＵを記憶する。このように、個々のＡＵの記憶は記憶媒体の任意の２ページに渡り得ないので、記憶スペースはＰ０、Ｐ１、Ｐ２及びＰ３の各ページ上で低利用（ｕｎｄｅｒｕｔｉｌｉｚｅｄ）となる。具体的には、低利用のバイトは、図１内でバイト１２５、１３５、１４５及び１５５によって示される。特に、Ｐ０、Ｐ１、Ｐ２及びＰ３の各ページは、全２０４８バイトのうち４８８バイトの不使用スペースを有する。このように、Ｐ０、Ｐ１、Ｐ２及びＰ３の各ページは、およそ２３パーセントほど低利用となる。
【００２２】
このように、記憶媒体のページサイズがＡＵサイズの整数倍でない用途において、ＡＵの倍数のどれも正確に記憶媒体のページの全バイトを占めず、従って記憶媒体は低利用となるだろう。従って、本開示に記載されるようなストライプベースの技術は、そのような短所に対処し、ページサイズがＡＵサイズの整数倍でないシステムにおける、ＮＡＮＤフラッシュ記憶媒体を含む記憶媒体の利用を増大するために、提示される。
【００２３】
ストライプは、記憶媒体のページの特定数のグループである（例えば、２、５又は１０ページ）。有利には、ストライプ論理のフレームワークを用いることによって、ＳＳＤコントローラのファームウェアは、そのようなＡＵ内の全てのデータを依然として適切に読み出し及びアクセスしつつ、ＡＵが記憶デバイスの複数のページに渡って突破することを可能にする。Ｍはストライプ内のページ数を意味し、Ｎがストライプ内のＡＵ数を意味するとする。そして、理想的には、記憶媒体の完全な利用を達成するために、以下の式が保たれる。
Ｍ＊（バイト内のページサイズ）＝Ｎ＊（バイト内のＡＵサイズ）      （１）
しかしながら、実際には、（１）式を満たすのに必要なＭ及び／又はＮの値は、非常に大きいか、他の場合は実装にとって実際的でない。しかし、上記の（１）式を満たさないＭ及びＮの値が用いられる場合でも、記憶媒体は依然として、ストライプフレームワークに基づいて、個々のＡＵがページに渡って突破できないスキームの場合より効率的に利用される。これは以下で説明される。
【００２４】
ストライプベースのアプローチのいくつかの利点が、図２のイラスト２００によって表される。具体的には、イラスト２２５は、２，０４８バイトのページサイズ及び１，０３０バイトのＡＵサイズの場合において、Ｍ＝４及びＮ＝７である場合を表す。イラスト２２５に示されるように、ＳＳＤコントローラのファームウェアは、個々のＡＵ２３０が複数ページに渡って突破することを可能にし、記憶媒体の最初の３ページ（それぞれＰ０、Ｐ１及びＰ２でラベル付けされている）が完全に利用されている。しかしながら、（１）式は満たされていないので、最後のページＰ３に関してＮＡＮＤ記憶装置のいくらかの低利用が存在する。特に、図２に表されているように、ページＰ３は完全に書き込まれておらず、あるバイト数２３２が空のままである。イラスト２２５で表されるストライプの全８，１９２バイトのうちの７，２１０バイトを７個のＡＵ２３０が占有し、総利用はおよそ８８パーセントである。比較すると、もしＡＵが複数のページに渡って突破できない場合、ＮＡＮＤフラッシュストレージの総利用は、ページあたり２，０４８バイト毎に１，０３０、すなわち５０パーセントの利用をわずかに超えるぐらいだろう。
【００２５】
ストライプベースのアプローチの第２の例示として、イラスト２５０は、８３２バイトのページサイズ及び５２０バイトのＡＵサイズの場合において、Ｍ＝１０及びＮ＝１６である場合を表す。この場合、（１）式が満たされ、したがってＮＡＮＤ記憶装置は完全に利用される。特に、ページＰ９（イラスト２５０に表されるストライプの最後のページ）が完全に書き込まれている。比較すると、もしＡＵが複数のページに渡って突破できない場合、ＮＡＮＤフラッシュストレージの総利用は、８３２バイト毎に５２０、すなわち６２パーセントの利用をわずかに超えるぐらいだろう。
【００２６】
複数ページのストライプへの論理的なグルーピングは、ＳＳＤコントローラのファームウェアによって実行される。いくつかの実装では、ファームウェアは、単一の記憶デバイスのみからの複数のページをストライプに割り当て、一方、他の実装では、ファームウェアは複数の記憶デバイスからの複数のページを単一のストライプに割り当てる。追加的又は代替的に、ファームウェアは、単一のストライプに、複数の異なるデータ転送チャネルを通じてアクセス可能なページを割り当ててよい。
【００２７】
図３は、いくつかの実施形態に従う、単一のストライプにページを割り当てるためのＳＳＤコントローラのファームウェアによって用いられ得る例示的な技術を表す。特に、イラスト３００は、ＳＳＤコントローラが、２つの異なるチャネル（それぞれＣＨ０及びＣＨ１でラベル付けされている）を用いて、４個の異なるデバイス（それぞれＤＥＶ０、ＤＥＶ１、ＤＥＶ２及びＤＥＶ３でラベル付けされている）に渡って広がる９６ページを書き込み得る場合を表す。図３の異なるデバイスは、例えば異なるメモリ又は記憶デバイスに対応するとしてよく、それぞれＳＳＤコントローラが独立に読み書きできる。イラスト３００は、複数のチャネル及び複数のデバイスに渡ってストライプにページを割り当てる２つの異なる方法について、Ｍ＝８である場合を表す。
【００２８】
第１のストライプ割り当て方法は、複数のデバイス及び複数のチャネルの両方に渡ってストライプを割り当てることである。これは、図３にストライプ３１０及びストライプ３２０によって表されている。代替の第２のストライプ割り当て方法は、共通のチャネルに属する（一方で複数のデバイスに渡って広がっている）所与のストライプに全てのページが割り当てられることを要求することである。これは、チャネルがＣＨ０の場合はストライプ３３０で、チャネルがＣＨ１の場合はストライプ３４０で示されている。本明細書の開示及び教示に基づいて当業者に理解されるように、図３に表される割り当て方法は、割り当て方法の多くの種類のうちの２つに過ぎない。実際には、整数個のＡＵ及び整数個のページを含む、任意の割り当て方法が用いられ得る（図３に表された任意のページのグループの、単一のストライプへのマッピング）。
【００２９】
複数のストライプに記憶されているデータにアクセスし、複数のストライプにデータを書き込むためには、ファームウェアは、記憶された各ＡＵの最初のバイトのアドレス（又は等価なアドレス）を生成できなければならない。そのために、ファームウェアは、２つのアドレッシング要素を用いる。まず、記憶デバイスに記憶されたデータの各ストライプの開始を特定するために用いられるストライプＩＤであり、任意のＡＵに関連付けられるオフセットを特定するために用いられるＡＵインデックスである。例えば、Ｐ個の総ストライプとストライプ当たりＮ個のＡＵとを持つ記憶デバイスにおいて、任意のＡＵは、０からＰ−１までのストライプＩＤ値と０からＮ−１までのＡＵインデックス値によってアドレッシングされ得る。更に、物理メモリアドレスにアクセスするために、ファームウェアは、ストライプＩＤ及びＡＵインデックス値を物理メモリアドレスにマッピングするフラッシュ変換層（ＦＴＬ）テーブルを参照してよい（また、物理メモリアドレスは、それ自身がページ識別番号及びページオフセットによって表されてよい）。
【００３０】
様々な用途のために、ファームウェアはアドレスのセットを任意のＡＵに関連付ける。単一のページ内に完全に書き込まれたＡＵについて、ファームウェアは、（ストライプＩＤ、先頭バイト、最終バイト）の形式の単一のエントリを維持してよい。例えば、再び図２を参照して、Ａ０  ２５７のＡＵについて、ファームウェアは、ＡＵが先頭のストライプに属し、当該ストライプの０から５１９バイトを占有することを示す（０、０、５１９）の単一のエントリを維持してよい。一方、複数のストライプに渡って突破する図２のＡ１  ２５９のＡＵについては、２個のエントリがファームウェアによって用いられる。したがって、Ａ０  ２５７のＡＵは、先頭ページ内でＡＵが占有するバイトに対応するエントリ（０、０、５１９）によって表すことができ、Ａ１  ２５９のＡＵは、先頭及び二番目のページ内でＡＵが占有するバイトにそれぞれ対応するエントリ（０、５２０、８３１）及び（１、０、２０７）によって表すことができる。
【００３１】
ＳＳＤコントローラは、ファームウェア及びハードウェアの好適な組み合わせを用いて、ストライプＩＤ及びＡＵインデックス値を、ページアドレス及びページオフセット（又は、ＡＵが２個のページに及ぶ場合、場合によっては、ページアドレス及びページオフセットの２個のペア）に変換してよい。第１の実装において、ファームウェアは、ストライプＩＤ及びＡＵインデックスをＳＳＤコントローラのハードウェアに供給する。それからハードウェアは、ストライプＩＤ及びＡＵインデックス値の１つ又は複数のページアドレス及び１つ又は複数のページオフセットへのデコードを行う。例えば、ハードウェアは、ＡＵがページ境界を超える場合、２ページ読み出しを生成するだろう。第２の実装において、ファームウェア自身は、ストライプＩＤ及びＡＵインデックス値をページアドレス及び１つ又は複数のページオフセット値にデコードする。この場合、ファームウェア自身は、ＡＵがページ境界を超える場合、２ページ読み出しを生成する。
【００３２】
アドレスデコーディングにハードウェアを用いる第１の実装の利点は、他のオペレーションを処理するためにファームウェアを自由にすることである。そのため、デコードにファームウェアを用いる第２の実装より、全体のシステム性能が高速になり得る。最初の実装の短所は、ハードウェアが潜在的な破壊又は使用不能なアドレス値に気づいていなければならないことであり、これは、そのような情報をハードウェアに提供するために莫大なリソースが用いられることを要求するだろう。有利なことに、開示されたストライプ構造は、ＳＳＤコントローラが複数のＡＵの読み出しを実行する方法に制約を加えない。
【００３３】
図４は、いくつかの実施形態に従う、２つの異なるＡＵ値及び様々なストライプサイズのための記憶媒体における低利用の割合（不使用）を表す。特に、テーブル４１０は、４，６８０バイトのＡＵサイズ４０５及び１，２，３，４及び１６ページのストライプサイズについての不使用値を表し、テーブル４２０は、４，７５２バイトのＡＵサイズ４１５及び１，２，３，４及び１６ページのストライプサイズについての不使用値を表す。どちらの場合もページサイズは９，２１６バイトである。不使用値を計算する方法の例として、４，６８０バイトのＡＵサイズ及び３ページのストライプサイズ（すなわち、９，２１６×３＝２７，６４８バイト）に対応する行４１８を考える。この場合、最大５個のＡＵが、ストライプのバイトサイズを超えることなく、ストライプに書き込まれる（すなわち、全部で２３，４００バイト）。このように、ストライプの２７，６４８バイトのうちの４，２４８が不使用のままとなり、したがっておよそ１５パーセントの不使用となる。
【００３４】
図４に表されるように、ＡＵサイズが４，６８０バイト及び４，７５２バイトの場合、ストライプサイズが１６ページの長さに達するまで、ストライプサイズが増大するほど不使用が減少する。図４に表されるように、４、６８０バイトのＡＵサイズ４０５に対する不使用はおよそ１．６１１３パーセントであり、一方、４，７５２バイトのＡＵサイズ４１５に対する不使用はおよそ０．０９７７パーセントである。したがって、図４に関して本開示に記載されている技術を用いて、普通のストライプサイズであっても、概して不使用は比較的小さいパーセンテージ値にまで低減される。一構成において、不使用のバイトは空のままではないが、むしろ誤り訂正コード（ＥＣＣ）のバイトを記憶するために使用される。例えば、また１６ページのストライプサイズを持つテーブル４１０において、２，３７６バイトがＡＵに割り当てられない。これらのバイトは、使用されている１４７，４５６−２，３７６＝１４５，０８０バイトの信頼性を保証するためのＥＣＣバイトを記憶するのに用いられてよい。
【００３５】
図５は、いくつかの実施形態に従う、ストライプに含まれることになる記憶媒体のページ数を決定するためのＳＳＤコントローラのファームウェアによって実行される例示的な処理を表す。処理５００は５０５で開始する。５１０で、共にバイトで計測されそれぞれＡＵ＿Ｓｉｚｅ及びＰａｇｅ＿Ｓｉｚｅで示されているＡＵのサイズ及びページのサイズが、ファームウェアによって取得される。例えば、一構成において、パラメータＡＵ＿Ｓｉｚｅは４，６８０バイトであってよく、パラメータＰａｇｅ＿Ｓｉｚｅは９，２１６バイトであってよい。
【００３６】
５２０で、ファームウェアは、Ｐａｇｅ＿Ｃｎｔで示されているページカウンタの値を、値１に等しくなるようセットする。ページカウンタは、ストライプ内に含まれるページ総数の現在の候補値を表す。５３０で、ファームウェアは、ＡＵ＿Ｓｉｚｅ及びＰａｇｅ＿Ｃｎｔのパラメータに基づいて、Ｓｔｒｉｐｅ＿Ｓｉｚｅ＿Ｗｒｉｔｅで示されている、ストライプサイズの現在のサイズをバイト単位で決定する。特に、ファームウェアは、この量を下記の関係に従って決定する。
Ｓｔｒｉｐｅ＿Ｓｉｚｅ＿Ｗｒｉｔｅ  ＝  ＡＵ＿Ｓｉｚｅ  ×  Ｐａｇｅ＿Ｃｎｔ
【００３７】
５３０で、ファームウェアは、Ｗａｓｔｅ＿Ｂｙｔｅｓで示され、ストライプサイズ及びＡＵサイズに関連付けられる不使用バイトの数を決定する。こうすることで、ファームウェアは、ストライプに収まるＡＵの最大数を整数で決定する。例えば、ストライプサイズが２７，６４８バイトであり、ＡＵサイズが４，６８０バイトである場合、ファームウェアは、最大５個のＡＵがストライプに収まるであろうことを決定する。次に、ストライプに収まるであろうＡＵの最大数のサイズに基づいて、ファームウェアは、不使用バイトの数を決定する。例えば、４，６８０バイトのサイズのＡＵが最大５個、２７，６４８バイトのサイズのストライプにそれぞれ収まるので、上記の例では、２７，６４８−５×（４，６８０）＝４，２４８の不使用バイトがある。
【００３８】
５４０で、ファームウェアは、５４０で決定された不使用バイトの数及び５３０で決定されたストライプサイズに基づいて、Ｗａｓｔｅ＿Ｐｅｒｃｅｎｔａｇｅで示されている不使用割合を決定する。具体的には、ファームウェアは、不使用割合を下記の関係に従って決定する。
Ｗａｓｔｅ＿Ｐｅｒｃｅｎｔａｇｅ  ＝  １００（Ｗａｓｔｅ＿Ｂｙｔｅｓ／Ｓｔｒｉｐｅ＿Ｓｉｚｅ＿Ｗｒｉｔｅ）  例えば、不使用バイトの数が４，２４８バイトであり、ストライプサイズが２７，６４８バイトである場合、不使用割合はおよそ１５パーセントと決定される。５５０において、５４０で決定された不使用割合が予め指定された値（例えば、１パーセント、３パーセント又は５パーセント）より小さいかが判断される。不使用割合が予め指定された値より小さいと５６０で判断された場合、処理５００は５７０に進み、ファームウェアは、ストライプが、ページカウンタＰａｇｅ＿Ｃｎｔの現在の値に等しいページ数を含むことになると判断する。一方、不使用割合が予め指定された値より大きいと５６０で判断された場合、処理５００は５８０に進み、ページカウンタが値１でインクリメントされる。この後者の場合、処理５００は５３０に進む。
【００３９】
いくつかの実装において、本明細書に記載されたようなＳＳＤコントローラのファームウェアは、記憶媒体のページへのデータの書き込みを制御する書き込みバッファを用いる。これらの実装において、書き込みバッファは、媒体に全て書き込む前に、完全なストライプを書き込むための十分なデータを蓄積する。しかしながら、書き込みバッファが用いられる場合でも、部分ストライプが書き込まれてよい。例えばストライプの書き込みが開始した後であって書き込みが完了する前にパワーダウンイベントが生じた場合に、部分ストライプが書き込まれてよい。更に、いくつかの実装において、ＳＳＤコントローラは、書き込みバッファを全く用いなくてよく、又は、ストライプのサイズより小さいサイズの書き込みバッファを用いてよい。この場合、部分ストライプが通常の手順で媒体に書き込まれるだろう。
【００４０】
図６は、いくつかの実施形態に従う、ＳＳＤコントローラが書き込みバッファを用いるシステムのために部分的に書き込まれたストライプを含む記憶媒体のページを表す。図６において、四角の各ボックスは記憶媒体のページを意味し、行は異なるデータ転送チャネルに対応する一方、列は異なるストライプに対応する（したがって、図６の例では、各ストライプが厳密に６個のページを含む）。更に、網掛けされたページ又は網掛けされたページの一部は、そのページ又はそのページの一部に、ＳＳＤコントローラによってそれぞれ書き込みされていることを意味する。網掛けされていないページ又はページの一部は、そのページ又はページの一部にそれぞれ書き込みされていないことを意味する。
【００４１】
図６のＳＳＤコントローラは、データの全ストライプを蓄積して、データの全ストライプを一度に書き込む。従って、ストライプ６０５及び６１０は、図６の網掛けされた四角で示されるように、完全に書き込まれている。その一方で、ＳＳＤコントローラがストライプ６１５に書き込んでいる間にパワーダウンイベントが生じる。特に、ＳＳＤコントローラがページ６２０に書き込んでいる間にパワーダウンイベントが生じ、それによりページ６２０は、ページ６２０の部分的な網掛けで表されるように、部分的に書き込まれただけである。ＳＳＤコントローラがその後の時点（例えば、パワーオン後）で書き込みを再開した場合、ページ６２０が再び書き込まれることはない。むしろ、書き込みは、次のページの中間のアドレス、すなわちページ６３０で再開し、これは図６のページ６３０の部分的な網掛けで表されている。
【００４２】
図７は、いくつかの実施形態に従う、ＳＳＤコントローラが書き込みバッファを用いないシステムのために部分的に書き込まれたストライプを含む記憶媒体のページを表す。図６のように、図７の四角の各ボックスは記憶媒体のページを意味し、行は異なるデータ転送チャネルに対応する一方、列は異なるストライプに対応する。更に、網掛けされたページ（又は網掛けされたページの一部）は、そのページ（又はそのページの一部）にＳＳＤコントローラによって書き込みされていることを意味する。  網掛けされていないページ又はページの部分は、そのページ又はページの部分に、書き込みされていないことを意味する。
【００４３】
図７のＳＳＤコントローラは、書き込みバッファを用いずに記憶媒体にデータを書き込む。従って、図７のページには、書き込まれていない多くのギャップがある。例えば、ストライプ７０５及び７０８には、普通に書き込まれる一方、ページ７１０と７１５との間、ページ７２０と７２５との間、及びページ７３０と７３５との間に、未書き込みのデータのギャップがある。これらのギャップのそれぞれは、ＳＳＤコントローラの１回の書き込みセッションの終了、及び、他の開始に対応している。
【００４４】
ＳＳＤコントローラが書き込みバッファを用いるかそうでないかにかかわらず、ページ間に書き込まれたデータ内のギャップは、未書き込みのデータのギャップを埋めるためにデータを再書き込みするよう設計された定期的な再利用動作の実行を通じて、回収され得る。この処理は、ガーベッジコレクションとして知られている。ガーベッジコレクションを実行する第１のオプションによると、複数のページのユニットが選択される。当該ユニットは整数個のストライプではない。ＳＳＤコントローラのファームウェアは、ギャップを埋めるためにデータを再書き込みして、ガーベッジコレクション処理を通じて完全に解放されたストライプをトラックする。ガーベッジコレクションを実行する第２のオプションによると、消去ユニットは整数個のストライプである。
【００４５】
いくつかの実装において、ＡＵの割り当ては、ＳＳＤコントローラによって用いられるデータ転送チャネルに基づいて制約が加えられる。特に、これらの実装において、単一のＡＵが、単一のチャネルによってアクセス可能、又はさもなくば最大２個の隣接チャネル（ここで、最初及び最終のチャネルが隣接していると考える）によってアクセス可能であってよい。この制約は、図８において、ＳＳＤコントローラが０から７でラベル付けされた８個のチャネルを用いる場合について、ダイアグラム８２５によって示される。ダイアグラム８２５に表されるように、任意のＡＵは、チャネル１及び２、チャネル２及び３、チャネル３及び４、チャネル４及び５、チャネル５及び６、チャネル６及び７、チャネル７及び０、又はチャネル０及び１を渡り得る。
【００４６】
この制約の理由は、誤り制御ユニット（ＥＣＵ）とＮＡＮＤフラッシュインタフェース（ＮＦＩＦ）８６０との間のデータのルーティングが簡単になるからである。特に、ダイアグラム８５０に示されるように、ＥＣＵ８５１は、いくつかのＥＣＣエンジンを含む。ダイアグラム８５０には、ＥＣＣエンジン８５２、８５３及び８５４を含む全部で８個のＥＣＣエンジンが表されている。しかしながら、当業者に理解されるように、本明細書の開示及び教示に基づき、より多くの又はより少ないＥＣＣエンジンが可能である。単一のチャネルによって又はさもなくば最大２個の隣接チャネルによって各ＡＵにアクセス可能にするという制約は、各エンジンの出力を、ＮＦＩＦ８６０における最大２個のＮＡＮＤチャネルに制限する。例えば、図８に表されるように、エンジン８５３の出力は、ＮＦＩＦ８６０のチャネル４及び５に通信可能に結合されている。
【００４７】
各ＡＵに対して、単一のチャネルによって又はさもなくば最大２個の隣接チャネルによってアクセス可能にするという制約を加えて各エンジンの出力をＮＦＩＦ８６０における最大２個のＮＡＮＤチャネルに制限することの他の利点は、読み出し処理の間にチャネルがスキップされた場合に（例えば、タイミング又はデータ破壊エラーにより）いくつかのＡＵが失われることを制限することである。これは図９に示されている特に、イラスト９００は、ＡＵ０からＡＵ６で示される７個のＡＵと、それら各々に関連付けけられたチャネルを表す（チャネルはＣＨ０からＣＨ３で示される）。例えば、ＡＵ０は、ＣＨ０のみに関連付けられ、一方、ＡＵ１はＣＨ０及びＣＨ１に関連付けられる。次に、読み出し又は書き込み処理中にＣＨ１がスキップされなければならないと仮定する。この場合、ＡＵ１、ＡＵ２及びＡＵ３の３個のＡＵのみがドロップされる。もし各ＡＵが複数のチャネルに関連付けられるとした場合、チャネル１をスキップすることは、より多数のＡＵがドロップされる結果になるだろう。
【００４８】
図１０は、いくつかの実施形態に従う、本明細書に記述された任意の処理を実行するコンピューティングデバイスの例示的なブロック図を示す。コンピューティングデバイス１０００は、少なくとも１つの通信インタフェースユニットと、入出力コントローラ１０１０と、システムメモリと、１又は複数のデータ記憶デバイスとを備える。システムメモリは、少なくとも１つのランダムアクセスメモリ（ＲＡＭ１００２）と、少なくとも１つのリードオンリーメモリ（ＲＯＭ１００４）とを有する。これら全ての要素は、コンピューティングデバイス１０００のオペレーションを促進するために中央処理装置（ＣＰＵ１００６）と、通信する。コンピューティングデバイス１０００は、多くの異なる方法で構成されてよい。例えば、コンピューティングデバイス１０００は、従来のスタンドアロンコンピュータであってよく、又は代替的に、コンピューティングデバイス１０００の機能が、複数のコンピュータシステム及びアーキテクチャに渡って分散されてよい。図１０において、コンピューティングデバイス１０００は、ネットワーク１０１８又はローカルネットワークを通じて、他のサーバ又はシステムに接続される。
【００４９】
コンピューティングデバイス１０００は、分散アーキテクチャで構成されてよく、データベース及びプロセッサは別個のユニット又は位置で収容されてよい。いくつかのユニットは、基本的な処理機能を実行し、最低でも一般的なコントローラ又はプロセッサとシステムメモリとを有する。分散アーキテクチャの実装において、これらのユニットのそれぞれは、通信インタフェースユニット１３０８を通じて、他のサーバ、クライアント又はユーザコンピュータ及び他の関連するデバイスとの一次通信リンクとして働く通信ハブ又はポート（図示せず）に接続されてよい。通信ハブ又はポートは、それ自身が最小限の処理能力を有し、本質的に通信ルータとして機能してよい。種々の通信プロトコルがシステムの部分であってよい。通信プロトコルは、イーサネット（登録商標）、ＳＡＰ、ＳＡＳ（登録商標）、ＡＴＰ、Ｂｌｕｅｔｏｏｔｈ（登録商標）、ＧＳＭ（登録商標）及びＴＣＰ／ＩＰを含むがそれらに限定されない。
【００５０】
ＣＰＵ１００６は、１又は複数の従来のマイクロプロセッサ、及び、ＣＰＵ１００６から作業負荷をオフロードする、数値演算コプロセッサのような１又は複数の補助的なコプロセッサのようなプロセッサを備える。ＣＰＵ１００６は、通信インタフェースユニット１００８及び入出力コントローラ１０１０と通信し、それらを通じて、ＣＰＵ１００６が他のサーバ、ユーザ端末又はデバイスのような他のデバイスと通信する。通信インタフェースユニット１００８及び入出力コントローラ１０１０は、例えば他のプロセッサ、サーバ又はクライアント端末との同時通信のための複数の通信チャネルを含んでよい。
【００５１】
ＣＰＵ１００６はまた、データ記憶デバイスと通信する。データ記憶デバイスは、適切な組み合わせの磁気、光又は半導体メモリを備えてよく、例えばＲＡＭ１００２、ＲＯＭ１００４、フラッシュドライブ、コンパクトディスクのような光ディスク、又は、ハードディスク若しくはドライブを含んでよい。ＣＰＵ１００６及びデータ記憶デバイスの各々は、例えば、全体が単一のコンピュータ又は他のコンピューティングデバイス内に配置されてよく、又は、ＵＳＢポート、シリアルポートケーブル、同軸ケーブル、イーサネット（登録商標）ケーブル、電話線、無線周波数トランシーバ又は他の同様の無線又は有線媒体若しくは上記の組み合わせのような通信媒体によって、相互に接続されてよい。例えば、ＣＰＵ１００６は、通信インタフェースユニット１００８を通じて、データ記憶デバイスに接続されてよい。ＣＰＵ１００６は、１又は複数の特定の処理機能を実行するよう構成されてよい。
【００５２】
データ記憶デバイスは、例えば、（ｉ）コンピューティングデバイス１０００のためのオペレーティングシステム１０１２、（ｉｉ）本明細書に記載されたシステム及び方法に従って、特に、ＣＰＵ１００６に関連して詳細に記載された処理に従ってＣＰＵ１００６に命令するのに適合した１又は複数のアプリケーション１０１４（例えば、コンピュータプログラムコード又はコンピュータプログラム製品）、又は、（ｉｉｉ）プログラムによって必要とされる情報を記憶するために用いられ得る情報を記憶するのに適合したデータベース１０１６を記憶してよい。
【００５３】
オペレーティングシステム１０１２及びアプリケーション１０１４は、例えば、圧縮、非コンパイル、及び暗号化された形式で記憶されてよく、コンピュータプログラムコードを含んでよい。プログラムの命令は、データ記憶デバイス以外のコンピュータ可読媒体から、例えばＲＯＭ１００４から又はＲＡＭ１００２から、プロセッサのメインメモリに読み込まれてよい。プログラム内の命令シーケンスの実行が、ＣＰＵ１００６に、本明細書に記載された処理ステップを実行させる一方、本開示の処理を実装するためのソフトウェア命令に代えて又はそれと組み合わせて、有線回路が用いられてよい。したがって、記載されたシステム及び方法は、ハードウェア及びソフトウェアのある特定の組み合わせに限られない。
【００５４】
好適なコンピュータプログラムコードが、本明細書で記載されたようなピーク電力消費量を減らすことに関して１又は複数の機能を実行するために提供されてよい。プログラムはまた、プロセッサがコンピュータの周辺デバイス（例えば、ビデオディスプレイ、キーボード、コンピュータマウス等）と入出力コントローラ１０１０を通じてインタフェースすることを可能にする、オペレーティングシステム１０１２、データベース管理システム、及び「デバイスドライバ」のようなプログラム要素を有してよい。
【００５５】
本明細書で用いられるような「コンピュータ可読媒体」という用語は、コンピューティングデバイス１０００のプロセッサ（又は本明細書に記載されたデバイスの任意の他のプロセッサ）に、実行のために命令を供給又は供給に関与する、任意の非一時的媒体をいう。そのような媒体は、多くの形式をとり得、不揮発性媒体及び揮発性媒体を含むが、それらに限られない。不揮発性媒体は、例えば、光、磁気又は光磁気ディスク、若しくはフラッシュメモリのような集積回路メモリを含む。揮発性媒体は、典型的にはメインメモリの構成要素となるダイナミック・ランダムアクセスメモリ（ＤＲＡＭ）を含む。コンピュータ可読媒体の一般的な形式は、例えば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、任意の他の磁気媒体、ＣＤ−ＲＯＭ、ＤＶＤ、任意の他の光媒体、パンチカード、紙テープ、ホールパターンを持つ任意の他の物理媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ又はＥＥＰＲＯＭ（ｅｌｅｃｔｒｏｎｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、ＦＬＡＳＨ−ＥＥＰＲＯＭ、任意の他のメモリチップ又はカートリッジ、若しくはコンピュータが読み出せる任意の他の非一時的媒体を含む。
【００５６】
コンピュータ可読媒体の様々な形式は、１又は複数の命令の１又は複数のシーケンスを、ＣＰＵ１００６（又は、本明細書に記載されたデバイスの任意の他のプロセッサ）に実行のために送ることに関与してよい。例えば、命令は、最初に遠隔コンピュータ（図示せず）の磁気ディスク上に運ばれてよい。遠隔コンピュータは、そのダイナミックメモリ内に命令をロードでき、イーサネット（登録商標）接続、ケーブル線又はモデムを用いて更に電話線を通じて命令を送信できる。コンピューティングデバイス１０００（例えば、サーバ）のローカルの通信デバイスは、それぞれの通信ライン上でデータを受信でき、プロセッサのためのシステムバス上にデータを出すことができる。システムバスは、データをメインメモリに搬送し、そこからプロセッサが命令を取り出して実行する。メインメモリによって受信された命令は、プロセッサによる実行前又は後に、必要に応じてメモリ内に記憶されてよい。更に、命令は、通信ポートを通じて、様々な種類の情報を搬送する無線通信又はデータストリームの例示的な形式である電気、電磁気又は光信号として受信されてよい。
【００５７】
本開示の様々な実施形態を本明細書で提示及び記載されたが、このような実施形態は例としてのみ提供されることが当業者には明らかであろう。ここで多数の変形、変更及び置換が、本開示から逸脱することなく当業者に見い出し得るだろう。本明細書に記載された開示の実施形態に対する様々な代替物が、本開示を実施する際に用いられ得ることが理解されるべきである。  以下の特許請求の範囲が本開示の範囲を定め、これらの特許請求の範囲及びそれらの同等の範囲内の方法及び構造がそれによりカバーされることを意図している。
【図１】
2015511040.tif 000003
【図２】
2015511040.tif 000004
【図３】
2015511040.tif 000005
【図４】
2015511040.tif 000006
【図５】
2015511040.tif 000007
【図６】
2015511040.tif 000008
【図７】
2015511040.tif 000009
【図８】
2015511040.tif 000010
【図９】
2015511040.tif 000011
【図１０】
2015511040.tif 000012
【国際調査報告】
2015511040.tif 000013
2015511040.tif 000014
2015511040.tif 000015