(57)【要約】【課題】シーケンシャルリード処理でのデータ転送の効率を図ることができるデータ記憶装置を提供することにある。【解決手段】実施形態によれば、データ記憶装置は、メモリコントローラと、バッファメモリと、リードコントローラとを具備する。メモリコントローラは、ホストからのリードコマンドに基づいて、フラッシュメモリから並列にデータをアクセスする。バッファメモリは、前記メモリコントローラにより前記フラッシュメモリから読み出されたデータを格納する。リードコントローラは、前記リードコマンドがシーケンシャルリード処理を指示する場合には、前記フラッシュメモリから読み出されたデータを、シーケンシャル番号で指示される順番に基づいて前記バッファメモリと前記ホスト間のシーケンシャルデータ転送を制御する。【選択図】図１
2012027649.tif 000002
【特許請求の範囲】
【請求項１】
ホストからのリードコマンドに基づいて、フラッシュメモリから並列にデータをアクセスするメモリコントローラと、
前記メモリコントローラにより前記フラッシュメモリから読み出されたデータを格納するバッファメモリと、
前記リードコマンドがシーケンシャルリード処理を指示する場合には、前記フラッシュメモリから読み出されたデータを、シーケンシャル番号で指示される順番に基づいて前記バッファメモリと前記ホスト間のシーケンシャルデータ転送を制御するリードコントローラと
を具備するデータ記憶装置。
【請求項２】
前記リードコントローラは、
前記シーケンシャル番号と、前記リードコマンドで要求された連続アドレスのデータのセクタ数とを含むシーケンシャル情報を取得し、
前記シーケンシャル情報に基づいて前記シーケンシャルデータ転送を制御するように構成されている請求項１に記載のデータ記憶装置。
【請求項３】
前記リードコントローラは、
前記フラッシュメモリから読み出されたデータを前記バッファメモリに転送するときに、前記シーケンシャル番号に基づいた順番で前記バッファメモリにデータを格納するように構成されている請求項１又は請求項２のいずれか１項に記載のデータ記憶装置。
【請求項４】
ホストからのリードコマンドに応じてシーケンシャルリード処理を決定するモジュールを有し、
前記モジュールは、
前記リードコマンドで指定された連続アドレスに応じて前記フラッシュメモリの各チャネルからデータを読み出すことを指示するコマンドを前記メモリコントローラに発行し、
前記コマンドに対して前記シーケンシャル番号を付加するように構成されている請求項１から請求項３のいずれか１項に記載のデータ記憶装置。
【請求項５】
前記リードコントローラは、
前記バッファメモリに格納されたデータのセクタ数、及び前記バッファメモリから前記ホストにシーケンシャルデータ転送すべきデータのセクタ数をカウントするためのセクタカウンタを含む請求項１から請求項４のいずれか１項に記載のデータ記憶装置。
【請求項６】
前記リードコントローラは、
前記シーケンシャル番号を前記フラッシュメモリのチャネル毎に記憶するメモリを含み、
前記セクタカウンタは、前記シーケンシャル番号の順番に前記セクタ数のカウントを行なうように構成されている請求項５に記載のデータ記憶装置。
【請求項７】
前記フラッシュメモリから読み出されたデータを前記バッファメモリに転送するバッファ管理モジュールを有し、
前記リードコントローラは、
前記バッファ管理モジュールから前記バッファメモリへのセクタ単位のデータ転送の完了通知を受信し、
前記完了通知と前記シーケンシャル番号に基づいて、シーケンシャルデータ転送すべきデータが前記バッファメモリに格納されたことを認識するように構成されている請求項１から請求項６のいずれか１項に記載のデータ記憶装置。
【請求項８】
前記バッファメモリから前記ホストにシーケンシャルデータ転送を実行するホストコントローラを有し、
前記リードコントローラは、
前記シーケンシャルデータ転送すべきデータが、前記シーケンシャル番号に基づいて前記バッファメモリに格納された後に、前記ホストコントローラに対して前記シーケンシャルデータ転送の許可を発行するように構成されている請求項１から請求項７のいずれか１項に記載のデータ記憶装置。
【請求項９】
前記リードコントローラは、ハードウェアモジュールから構成されている請求項１から請求項８のいずれか１項に記載のデータ記憶装置。
【請求項１０】
フラッシュメモリを備えたデータ記憶装置のデータ読み出し方法であって、
ホストからのリードコマンドに基づいて、フラッシュメモリから並列にデータを読み出し、
前記フラッシュメモリから読み出されたデータをバッファメモリに格納し、
前記リードコマンドがシーケンシャルリード処理を指示する場合には、前記フラッシュメモリから読み出されたデータを、シーケンシャル番号で指示される順番に基づいて前記バッファメモリと前記ホスト間のシーケンシャルデータ転送を制御するデータ読み出し方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを記憶媒体とするデータ記憶装置に関する。
【背景技術】
【０００２】
近年、データ記憶装置として、書き換え可能な不揮発性メモリであるNAND型フラッシュメモリ（以下、単にフラッシュメモリと表記する場合がある）を記憶媒体とするＳＳＤ（solid state drive）の開発が推進されている。
【０００３】
ＳＳＤは、フラッシュメモリから読み出されたデータを、ＤＲＡＭなどの揮発性メモリからなるバッファメモリに転送し、このバッファメモリからホストシステム（以下、単にホストと表記する場合がある）に転送する。ここで、フラッシュメモリは、バッファメモリと比較して、動作速度（アクセス速度）が低速である。この動作速度差を補償するために、ＳＳＤでは、フラッシュメモリを構成する複数のフラッシュメモリ素子に対して並列にアクセスする並列処理が行なわれている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−５１８９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＳＳＤは、並列処理を実行しているため、ホストからシーケンシャルライトを指示するライトコマンドを受けると、フラッシュメモリにデータを並列にライトする処理を実行する。このため、フラッシュメモリでは、データのシーケンシャル性が失われた状態となる。
【０００６】
このようにフラッシュメモリにライトされたデータをシーケンシャルリード処理により読み出す場合、フラッシュメモリから並列にアクセスされたデータは、ランダムにバッファメモリに転送される。即ち、フラッシュメモリから並列に読み出されるデータの順番は、不定である。このため、ＳＳＤのマイクロプロセッサ（ファームウェア）は、フラッシュメモリからバッファメモリへのデータ転送とバッファメモリからホストへのデータ転送とを確認し、シーケンシャルリード処理によるデータ転送の制御を実行するという高負荷の処理を実行している。
【０００７】
本発明の目的は、シーケンシャルリード処理でのデータ転送の効率を図ることができるデータ記憶装置を提供することにある。
【課題を解決するための手段】
【０００８】
実施形態によれば、データ記憶装置は、メモリコントローラと、バッファメモリと、リードコントローラとを具備する。メモリコントローラは、ホストからのリードコマンドに基づいて、フラッシュメモリから並列にデータをアクセスする。バッファメモリは、前記メモリコントローラにより前記フラッシュメモリから読み出されたデータを格納する。リードコントローラは、前記リードコマンドがシーケンシャルリード処理を指示する場合には、前記フラッシュメモリから読み出されたデータを、シーケンシャル番号で指示される順番に基づいて前記バッファメモリと前記ホスト間のシーケンシャルデータ転送を制御する。
【図面の簡単な説明】
【０００９】
【図１】実施形態に関するデータ記憶装置の構成を説明するためのブロック図。
【図２】実施形態に関するシーケンシャルリードコントローラの構成を説明するためのブロック図。
【図３】実施形態に関するシーケンシャルリード処理を説明するための図。
【図４】実施形態に関するシーケンシャルリードコントローラの動作を説明するための図。
【図５】実施形態に関するシーケンシャルリードコントローラの動作を説明するための図。
【図６】実施形態に関するデータ記憶装置の動作を説明するためのフローチャート。
【発明を実施するための形態】
【００１０】
以下図面を参照して、実施形態を説明する。
【００１１】
［データ記憶装置の構成］
図１は、実施形態のデータ記憶装置の構成を示すブロック図である。
【００１２】
図１に示すように、実施形態のデータ記憶装置はＳＳＤ（solid state drive）であり、NAND型フラッシュメモリ（以下単にフラッシュメモリ）１７をデータ記憶媒体とする記憶装置である。
【００１３】
フラッシュメモリ１７は、複数のNAND型メモリモジュール（フラッシュメモリ素子）17-0〜17-nから構成されている。各メモリモジュール17-0〜17-nは、それぞれチャネルＣＨ０〜ＣＨｎが割り当てられて、チャネルＣＨ０〜ＣＨｎに対応する複数のメモリコントローラ11-0〜11-nにより並列にアクセス（リード／ライト）される。
【００１４】
バッファマネージャモジュール１２は、各メモリコントローラ11-0〜11-nによりフラッシュメモリ１７から読み出されたデータをバッファメモリ１４に転送する。バッファマネージャモジュール１２はアービタ（arbiter）１３により、チャネルＣＨ０〜ＣＨｎ毎のデータの転送を調停する。
【００１５】
バッファメモリ１４は、ＤＲＡＭ（dynamic random access memory）からなるキャッシュメモリに相当し、フラッシュメモリ１７から読み出されたデータを格納する。バッファメモリ１４に格納されたデータは、ホストインターフェースコントローラ（ホストＩ／Ｆコントローラ）１５に転送される。これにより、バッファメモリ１４は、フラッシュメモリ１７とホストＩ／Ｆコントローラ１５間のデータ転送の効率を高めることになる。
【００１６】
ホストＩ／Ｆコントローラ１５は、バッファメモリ１４とホストシステム３０との間でのデータやコマンドの転送を制御する。ホストシステム（以下単にホストと表記する）３０は、例えばパーソナルコンピュータである。
【００１７】
さらに、本実施形態のＳＳＤは、マイクロプロセッサ（ＭＰＵ）１０及びシーケンシャルリードコントローラ（以下単にリードコントローラと表記する）１６とを有する。ＭＰＵ１０は、ファームウェア（ＦＷ）とも呼ばれており、ホスト３０からのコマンド（リードコマンドやライトコマンド）を解読し、このコマンドに応じた制御を実行する。
【００１８】
具体的には、ＭＰＵ１０は、ホスト３０からのリードコマンドに応じて、データのリード動作に必要なコマンドをメモリコントローラ11-0〜11-nに出力する。また、ＭＰＵ１０は、ホスト３０からのライトコマンドに応じて、データのライト動作に必要なコマンドをメモリコントローラ11-0〜11-nに出力する。
【００１９】
リードコントローラ１６は、ＭＰＵ１０によりコマンドに付加されたシーケンシャル情報（タグ情報）に基づいて、シーケンシャルリード処理を制御するハードウェアモジュールである。シーケンシャル情報は、後述するシーケンシャルリード処理で必要なシーケンシャル番号とセクタ数を含む。即ち、シーケンシャル番号は、フラッシュメモリ１７から読み出されたデータをシーケンシャルに転送するための順番を示す情報である。セクタ数は、シーケンシャルに転送するデータのサイズを示す情報である。リードコントローラ１６は、シーケンシャル番号に基づいて、バッファメモリ１４からホスト３０に対して、先頭から順番にデータを転送するように制御する。
【００２０】
図２に示すように、リードコントローラ１６は、シーケンシャルセクタカウンタ（以下、単にセクタカウンタと表記する）２０と、シーケンシャル情報を格納するメモリ２１と、選択モジュール２２と、コンペアモジュール２３と、シーケンシャル番号カウンタ２４と、基準コンペアモジュール２５とを有する。セクタカウンタ２０は、順番にデータを転送するときに、転送データ量及びバッファメモリ１４の残存データ量を監視するためのカウンタである。
【００２１】
［データ記憶装置の動作］
以下、図１から図６を参照して、実施形態のデータ記憶装置の動作を説明する。
【００２２】
まず、図６のフローチャートに示すように、ＳＳＤは、ホストＩ／Ｆコントローラ１５を介してホスト３０からコマンドを受信すると、ＭＰＵ１０に転送する（ブロック６００）。ＭＰＵ１０はコマンドを解読し、リードコマンドであればデータのリード動作を実行するように制御する。また、ＭＰＵ１０は、ライトコマンドであればデータのライト動作を実行するように制御する。ホスト３０からのコマンドにより、アクセス対象の論理ブロックアドレス（ＬＢＡ）及びデータサイズが指定される。
【００２３】
本実施形態では、ＭＰＵ１０は、ホスト３０からのリードコマンドがシーケンシャルリード処理を要求するコマンドであるか否かを判定する（ブロック６０１）。シーケンシャルリードとは、リードコマンドで指定されるアクセス対象のＬＢＡが、例えば所定のセクタ（物理アドレス）数分以上で、番号が連続するＬＢＡ（連続ＬＢＡ）の場合である。なお、ＭＰＵ１０は、ホスト３０からのリードコマンドがシーケンシャルリードではない場合、通常のリード動作の制御を実行する（ブロック６０１のＮＯ）。
【００２４】
図３に示すように、本実施形態では、ホスト３０からのリードコマンドで、例えば連続するＬＢＡ０〜６３のデータを読み出すシーケンシャルリード処理が要求された場合を想定する。ここでは、フラッシュメモリ１７の各チャネルＣＨ０〜ＣＨ７に対応するメモリモジュール17-0〜17-7には、図３に示すように、８セクタ分毎のデータが分散されて格納されているとする。
【００２５】
通常では、ＳＳＤは、フラッシュメモリ１７に対してクラスタ（cluster）単位でのデータのアクセス（リード又はライト）を実行する。１クラスタは、物理的なアクセス単位のセクタで、例えば８セクタ分に相当するデータサイズである。
【００２６】
ここで、図示しないハードウェアモジュールは、リードコマンドで指定されるアクセス対象のＬＢＡを、フラッシュメモリ１７をアクセスするための物理アドレスに変換する（ブロック６０２）。物理アドレスとは、フラッシュメモリ１７のチャネル、ブロック（セクタ）、ページからなる。
【００２７】
ＭＰＵ１０は、チャネルＣＨ０〜ＣＨ７に対応するメモリコントローラ11-0〜11-7にコマンド（リード）１００を発行する（ブロック６０３）。ＭＰＵ１０は、シーケンシャルリード処理で転送するデータの順番を示すシーケンシャル番号をコマンド１００に付加する。メモリコントローラ11-0〜11-7は、対応するチャネルＣＨ０〜ＣＨ７のメモリモジュール17-0〜17-7から、指定された物理アドレスのデータを読み出して、バッファマネージャモジュール１２に転送する。
【００２８】
バッファマネージャモジュール１２は、バッファメモリ１４を制御し、メモリモジュール17-0〜17-7から並列に読み出されたデータをバッファメモリ１４に転送する（ブロック６０４）。このとき、バッファマネージャモジュール１２は、メモリモジュール17-0〜17-7からバッファメモリ１４にセクタ単位のデータが完了する度に、セクタ転送完了及びコマンドに付加されたシーケンシャル番号を通知する通知情報１２０を、リードコントローラ１６に発行する。
【００２９】
次に、図２、図４、図５を参照して、リードコントローラ１６の処理を説明する。
【００３０】
先ず、リードコントローラ１６は、図２に示すように、チャネルＣＨ０〜ＣＨ７毎のセクタ転送完了とシーケンシャル番号の通知情報120-0〜120-7を受信する。リードコントローラ１６は、受信したシーケンシャル番号#0〜#7とそれに対するセクタ数（ここでは８セクタ）をカウントし、それらを一旦メモリ２１のチャネルＣＨ０〜ＣＨ７毎の記憶領域21-0〜21-7に格納する。
【００３１】
一方、リードコントローラ１６は、セクタカウンタ２０のカウント対象であるシーケンシャル番号を設定するためにシーケンシャル番号カウンタ２４のカウントを起動させる。コンペアモジュール２３は、シーケンシャル番号カウンタ２４のカウント値（例えば#0）と、メモリ２１に格納されているシーケンシャル番号とを比較する。選択モジュール２２は、コンペアモジュール２３により一致がとれたシーケンシャル番号（例えば#0）の記憶領域（ここでは21-0）からセクタ数２２０をセクタカウンタ２０に設定する。
【００３２】
セクタカウンタ２０は、設定されたセクタ数分のインクリメントを実行する（ブロック６０５）。ここで、図４（Ａ）に示すように、バッファメモリ１４には、例えばチャネルＣＨ０からシーケンシャル番号#0の４セクタ分のデータ４１の転送が完了して格納されているとする。シーケンシャル番号#0の４セクタ分のデータ４１は、例えばＬＢＡ０〜３の４セクタ分である。また、バッファメモリ１４には、例えばチャネルＣＨ３からシーケンシャル番号#3の８セクタ分のデータ４２の転送が完了して格納されているとする。
【００３３】
なお、バッファメモリ１４において、各ＬＢＡに対するスタートアドレス４０は、フラッシュメモリ１７からバッファメモリ１４に転送するためのコマンドを発行するときに、バッファマネージャモジュール１２により指定される。
【００３４】
このような状態の場合に、図４（Ｂ）に示すように、セクタカウンタ２０は、４セクタ分のデータ４１の転送完了に応じてカウント値４までインクリメントを実行する。なお、例えば８セクタ分のデータ４２が転送完了している場合でも、これにより前のシーケンシャル番号のデータの転送が完了していないため、セクタカウンタ２０にはセクタ数の更新はされない。
【００３５】
セクタカウンタ２０がシーケンシャル番号#0に対するセクタ数分のインクリメントを終了すると、リードコントローラ１６は、シーケンシャル番号カウンタ２４をインクリメントする。コンペアモジュール２３は、シーケンシャル番号カウンタ２４のカウント値（例えば#1）と、メモリ２１に格納されているシーケンシャル番号とを比較する。選択モジュール２２は、コンペアモジュール２３により一致がとれたシーケンシャル番号（例えば#1）の記憶領域（ここでは21-1）からセクタ数２２０をセクタカウンタ２０に設定する。ここでは、セクタ数２２０は、８セクタである。
【００３６】
このような過程を繰り返して、セクタカウンタ２０は、シーケンシャル番号毎に転送完了したセクタ数をインクリメントする。セクタカウンタ２０は、カウント値を基準コンペアモジュール２５に出力する。基準コンペアモジュール２５は、予め設定されている基準値（ここでは３９とする）とセクタカウンタ２０からのカウント値とを比較する。基準コンペアモジュール２５は、当該基準値を超えると、ホストＩ／Ｆコントローラ１５に対して、バッファメモリ１４からホスト３０へのデータ転送を許可する（ブロック６０６）。
【００３７】
具体的には、図５（Ａ）に示すように、バッファメモリ１４には、例えば５チャネルの４０セクタ分のデータ５０の転送が完了して格納されている。なお、データ５１は、あるチャネルの８セクタ分のデータで、バッファメモリ１４に転送が完了しているが、セクタカウンタ２０のカウント値には含まれていない状態である。
【００３８】
図５（Ｂ）に示すように、セクタカウンタ２０は、４０セクタ分のデータ５０の転送完了に応じてカウント値４０までインクリメントを実行する。基準コンペアモジュール２５は、カウント値４０が基準値（３９）を超えたので、ホストＩ／Ｆコントローラ１５に対して、バッファメモリ１４からホスト３０へのデータ転送の許可信号１６０を出力する。この場合、バッファメモリ１４からは、１セクタ分のデータ転送も完了してない状態である。
【００３９】
ホストＩ／Ｆコントローラ１５は、リードコントローラ１６からの許可信号１６０に応じて、バッファメモリ１４からホスト３０へのデータ転送を開始する。リードコントローラ１６は、バッファメモリ１４からホスト３０へのセクタ単位のデータ転送が完了する度に、ホストＩ／Ｆコントローラ１５からのセクタ転送完了通知１５０を受信する。
【００４０】
リードコントローラ１６は、セクタ転送完了通知１５０を受信する度に、セクタカウンタ２０をデクリメントする。即ち、セクタカウンタ２０は、フラッシュメモリ１７からバッファメモリ１４に転送されて、バッファメモリ１４に格納されているデータのセクタ数（先頭から連続したＬＢＡ）をカウント値で示す。換言すれば、セクタカウンタ２０は、バッファメモリ１４からホスト３０に転送すべきデータの残存（セクタ数）をカウント値で示す。これにより、リードコントローラ１６は、シーケンシャルリード処理によるデータ転送を管理することが可能となる。
【００４１】
リードコントローラ１６は、フラッシュメモリ１７からバッファメモリ１４へのデータ転送が全て完了すると、基準コンペアモジュール２５の基準値を解除する（ブロック６０７のＹＥＳ）。リードコントローラ１６は、ホストＩ／Ｆコントローラ１５からのセクタ転送完了通知１５０に応じてデクリメントするセクタカウンタ２０により、バッファメモリ１４とホスト３０間のデータ転送を監視する（ブロック６０８）。リードコントローラ１６は、セクタカウンタ２０のカウント値が０になると、全てのシーケンシャルリード処理によるデータ転送が完了したことを認識する（ブロック６０９のＹＥＳ）。
【００４２】
以上のように本実施形態によれば、ハードウェアモジュールであるリードコントローラ１６により、シーケンシャルリード処理において、フラッシュメモリ１７の各チャネルＣＨ０〜ＣＨｎから並列かつランダムに読み出されるデータを、先頭から連続するＬＢＡからなるシーケンシャルデータとして、ホスト３０に転送することができる。
【００４３】
即ち、リードコントローラ１６は、ＭＰＵ（ＦＷ）１０がコマンド１００に付加したシーケンシャル番号とセクタ数を含むシーケンシャル情報に基づいて、リオーダリング処理を実行する。具体的には、リードコントローラ１６は、フラッシュメモリ１７から並列かつランダムに読み出されたデータを、バッファメモリ１４上でシーケンシャル番号で指定された順番に並び替えるリオーダリング処理を実行する。これにより、リードコントローラ１６は、セクタ単位のシーケンシャルデータ転送を制御することができる。
【００４４】
要するに、本実施形態のＳＳＤでは、ＭＰＵ（ＦＷ）１０がバッファメモリ１４とホスト３０間のシーケンシャルデータ転送を監視することなく、ハードウェアモジュールであるリードコントローラ１６が高速かつ効率的にシーケンシャルデータ転送を制御する。従って、ＳＳＤのメインコントローラであるＭＰＵ（ＦＷ）１０の負荷を軽減できるため、ＳＳＤ全体の効率化を図ることが可能となる。
【００４５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００４６】
１０…マイクロプロセッサ（ＭＰＵまたはＦＷ）、11-0〜11-n…メモリコントローラ、
１２…バッファマネージャモジュール、１３…アービタ（arbiter）、
１４…バッファメモリ、
１５…ホストインターフェースコントローラ（ホストＩ／Ｆコントローラ）、
１６…シーケンシャルリードコントローラ（リードコントローラ）、
１７…NAND型フラッシュメモリ、17-0〜17-n…メモリモジュール、
２０…シーケンシャルセクタカウンタ（セクタカウンタ）、
２１…メモリ、２２…選択モジュール、２３…コンペアモジュール、
２４…シーケンシャル番号カウンタ、２５…基準コンペアモジュール、
３０…ホストシステム。
【図１】
2012027649.tif 000003
【図２】
2012027649.tif 000004
【図３】
2012027649.tif 000005
【図４】
2012027649.tif 000006
【図５】
2012027649.tif 000007
【図６】
2012027649.tif 000008