(57)【要約】【課題】  アクセス性能及び信頼性を向上させる記憶装置を提供する。【解決手段】  実施形態によれば、記憶装置は、インターフェースを介してホストと接続可能である。記憶装置は、複数のブロックを含む不揮発性メモリと、不揮発性メモリに電気的に接続されたコントローラとを具備する。コントローラは、ホストからリードコマンドを受信した場合に、リードコマンドによって指定される第１のデータを不揮発性メモリの第１のブロックから読み出してホストに送信するとともに、第１のデータを第１のブロックではない不揮発性メモリの第２のブロックに書き込むように構成される。【選択図】  図１
2019179455.tif 000002
【特許請求の範囲】
【請求項１】
インターフェースを介してホストと接続可能な記憶装置であって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラと、
を具備し、
前記コントローラは、前記ホストからリードコマンドを受信した場合に、前記リードコマンドによって指定される第１のデータを前記不揮発性メモリの第１のブロックから読み出して前記ホストに送信するとともに、前記第１のデータを前記第１のブロックではない前記不揮発性メモリの第２のブロックに書き込むように構成される
記憶装置。
【請求項２】
前記第１のブロックの多値度と、前記第２のブロックの多値度とは異なる
請求項１に記載の記憶装置。
【請求項３】
前記第１のブロックの多値度は、前記第２のブロックの多値度よりも高い
請求項１又は請求項２に記載の記憶装置。
【請求項４】
前記コントローラは、前記第１のブロックから前記第１のデータを読み出す際に、前記第１のデータとともに、前記第１のデータの論理アドレス範囲の周辺の論理アドレス範囲に対応する第２のデータを読み出し、前記第１のデータ及び前記第２のデータを前記第２のブロックに書き込むように構成される
請求項１乃至請求項３のいずれか一項に記載の記憶装置。
【請求項５】
複数の論理アドレスと、前記不揮発性メモリの複数の物理アドレスとのマッピングを管理するアドレス変換テーブルと、
を具備し、
前記コントローラは、前記第１のデータを前記第２のブロックに書き込む際に、前記アドレス変換テーブルを更新することによって、前記第１のデータの論理アドレスに前記第１のデータの書き込み先の物理アドレスをマッピングするように構成される
請求項１乃至請求項３のいずれか一項に記載の記憶装置。
【請求項６】
前記コントローラは、前記第１のデータを前記第２のブロックに書き込んだ後、前記ホストから前記第１のデータを指定したリードコマンドを受信した場合に、前記不揮発性メモリの前記第２のブロックから前記第１のデータを読み出して前記ホストに送信する
請求項１乃至請求項５のいずれか一項に記載の記憶装置。
【請求項７】
インターフェースを介してホストと接続可能な記憶装置であって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラと、
前記不揮発性メモリの多値度よりも低い多値度を有し、前記ホストから前記不揮発性メモリへ書き込まれるデータを受信した場合に、当該データを格納するバッファと、
を具備し、
前記コントローラは、前記ホストからリードコマンドを受信した場合に、前記リードコマンドによって指定される第１のデータを前記不揮発性メモリの第１のブロックから読み出して前記ホストに送信するとともに、前記第１のデータを前記バッファに書き込むように構成される
記憶装置。
【請求項８】
前記コントローラは、前記第１のデータのリフレッシュが必要であると判定した場合に、前記第１のデータを前記バッファに書き込み、前記第１のデータのリフレッシュが必要でないと判定した場合に、前記第１のデータを前記バッファに書き込まないように構成される
請求項７に記載の記憶装置。
【請求項９】
前記コントローラは、前記不揮発性メモリに対する書き込み容量を記憶し、前記書き込み容量が所定の閾値以下である場合に、前記第１のデータを前記バッファに書き込み、前記書き込み容量が前記所定の閾値以下でない場合に、前記第１のデータを前記バッファに書き込まないように構成される
請求項７に記載の記憶装置。
【請求項１０】
前記所定の閾値は、前記不揮発性メモリの全記憶容量を１単位として１日当たりに何単位の容量を書き換え可能であるかを示した指標であるＤＷＰＤ（Drive Write Per Day）に基づいて設定される
請求項９に記載の記憶装置。
【請求項１１】
前記コントローラは、前記ホストから前記リードコマンド又は前記リードコマンドに対応する読み出し処理の種別を示す情報を受信した場合に、前記情報に基づいて前記第１のデータを前記バッファに書き込むか否かを判定するように構成される
請求項７に記載の記憶装置。
【請求項１２】
前記コントローラは、前記情報が、前記第１のデータに対する前記読み出し処理が複数回行われ、かつ、リードモディファイライトの対象でないことを示す場合に、前記第１のデータを前記バッファに書き込むように構成される
請求項１１に記載の記憶装置。
【請求項１３】
前記コントローラは、前記ホストから前記バッファの利用の有無を示す情報を受信した場合であって、かつ、前記情報が前記バッファを利用する旨を示す場合に、前記第１のデータを前記バッファに書き込み、前記ホストから受信した前記情報が前記バッファを利用しない旨を示す場合に、前記第１のデータを前記バッファに書き込まないように構成される
請求項７に記載の記憶装置。
【請求項１４】
前記コントローラは、前記第１のデータを前記バッファに書き込んだ後、前記ホストから前記第１のデータを指定したリードコマンドを受信した場合に、前記バッファから前記第１のデータを読み出して前記ホストに送信する
請求項７乃至請求項１３のいずれか一項に記載の記憶装置。
【請求項１５】
コンピュータと、
インターフェースを介して前記コンピュータに接続可能な記憶装置と
を具備し、
前記記憶装置は、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラと、
前記不揮発性メモリの多値度よりも低い多値度を有し、前記コンピュータから前記不揮発性メモリへ書き込まれるデータを格納するバッファと、
を具備し、
前記コンピュータは、前記記憶装置に対し、第１のデータを読み出すための第１の情報と、前記第１のデータを前記バッファに書き込むか否かを判定するための第２の情報とを含むリードコマンドを送信し、
前記コントローラは、前記第１の情報により指定される第１のデータを前記不揮発性メモリの第１のブロックから読み出して前記コンピュータに送信するとともに、前記第２の情報に基づいて、前記第１のデータを前記バッファに書き込むか否かを判定するように構成される
コンピュータシステム。
【請求項１６】
前記第２の情報は、前記リードコマンド又は前記リードコマンドに対応する読み出し処理の種別を示す情報である、
請求項１５に記載のコンピュータシステム。
【請求項１７】
前記第２の情報は、前記バッファの利用の有無を示す情報である
請求項１５に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、記憶装置及びコンピュータシステムに関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるストレージが広く普及している。このようなストレージの一つとして、ＮＡＮＤ型フラッシュメモリを備えるソリッドステートドライブ（ＳＳＤ）が知られている。ＳＳＤは、様々なコンピューティングデバイスのメインストレージとして使用されている。
【０００３】
ＮＡＮＤ型フラッシュメモリを用いて大容量の記憶装置を構築する場合においては、１つのメモリセルに複数ビットのデータを記録可能な多値度の高いＮＡＮＤ型フラッシュメモリが用いられる。例えば、１セルに３ビットのデータを記録するメモリセルはトリプルレベルセル（ＴＬＣ）と呼ばれ、１セルに４ビットのデータを記録するメモリセルはクアッドレベルセル（ＱＬＣ）と呼ばれる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第９５０７５３０号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、アクセス性能及び信頼性を向上させることができる記憶装置及びコンピュータシステムを提供することである。
【課題を解決するための手段】
【０００６】
実施形態によれば、記憶装置は、インターフェースを介してホストと接続可能である。記憶装置は、複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続されたコントローラとを具備する。前記コントローラは、前記ホストからリードコマンドを受信した場合に、前記リードコマンドによって指定される第１のデータを前記不揮発性メモリの第１のブロックから読み出して前記ホストに送信するとともに、前記第１のデータを前記第１のブロックではない前記不揮発性メモリの第２のブロックに書き込むように構成される。
【図面の簡単な説明】
【０００７】
【図１】第１の実施形態に係るコンピュータシステムの構成例を示すブロック図。
【図２】第１の実施形態に係るコンピュータシステム内のＳＳＤにおける、データフローの一例を示すフローチャート。
【図３】第１の実施形態に係るコンピュータシステム内のＳＳＤにおける、データフローの第１の例を示す図。
【図４】第１の実施形態に係るコンピュータシステム内のＳＳＤにおける、データフローの第２の例を示す図。
【図５】第２の実施形態に係るコンピュータシステム内のＳＳＤにおける、データフローの一例を示すフローチャート。
【図６】第３の実施形態に係るコンピュータシステム内のＳＳＤにおける、データフローの一例を示すフローチャート。
【図７】第４の実施形態に係るコンピュータシステム内のＳＳＤ３の構成の一例を示す図。
【図８】第４の実施形態に係るコンピュータシステム内のＳＳＤにおける、データフローの一例を示すフローチャート。
【図９】第４の実施形態に係るコンピュータシステム内のＳＳＤにおける、データフローの第１の例を示す図。
【図１０】第４の実施形態に係るコンピュータシステム内のＳＳＤにおける、データフローの第２の例を示す図。
【図１１】第５の実施形態に係るコンピュータシステム内のＳＳＤにおける、データフローの一例を示すフローチャート。
【図１２】第６の実施形態に係るコンピュータシステム内のＳＳＤにおける、データフローの一例を示すフローチャート。
【図１３】第７の実施形態に係るコンピュータシステム内のＳＳＤにおける、データフローの一例を示すフローチャート。
【図１４】第７の実施形態に係るコンピュータシステム内で用いられる、データの属性情報の一例を示す図。
【図１５】第８の実施形態に係るコンピュータシステム内のＳＳＤにおける、データフローの一例を示すフローチャート。
【発明を実施するための形態】
【０００８】
本実施形態において、多値度とは、１つのメモリセルに格納されるデータのビット数に関連する指標である。例えば、１つのメモリセルに格納されるデータのビット数が多いほど、多値度は高くなる。
【０００９】
多値度の高いＮＡＮＤ型フラッシュメモリにおいては、１チップあたりの容量が大きくなるにつれ、必要な容量を確保するためのチップ数は少なくなる。したがって、複数のチップに対し並列してアクセスされにくくなる（すなわち、アクセスの並列数が低下する）ため、ＮＡＮＤ型フラッシュメモリへのアクセス性能は低下する。
【００１０】
一般的に、ＮＡＮＤ型フラッシュメモリの多値度が高いほど読み出し（リード）、書き込み（ライト）、消去（イレーズ）にかかる時間が長くなる。また、多値度が高いほどデータリテンション期間が短くなり、信頼性が低下する。
【００１１】
ＳＳＤの読み出し速度を向上させるために、ＳＳＤ内部にリードバッファが搭載される。ＳＳＤは、このリードバッファにデータをキャッシングすることにより、ＮＡＮＤ型フラッシュメモリから直接データを読み出すよりも高速にデータを読み出すことができる。
【００１２】
通常、リードバッファにはＳＲＡＭ，ＤＲＡＭなどの揮発性メモリが用いられる。ＳＲＡＭ，ＤＲＡＭは高価であり、ＳＳＤの容量に対してごく僅かな容量しか用意されない場合が多いため、リードバッファには多くのデータを格納することは出来ない。
【００１３】
また、上述のように多値度の高いＮＡＮＤ型フラッシュメモリほどデータリテンション期間が短くなるため、適切なタイミングでデータ保持のためのリフレッシュ動作が必要となる。従来、このリフレッシュ動作を効率的なタイミングで実行することはあまり考慮されておらず、例えば定期的に巡回を行うソフトウェア（もしくはファームウェア）による通知、又は、データの読み出し時にリトライ処理が行われたことをトリガとして実行されていた。
【００１４】
そこで、以下に説明する各実施形態においては、ＳＳＤにおける読み出し処理に着目し、ＳＳＤに対するデータの読み出し速度などのアクセス性能を向上するため、及び、適切なタイミングでリフレッシュ動作を行うためのＳＳＤの構成及び処理について説明する。
【００１５】
より具体的には、例えばＳＳＤは、多値度の高いブロックを対象に発行されたホストからの読み出し処理に対し、当該多値度の高いブロックからデータを読み出すとともに、読み出したデータをＳＳＤ内の別ブロック（又はバッファ）などにライトする。当該データのライト先のブロック（又はバッファ）は、揮発性メモリ又は多値度の低い不揮発性メモリにより構成される。そして、これ以降の当該データに対する読み出し処理は、当該データが格納されたブロック（又はバッファ）に対して行われる。
【００１６】
なお、読み出し元のブロックの多値度と、読み出したデータの書き込み先のブロック（又はバッファ）の多値度の差が大きいほど、当該データの２度目以降の読み出し速度が向上する。
【００１７】
また、リードコマンドをトリガにして読み出し対象のデータが別ブロックへライト（書き戻し）されることは、換言すれば、アクセス頻度の高いデータに対して適切なタイミングでリフレッシュ動作が行われることにもなる。
【００１８】
以下、図面を参照しながら各実施形態について説明する。以下の説明において、略又は実質的に同一の機能及び構成要素については、同一符号を付し、必要に応じて説明を行う。
【００１９】
［第１の実施形態］  
図１は、本実施形態に係るコンピュータシステム１の構成例を示すブロック図である。
【００２０】
コンピュータシステム１は、ホスト（ホストデバイス）２と、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスとを含む。
【００２１】
ホスト２は、ＳＳＤ３にアクセスする情報処理装置（コンピューティングデバイス）である。ホスト２は、大量且つ多様なデータをＳＳＤ３に保存するサーバ（ストレージサーバ）であってもよいし、パーソナルコンピュータであってもよい。半導体ストレージデバイスは、例えば、ＮＡＮＤ型フラッシュメモリを備えたソリッドステートドライブ（ＳＳＤ）３として実現されている。
【００２２】
ＳＳＤ３は記憶装置であり、ホスト２として機能する情報処理装置のメインストレージとして使用され得る。ＳＳＤ３は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ＳＳＤ３は、例えば、ダイレクト・アタッチド・ストレージ（ＤＡＳ）としてホスト２に接続されている。
【００２３】
ホスト２とＳＳＤ３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｆｉｂｒｅ  ｃｈａｎｎｅｌ、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）などが使用され得る。
【００２４】
ＳＳＤ３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。コントローラ４は、Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ（ＳｏＣ）のような回路によって実現され得る。ＳＳＤ３は、揮発性メモリであるランダムアクセスメモリ、例えば、ＤＲＡＭ６を備えていてもよい。あるいは、ＳＲＡＭのようなランダムアクセスメモリがコントローラ４に内蔵されていてもよい。
【００２５】
ＤＲＡＭ６などのランダムアクセスメモリには、例えば、ＮＡＮＤ型フラッシュメモリ５から読み出されたデータを一時的に格納するためのバッファ領域であるリードバッファ３１と、ＮＡＮＤ型フラッシュメモリ５に書き込まれるデータを一時的に格納するためのバッファ領域であるライトバッファ３２およびＧＣバッファ３３と、アドレス変換テーブル（論理物理アドレス変換テーブル）として機能するルックアップテーブル（ＬＵＴ）３４のキャッシュ領域とが設けられている。
【００２６】
さらに、ＤＲＡＭ６などのランダムアクセスメモリには、処理中に用いられる各種の情報（例えば、ブロック管理情報３５など）の格納領域が設けられてもよい。なお、ＤＲＡＭ６は、コントローラ４の内部に設けられていてもよい。ＬＵＴ３４は、論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間のマッピングを管理する。
【００２７】
ＮＡＮＤ型フラッシュメモリ５は、複数のＮＡＮＤ型フラッシュメモリチップ（複数のＮＡＮＤ型フラッシュメモリダイ）を含んでいてもよい。
【００２８】
各チップは、メモリセルアレイを含む。このメモリセルアレイは、複数のＮＡＮＤブロック（ブロック）Ｂ０〜Ｂｍ−１を含む。ブロックＢ０〜Ｂｍ−１は、消去単位として機能する。ブロックは「物理ブロック」又は「消去ブロック」と称されることもある。
【００２９】
ブロックＢ０〜Ｂｍ−１は複数のページ（物理ページ）を含む。つまり、ブロックＢ０〜Ｂｍ−１の各々は、ページＰ０〜Ｐｎ−１を含む。不揮発性メモリにおいては、データの読み出し及びデータの書き込みはページ単位で実行される。データの消去はブロック単位で実行される。
【００３０】
また、各チップは、メモリセル当たりに１ビットのデータを格納するシングルセル（ＳＬＣ）及び／又は複数ビットを格納するメモリセルを用いて構成される。複数ビットを格納するメモリセルとしては、例えばマルチセル（ＭＬＣ）、トリプルセル（ＴＬＣ）、クアッドセル（ＱＬＣ）などが用いられる。
【００３１】
また、ＮＡＮＤ型フラッシュメモリ５は、例えばインプットバッファ３６を含む。インプットバッファ３６は、例えばＳＳＤ３がホスト２よりライトコマンドを受信した場合の、ライト対象となるデータ（ライトデータ）の格納先として用いられる。なお、インプットバッファは、ＮＡＮＤ型フラッシュメモリ５の外部に備えられてもよい。
【００３２】
インプットバッファ３６は、例えばＮＡＮＤ型フラッシュメモリ５の総容量の数パーセント程度の記憶容量を有する。また、リードバッファ３１及びライトバッファ３２は、例えばインプットバッファ３６の１００分の１倍程の記憶容量を有する。
【００３３】
インプットバッファ３６には、多値度の低いＮＡＮＤ型フラッシュメモリが用いられることが好ましい。以下では、インプットバッファ３６は、例えばＳＬＣを用いて構成されるとする。
【００３４】
また、インプットバッファ３６には、ＮＡＮＤ型フラッシュメモリ５だけでなく、ＳＲＡＭ，ＤＲＡＭといった揮発性メモリが用いられてもよい。
【００３５】
コントローラ４は、Ｔｏｇｇｌｅ  ＤＤＲ、Open NAND Flash Interface（ＯＮＦＩ）のようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。ＮＡＮＤインタフェース１３は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたＮＡＮＤ制御回路として機能する。ＮＡＮＤインタフェース１３は、複数のチャンネルを介して、ＮＡＮＤ型フラッシュメモリ５内の複数のチップにそれぞれ接続されていてもよい。
【００３６】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラとして機能する。
【００３７】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能してもよい。このＦＴＬによって実行されるデータ管理には、（１）論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ページ単位の読み出し／書き込みとブロック単位の消去動作とを隠蔽するための処理、などが含まれる。論理アドレスは、ＳＳＤ３をアドレス指定するためにホスト２によって使用されるアドレスである。この論理アドレスとしては、例えば、論理ブロックアドレス（ＬＢＡ）が使用される。
【００３８】
論理ブロックアドレス（ＬＢＡ）それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル（論理物理アドレス変換テーブル）として機能するＬＵＴ３４を用いて実行される。コントローラ４は、ルックアップテーブルＬＵＴ３４を使用して、ＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。あるＬＢＡに対応する物理アドレスは、このＬＢＡのデータがライトされたＮＡＮＤ型フラッシュメモリ５内の物理記憶位置を示す。アドレス変換テーブルＬＵＴ３４は、ＳＳＤ３の電源オン時にＮＡＮＤ型フラッシュメモリ５からＤＲＡＭ６にロードされてもよい。
【００３９】
１つのページへのデータ書き込みは、１つの消去サイクル（プログラム／イレーズサイクル）当たり１回のみ可能である。このため、コントローラ４は、あるＬＢＡに対応する更新データを、このＬＢＡに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ４は、ＬＵＴ３４を更新してこのＬＢＡをこの別の物理記憶位置に関連付けると共に、以前のデータを無効化する。以下では、ＬＵＴ３４から参照されているデータ（すなわち論理アドレスと紐付けられているデータ）を有効データと称する。また、どの論理アドレスとも紐付けられていないデータを無効データと称する。有効データは、後にホスト２から読み出される可能性があるデータである。無効データは、もはやホスト２から読み出される可能性が無いデータである。
【００４０】
ブロック管理には、バッドブロックの管理、ウェアレベリング、ガベージコレクション（ＧＣ）、などが含まれる。
【００４１】
ＮＡＮＤ型フラッシュメモリ５では、データの書き込み／読み出しがページ単位で行われ、消去がブロック単位で行われる。ブロックの消去には長い時間を要するが、ＮＡＮＤ型フラッシュメモリ５内の各ブロックは、消去が行われるまで、同じ物理記憶位置にデータを上書きすることができないという特性を有する。
【００４２】
そのため、ＳＳＤ３は、ホスト２から受信した書き込みデータを、ＮＡＮＤ型フラッシュメモリ５上の新たな物理記憶位置に追記する書き込み方式により動作する。このような追記を進めた場合、データの書き込み先ブロックが枯渇するので、フリーブロックを生成するためのＧＣが行われる。
【００４３】
ＧＣでは、既に書き込み済みのブロック（アクティブブロック）からＧＣソースブロックを選択し、ＧＣソースブロックから有効データを集め、それを新しいブロック（ＧＣデスティネーションブロック）に書き込み、有効データが元々格納されていたブロックをフリーブロックとする。フリーブロックは、消去処理を経ることにより、新たな書き込み先ブロックとして利用することができる。ＧＣソースブロックには、有効データ数が少ないブロックが選択されることが多い。これは、フリーブロックの生成効率が良いためである。
【００４４】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４などを含んでもよい。これらホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続されていてもよい。
【００４５】
ホストインタフェース１１は、ホスト２から様々なコマンド、例えば、Ｉ／Ｏコマンド、各種制御コマンド、などを受信する回路として機能する。Ｉ／Ｏコマンドには、ライト（書き込み）コマンド、リード（読み出し）コマンド、アンマップコマンド（トリムコマンド）、フォーマットコマンド、フラッシュコマンドなどが含まれ得る。なお、ライトコマンドは、プログラムコマンドとも呼ばれる。フォーマットコマンドは、メモリシステム（ＳＳＤ３）全体をアンマップするためのコマンドである。フラッシュコマンドは、メモリシステム内にキャッシュされている（バッファされている）ダーティデータ（ユーザデータおよび関連する管理データ）をＮＡＮＤ型フラッシュメモリ５に書き込むことですべてクリーンな状態にするためのコマンドである。
【００４６】
ＤＲＡＭインタフェース１４は、ＤＲＡＭ６のアクセスを制御するように構成されたＤＲＡＭコントローラとして機能する。ＤＲＡＭ６の記憶領域は、リードバッファ３１、ライトバッファ３２、ＧＣバッファ３３、ＬＵＴ３４、ブロック管理情報３５、インプットバッファ３６などを格納するために利用される。
【００４７】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、図示しないＲＯＭなどに格納されている制御プログラム（ファームウェア）を実行することによって様々な処理を行う。このＣＰＵ１２は、上述のＦＴＬの処理に加え、ホスト２からの様々なコマンドを処理するためのコマンド処理などを実行することができる。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行される上述のファームウェアによって制御される。なお、ＦＴＬ処理およびコマンド処理の一部または全部は、コントローラ４内の専用ハードウェアによって実行してもよい。
【００４８】
本実施形態において、ＣＰＵ１２は、例えばブロック管理部１２１、リード制御部１２３、ライト制御部１２５、ＧＣ制御部１２７として機能することができる。
【００４９】
ブロック管理部１２１は、ＳＳＤ３内のブロック毎に、消去回数（プログラム／イレーズサイクル数）、消去順序番号、有効データ数（有効データ量）等を含むブロック管理情報３５を管理する。ブロック管理部１２１は、例えば、各ブロックに対する書き込み動作、トリム（アンマップ）動作、消去動作等が行われる毎に、ブロック管理情報３５を更新する。
【００５０】
リード制御部１２３は、論理アドレス（ＬＢＡ）に対応するＬＵＴ３４のエントリに基づいて、ＬＢＡに対応する物理アドレスを求め、ＮＡＮＤ型フラッシュメモリ５からリードコマンドに応じたデータを読み出すことができる。
【００５１】
ライト制御部１２５は、ライトコマンドに応じてホスト２から受信されたユーザデータを、ＤＲＡＭ６上のライトバッファ３２に蓄積する。ライト制御部１２５は、ユーザデータを蓄積するためのライトバッファ３２の領域を予め確保しておき、確保できない間は、ホスト２からライトコマンドを受け付けないようにする。
【００５２】
そして、ライト制御部１２５は、ライトバッファ３２内にＮＡＮＤ型フラッシュメモリ５の書き込み単位分のユーザデータが蓄積されたならば、ＮＡＮＤ型フラッシュメモリ５のチップ（チップのデータラッチ）にその書き込み単位分のユーザデータを転送する。ライト制御部１２５は、ライトバッファ３２内の、転送されたユーザデータが蓄積されていた領域を解放する。
【００５３】
次いで、ライト制御部１２５は、ＮＡＮＤ型フラッシュメモリ５のチップにプログラムを指示する。すなわち、ライト制御部１２５は、ＮＡＮＤ型フラッシュメモリ５のチップにプログラムコマンドを送ることにより、当該チップに対して、転送されたユーザデータを書き込み先ブロックにプログラムさせる。チップ内のメモリセルアレイ５０は複数のブロックを含んでいる。ブロックは、有効データを格納していて、新たにデータを書き込むことができないブロック（アクティブブロック）と、有効データを格納しておらず、消去処理を経ることで新たなデータの書き込みに利用可能なブロック（フリーブロック）とに大別される。１つ以上のフリーブロックから、１個が選択され、消去処理を経ることで、書き込み先ブロックとして割り当てられる。書き込み先ブロックは、有効データを格納し得る。
【００５４】
ＧＣ制御部１２７も、ＧＣバッファ３３を用いて、上述したようなライト制御部１２５による書き込み動作と同様にして、ＮＡＮＤ型フラッシュメモリ５への書き込みを行うことができる。ＧＣ制御部１２７は、有効データを格納しているアクティブブロック群からガベージコレクションソースブロック（ＧＣソースブロック）を選択し、このＧＣソースブロック内の有効データを、フリーブロック群から書き込み先ブロックとして確保されたガベージコレクションデスティネーションブロック（ＧＣデスティネーションブロック）に書き込む。
【００５５】
次に、ホスト２の構成について説明する。ホスト２は、ＤＡＳとして接続されているＳＳＤ３にアクセスするための機能を有する。また、ホスト２は、ネットワーク（クラウド）上のストレージにアクセスするための機能を有していてもよい。
【００５６】
ホスト２は、様々なプログラムを実行する情報処理装置である。情報処理装置によって実行されるプログラムには、アプリケーションレイヤ４１、オペレーティングシステム（ＯＳ）４２、ファイルシステム４３等が含まれる。
【００５７】
一般に知られているように、オペレーティングシステム（ＯＳ）４２は、ホスト２全体を管理し、ホスト２内のハードウェアを制御し、アプリケーションがハードウェアおよびＳＳＤ３を使用することを可能にするための制御を実行するように構成されたソフトウェアである。
【００５８】
ファイルシステム４３は、ファイルの操作（作成、保存、更新、削除等）のための制御を行うために使用される。例えば、ＺＦＳ、Ｂｔｒｆｓ、ＸＦＳ、ｅｘｔ４、ＮＴＦＳなどがファイルシステム４３として使用されてもよい。あるいは、ファイルオブジェクトシステム（例えば、Ceph Object Storage Daemon）、Key Value Store System（例えば、Ｒｏｃｋｓ  ＤＢ）がファイルシステム４３として使用されてもよい。
【００５９】
様々なアプリケーションソフトウェアスレッドがアプリケーションレイヤ４１上で実行される。アプリケーションソフトウェアスレッドの例としては、クライアントソフトウェア、データベースソフトウェア、仮想マシン等がある。
【００６０】
アプリケーションレイヤ４１がリードコマンドまたはライトコマンドのようなリクエストをＳＳＤ３に送出することが必要な時、アプリケーションレイヤ４１は、ＯＳ４２にそのリクエストを送出する。ＯＳ４２はそのリクエストをファイルシステム４３に送出する。ファイルシステム４３は、そのリクエストを、コマンド（リードコマンド、ライトコマンド等）にトランスレートする。ファイルシステム４３は、コマンドを、ＳＳＤ３に送出する。ＳＳＤ３からのレスポンスが受信された際、ファイルシステム４３は、そのレスポンスをＯＳ４２に送出する。ＯＳ４２は、そのレスポンスをアプリケーションレイヤ４１に送出する。
【００６１】
アプリケーションレイヤ４１は、ＳＳＤ制御部４１１を含む。ＳＳＤ制御部４１１は、ＳＳＤ３の各種制御のためにＳＳＤ３と通信するインタフェース機能を有する。ＳＳＤ制御部４１１は、ＳＳＤ３に対し、各種制御コマンド及びデータなどを送信する。
【００６２】
本実施形態においては、ホスト２よりＳＳＤ３に対してリードコマンドが発行された場合に、読み出し対象となるデータ（以下、リードデータと呼ぶ）がＮＡＮＤ型フラッシュメモリ５内の別のブロックに書き込まれる。以下、図２及び図３を用いて、本実施形態に係るコンピュータシステム１内のＳＳＤ３におけるデータフローについて説明する。
【００６３】
なお、図３はホスト２及びＳＳＤ３間のデータの流れを概念的に示したものであり、例えばコントローラ４、ＤＲＡＭ６などＳＳＤ３に含まれる一部の構成要素の記載は省略されている。また、図３の矢印Ａ２０１〜Ａ２０３は、データの流れを示している。
【００６４】
ステップＳ１０１において、ＳＳＤ３のコントローラ４は、ホスト２よりリードコマンドを受信する。リードコマンドにより、読み出し対象となるデータの開始（先頭）ＬＢＡと、データ長が指定される。読み出し対象となるデータのＬＢＡ範囲（論理アドレス範囲）は、開始（先頭）ＬＢＡとデータ長とによって定まる。
【００６５】
ステップＳ１０２において、コントローラ４は、例えばリードコマンドにより指定されたＬＢＡが（Ｘ）であるデータＤ１をＮＡＮＤ型フラッシュメモリ５より読み出し、リードバッファ３１に書き込む（矢印Ａ２０１）。なお、当該データＤ１は、ブロックＢａに格納されているとする。
【００６６】
ステップＳ１０３において、コントローラ４は、リードバッファ３１に格納されたデータＤ１をホストへ送信する（矢印Ａ２０２）。
【００６７】
ステップＳ１０４において、コントローラ４は、例えばデータＤ１をＮＡＮＤ型フラッシュメモリ５内の「別ブロック」であるブロックＢｃに書き戻す。なお、ステップＳ１０３及びＳ１０４の処理は、どちらが先に実行されてもよい。
【００６８】
当該別ブロックは、リードキャッシュブロックとも呼ばれる。本実施形態においては、同一のＬＢＡ（Ｘ）のデータが、読み出し元のブロックＢａ上及び書き込み先のブロックＢｃ（リードキャッシュブロック）上の２箇所に存在する。
【００６９】
ここで、本実施形態においては、ステップＳ１０２においてデータＤ１が読み出されるブロックＢａの多値度と、ステップＳ１０４においてデータＤ１が書き込まれるブロックＢｃ（リードキャッシュブロック）の多値度は異なる。より具体的には、ブロックＢａの多値度は、ブロックＢｃ（リードキャッシュブロック）の多値度よりも大きい。図３の例では、リードコマンドにより読み出されるデータＤ１は、ＱＬＣのブロックＢａから読み出され、ＳＬＣのブロックＢｃに書き込まれる。
【００７０】
なお以下では、リードコマンドの対象となるデータＤ１が格納されているブロックの多値度はＱＬＣであるとするが、例えばＴＬＣ，ＭＬＣなど他の多値度でもよい。
【００７１】
ステップＳ１０５において、コントローラ４は、データＤ１のＬＢＡと、リードキャッシュブロック内の物理アドレスとの対応付けを管理するための第２のＬＵＴを更新する。なお、ＤＲＡＭ６のＬＵＴ３４は、データＤ１のＬＢＡと、データＤ１が格納されているブロックＢａ内の物理アドレスとの対応付けを管理するためのＬＵＴである。このため、ブロックＢｃ（リードキャッシュブロック）に格納されたデータＤ１は、ＬＵＴ３４とは異なる第２のＬＵＴで管理される必要がある。
【００７２】
また、ホスト２より読み出されたデータＤ１は、参照の局所性より、アクセス頻度が高いデータであり、ホスト２より何度も読み出される可能性が高い。
【００７３】
以下図４を用いて、上述のようにデータＤ１がブロックＢｃに書き込まれた後に、再度ホスト２からデータＤ１が読み出される際のデータフローについて説明する。
【００７４】
コントローラ４は、ホスト２からデータＤ１を読み出す旨のリードコマンドを受信した場合に、ＬＵＴ３４を探索する前に上記の第２のＬＵＴを探索することにより、リードキャッシュブロック（ブロックＢｃ）から当該データＤ１を読み出す（矢印Ａ２０４，Ａ２０５）。これにより、データＤ１は、ブロックＢａより読み出される場合に比べ、高速に読み出される。また、多値度が低いブロックの方が、多値度の高いブロックに比べてデータリテンション期間が長いため、読み出されたデータＤ１の信頼性が向上する。
【００７５】
なお、リードキャッシュブロック（ブロックＢｃ）に対しては、ＧＣによるデータコピーを行わずに再利用する。すなわち、当該リードキャッシュブロックの最終ページまでデータが書かれた場合、コントローラ４は、第２のＬＵＴをクリアし、当該リードキャッシュブロックをブロック消去する。
【００７６】
以上説明したように、本実施形態では、ＳＳＤ３のＮＡＮＤ型フラッシュメモリ５において、データが格納される多値度の高いブロックとは別に、多値度の低いリードキャッシュブロックが確保される。そして、ホスト２からのリードコマンドに基づいてＮＡＮＤ型フラッシュメモリ５よりデータが読み出される際に、リードキャッシュブロックへ当該データが書き込まれる。これにより、次回以降のリードコマンドに対し、当該データはリードキャッシュブロックより読み出される。したがって、ホスト２は、ＳＳＤ３に対しより多値度の低いブロックへ高速かつ信頼性の高いアクセスを行うことができる。
【００７７】
なお、本実施形態において、リードバッファ３１は省略されてもよい。すなわち、コントローラ４は、リードバッファ３１を経由することなくデータＤ１を読み出し、ホスト２に送信又はＮＡＮＤ型フラッシュメモリ５に書き込んでもよい。
【００７８】
［第２の実施形態］  
本実施形態は、第１の実施形態の変形例である。第１の実施形態では、リードコマンドにより指定されたＬＢＡのデータがリードキャッシュブロックに書き込まれたが、参照の局所性を考慮すると、当該データの周辺データについても同時にアクセスされることが多い。これは、例えばあるアプリケーション・プログラムにおいて、必要となるデータは所定の範囲のＬＢＡに格納される可能性が高いためである。
【００７９】
本実施形態では、リードコマンドにより読み出されたデータの周辺のＬＢＡのデータについても、リードキャッシュブロックへ書き込まれる。
【００８０】
なお、本実施形態に係るコンピュータシステム１の構成は、第１の実施形態と同様であるため、説明を省略する。
【００８１】
図５は、本実施形態に係るコンピュータシステム１内のＳＳＤ３における、データフローの一例を示すフローチャートである。
【００８２】
ステップＳ２０１において、ＳＳＤ３のコントローラ４は、ホスト２よりリードコマンドを受信する。
【００８３】
ステップＳ２０２において、コントローラ４は、例えばリードコマンドにより指定されたデータＤ１、及び、データＤ１のＬＢＡ範囲（論理アドレス範囲）の周辺のＬＢＡ範囲のデータを、ＮＡＮＤ型フラッシュメモリ５のブロックＢａより読み出す。ここで、周辺のＬＢＡ範囲は、データＤ１のＬＢＡ範囲をＬＢＡ（ｘ）〜ＬＢＡ（ｙ）とし、ｋを整数とすると、ＬＢＡ（ｘ−ｋ）〜ＬＢＡ（ｘ−１）及び／又はＬＢＡ（ｙ＋１）〜ＬＢＡ（ｙ＋ｋ）により表される。読み出されたデータは、リードバッファ３１へ書き込まれる。なお、データＤ１のデータ長が１の場合、ｘとｙは等しくなる。
【００８４】
ステップＳ２０３において、コントローラ４は、リードバッファ３１より、データＤ１（すなわち、リードコマンドにより指定されたＬＢＡのデータ）を読み出し、当該データＤ１をホストへ送信する。
【００８５】
ステップＳ２０４において、コントローラ４は、ステップＳ１０４と同様に、リードバッファ３１に格納されたデータをブロックＢｃ（リードキャッシュブロック）へ書き込む。なお、ステップＳ２０３及びＳ２０４の処理は、どちらが先に実行されてもよい。
【００８６】
ステップＳ２０５において、コントローラ４は、ステップＳ１０５と同様に、第２のＬＵＴのうちステップＳ２０４において書き込まれたデータに関連する箇所を更新する。
【００８７】
以上説明したように、本実施形態においては、ホスト２よりあるＬＢＡに対してリードコマンドを受信した場合、当該リードコマンドが示す当該ＬＢＡのデータに加えて当該ＬＢＡの前後（又は周辺）の範囲のＬＢＡのデータも合わせて読み出され、リードキャッシュブロックに書き込まれる。これにより、ホスト２のＳＳＤ３に対するアクセス性能がさらに向上する。
【００８８】
なお、第１の実施形態と同様に、本実施形態においてもリードバッファ３１は省略可能である。
【００８９】
［第３の実施形態］  
本実施形態は、第１及び第２の実施形態の変形例である。第１及び第２の実施形態では、リードコマンドにより読み出されたデータは、読み出し元のブロックに残る。すなわち、読み出されたデータは、読み出し元のブロック及びリードキャッシュブロックの両方に存在する。一方、本実施形態においては、読み出し元のブロックに存在するデータを削除する。すなわち、読み出されたデータは、リードキャッシュブロックにのみ存在する。
【００９０】
なお、本実施形態に係るコンピュータシステム１の構成は、第１及び第２の実施形態と同様であるため、説明を省略する。
【００９１】
図６は、本実施形態に係るコンピュータシステム１内のＳＳＤ３における、データフローの一例を示すフローチャートである。
【００９２】
ステップＳ３０１〜Ｓ３０４の処理は、図２のステップＳ１０１〜Ｓ１０４の処理と同様であるため、説明を省略する。
【００９３】
ステップＳ３０５において、コントローラ４は、読み出しのデータを削除し、ＬＵＴ３４がリードキャッシュブロック上を示すようＬＵＴ３４を更新する。より具体的には、コントローラ４は、ＬＵＴ３４のうちデータＤ１が格納されていたブロックＢａ内の物理アドレスを、ブロックＢｃ（リードキャッシュブロック）におけるデータＤ１のが書き込み先の物理アドレスに書き換える。このようにＬＵＴ３４を書き換えることにより、読み出し元のデータは無効化される。
【００９４】
なお、リードキャッシュブロックの最終ページまでデータが書かれ、リードキャッシュブロックが再利用される場合において、ＬＵＴ３４がリードキャッシュブロックに格納されたデータを指す場合は、当該データはＧＣ対象となる。この場合、当該データは、多値度の高いブロック（例えば、ブロックＢａ，Ｂｂなど）へ書き込まれる。
【００９５】
以上説明したように、本実施形態では、読み出されたデータは読み出し元において無効化（すなわち、読み出し元より削除）され、書き込み先のリードキャッシュブロックに存在するものとして扱われる。すなわち、データが読み出される際には、当該データに対してリフレッシュ動作も実行されることになる。
【００９６】
一般的に、リフレッシュ動作は、データの種類によらず一律に所定の期間ごと又はタイミングで実行されることが多いが、本実施形態においては、当該データが読み出されるタイミングで、すなわち当該データへのアクセス頻度が高まる際にも当該データに対してリフレッシュ動作が行われる。これにより、ＳＳＤ３は、より適切なタイミングでのリフレッシュ動作が可能となり、ＳＳＤ３に格納されるデータの信頼性が向上する。
【００９７】
なお、第１の実施形態と同様に、本実施形態においてもリードバッファ３１は省略可能である。
【００９８】
また、本実施形態の構成は、第２の実施形態と組み合されてもよい。すなわち、第２の実施形態においてリードキャッシュブロックに書き込まれた全てのデータ（リードデータと、リードデータの周辺のＬＢＡを有するデータ）についてＬＵＴ３４が書き換えられ、読み出し元のデータが無効化されるとしてもよい。
【００９９】
［第４の実施形態］  
図７は、本実施形態に係るコンピュータシステム１内のＳＳＤ３における、データフローの第１の例を示す図である。
【０１００】
本実施形態においては、ＳＳＤ３は、リードバッファ３１、ライトバッファ３２、ＮＡＮＤ型フラッシュメモリ５の他、インプットバッファ３６を備える。インプットバッファ３６は、ＮＡＮＤ型フラッシュメモリ５に含まれていてもよい。インプットバッファ３６は、上述のように、ホスト２よりライトコマンドを受信した場合の、ライトデータの格納先として機能する。
【０１０１】
また、上述のように、ＮＡＮＤ型フラッシュメモリ５の多値度は、インプットバッファ３６の多値度よりも大きいことが好ましい。以下では、ＮＡＮＤ型フラッシュメモリ５はＱＬＣ、インプットバッファ３６はＳＬＣを用いて構成されるとする。
【０１０２】
本実施形態においては、図２及び図３の構成と同様に、ホスト２よりリードコマンドを受信した場合に、リードデータがＮＡＮＤ型フラッシュメモリ５よりリードバッファに書き込まれ、当該リードバッファよりホスト２へリードデータが送信される。
【０１０３】
また、ホスト２よりライトコマンドを受信した場合に、ライトデータがライトバッファに書き込まれ、当該ライトデータがインプットバッファに書き込まれ、最終的にＮＡＮＤ型フラッシュメモリ５に書き込まれる。
【０１０４】
なお、本実施形態においては、リードバッファ３１及びライトバッファ３２などが含まれる構成とするが、リードバッファ３１及びライトバッファ３２は省略可能である。
【０１０５】
以下、図８及び図９を用いて、本実施形態に係るコンピュータシステム１内のＳＳＤ３におけるデータフローについて説明する。
【０１０６】
なお、図９は、図２と同様にホスト２及びＳＳＤ３間のデータの流れを概念的に示したものである。また、図３の矢印Ａ４０１〜Ａ４０３は、データの流れを示している。
【０１０７】
ＳＳＤ３のコントローラ４は、ＮＡＮＤ型フラッシュメモリ５に格納済のデータを、ＬＵＴ３４などを用いて管理しているものとする。
【０１０８】
ステップＳ４０１において、コントローラ４は、ホスト２が発行したリードコマンドを受信する。リードコマンドには、少なくともリードデータのＬＢＡと、リード長であるＮＬＢ（Number of Logical Block）とが含まれる。
【０１０９】
ステップＳ４０２において、コントローラ４は、リードコマンドに含まれるＬＢＡに対応するデータが、リードバッファ３１、ライトバッファ３２及びインプットバッファ３６のいずれかに含まれるか否かを確認する。
【０１１０】
当該データが、リードバッファ３１、ライトバッファ３２及びインプットバッファ３６のいずれかに含まれる場合には、コントローラ４は、ステップＳ４０５において、当該データをホストへ送信する。一方、当該データが、リードバッファ３１、ライトバッファ３２及びインプットバッファ３６のいずれにも含まれない場合には、処理はステップＳ４０３へ進む。
【０１１１】
ステップＳ４０３において、コントローラ４は、ホスト２が指定したデータのＬＢＡ及びＮＬＢを用いてＬＵＴ３４を探索することにより、当該データが格納されるＮＡＮＤ型フラッシュメモリ５上の物理アドレスを取得する。
【０１１２】
ステップＳ４０４において、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５に対し、当該物理アドレスに格納されたデータを読み出すためのリードコマンドを発行し、当該データを読み出す。
【０１１３】
次に、コントローラ４は、ステップＳ４０６において、リードバッファ３１にリードデータを書き込む（矢印Ａ４０１）とともに、ステップＳ４０５において、リードデータをホストへ送信する（矢印Ａ４０２）。このステップＳ４０５及びステップＳ４０６の処理は、並列して実行されてもよい。
【０１１４】
ステップＳ４０７において、コントローラ４は、リードデータをインプットバッファ３６に書き込む（矢印Ａ４０３）。なお、インプットバッファ３６は、上述のようにＳＬＣを用いて構成され、ホスト２からのライトデータの格納先でもある。
【０１１５】
ステップＳ４０８において、コントローラ４は、当該リードデータがインプットバッファ３６に格納されていることを示すデータを更新する。より具体的には、第３の実施形態で説明したように、ＬＵＴ３４を用いてインプットバッファ３６に格納されるデータのＬＢＡと当該データの物理アドレスとの対応が管理されている場合には、ＬＵＴ３４が更新される。また、第１及び第２の実施形態と同様に、第２のＬＵＴなどによりインプットバッファ３６に格納されるデータのＬＢＡと当該データの物理アドレスとの対応が管理されている場合には、当該第２のＬＵＴが更新される。
【０１１６】
なお、ステップＳ４０６において、ＮＡＮＤ型フラッシュメモリ５からのデータの読み出し処理に失敗した場合は、処理を終了する。読み出し処理に失敗した場合とは、例えば、ＥＣＣ（Error Check and Correction）による誤り訂正に失敗した場合などである。
【０１１７】
図１０は、上述のようにリードデータがインプットバッファ３６に書き込まれた後に、再度ホスト２から当該リードデータが読み出される際のデータフローを示す。
【０１１８】
コントローラ４は、ホスト２からデータを読み出す旨のリードコマンドを受信した場合に、インプットバッファ３６に当該データがあるか否かを確認し、当該データがある場合には、インプットバッファ３６より当該データを読み出してホスト２に送信する（矢印Ａ４０４）。なお、当該データがインプットバッファ３６にない場合は、ＮＡＮＤ型フラッシュメモリ５より当該データが読み出される。
【０１１９】
また、コントローラ４は、インプットバッファ３６に格納されたデータ量が例えば所定の閾値を超えた場合に、インプットバッファ３６に格納されたデータをＮＡＮＤ型フラッシュメモリ５へ書き込む（矢印Ａ４０５）。
【０１２０】
以上説明したように、本実施形態においては、ＮＡＮＤ型フラッシュメモリ５においてデータが格納されている多値度の高いブロックに加え、多値度の低いインプットバッファ３６を含む。そして、ホスト２からのリードコマンドに基づいてＮＡＮＤ型フラッシュメモリ５よりデータが読み出される際に、インプットバッファ３６へ当該データが書き込まれる。これにより、次回以降のリードコマンドに対し、当該データはインプットバッファ３６より読み出される。したがって、ホスト２は、ＳＳＤ３に対しより多値度の低いブロックへ高速かつ信頼性の高いアクセスを行うことができる。
【０１２１】
また、本実施形態においては、リードバッファ３１に代えてインプットバッファ３６のみが用いられてもよい。すなわち、ステップＳ４０６の処理は省略されてもよい。インプットバッファ３６が例えばＳＬＣを用いたＮＡＮＤ型フラッシュメモリにより構成される場合、リードデータを全てインプットバッファ３６に格納することによって、リードバッファ３１として使用するＤＲＡＭ６の容量を０にすることができる。一般に、ＤＲＡＭよりもＮＡＮＤ型フラッシュメモリの方が安価であるため、上述のようにＤＲＡＭ６の容量を削減することにより、ＳＳＤ３のコストを低減することができる。
【０１２２】
また、一般的に、ＤＲＡＭ６に格納されたデータは、例えばＳＳＤ３が低電力モードへ遷移すること、又は、ＳＳＤ３の電源のオンもしくはオフ（すなわち、パワーサイクルを跨ぐこと）などにより消去される。したがって、インプットバッファ３６にデータがキャッシュされることにより、インプットバッファ３６のキャッシュとしての利用効果が高まる。
【０１２３】
なお、ステップＳ４０７の処理において、コントローラ４は、インプットバッファ３６に代えてライトバッファ３２へリードデータを格納してもよい。ライトバッファ３２は、上述のように、ＳＲＡＭ，ＤＲＡＭなど揮発性のメモリで構成される。ライトバッファ３２に格納されたリードデータは、コントローラ４の制御に基づき、インプットバッファ３６に書き込まれ、最終的に多値度の高いブロックで構成されるＮＡＮＤ型フラッシュメモリ５に書き込まれ、不揮発化される。
【０１２４】
このように、ライトバッファ３２へリードデータが書き込まれることにより、例えば、ＮＡＮＤ型フラッシュメモリ５より読み出されたリードデータが例えばリードモディファイライト（Read Modify Write）の対象である場合、すなわち、当該リードデータの一部の書き換えのために読み出されたデータである場合に、インプットバッファ３６の書き換え回数を減らすことができる。
【０１２５】
より具体的に説明する。例えば、当該リードモディファイライトの対象となるデータをインプットバッファ３６へ書き込んでもすぐに書き換えられらるため、再度書き換え後のデータをインプットバッファ３６へ書き込む必要がある。このため、ＮＡＮＤ型フラッシュメモリで構成されるインプットバッファ３６の書き換え可能回数を消費してしまう。一方、当該リードモディファイライトの対象となるデータを揮発性メモリ上で更新することにより、インプットバッファ３６への不要な書き込みを防ぐことができる。
【０１２６】
なお、コントローラ４は、ホスト２からのコマンドなどにより、リードデータをライトバッファ３２へ書き込むか、又は、インプットバッファ３６へ書き込むかを選択するとしてもよい。このように、リードデータごとに適切な書き込み先が選択されることにより、インプットバッファ３６の書き換えによる負担を低減できる。
【０１２７】
［第５の実施形態］  
本実施形態は、第４の実施形態の変形例である。第４の実施形態では、ステップＳ４０６において、ＮＡＮＤ型フラッシュメモリ５より読み出されたリードデータがリードバッファ３１へ書き込まれた後、直ちにインプットバッファ３６にも書き込まれた。一方、本実施形態においては、当該リードデータをインプットバッファ３６に書き込むか否かが所定の条件に基づいて判定される。そして、当該条件が満たされたと判定された場合に、当該リードデータがインプットバッファ３６に書き込まれる。
【０１２８】
図１１は、本実施形態に係るコンピュータシステム１内のＳＳＤ３における、データフローの一例を示すフローチャートである。
【０１２９】
ステップＳ５０１〜Ｓ５０６の処理は、図８のステップＳ４０１〜Ｓ４０６の処理と同様であるため、説明を省略する。
【０１３０】
ステップＳ５０７において、コントローラ４は、インプットバッファ３６に書き込まれるリードデータがリフレッシュを必要としているか否かを判定する。より具体的には、コントローラ４は、例えば、リードデータがＮＡＮＤ型フラッシュメモリ５に書き込まれてからの期間を示す情報を管理し、当該情報に基づいて、当該リードデータがリフレッシュを必要としているか否かを判定してもよい。
【０１３１】
当該リードデータがリフレッシュを必要としていないと判定された場合は、処理を終了する。一方、当該リードデータがリフレッシュを必要としていると判定された場合は、ステップＳ５０８において当該リードデータはインプットバッファ３６に書き込まれる。
【０１３２】
なお、インプットバッファ３６に書き込まれたリードデータは、最終的にＮＡＮＤ型フラッシュメモリ５へ書き込まれる、すなわちリフレッシュされる。
【０１３３】
ステップＳ５０８，Ｓ５０９の処理は、図８のステップＳ４０７，Ｓ４０８の処理と同様であるため、説明を省略する。
【０１３４】
以上説明したように、本実施系形態において、コントローラ４は、リードデータのリフレッシュが必要か否かを判定し、リフレッシュが必要な場合に当該リードデータをインプットバッファ３６に書き込む。これにより、ＳＳＤ３は、効率よくリードデータのインプットバッファ３６への書き込みを実行することができる。また、リードデータをインプットバッファ３６に書き込む回数が低減されるため、インプットバッファ３６の寿命を延ばすことができる。
【０１３５】
［第６の実施形態］  
本実施形態は、第５の実施形態の変形例である。本実施形態においては、リードデータをインプットバッファ３６に書き込むか否かの判定が、第５の実施形態のステップＳ５０７において説明された条件と異なる条件に基づいて行われる。
【０１３６】
図１２は、本実施形態に係るコンピュータシステム１内のＳＳＤ３における、データフローの一例を示すフローチャートである。なお、ステップＳ６０１〜Ｓ６０６の処理は、図１１のステップＳ５０１〜Ｓ５０６の処理と同様であるため、説明を省略する。
【０１３７】
ステップＳ６０７において、コントローラ４は、リードデータをインプットバッファ３６に書き込むか否かを判定する。
【０１３８】
一般に、ホスト２よりライトコマンドを受信する毎に、ＳＳＤ３の書き込み容量は増加する。上述の各実施形態においては、リードコマンドを受信した場合にも、リードデータがインプットバッファ３６に書き込まれるため、ＳＳＤ３への書き込み容量が増加する。すなわち、ＳＳＤ３へのアクセスがあるたびに、書き込ま容量が増加してしまう。
【０１３９】
そこで、ステップＳ６０７において、コントローラ４は、書き込み容量が所定の閾値を超えたか否かを確認し、書き込み容量が所定の閾値以下である場合に、当該リードデータをインプットバッファ３６に書き込む。
【０１４０】
また、コントローラ４は、ステップＳ６０７の処理を実行するために、ＳＳＤ３内に書き込み容量を示すデータを記憶する。当該データは、例えばブロック管理情報３５などに格納されてもよい。当該データは、ＮＡＮＤ型フラッシュメモリ５に対して書き込まれる毎に更新されることが好ましい。
【０１４１】
なお、所定の閾値は、例えばＳＳＤ３の耐久性、製品寿命などに関する指標に基づいて定められる。より具体的には、所定の閾値は、ＳＳＤ３のＤＷＰＤ（Drive Write Per Day）に基づいて定められてもよい。ここで、ＤＷＰＤとは、ＳＳＤ３が少なくとも保証寿命期間にわたり使用されるために、ＳＳＤ３の全記憶容量を１単位として１日当たりに何単位の容量を書き換え可能であるかを示した指標である。なお、当該所定の閾値は、例えばＳＳＤ３の最大書き換え容量（ＴＢＷ：Tera Byte Written）など、他の指標に基づいて定められてもよい。
【０１４２】
ステップＳ６０８，Ｓ６０９の処理は、図１１のステップＳ５０８，Ｓ５０９の処理と同様であるため、説明を省略する。
【０１４３】
以上説明したように、本実施形態において、コントローラ４は、ＳＳＤ３のＤＷＰＤなどに基づいた所定の閾値を設定し、当該所定の閾値と比較してＳＳＤ３内の書き込み容量に余裕がある場合に、インプットバッファ３６にリードデータを書き込む。これにより、上記各実施形態のように無条件にリードデータをインプットバッファ３６に書き込む場合に比べ、ＳＳＤ３の耐久性を向上させることができる。
【０１４４】
なお、本実施形態において、コントローラ４は、例えばＳＳＤ３の利用者ごとに、ＳＳＤの利用特性を示すデータを記憶し、ＳＳＤ内部に格納してもよい。利用特性を示すデータとは、例えば、時間帯ごとのＳＳＤ３への書き込み容量、書き込み回数などに関する統計データである。コントローラ４は、上述のステップＳ６０７において、上述の書き込み容量に加えこの利用特性を示すデータを用いることにより、さらに柔軟に判定処理を実行可能である。
【０１４５】
例えば、ある時点のＳＳＤ３の利用状況により、利用特性を示すデータが更新される。そして次の時点において、更新された利用特性を示すデータに基づいて、ＳＳＤ３内部のリードデータをインプットバッファ３６に書き込む処理の頻度などが補正されてもよい。
【０１４６】
より具体的には、例えば、ある日にＳＳＤ３が大量のリードコマンドを受信したことにより、インプットバッファ３６に大量のリードデータが書き込まれたとする。コントローラ４は、この日のＳＳＤ３の利用状況から、利用特性を示すデータを更新する。そして、コントローラ４は、当該更新された利用特性データを参照することにより、例えば次の日にはリードデータがインプットバッファ３６に書き込まれる容量が減るよう（すなわち、書き込み処理を抑制するように）、当該書き込み処理の頻度を補正してもよい。
【０１４７】
［第７の実施形態］  
本実施形態は、第５及び第６の実施形態の変形例である。第５及び第６の実施形態では、ＳＳＤ３のコントローラ４が所定の条件に基づいてリードデータをインプットバッファ３６に書き込むか否かを判定した。一方、本実施形態においては、ホスト２がＳＳＤ３に対し、リードデータをインプットバッファ３６に書き込むか否かを判定するために必要な情報を送信する。
【０１４８】
図１３は、本実施形態に係るコンピュータシステム１内のＳＳＤ３における、データフローの一例を示すフローチャートである。
【０１４９】
ステップＳ７０１において、ＳＳＤ３は、ホスト２より発行されたリードコマンドを受信する。当該リードコマンドには、当該リードコマンド（又は読み出し処理）の種別に関する情報（以下、リード種別と呼ぶ）が含まれる。リード種別は、例えばリードコマンドがどのような用途に用いられるか、又は、リードデータもしくは読み出し処理がどのような性質のものであるかなどを示す情報であり、リードコマンドの発行元であるホスト２により生成される。
【０１５０】
このリード種別には、例えば、リードコマンドが一度のみ必要なデータを読み出すために発行される予定である旨を示す第１の種別、リードコマンドがリードモディファイライトのために発行される予定である旨を示す第２の種別、リードコマンドが複数回読み出すために発行される予定である旨を示す第３の種別、リードコマンドが今後ホットデータとなるデータを読み出すために発行される予定である旨を示す第４の種別、及び、リードコマンドが今後コールドデータとなるデータを読み出すために発行される旨を示す第５の種別などが含まれる。
【０１５１】
ここで、ホットデータとは、短い時間のうちに再度アクセスされるデータである。また、コールドデータは、一度アクセスされた後、しばらく（長時間）アクセスされないデータである。
【０１５２】
このリード種別は、図１４に示すように、例えばＳＳＤの接続規格であるＮＶＭｅ（Non-Volatile Memory Express）規格のデータセット・マネジメント・コマンドに含まれる「コンテキスト属性」を用いて表されてもよい。図１４は、データセット・マネジメント・コマンドにおける、あるＬＢＡ範囲のデータのコンテキスト属性を示す。このコンテキスト属性は、指定されたＬＢＡ範囲のデータに関連する各種の属性を示す、例えば４バイト（３２ビット）の情報である。
【０１５３】
ホスト２は、例えば開始（先頭）ＬＢＡと、論理ブロック長に加え、この開始ＬＢＡと論理ブロック長により指定されたＬＢＡ範囲のコンテキスト属性をデータセット・マネジメント・コマンドに含める。
【０１５４】
図１４において、例えば［１０］ビットは、当該データが書き込み対象であるか否かを示す１ビットの情報である。ホスト２は、例えばリードデータがリードモディファイライトの対象である場合に、この［１０］ビットをオンする。すなわち、ホスト２は、当該属性情報の［１０］ビットを用いて、リードデータが上記第２の種別であることをＳＳＤ２に通知可能である。
【０１５５】
また、例えば［０３：００］ビットは、アクセス頻度（Access Frequency）を示す４ビットの情報である。例えば、［０３：００］ビットが“０００１ｂ”である場合は、当該データが通常の（典型的な）アクセス頻度で書き込み及び読み出しが実行されることを示している。同様に、例えば、［０３：００］ビットが“０１０１ｂ”である場合は、当該データが高頻度で書き込まれ、かつ高頻度で読み出されることを示している。
【０１５６】
ホスト２は、例えばリードデータがホットデータである場合に、この［０３：００］ビットを“０１００ｂ”又は“０１０１ｂ”とする。これにより、リード種別が上記第４の種別であることが、ＳＳＤ３に通知される。また、ホスト２は、例えばリードデータがコールドデータである場合に、この［０３：００］ビットを“００１０ｂ”又は“００１１ｂ”とする。これにより、リード種別が上記第５の種別であることが、ＳＳＤ３に通知される。
【０１５７】
このリード種別は、他の方法により表されてもよい。例えば、リード種別は、リードコマンドに含まれていてもよい。より具体的には、リードコマンドに含まれるデータセット・マネジメント・フィールドの数ビットを用いて、上述の第１〜第５の種別が表されてもよい。また、このリード種別は、リードコマンドとは別のコマンドによりＳＳＤ３に通知されてもよい。
【０１５８】
図１３に戻り、ステップＳ７０２〜Ｓ７０６において、コントローラ４は、リードコマンドにより指定されるリードデータをＮＡＮＤ型フラッシュメモリ５より読み出し、リードバッファへ書き込むとともにホスト２に送信する。なお、ステップＳ７０２〜Ｓ７０６の処理は、ステップＳ６０２〜Ｓ６０６の処理と同様である。
【０１５９】
ステップＳ７０７において、コントローラ４は、受信したリード種別が所定の条件を満たすか否かを判定し、当該条件を満たす場合に、リードデータをインプットバッファ３６へ書き込む。より具体的には、コントローラ４は、リード種別に基づき、例えば以下（Ａ）〜（Ｅ）のように、リードデータのインプットバッファ３６への書き込みを制御する。
【０１６０】
（Ａ）上記第１の情報を受信した場合、すなわち当該リードデータに対する読み出しが一度だけである場合、対象のデータはホットデータではない可能性がある。したがって、コントローラ４は、当該リードデータをインプットバッファ３６に書き込まない。
【０１６１】
（Ｂ）上記第２の情報を受信した場合、すなわち当該リードデータを用いてリードモディファイライトが行われる場合、当該リードデータは古くなる可能性が高くなる。したがって、コントローラ４は、当該リードデータをインプットバッファ３６に書き込まない。
【０１６２】
（Ｃ）上記第３の情報を受信した場合、すなわち当該リードデータが複数回読み出される場合、当該リードデータはホットデータである可能性が高い。したがって、コントローラ４は、当該リードデータをインプットバッファ３６へ書き込む。これにより、当該リードデータはＮＡＮＤ型フラッシュメモリ５からではなく、積極的にインプットバッファ３６から読み出される。
【０１６３】
（Ｄ）上記第４の情報を受信した場合、すなわちリードデータがホットデータである場合、コントローラ４は、当該リードデータをインプットバッファ３６へ書き込む。
【０１６４】
（Ｅ）上記第５の情報を受信した場合、すなわちリードデータがコールドデータである場合、コントローラ４は、当該リードデータをインプットバッファ３６へ書き込まない。
【０１６５】
なお、コールドデータは、ホスト２より続けて参照される可能性が低いため、インプットバッファ３６へ書き込まないことにより、インプットバッファ３６への不要な書き込みを避けることができる。
【０１６６】
また、ホスト２からのライトコマンドにより指定され、インプットバッファ３６に書き込まれるライトデータはホットデータである。ここで、一般に、コールドデータとホットデータが混在するブロックにおいては、ＧＣ効率が低下する。したがって、本実施形態においては、コールドデータをインプットバッファ３６へ書き込まないことより、インプットバッファ３６のＧＣ効率の低下を防ぐことができる。
【０１６７】
ステップＳ７０８，Ｓ７０９の処理は、図１２のステップＳ６０８，Ｓ６０９の処理と同様であるため、説明を省略する。
【０１６８】
以上説明したように、本実施形態において、ホスト２は、リード種別をＳＳＤ３に通知する。そして、ＳＳＤ３は、当該情報に基づいてリードデータをインプットバッファ３６に書き込むか否かを判定する。これにより、ＳＳＤ３は、インプットバッファ３６への不要な書き込みを抑止することができる。
【０１６９】
また、インプットバッファ３６が例えばＳＬＣを用いたＮＡＮＤ型フラッシュメモリにより構成される場合、リードコマンドの種別に応じてインプットバッファ３６にデータを書き込むことにより、リードバッファ３１として使用するＤＲＡＭ６の容量を減らすことができる。これにより、ＳＳＤ３のコストを低減することができる。
【０１７０】
［第８の実施形態］  
本実施形態は、第７の実施形態の変形例である。本実施形態においても第７の実施形態と同様に、ホスト２がＳＳＤ３に対し、リードデータをインプットバッファ３６に書き込むか否かを判定するために必要な情報を送信する。
【０１７１】
図１５は、本実施形態に係るコンピュータシステム１内のＳＳＤ３における、データフローの一例を示すフローチャートである。
【０１７２】
ステップＳ８０１において、ＳＳＤ３は、ホスト２より発行されたリードコマンドを受信する。当該リードコマンドには、インプットバッファ３６の利用の有無を示す情報が含まれる。
【０１７３】
インプットバッファ３６の利用の有無を示す情報は、リードコマンドの発行元であるホスト２により生成される。当該情報は、例えば、インプットバッファ３６を利用する旨を示す情報、インプットバッファ３６を利用しない旨を示す情報、又は、インプットバッファ３６の利用の有無をＳＳＤ３の判断に任せる旨を示す情報などのうちいずれかの情報を含む。
【０１７４】
このインプットバッファ３６の利用の有無を示す情報は、リードコマンドに含まれることが好ましい。例えばホスト２は、当該情報をリードコマンドの予約（Ｒｅｓｅｒｖｅｄ）領域の数ビットを用いて表してもよい。また、例えばホスト２は、当該情報を、当該リードデータに対して高速にアクセスするか否かを指定することにより表してもよい。
【０１７５】
また、このリード種別は、リードコマンドとは別のコマンドによりＳＳＤ３に通知されてもよい。
【０１７６】
ステップＳ８０２〜Ｓ８０６の処理は、ステップＳ７０２〜Ｓ７０６の処理と同様であるため、説明を省略する。
【０１７７】
ステップＳ８０７において、コントローラ４は、インプットバッファ３６の利用の有無を示す情報を確認し、リードデータをインプットバッファ３６に書き込むか否かを判定する。なお、当該情報により、インプットバッファ３６の利用の有無がＳＳＤ３の判断に委ねられている場合は、コントローラ４は、例えば第４〜第６の実施形態に示した処理により、インプットバッファ３６の利用の有無を判定してもよい。
【０１７８】
ステップＳ８０８，Ｓ８０９の処理は、図１３のステップＳ７０８，Ｓ７０９の処理と同様であるため、説明を省略する。
【０１７９】
以上説明したように、本実施形態によれば、ホスト２は、インプットバッファ３６の利用の有無を示す情報をＳＳＤ３に通知する。ＳＳＤ３は、当該情報に基づいてリードデータをインプットバッファ３６に書き込むか否かを判定する。すなわち、ＳＳＤ３はインプットバッファ３６の利用の有無の判定をホスト２に委ねることができるため、ＳＳＤ３の処理負荷を低減できる。また、ホスト２が当該判定を行うため、インプットバッファ３６への不要な書き込みをより確実に抑止することができる。
【０１８０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１８１】
１…コンピュータシステム、２…ホスト、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、６…ＤＲＡＭ、１０…バス、１１…ホストＩ／Ｆ、１２…ＣＰＵ、１３…ＮＡＮＤ Ｉ／Ｆ、１４…ＤＲＡＭ Ｉ／Ｆ、３１…リードバッファ、３２…ライトバッファ、３３…ＧＣバッファ、３４…ＬＵＴ、３５…ブロック管理情報、３６…インプットバッファ、４１…アプリケーションレイヤ、４２…オペレーティングシステム、４３…ファイルシステム、１２１…ブロック管理部、１２３…リード制御部、１２５…ライト制御部、１２７…ＧＣ制御部、４１１…ＳＳＤ制御部、Ｂ０〜Ｂｍ−１…ブロック、Ｐ０〜Ｐｎ−１…ページ。
【図１】
2019179455.tif 000003
【図２】
2019179455.tif 000004
【図３】
2019179455.tif 000005
【図４】
2019179455.tif 000006
【図５】
2019179455.tif 000007
【図６】
2019179455.tif 000008
【図７】
2019179455.tif 000009
【図８】
2019179455.tif 000010
【図９】
2019179455.tif 000011
【図１０】
2019179455.tif 000012
【図１１】
2019179455.tif 000013
【図１２】
2019179455.tif 000014
【図１３】
2019179455.tif 000015
【図１４】
2019179455.tif 000016
【図１５】
2019179455.tif 000017