(57)【要約】  本開示は固体ドライブコントローラに関するシステム及び技術を含む。いくつかの実施例においてデバイスは、ホストからのコマンドに対応するデータブロックを保持するバッファを含む。コマンドは、データブロックを識別し、識別されたデータブロックが送信されるべき論理シーケンスを識別する。コマンドに応じて、デバイスに備えられるデータ取得部は、論理シーケンスとは異なる取得シーケンスで、不揮発性メモリユニットからデータブロックの複数の部分を取得する。複数のデータブロックを識別する複数のコマンドをデバイスが受信した場合、デバイスは、両方のコマンドによって識別されるデータブロックの複数の部分を取得することによって、コマンドを並行して提供する。【選択図】図２
2013502001.tif 000002
【特許請求の範囲】
【請求項１】
データブロックを識別し、識別された前記データブロックを送信する第１シーケンスを識別するコマンドに対応して、前記データブロックを保持し、前記データブロックの複数の部分が、対応する複数の不揮発性メモリユニットに格納されるバッファと、
前記コマンドに応答して、前記データブロックの前記複数の部分を、前記対応する複数の不揮発性メモリユニットから前記第１シーケンスとは異なる第２シーケンスで取得し、取得された前記データブロックの前記複数の部分を前記バッファへ送信するデータ取得部と
を備え、
前記第２シーケンスで取得された前記データブロックが追跡され、
前記バッファは、前記データ取得部が前記データブロックに含まれる前記複数の部分を取得したことを示す指示に応答して、前記データブロックを送信するデバイス。
【請求項２】
前記バッファは、複数のコマンドにそれぞれ対応する複数のデータブロックを保持し、
前記データ取得部は、異なる前記複数のデータブロックの異なる複数の部分を並行して取得する請求項１に記載のデバイス。
【請求項３】
前記データ取得部は、第１コマンドに対応するデータブロックの複数の部分を、第２コマンドに対応するデータブロックの複数の部分と交互に配置する請求項２に記載のデバイス。
【請求項４】
それぞれの不揮発性メモリユニットは複数のセクタを有し、
前記データブロックの前記複数の部分は、前記複数の不揮発性メモリユニットの前記複数のセクタにわたって格納され、
前記データ取得部は、前記複数のセクタから前記データブロックの前記複数の部分を前記第２シーケンスで取得する請求項１に記載のデバイス。
【請求項５】
前記第１シーケンスを受信し、前記第２シーケンスで取得される前記データブロックを追跡し、前記データブロックに含まれる全ての前記複数の部分を前記データ取得部が取得したことを示す指示を提供するシーケンサと、
前記データ取得部と協働するように結合され、前記データ取得部によって取得されたデータブロックの１つ以上の部分をチェックするエラーチェック及び補正ユニットと
をさらに備え、
前記データ取得部は、前記データブロックの前記複数の部分を前記第２シーケンスで前記エラーチェック及び補正ユニットへ送信する請求項１に記載のデバイス。
【請求項６】
前記エラーチェック及び補正ユニットは、前記シーケンサと協働するように結合され、前記データブロックの一部分にエラーが無いことを示す信号を前記シーケンサへ送信し、
前記シーケンサは、前記データブロックのそれぞれの部分に対して前記エラーチェック及び補正ユニットが前記データブロックの前記一部分の識別子及び前記一部分にエラーが無いことを示す信号を送信するか判断することによって、前記第２シーケンスで取得された前記データブロックを追跡する請求項５に記載のデバイス。
【請求項７】
対応する複数の不揮発性メモリユニットに複数の部分が格納されるデータブロックを識別し、識別された前記データブロックを送信する第１シーケンスを識別する、前記データブロックに対するコマンドを受信する段階と、
処理回路によって、前記データブロックの前記複数の部分を、前記対応する複数の不揮発性メモリユニットから前記第１シーケンスとは異なる第２シーケンスで取得し、取得された前記データブロックはバッファに格納される段階と、
取得された前記データが、前記第２シーケンスに従って前記データブロックの前記複数の部分を含むか判断する段階と、
前記判断することに応答して、前記データブロックを送信させるよう前記バッファに指示する段階と
を備える方法。
【請求項８】
前記第２シーケンスで取得された前記データブロックの前記複数の部分を追跡する段階をさらに備える請求項７に記載の方法。
【請求項９】
付加的なデータブロックを送信するための付加的なコマンドを受信する段階と、
前記コマンドに対応する前記データブロック及び前記付加的なコマンドに対応する前記付加的なデータブロックを並行して取得する段階と
をさらに備える請求項７に記載の方法。
【請求項１０】
前記データブロックの複数の部分を、前記付加的なデータブロックの複数の部分と交互に配置する段階をさらに備え、
交互に配置された前記複数の部分は前記バッファに格納される
請求項９に記載の方法。
【請求項１１】
取得された前記データブロックの前記複数の部分を前記バッファへ送信する段階をさらに備える請求項７に記載の方法。
【請求項１２】
それぞれの不揮発性メモリユニットは複数のセクタを有し、
前記データブロックの前記複数の部分は、前記複数の不揮発性メモリユニットの前記複数のセクタにわたって格納され、
前記データブロックの前記複数の部分を取得する段階は、前記複数のセクタから前記データブロックの前記複数の部分を前記第２シーケンスで取得する段階を有する請求項７に記載の方法。
【請求項１３】
前記取得されたデータブロックにエラーが無いかを判断するために、データブロックの１つ以上の部分をチェックする段階をさらに備える請求項７に記載の方法。
【請求項１４】
前記データブロックの一部分にエラーが無いことを示す信号を送信する段階をさらに備え、
前記追跡する段階は、前記データブロックのそれぞれの部分に対して前記データブロックの前記一部分の識別子及び前記一部分にエラーが無いことを示す信号が送信されるか判断することによって、前記第２シーケンスで取得された前記データブロックを追跡する段階を有する
請求項１３に記載の方法。
【請求項１５】
複数のデータブロックの複数の部分を格納する複数の不揮発性メモリユニットと、
前記複数の不揮発性メモリユニットの１つ以上に格納される１つ以上のデータブロックを受信するための複数のコマンドを送信するホストと、
前記複数の不揮発性メモリユニットと前記ホストとの間でデータを送信するコントローラと
を備え、
前記コントローラは、
それぞれがデータブロック及び前記ホストへ送信する前記データブロックの第１シーケンスを識別する複数のコマンドを前記ホストから受信し、
前記複数の不揮発性メモリユニットに格納される複数のデータブロックを並行して取得し、
それぞれのコマンドに対し、取得されたデータブロックの前記複数の部分が前記ブロックの前記データを含むか判断し、
前記判断することに応答して、取得された前記データブロックを送信し、
１つ以上のデータブロックの複数の部分は、対応する前記コマンドによって識別される前記第１シーケンスとは異なる第２シーケンスで取得されるシステム。
【請求項１６】
前記コントローラはさらに、第１コマンドを受信することに応答して取得される第１データブロックの複数の部分を、第２コマンドに応答して取得される第２データブロックの複数の部分と交互に配置し、
交互に配置された前記複数の部分はバッファに格納される
請求項１５に記載のシステム。
【請求項１７】
それぞれの不揮発性メモリユニットは複数のセクタを有し、
前記データブロックの前記複数の部分は、前記複数の不揮発性メモリユニットの前記複数のセクタにわたって格納され、
前記コントローラは、前記複数のセクタから前記データブロックの前記複数の部分を前記第２シーケンスで取得する請求項１５に記載のシステム。
【請求項１８】
前記コントローラと協働するように結合され、データブロックの１つ以上の部分をチェックして取得された前記データブロックにエラーが無いか判断するエラーチェック及び補正ユニットをさらに備える請求項１５に記載のシステム。
【請求項１９】
前記エラーチェック及び補正ユニットは、前記データブロックの一部分にエラーが無いことを示す信号を前記バッファへ送信する請求項１８に記載のシステム。
【請求項２０】
前記コントローラはさらに、前記データブロックのそれぞれの部分に対して前記データブロックの前記一部分の識別子及び前記一部分にエラーが無いことを示す信号が送信されるか判断することによって、前記第２シーケンスで取得された前記データブロックを追跡する請求項１９に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
［関連出願］  本出願は、米国特許法第１１９（ｅ）条の下で、２００９年８月１１日に出願された「An Efficient Random Read Strategy and Implementation for Solid-State Devices」と題する米国特許出願第６１／２３３，１１８号、及び、２００９年１０月３０日に出願された「A Method for Maximizing the Read Performance of A Set of Large Unbalanced Commands」と題する米国特許出願第６１／２５６，５０２号からの優先権を主張する。上述の出願の開示内容全体を参照により本明細書に組み込む。
【０００２】
本開示は固体ドライブ（ＳＳＤ）に関するシステム及び技術を記載する。
【０００３】
ＳＳＤは、データを格納するための固体メモリを用いたデータストレージデバイスである。不揮発性メモリ、例えばＮＡＮＤをベースとするフラッシュメモリが、ＳＳＤと共にストレージデバイスとして使用されることが多い。不揮発性メモリデバイスと協働するように結合されたＳＳＤは、不揮発性メモリデバイスにデータを書き込み、不揮発性メモリデバイスからデータを取得するように構成されるコントローラを含む。ＳＳＤを介したデータスループットを増大させるために、複数の不揮発性メモリデバイスがＳＳＤコントローラに結合されることが多い。データブロックは、不揮発性メモリユニットのセクタに格納される。ＳＳＤコントローラは、ＳＳＤコントローラ中のチャネルを介し、各チャネルと協働するように結合された不揮発性メモリユニットのセクタをスキャンすることによって、データブロックの複数の部分を取得することができる。いくつかの状況においては、データブロックの全ての又は複数の部分が、１つのチャネルと協働するように結合された不揮発性メモリユニットのセクタ中に集められる。
【発明の概要】
【０００４】
本明細書は、不揮発性メモリからデータを読み出すためのコントローラに関する技術を記載する。記載されるシステム及び技術の革新的な面は、コマンドに対応するデータブロックを保持するように構成されたバッファを含むデバイスとして実施することができる。コマンドは、データブロックを識別し、識別されたデータブロックが送信されるべき第１シーケンスを識別する。データブロックの複数の部分は、それぞれの不揮発性メモリユニットに格納される。デバイスは、コマンドに応じてそれぞれの不揮発性メモリユニットからデータブロックの複数の部分を取得するように構成されたデータ取得部を含む。データ取得部は、第１シーケンスとは異なる第２シーケンスで複数の部分を取得し、取得したデータブロックの複数の部分をバッファに送信するように構成される。第２シーケンスで取得されたデータブロックが追跡される。データブロックに含まれる全ての部分をデータ取得部が取得したという指示に応じて、バッファがデータブロックを送信する。
【０００５】
こうした側面、及びその他の側面は、以下の特徴の１つ以上を含むことができる。データ取得部は、第１コマンドに対応するデータブロックの複数の部分を、第２コマンドに対応するデータブロックの複数の部分と交互に配置できるように構成される。不揮発性メモリユニットのそれぞれは、複数のセクタを有することができる。データブロックの複数の部分が、不揮発性メモリユニットの複数のセクタにわたって格納される。データ取得部は、複数のセクタからデータブロックの複数の部分を第２シーケンスで取得するように構成される。デバイスは、第１シーケンスを受信し、第２シーケンスで取得されたデータブロックを追跡し、データブロックに含まれる全ての部分をデータ取得部が取得したことを示す指示を提供するように構成されたシーケンサをさらに備えることができる。デバイスは、データ取得部と協働するように結合され、データ取得部によって取得されたデータブロックの１つ以上の部分をチェックするように構成されたエラーチェック及び補正ユニットをさらに備えることができる。データ取得部は、データブロックの複数の部分を第２シーケンスでエラーチェック及び補正ユニットへ送信する。エラーチェック及び補正ユニットは、シーケンサと協働するように結合され、データブロックの一部分にエラーが無いことを示す信号をシーケンサに送信するよう構成される。シーケンサは、データブロックの各部分に対し、エラーチェック及び補正ユニットがデータブロックの当該一部分の識別子及び当該一部分にエラーが無いことを示す信号を送信するか判断することによって、第２シーケンスで取得されたデータブロックを追跡することができる。
【０００６】
記載されるシステム及び技術の別の革新的な側面は、データブロックに対するコマンドの受信を含む方法として実行される。コマンドは、データブロックを識別し、識別されたデータブロックが送信されるべき第１シーケンスを識別する。データブロックの複数の部分は、それぞれの不揮発性メモリユニットに格納される。この方法は、処理回路によって、それぞれの不揮発性メモリユニットからデータブロックの複数の部分を第１シーケンスとは異なる第２シーケンスで取得することを含む。取得されたデータブロックはバッファに格納される。この方法は、取得されたデータが第２シーケンスに従ったデータブロックの全ての部分を含むか判断し、判断したことに応じてデータブロックを送信させるようバッファに指示することを含む。
【０００７】
こうした側面、及びその他の側面は、以下の特徴の１つ以上を含むことができる。第２シーケンスで取得されたデータブロックの複数の部分が追跡される。付加的なデータブロックを送信するための付加的なコマンドが受信される。コマンドに対応するデータブロック、及び付加的なコマンドに対応する付加的なデータブロックが、並行して取得される。データブロックの複数の部分が、付加的なデータブロックの複数の部分と交互に配置される。交互配置された複数の部分がバッファに格納される。取得されたデータブロックの複数の部分は、バッファに送信される。それぞれの不揮発性メモリユニットは、複数のセクタを有することができる。データブロックの複数の部分は、不揮発性メモリユニットの複数のセクタにわたって格納される。データブロックの複数の部分を取得することは、複数のセクタからデータブロックの複数の部分を第２シーケンスで取得することを含んでよい。取得されたデータブロックにエラーが無いか判断するために、データブロックの１つ以上の部分がチェックされる。データブロックの一部分にエラーが無いことを示す信号が送信される。追跡することは、データブロックの各部分に対し、ブロックの当該一部分の識別子及び当該一部分にエラーが無いことを示す信号が送信されることができると判断することによって、第２シーケンスで取得されたデータブロックを追跡することを含んでよい。
【０００８】
記載されるシステム及び技術は、電子回路、コンピュータハードウェア、ファームウェア、ソフトウェア、又はそれらの組み合わせにおいて、本明細書に開示される構造的な手段、及び構造的なその等価物として実施することができる。これは、少なくとも１つのコンピュータ読み取り可能な媒体を含んでよく、１つ以上のデータ処理装置（例えば、プログラマブルプロセッサを含む信号処理デバイス）に対し、記載されるオペレーションを実行させるように動作するプログラムを実現させる。従って、プログラムの実施は、開示される方法、システム、又は装置から実現され、装置の実施は、開示されるシステム、コンピュータ読み取り可能な媒体、又は方法から実現される。同様に、方法の実施は、開示されるシステム、コンピュータ読み取り可能な媒体、又は装置から実現され、システムの実施は、開示される方法、コンピュータ読み取り可能な媒体、又は装置から実現される。
【０００９】
例えば、以下に開示される実施例は、これらに限定されるものではないが、特定用途向データ処理装置（例えばワイヤレスアクセスポイント、リモート環境モニタ、ルータ、スイッチ、コンピュータシステム部品、媒体アクセスユニット）、移動型データ処理装置（例えばワイヤレスクライアント、携帯電話、携帯情報端末（ＰＤＡ）、モバイルコンピュータ、デジタルカメラ）、一般用途向データ処理装置（例えば、ミニコンピュータ、サーバ、メインフレーム、スーパーコンピュータ）、またはこれらの組み合わせを含む、様々なシステム及び装置として実施されてよい。
【００１０】
従って、記載されるシステム及び技術の他の側面によれば、システムは、データブロックの複数の部分を格納するように構成された複数の不揮発性メモリユニット、１つ以上の不揮発性メモリユニットに格納される１つ以上のデータブロックを受信するためのコマンドを送信するように構成されたホスト、複数の不揮発性メモリユニットとホストとの間でデータを送信するように構成されたコントローラを備える。コントローラは、ホストから複数のコマンドを受信し、複数の不揮発性メモリユニットに格納される複数のデータブロックを並行して取得し、それぞれのコマンドに対して、取得されたデータブロックの複数の部分がブロック内の全てのデータを含むか判断し、判断することに応じて取得されたデータブロックを送信するように構成される。それぞれのコマンドは、データブロック、及びデータブロックがホストへ送信されるべき第１シーケンスを識別する。１つ以上のデータブロックの複数の部分は、対応するコマンドによって識別される第１シーケンスとは異なる第２シーケンスで取得される。
【００１１】
以下の利点の１つ以上を実現するために、本明細書に記載される主題の特定の実施例が実行されてよい。ここに記載する技術は、コントローラがデータブロックを取得するチャネルにおける処理能力の浪費を低減することができる。さらにこの技術は、不揮発性メモリユニットからデータブロックが取得される効率を増大することができる。加えて、複数のデータブロックを要求するコマンドが並行して提供される。特に、例えば、大きなデータブロックが全チャネルよりも少ないチャネルに均等に分配されている場合、又は１つのチャネルに集中している場合、当該大きなデータブロックに対するコマンドに加えて、複数のコマンドを並行して実行することができる。このようにすることにより、複数のパスにおける単一の大きなコマンドを提供すると同時に、付加的なコマンドも提供することができる。これにより、与えられた大きなコマンドグループに対する処理時間を最小限にすることができる。さらに、ＳＳＤコントローラのスループットを増大することができる。
【００１２】
１つ以上の実施例の詳細を、添付する図面及び以下の記載において説明する。その他の特徴、目的、及び利点は、この記載、図面、及び特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１３】
【図１】固体メモリサブシステムを含むコンピュータシステムの例を示す。
【００１４】
【図２】固体コントローラの例を示す。
【００１５】
【図３】２つのデータブロックを取得する間のデータフローの例を示す。
【００１６】
【図４】固体コントローラによって実行されるデータ送信方法の例を示す。
【００１７】
【図５】データブロックを識別するコマンドに割り当てられた領域を含む固体コントローラ中のバッファの例を示す。
【００１８】
【図６】ホストからのコマンドに応答して不揮発性メモリユニットからデータを取得するプロセスの例を示す。
【００１９】
【図７】チャネルからバッファへのデータフローの例を示す。
【発明を実施するための形態】
【００２０】
図１は、固体メモリサブシステム１５０を備えるコンピュータシステム１００の例を示す。システム１００は、中央演算ユニット（ＣＰＵ）１０５、ディスプレイ装置１１０（例えばＣＲＴ（陰極線管）又はＬＣＤ（液晶ディスプレイ）モニタ）、及び、キーボード１１５並びにポインティングデバイス１２０（図１ではマウスとして示されているが、他のポインティングデバイスであってもよい）等の入力デバイスを備える。システム１００は、１つ以上の追加プロセッサ、及び１つ以上の追加入出力デバイス、例えばマイクロフォン、スピーカ、プリンタ等を有してもよい。
【００２１】
固体メモリサブシステム１５０は、固体コントローラ１５５、及び、例えばＮＡＮＤフラッシュメモリのようなフラッシュメモリ１６０を有する。フラッシュメモリ１６０は、１つ以上の単層セル（ＳＬＣ）デバイス、及び／又は多層セル（ＭＬＣ）デバイスを有してよい。固体メモリサブシステム１５０は、オペレーティングシステム及びアプリケーションソフトウェアを固体メモリサブシステム１５０がシステム１００にロードさせるように設計された制御ロジックを有することができる。
【００２２】
固体メモリサブシステム１５０は、マルチチャネルコンフィグレーションにおいて固体コントローラ１５５によって動作するように構成される。そのようなコンフィグレーションにおいて、コントローラ１５５は、例えばＣＰＵ１０５であるホストからコマンドを受信することに応じて、高いデータスループットを提供する並列なマルチチャネルを介して、ＣＰＵ１０５とフラッシュメモリ１６０との間でデータを送信する。例えば、フラッシュメモリ１６０は、それぞれが約１．６Ｇｂｐｓのレートでデータ転送することのできる（図２及び３を参照して記載される）複数のＮＡＮＤフラッシュメモリユニットに協働するように結合された、４つのチャネルを有することができる。このような構成において固体コントローラ１５５が達成することのできるスループットは、フラッシュメモリ１６０が４つのＮＡＮＤフラッシュメモリユニットから連続してデータを送信する場合にコントローラ１５５が達成することのできるスループットに比べて４倍大きい。ここに記載される技術を使用すると、コントローラ１５５が結合された複数のＮＡＮＤフラッシュメモリユニットから、固体コントローラ１５５がデータを取得する効率を増大させることができる。
【００２３】
認識されるように、システム１００はデスクトップパーソナルコンピュータを表しており、ハードディスクドライブ、ネットワークインターフェイス、マザーボード等のような図示されていない、その他多くのデバイス及びサブシステムを備えることができる。しかしながらこれは、ここに開示された主題を実行することのできる、より大きなシステムの単なる１つの例にすぎない。そのような、より大きなデバイス及びシステムの他の例としては、単なる他のドライブのようだが、ラップトップ、ノートブック、ディスクレスサブノートブック、及び、ＰＣＩ  ＥｘｐｒｅｓｓＣａｒｄ、ラップトップのＰＣＩｅＭｉｎｉスロット、又はデスクトップのＰＣＩｅスロットに適合するウルトラスリムドライブ等が含まれる。またその他の例として、不揮発性メモリデバイスを使用するスマートフォン、ネットブック、メディアプレイヤー等が含まれる。
【００２４】
しかしながら、これら特定の例とはかかわりなく、ここに記載される主題は、多くの異なるタイプのコンピュータシステムと両立することが可能である。さらに、フラッシュメモリ１６０は、いかなる外部電源も必要とせずに自身のデータを保持することのできる、多くの異なるタイプの固体ストレージデバイスを含むことができる。そのようなデバイスとしては、ＢＩＯＳチップ、コンパクトフラッシュ（登録商標）、スマートメディア、メモリスティック、ＰＣＭＣＩＡタイプＩおよびタイプＩＩメモリカード、及びビデオゲーム制御装置用メモリカード等のフラッシュメモリデバイスが含まれる。そのようなデバイスとして、相変化メモリデバイスが含まれてもよい。
【００２５】
図２は固体コントローラ２５０の例を示す。コントローラ２５０は、例えばコンピュータシステムのＣＰＵ１０５であり、ホストと協働するように結合されるべく構成される。コントローラは、データブロックに対するコマンドをホストから受信し、当該コマンドによって識別されるデータブロックをホストに送信する。例えば、ＣＰＵ１０５は、データブロックを識別するコマンドをコントローラ２５０に送信し、これに応じてコントローラ２５０は、ここに記載される技術を用いて、複数の不揮発性メモリユニットからデータブロックを取得する。
【００２６】
コントローラ２５０は、例えばＮＦＬＡＳＨであり、データブロックを取得するように構成されたデータ取得部２１０を有する。データは、複数の不揮発性メモリユニット（ＮＶＭ）２１４、例えば、ＮＶＭ１、ＮＶＭ２、ＮＶＭ３、ＮＶＭ４、…ＮＶＭｎに格納される。例えば、各データブロックは複数の部分に分割され、対応するＮＶＭのセクタに各部分が格納される。単一のデータブロックの全ての部分が同一のＮＶＭに格納される必要は無い。むしろ、複数のＮＶＭにわたって複数の部分が分布されてよい。
【００２７】
データ取得部２１０は、複数のＮＶＭ２１４と協働するように結合された複数のチャネル２１６を含む。例えば図２に示されるように、データ取得部２１０は４つのチャネル２１６を有する。データ取得部２１０は、例えば５つ又は６つといった、より多くのチャネル、あるいは、例えば２つ又は３つといった、より少ないチャネルを有してよい。チャネル２１６は、１つ以上のＮＶＭ２１４と協働するように結合される。例えば、チャネル１（２１６）はＮＶＭ１及び２（２１４）と結合され、チャネル２（２１６）はＮＶＭ３及び４（２１４）と結合される。チャネル３（２１６）は、１つ以上のＮＶＭ２１４（不図示）と結合され、チャネル４（２１６）はＮＶＭｎ（２１４）と結合される。それぞれのＮＶＭ２１４は、データブロックの一部分を物理的に格納することのできる複数のセクタを有することができる。データ取得部２１０は、データブロックの一部分が格納されているＮＶＭ２１４のセクタから、当該一部分を取得するように構成される。
【００２８】
コントローラ２５０は、取得されたデータブロックの複数の部分を格納するように構成されたバッファ２１２をさらに備える。例えば、データ取得部２１０は、チャネル２１６を介して複数のＮＶＭからデータブロックの複数の部分を取得し、取得された複数の部分をバッファ２１２に送信する。バッファ２１２は、複数の部分の一時的な格納ユニットとして機能する。
【００２９】
コントローラ２５０は、複数のＮＶＭ２１４から取得されたデータブロックの複数の部分を追跡するように構成されたシーケンサ２１８をさらに備える。特に、シーケンサ２１８は、データ取得部２１０によって取得されてバッファ２１２へ送信された複数の部分を追跡するように構成される。シーケンサ２１８は、複数のＮＶＭ２１４からデータブロックの全ての部分が取得されるまでこれを行う。続いて、シーケンサ２１８は、ブロックの全ての部分が取得されたことを示す指示、例えば信号を、バッファ２１２へと送信する。シーケンサ２１８から指示を受信したことに応じて、バッファ２１２は、取得されたデータブロックの複数の部分をホストへと送信する。
【００３０】
いくつかの実施例においては、コントローラ２５０は、データ取得部２１０と協働するように結合されるエラーチェック及び補正ユニット２２０を含む。エラーチェック及び補正ユニット２２０は、データ取得部２１０によって取得されたデータブロックの各部分をチェックし、取得された部分にエラーが無いかを判断する。エラーチェック及び補正ユニット２２０はシーケンサ２１８にも結合され、取得された部分にエラーが無いことを示す信号を送信する。
【００３１】
データブロックの各部分は、ホストによる利用順序に従ってどのようにデータが格納されるかを定義する、論理ブロックアドレス（ＬＢＡ）が割り当てられる。いくつかの実施例においては、連続した複数の部分が、連続した複数のＮＶＭに格納されてよい。あるいは、連続した複数の部分が同じ複数のＮＶＭに格納されてよい。またあるいは、複数の部分が複数のＮＶＭにわたって分布されてもよい。さらに、各ＮＶＭは複数のセクタを含み、各セクタは、データブロックの一部分を物理的に格納するように構成される。従って、データブロックの複数の部分は、複数のＮＶＭに含まれる複数のセクタにわたって分布されてよい。
【００３２】
複数のＮＶＭにわたって格納される２つのデータブロックを並行して取得する方法を、以下の表２を参照して記載する。２つのデータブロックを並行して取得することは、複数のデータブロックの複数の部分が、複数のＮＶＭの複数のセクタにわたって各パスにおいて取得されることを意味する。言い換えると、データ取得部２１０は、第１ブロックの全ての部分を取得することを待たずに、第２ブロックの複数の部分を取得する。それどころか、データ取得部２１０は、複数のＮＶＭの複数のセクタから、両方のデータブロックの複数の部分を取得する。以下の表２においては、データブロックの複数の部分が、「ブロック番号＿部分番号」という慣例に従って表記されている。ブロック番号はコマンドに対応し、部分番号はデータブロックの一部分に対する識別子に対応する。いくつかの実施例においては、部分番号は、以下に記載する記述子によって表される。
【表２】
2013502001.tif 000003
【００３３】
表２を参照して記載される例においては、ブロック１は５つの部分（１＿０から１＿４）で構成され、ブロック２は７つの部分（２＿０から２＿６）で構成される。ブロック１及びブロック２を取得する１つの方法は、まずブロック１の全てのブロック＿部分を取得し、次いで、ブロック２の全てのブロック＿部分を取得する方法である。つまり、ブロック＿部分取得シーケンスは、チャネル０からの１＿０、（チャネル１、２、３をスキップ）、１＿１、（チャネル１をスキップ）、１＿２、１＿３、１＿４、（チャネル１、２、３をスキップ）、２＿０、２＿１、２＿２、２＿３、２＿４、２＿５、及び２＿６となる。ブロック２の任意のブロック＿部分を取得する前にブロック１の全てのブロック＿部分を取得する場合は、チャネルをスキップすることが含まれるので、チャネルの全処理能力が使用されず、取得の間に遅延が生じる。
【００３４】
あるいは、処理能力を最大限に活用して遅延を減少させるために、データ取得部２１０は、チャネル０経由で第１セクタからブロック＿部分１＿０を取得し、次いでチャネル１経由で第１セクタからブロック＿部分２＿１を取得し、次いでチャネル２経由で第１セクタからブロック＿部分１＿２を取得し、次いでチャネル３経由で第１セクタからブロック＿部分１＿３を取得する。データ取得部２１０は、全４チャネル経由で全てのデータブロックが取得されるまで、第２セクタ、第３セクタ等に対してこれらのステップを繰り返す。言い換えると、データ取得部２１０は、チャネルをスキップする代わりに、１つのチャネルの１つのセクタに見出される任意のブロック＿部分を取得する。部分が格納されていないセクタからは部分は取得されない。
【００３５】
取得のためのこのパターンは、各データブロックの複数の部分を識別する記述子（表３を参照して以下に記載される）に基づいて決定される。コントローラ２５０は、ホストから受信される記述子に基づいて、取得されるべきデータブロックの複数の部分を識別する。例えば、コマンド中において、ブロック＿部分１＿０及び２＿１を識別する記述子をホストが供給したので、データ取得部２１０は、ホストがこれらのブロック＿部分を要求したと判断し、これらを取得する。データ取得部２１０は、ブロック＿部分１＿０に続く部分、つまりブロック＿部分１＿１を取得するために、ブロック＿部分２＿１又はその他のブロック＿部分をスキップする必要が無い。その代わりに、データ取得部２１０がそうしたブロック＿部分を識別するに連れて、ホストによって特定される全てのブロック＿部分を、データ取得部２１０が取得することができる。
【００３６】
図３は、２つのデータブロック取得の間のデータフローの例を示す。図３の例においては、２つのデータブロック取得の間のデータフローは、次のシーケンスとなっている。つまり、１＿０、１＿２、１＿３、２＿１、１＿１、２＿５、２＿２、２＿３、１＿４、２＿６、２＿０、及び２＿４である。図３に示されるデータフローは、チャネル０−３（２１６）経由で複数のＮＶＭ２１４からデータの複数の部分を取得することができる、多くの可能なシーケンスの１つである。例えば、別のデータフローは、２＿０、２＿１、２＿２、２＿３、２＿４、２＿５、２＿６、１＿３、１＿０、１＿２、１＿１、及び１＿４というシーケンスである。特に、データ取得部２１０が、データブロックのその他の複数の部分を除外してデータブロックの連続した複数の部分を取得する必要が無いので、データフローは、データの同一のブロック＿部分の非連続的な複数の部分、例えば１＿０に続く１＿２を含む。さらに、第２データブロックの複数の部分を取得する前に第１データブロックの全ての部分をデータ取得部２１０が取得する必要が無いので、データフローは、例えば、１＿３、次いで２＿１、次いで１＿１のように、ブロック２の複数の部分と交互に配置されたブロック１の複数の部分を含む。
【００３７】
データ取得部２１０は、複数のデータブロックの複数の部分を、複数のＮＶＭ２１４の複数のセクタに複数の部分が格納されるシーケンスで取得することができる。この点においては、１つのデータブロックの複数の部分が取得されるシーケンスは、１つのデータブロックの連続した複数の部分のシーケンスとは異なる。さらに、データ取得部２１０は、ブロック１の複数の部分とブロック２の複数の部分とを交互に配置することができるので、これにより、チャネル２１６を介して両方のデータブロックを並行して取得することができる。図３に関連して示されるデータフローと、１つのブロックの連続した複数の部分が取得されるデータフローとの比較を以下の表に示す。
【表Ａ】
2013502001.tif 000004
【００３８】
前述のように、データ取得部２１０は、例えばＣＰＵ１０５であるホストからコマンドを受信したことに応じて、複数のＮＶＭ２１４からデータブロックを取得する。データブロックを要求することに加え、ＣＰＵ１０５は、データブロックがＣＰＵ１０５へ送信されるべきシーケンスを特定する。例えば、ＣＰＵ１０５は、連続した複数の部分のシーケンス、つまり１＿０、１＿１、１＿２、１＿３、及び１＿４において、（表２を参照して記載される）ブロック１が送信されるべきであることを特定する。複数のＮＶＭの複数のセクタに複数の部分が格納されているシーケンスで複数のデータブロックを取得することにより、ＣＰＵ１０５へ複数の部分が送信されるべきシーケンスとは異なるシーケンスで、データ取得部２１０がデータブロックの複数の部分を取得することができる。コントローラ２５０は、図４に関連して記載される様式で、データ取得部２１０によって取得された複数の部分を送信する。
【００３９】
図４は、固体コントローラ２５０によって実行されるデータ送信方法の例を示す。シーケンサ２１８は、例えばＣＰＵ１０５であるホストから、データブロックに対するコマンドを受信する。いくつかの実施例においては、コマンドは、データブロック、特にデータブロックの複数の部分を識別する複数の記述子を含む。ＣＰＵ２０５は、データブロックの複数の部分を識別する記述子を、コントローラ２５０によってＣＰＵ２０５へ複数の部分が送信されるべき順序を表す論理順序で、シーケンサ２１８へと送信する。図４に示されるコントローラ２５０は、ＣＰＵ２０５と協働するように結合される。ＣＰＵ２０５は、それぞれがデータブロックを受信するためのコマンドを送信可能な複数のホストと協働するように結合されることが理解されるであろう。記述子は以下のように表される。
【表Ｂ】
2013502001.tif 000005
【００４０】
データブロックの対応する複数の部分（アロケーションユニット（ＡＵ）としても知られている）がデータ取得部２１０によって取得され、バッファ２１２に送信されるまで、シーケンサ２１８が記述子を格納する。いくつかの実施例においては、データ取得部２１０は、取得されたデータブロックの一部分を、エラーチェック及び補正ユニット２２０へと送信する。そのような実施例においては、複数の部分がエラーチェック及び補正ユニット２２０によって処理されてバッファ２１２に送られるまで、シーケンサ２１８が記述子を格納することができる。
【００４１】
シーケンサ２１８は、それぞれの記述子に記述子ＩＤを付与し、以下に表される新たな記述子を生成する。対応する複数の部分が複数のＮＶＭ２１４から取得されてバッファ２１２又はエラーチェック及び補正ユニット２２０に送信されるまで、データ取得部２１０が当該新たな記述子を格納する。
【表Ｃ】
2013502001.tif 000006
【００４２】
データ取得部２１０は、前述のシーケンス（取得シーケンス）において複数のＮＶＭから取得された複数の部分を、バッファ２１２又はエラーチェック及び補正ユニット２２０へと送信する。取得シーケンスは、論理シーケンスとは異なっていてよい。データ取得部２１０は、取得されたそれぞれの部分と共に、対応する記述子をエラーチェック及び補正ユニット２２０へと送信する。例えば、データ取得部２１０からエラーチェック及び補正ユニット２２０へと送信された記述子の内容は、以下のように表される。
【表Ｄ】
2013502001.tif 000007
【００４３】
データ取得部２１０からユニット２２０が複数の部分を受信するにつれて、エラーチェック及び補正ユニット２２０が複数の部分を１つずつ処理することができる。エラーチェック及び補正ユニット２２０は、記述子の「バッファアドレス」フィールドを使用して、バッファ２１２の正しい位置にそれぞれの部分を送ることができる。エラーチェック及び補正ユニット２２０は、記述子の「ＩＤ」フィールドをさらに使用して、対応する部分に対するエラーチェックが完了したことを示す信号をシーケンサ２１８に送信することができる。
【００４４】
シーケンサ２１８は、エラーチェック及び補正ユニット２２０によって送信された「ＩＤ」フィールド中の識別子を受け取ることができる。いくつかの実施例においては、シーケンサ２１８は、記述子識別子の長いリストを格納できるように構成される。このようにして、シーケンサは、データ取得部２１０が取得シーケンスで取得したデータブロックの複数の部分を追跡する。ＣＰＵ２０５から受信した論理シーケンス中に特定されたデータブロックの全ての部分をエラーチェック及び補正ユニット２２０がバッファ２１２へ送信したとシーケンサ２１８が判断した場合、シーケンサ２１８は、データブロックをＣＰＵ２０５へ送信するための指示をバッファ２１２へと送信する。このようにして、コントローラ２５０はデータ送信方法を実行する。特に、コントローラ２５０は、データブロックの複数の部分の論理シーケンスを特定するコマンドをホストから受信し、論理シーケンスとは異なっていてよい取得シーケンスでデータブロックを取得し、論理シーケンスでデータブロックをホストへ送信できるように構成される。
【００４５】
例えばＣＰＵ２０５であるホストによって生成され、論理順序でシーケンサ２１８へと送信される記述子の例が（以下の）表３に示される。
【表３】
2013502001.tif 000008
【００４６】
表２は、ブロック１又はブロック２のどちらかのデータブロックにおけるそれぞれの部分が占めるチャネル２１６を示す。上述のように、ブロック１及びブロック２がホストへ送信されるべき論理順序とは異なっていてよい取得順序で、ブロック１及びブロック２の複数の部分が並行に取得される。さらに、取得された複数の部分は、論理シーケンスとは異なるシーケンスでバッファ２１２へと送信される。例えば、取得された複数の部分は、複数の部分が取得されたシーケンスでバッファ２１２へと送信されてよい。
【００４７】
いくつかの状況においてコントローラ２５０は、ブロック１及びブロック２をそれぞれ要求する、２つのホストコマンド−コマンド１及びコマンド２−を受信する。コマンド１及びコマンド２のそれぞれは、ブロック１及びブロック２に対して対応する論理シーケンスもそれぞれ特定する。バッファ２１２は、ブロック１の全ての部分よりも前に、ブロック２の全ての部分を受信することができる。そのような場合においては、ホストコマンドが受信された順序で取得されたブロックをホストへ送信するように、コントローラ２５０が構成されてよい。言い換えると、ホストコマンド２よりも前にホストコマンド１が受信された場合、コントローラ２５０は、まずブロック１の複数の部分を送信し、次いでブロック２の複数の部分を送信することができる。そのために、データの全ての部分が取得されてバッファ２１２に格納されていても、コントローラ２５０がデータブロックの送信を遅らせることができる。
【００４８】
あるいは、コントローラ２５０は、取得されたブロックがホストへ送信される順序を変更するように構成されてよい。例えば、ホストコマンド２よりも前にホストコマンド１が受信され、かつ、ブロック１の全ての部分を取得する前にブロック２の全ての部分をコントローラ２５０が取得した場合、コントローラ２５０は、まずブロック２の複数の部分をホストに送信し、次いでブロック１の複数の部分を送信することができる。これにより、取得されたブロックがホストに送信される順序を変更することができる。さらに、コントローラ２５０がブロック１の全ての部分は取得していないが、ブロック２の全ての部分を取得した場合、ブロック１の全ての部分が取得されるまで、ブロック２の複数の部分の送信をコントローラ２５０が遅らせることができる。
【００４９】
図５は、複数のデータブロックを識別するコマンドに割り当てられた領域を含む、固体コントローラ２５０中のバッファ２１２の例を示す。いくつかの実施例においては、データブロックのそれぞれに対し、バッファ２１２は、データブロックの複数の部分に対するバッファアドレスを、対応するリスト中に格納する。データブロックのバッファアドレスを格納するリストがリンクされる。リスト中の各項目は、データブロックの一部分を格納するためのバッファ空間である。各項目は、対応するバッファアドレスでさらにラベルされる。データ取得部２１０によって取得され、エラーチェック及び補正ユニット２２０によってチェックされたブロック＿部分をバッファ２１２が受信するにつれて、バッファ２１２は、ブロック＿部分のアドレスに基づいて識別される対応するバッファ空間中にそれぞれのブロック＿部分を格納することによって、リンクされるリストを追加する。
【００５０】
図６は、ホストからのコマンドに応じて、不揮発性メモリユニットからデータを取得するプロセス６００の例を示す。６０５において、データブロックを識別するコマンドが受信される。コマンドは、識別されたブロックに含まれるデータブロックの複数の部分が送信されるべき第１シーケンスも識別する。６１０において、それぞれの不揮発性メモリユニットから、データブロックの複数の部分が第１シーケンスとは異なる第２シーケンスで取得される。６１５において、取得された複数の部分がバッファに格納される。６２０において、第２シーケンスで取得されたデータブロックの複数の部分が追跡される。６２５において、取得されたデータが、データブロックの全ての部分を含むかが判断される。６３０において、バッファは、判断したことに応じてデータブロックを送信するように指示される。
【００５１】
プロセス６００は、ハードウェア、ファームウェア、又は、それらの組み合わせを含む処理回路を用いて実行することができる。いくつかの実施例においては、同一のホスト又は異なるホストから、付加的なデータブロックを識別する付加的なコマンドを受信することができる。これに応じて、対応するデータブロック及び付加的なデータブロックの複数の部分が取得される。さらに、取得された複数の部分は交互に配置され、バッファに送信される。特に、付加的なデータブロックの複数の部分がデータブロックの複数の部分と一緒に送信されるように、取得された複数の部分が交互に配置されてよい。
【００５２】
いくつかの実施例を上記のように詳細に記載したが、様々な変更が可能である。いくつかの実施例においては、大きなデータブロックが複数のチャネルにわたって均等に分配されておらず、むしろ単一のチャネルに集中している場合に、複数のコマンドをコントローラ２５０が並行して実行することにより、与えられた大きなデータブロックのグループに対する実行時間を最小限にすることができる。表４は、３つの大きなデータブロック、つまり部分１０２−１０５を含むブロック１、部分２０７−２０９を含むブロック２、及び、部分４０４−４０７を含むブロック４にアクセスするためであり、それぞれが不揮発性メモリユニットの対応するセクタと協働するように結合された４つのチャネルを示す。
【表４】
2013502001.tif 000009
【００５３】
ブロック１を識別したコマンドと並行して、ブロック２及びブロック４を識別したコマンドを提供することにより、チャネル２１６において得られる処理能力が十分に利用され、データブロックのグループに対する読み出し性能を最大限にすることができる。データ取得部２１０は４つのパス／オペレーションでブロックを読み出すが、その期間において３つのコマンドが提供される。
【００５４】
そのようにするために、データブロックの一部分が、適切な位置、例えばバッファ２１２のセクタに送られる。通常は、１つのオペレーションにおいて読み出された複数の部分は、データブロックの複数の部分を格納するために用意されたバッファ２１２の物理領域である、バッファ中の同一の論理セグメントへ送られる。論理セグメントは、連続的な、あるいは、物理的に分散したアドレス空間であってよく、コントローラ２５０によってリンク及び管理される。
【００５５】
図７は、チャネル２１６からバッファ２１２へのデータフローの例を示す。データ取得部２１０が実行するデータ取得オペレーションは、バッファ２１２中に、複数の行き先セグメント７０５、７１０、７１５を有することができる。行き先セグメントのそれぞれは、提供されるべきコマンドに対応し、コマンドはデータブロックを識別する。ＣＰＵ２０５は、行き先位置を制御することができる。例えば、ＣＰＵ２０５はバッファ分散リストによって行き先セグメントを制御することができる。それぞれのパスが実行されるにつれて、正しい行き先セグメント、及び、それぞれのセグメント内においてさらに適当なオフセットへとデータブロックの一部分を分配するためのバッファ分散リストを、ＣＰＵ２０５は構築することができる。
【００５６】
本明細書に記載される機能的なオペレーションを含め、開示される主題は、電子回路、コンピュータハードウェア、ファームウェア、ソフトウェア、又はそれらの組み合わせ等、本明細書に開示される構造的な手段、及び構造的なその等価物として実施することができる。これは、記載されるオペレーションを１つ以上のデータ処理装置に実行させるべく動作可能なプログラム（メモリデバイス、ストレージデバイス、機械読み取り可能なストレージ基板、あるいは、その他の物理的機械読み取り可能な媒体、又はそれらの１つ以上の組み合わせであり、コンピュータ読み取り可能な媒体中の符号化されたプログラム等）を含む。
【００５７】
本開示には多くの詳細な点が含まれているが、これらは、特許請求の範囲に対する限定とみなされるべきではなく、むしろ、特定の実施例に対して具体的な特徴を記載するものとみなされるべきである。個々の実施例の関係において本明細書に記載されるいくつかの特徴は、１つの実施例において組み合わせて実行されてもよい。反対に、１つの実施例に関連して記載される様々な特徴が、複数の実施例において別々に実行されてよく、あるいは、任意の適切なサブコンビネーションにおいて実行されてもよい。さらに、上記の特徴は、特定の組み合わせにおいて作用するように記載され、元々そのように請求されてもいるかもしれないが、いくつかの場合においては、請求される組み合わせから１つ以上の特徴が削除されてよく、また、請求される組み合わせが、サブコンビネーション又はサブコンビネーションの変形に向けられたものでもよい。
【００５８】
同様に、オペレーションは特定の順序で図面に記述されているが、これは、示されている特定の順序で、又は連続した順序でそのようなオペレーションが実行される必要があると理解されるべきではない。あるいは、望ましい結果を達成するために、示される全てのオペレーションが実行される必要があると理解されるべきではない。さらに、上述の実施例における様々なシステム構成要件を分離することは、全ての実施例においてそのような分離が必要であると理解されるべきではない。
【００５９】
その他の実施例は、以下の特許請求の範囲の範囲内に入るものである。
【図１】
2013502001.tif 000010
【図２】
2013502001.tif 000011
【図３】
2013502001.tif 000012
【図４】
2013502001.tif 000013
【図５】
2013502001.tif 000014
【図６】
2013502001.tif 000015
【図７】
2013502001.tif 000016
【国際調査報告】
2013502001.tif 000017
2013502001.tif 000018
2013502001.tif 000019