(57)【要約】【課題】データトラフィックを削減することができるメモリシステムを実現する。【解決手段】メモリシステムは、ホストから受信されるライトデータを複数の書き込み先ブロック間で共有される共有ライトバッファに格納し、複数ページ分の第１のライトデータを共有ライトバッファから取得し、第１段階の書き込み動作によって第１のライトデータを第１の書き込み先ブロックに書き込む。メモリシステムは、共有ライトバッファに空き領域がない状態でホストからライトデータを受信した場合、第１段階の書き込み動作が終了している共有ライトバッファ内のライトデータを破棄する。第１のライトデータの第２段階の書き込み動作を実行すべき時点において第１のライトデータが共有ライトバッファに存在しない場合には、メモリシステムは、第１のライトデータを取得するための要求をホストに送信する。【選択図】図３
2019185596.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラであって、少なくとも第１段階の書き込み動作と第２段階の書き込み動作とを含み、前記不揮発性メモリに複数ページ分の同じデータを複数回転送する複数段階の書き込み動作を実行するように構成されたコントローラとを具備し、
前記コントローラは、
前記ホストからライト要求を受信する度に、前記複数のブロックから割り当てられた複数の書き込み先ブロックにそれぞれ対応する前記ホストのメモリ上の複数のライトバッファのいずれかに格納されているライトデータを前記ホストから受信し、前記受信したライトデータを前記複数の書き込み先ブロック間で共有される共有ライトバッファに格納し、
前記複数の書き込み先ブロック内の第１の書き込み先ブロックに書き込むべき複数ページ分の第１のライトデータを前記共有ライトバッファから取得し、前記第１段階の書き込み動作によって前記第１のライトデータを前記第１の書き込み先ブロックに書き込み、
前記共有ライトバッファに空き領域がない状態で前記ホストからライトデータを受信した場合、前記第１段階の書き込み動作が終了している前記共有ライトバッファ内のライトデータを破棄して前記空き領域を前記共有ライトバッファに確保し、
前記第１のライトデータの前記第２段階の書き込み動作を実行すべき時点において前記第１のライトデータが前記共有ライトバッファに存在しない場合、前記第１のライトデータを取得するための要求を前記ホストに送信することによって前記ホストから前記第１のライトデータを取得するように構成されている、メモリシステム。
【請求項２】
前記コントローラは、前記第１のライトデータの前記第２段階の書き込み動作を実行すべき時点において前記第１のライトデータが前記共有ライトバッファに存在する場合、前記第１のライトデータを前記共有ライトバッファから取得し、前記第２段階の書き込み動作によって前記第１のライトデータを前記第１の書き込み先ブロックに書き込むように構成されている請求項１記載のメモリシステム。
【請求項３】
前記コントローラは、前記第１のライトデータの前記複数段階の書き込み動作が終了した場合、前記第１のライトデータを前記共有ライトバッファから破棄するように構成されている請求項２記載のメモリシステム。
【請求項４】
前記コントローラは、前記共有ライトバッファに空き領域がない状態で前記ホストからライトデータを受信した場合、前記第１段階の書き込み動作が終了している前記共有ライトバッファ内のライトデータのうちで最も古いライトデータを破棄するように構成されている請求項１記載のメモリシステム。
【請求項５】
前記受信されるライト要求の各々は書き込み先ブロックを指定するブロックアドレスを含み、前記コントローラは、前記第１の書き込み先ブロックを指定する一つ以上のライト要求に関連付けられた複数ページ分のライトデータを前記第１のライトデータとして前記共有ライトバッファから取得するように構成されている請求項１記載のメモリシステム。
【請求項６】
前記共有ライトバッファは、前記メモリシステムに含まれるランダムアクセスメモリによって実現される請求項１記載のメモリシステム。
【請求項７】
前記複数の書き込み先ブロックの各々はメモリセル当たりに複数ビットのデータが書き込まれるブロックによって実現され、前記共有ライトバッファはメモリセル当たりに１ビットのデータが書き込まれる一つ以上のシングルレベルセル−ブロックによって実現される請求項１記載のメモリシステム。
【請求項８】
ホストに接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、複数ページ分のデータを前記不揮発性メモリに転送することを伴う第１段階の書き込み動作と前記データを前記不揮発性メモリに転送することを伴う第２段階の書き込み動作とを少なくとも含む複数段階の書き込み動作によって前記データを前記不揮発性メモリの書き込み先ブロック内の同じワード線に接続された複数のメモリセルに書き込むように構成されたコントローラとを具備し、
前記コントローラは、
前記複数の書き込み先ブロックのいずれか一つを指定するブロックアドレスを含むライト要求を前記ホストから受信する度に、前記複数のブロックから割り当てられた複数の書き込み先ブロックにそれぞれ対応する前記ホストのメモリ上の複数のライトバッファのいずれかに格納されているライトデータを前記ホストから受信し、前記受信したライトデータを前記複数の書き込み先ブロック間で共有される共有ライトバッファに格納し、
前記複数の書き込み先ブロック内の第１の書き込み先ブロックを指定する一つ以上のライト要求に関連付けられた複数ページ分の第１のライトデータを前記共有ライトバッファから取得し、前記第１段階の書き込み動作によって前記第１のライトデータを前記第１の書き込み先ブロック内の書き込み対象の一つのワード線に接続された複数の第１のメモリセルに書き込み、
前記共有ライトバッファに空き領域がない状態で前記ホストからライトデータを受信した場合、前記第１段階の書き込み動作が終了している前記共有ライトバッファ内のライトデータを破棄して前記空き領域を前記共有ライトバッファに確保し、
前記第１のライトデータの前記第２段階の書き込み動作を実行すべき時点において前記第１のライトデータが前記共有ライトバッファに存在する場合には、前記第１のライトデータを前記共有ライトバッファから取得し、前記第２段階の書き込み動作によって前記第１のライトデータを前記第１の書き込み先ブロックの前記複数の第１のメモリセルに書き込み、
前記第１のライトデータの前記第２段階の書き込み動作を実行すべき時点において前記第１のライトデータが前記共有ライトバッファに存在しない場合には、前記第１のライトデータを取得するための要求を前記ホストに送信することによって前記ホストから前記第１のライトデータを取得し、前記第２段階の書き込み動作によって前記第１のライトデータを前記第１の書き込み先ブロックの前記複数の第１のメモリセルに書き込むように構成されている、メモリシステム。
【請求項９】
前記コントローラは、前記共有ライトバッファに空き領域がない状態で前記ホストからライトデータを受信した場合、前記第１段階の書き込み動作が終了している前記共有ライトバッファ内のライトデータのうちで最も古いライトデータを破棄するように構成されている請求項８記載のメモリシステム。
【請求項１０】
前記コントローラは、前記第１のライトデータの前記複数段階の書き込み動作が終了した場合、前記第１のライトデータを前記共有ライトバッファから破棄するように構成されている請求項８記載のメモリシステム。
【請求項１１】
複数のブロックを含む不揮発性メモリを制御し、少なくとも第１段階の書き込み動作と第２段階の書き込み動作とを含み、不揮発性メモリに複数ページ分の同じデータを複数回転送する複数段階の書き込み動作を実行する制御方法であって、
ホストからライト要求を受信する度に、前記複数のブロックから割り当てられた複数の書き込み先ブロックにそれぞれ対応する前記ホストのメモリ上の複数のライトバッファのいずれかに格納されているライトデータを前記ホストから受信し、前記受信したライトデータを前記複数の書き込み先ブロック間で共有される共有ライトバッファに格納することと、
前記複数の書き込み先ブロック内の第１の書き込み先ブロックに書き込むべき複数ページ分の第１のライトデータを前記共有ライトバッファから取得し、前記第１段階の書き込み動作によって前記第１のライトデータを前記第１の書き込み先ブロックに書き込むことと、
前記共有ライトバッファに空き領域がない状態で前記ホストからライトデータを受信した場合、前記第１段階の書き込み動作が終了している前記共有ライトバッファ内のライトデータを破棄して前記空き領域を前記共有ライトバッファに確保することと、
前記第１のライトデータの前記第２段階の書き込み動作を実行すべき時点において前記第１のライトデータが前記共有ライトバッファに存在しない場合、前記第１のライトデータを取得するための要求を前記ホストに送信することによって前記ホストから前記第１のライトデータを取得することとを具備する制御方法。
【請求項１２】
前記第１のライトデータの前記第２段階の書き込み動作を実行すべき時点において前記第１のライトデータが前記共有ライトバッファに存在する場合、前記第１のライトデータを前記共有ライトバッファから取得し、前記第２段階の書き込み動作によって前記第１のライトデータを前記第１の書き込み先ブロックに書き込むことをさらに具備する請求項１１記載の制御方法。
【請求項１３】
前記第１のライトデータの前記複数段階の書き込み動作が終了した場合、前記第１のライトデータを前記共有ライトバッファから破棄することをさらに具備する請求項１１記載の制御方法。
【請求項１４】
前記破棄されるライトデータは、前記第１段階の書き込み動作が終了している前記共有ライトバッファ内のライトデータのうちで最も古いライトデータである請求項１１記載の制御方法。
【請求項１５】
前記受信されるライト要求の各々は書き込み先ブロックを指定するブロックアドレスを含み、
前記第１の書き込み先ブロックを指定する一つ以上のライト要求に関連付けられた複数ページ分のライトデータが前記第１のライトデータとして前記共有ライトバッファから取得される請求項１１記載の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）が知られている。
データセンターのサーバにおいても、ＳＳＤのようなメモリシステムがストレージデバイスとして使用されている。
【０００３】
サーバのような計算機システムにおいて利用されるメモリシステムにおいては、この計算機システムがメモリシステムのホストとして機能する。このため、この計算機システムを利用するエンドユーザ（クライアント）の数が増加するにつれ、より多くのＩ／Ｏを処理することがメモリシステムに要求される。また、クライアントの数が増加するにつれ、ホストである計算機システムからメモリシステムに転送されるデータ量、つまりデータトラフィック、は増える傾向となる。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Yiying Zhang, 外, "De-indirection for flash-based SSDs with nameless writes." FAST. 2012, [online], [平成29年9月13日検索], インターネット<URL: https://www.usenix.org/system/files/conference/fast12/zhang.pdf >
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、ホストとメモリシステムとの間のデータトラフィックを削減することができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【０００６】
実施形態によれば、ホストに接続可能なメモリシステムは、複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続され、少なくとも第１段階の書き込み動作と第２段階の書き込み動作とを含み、前記不揮発性メモリに複数ページ分の同じデータを複数回転送する複数段階の書き込み動作を実行するように構成されたコントローラとを具備する。前記コントローラは、前記ホストからライト要求を受信する度に、前記複数のブロックから割り当てられた複数の書き込み先ブロックにそれぞれ対応する前記ホストのメモリ上の複数のライトバッファのいずれかに格納されているライトデータを前記ホストから受信し、前記受信したライトデータを前記複数の書き込み先ブロック間で共有される共有ライトバッファに格納する。前記コントローラは、前記複数の書き込み先ブロック内の第１の書き込み先ブロックに書き込むべき複数ページ分の第１のライトデータを前記共有ライトバッファから取得し、前記第１段階の書き込み動作によって前記第１のライトデータを前記第１の書き込み先ブロックに書き込む。前記コントローラは、前記共有ライトバッファに空き領域がない状態で前記ホストからライトデータを受信した場合、前記第１段階の書き込み動作が終了している前記共有ライトバッファ内のライトデータを破棄して前記空き領域を前記共有ライトバッファに確保する。前記コントローラは、前記第１のライトデータの前記第２段階の書き込み動作を実行すべき時点において前記第１のライトデータが前記共有ライトバッファに存在しない場合、前記第１のライトデータを取得するための要求を前記ホストに送信することによって前記ホストから前記第１のライトデータを取得する。
【図面の簡単な説明】
【０００７】
【図１】実施形態のメモリシステムとホストとの関係を示すブロック図。
【図２】ホストに設けられる複数のライトバッファ（ホスト側ライトバッファ）と同実施形態のメモリシステムに設けられる共有ライトバッファ（共有デバイス側ライトバッファ）との関係を示す図。
【図３】共有ライトバッファを使用して同実施形態のメモリシステムによって実行される、各書き込み先ブロックへのデータ書き込み動作を示すブロック図。
【図４】３つのワード線を往復する場合のフォギー・ファイン書き込み動作を説明するための図。
【図５】２つのワード線を往復する場合のフォギー・ファイン書き込み動作を説明するための図。
【図６】同実施形態のメモリシステムとホストとを含む計算機システムの構成例を示すブロック図。
【図７】同実施形態のメモリシステムにおいて使用される複数のチャンネルと複数のＮＡＮＤ型フラッシュメモリチップとの関係を示すブロック図。
【図８】同実施形態のメモリシステムにおいて使用される、あるスーパーブロックの構成例を示す図。
【図９】ホストと同実施形態のメモリシステムとによって実行される書き込み処理の例を説明するためのブロック図。
【図１０】ホストと同実施形態のメモリシステムとによって実行される書き込み処理の別の例を説明するためのブロック図。
【図１１】共有ライトバッファを使用して同実施形態のメモリシステムによって実行されるフォギー・ファイン書き込み動作と共有ライトバッファのデータを破棄する処理とを説明するための図。
【図１２】共有ライトバッファに未使用の領域がない場合に同実施形態のメモリシステムによって実行される、フォギー書き込み動作が終了した共有ライトバッファ内のライトデータを破棄する処理を説明するための図。
【図１３】同実施形態のメモリシステムによって実行されるデータ書き込み処理の手順を示すフローチャート。
【図１４】ホストが書き込み先ブロックを指定し且つ同実施形態のメモリシステムが書き込み先ページを決定するデータ書き込み処理と、ホストがブロックアドレスとページアドレスとを指定するデータ読み出し処理とを説明するための図。
【図１５】同実施形態のメモリシステムに適用されるブロックアロケートコマンド（ブロック割り当て要求）を説明するための図。
【図１６】ブロックアロケートコマンドに対するレスポンスを説明するための図。
【図１７】同実施形態のメモリシステムに適用されるライトコマンドを説明するための図。
【図１８】ライトコマンドに対するレスポンスを説明するための図。
【図１９】同実施形態のメモリシステムに適用されるリードコマンドを説明するための図。
【図２０】１以上のＳＬＣブロックから構成される共有ライトバッファを使用して同実施形態のメモリシステムによって実行される、各書き込み先ブロックへのデータ書き込み動作を示すブロック図。
【発明を実施するための形態】
【０００８】
以下、図面を参照して、実施形態を説明する。  
まず、図１を参照して、ホストと実施形態に係るメモリシステムとの関係を説明する。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、ＮＡＮＤフラッシュ技術ベースのフラッシュストレージデバイス３として実現されている。
【０００９】
ホスト（ホストデバイス）２は、複数のフラッシュストレージデバイス３を制御するように構成されている。ホスト２は、複数のフラッシュストレージデバイス３によって構成されるフラッシュアレイをストレージとして使用するように構成された計算機によって実現される。
【００１０】
以下では、サーバコンピュータのような計算機がホスト２として機能する場合を例示して説明する。
ホスト（サーバコンピュータ）２と複数のフラッシュストレージデバイス３は、インタフェース５０を介して相互接続される（内部相互接続）。この相互接続のためのインタフェース５０としては、これに限定されないが、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）（登録商標）、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）、ＮＶＭｅ  ｏｖｅｒ  Ｆａｂｒｉｃｓ（ＮＶＭｅＯＦ）等を使用し得る。
【００１１】
ホスト２として機能するサーバコンピュータの典型例としては、データセンター内のサーバコンピュータ（以下、サーバと称する）が挙げられる。
ホスト２がデータセンター内のサーバによって実現されるケースにおいては、このホスト（サーバ）２は、ネットワーク５１を介して複数のエンドユーザ端末（クライアント）６１に接続されてもよい。ホスト２は、これらエンドユーザ端末６１に対して様々なサービスを提供することができる。
【００１２】
ホスト（サーバ）２によって提供可能なサービスの例には、（１）システム稼働プラットフォームを各クライアント（各エンドユーザ端末６１）に提供するプラットホーム・アズ・ア・サービス（ＰａａＳ）、（２）仮想サーバのようなインフラストラクチャを各クライアント（各エンドユーザ端末６１）に提供するインフラストラクチャ・アズ・ア・サービス（ＩａａＳ）、等がある。
【００１３】
複数の仮想マシンが、このホスト（サーバ）２として機能する物理サーバ上で実行されてもよい。ホスト（サーバ）２上で走るこれら仮想マシンの各々は、対応する幾つかのクライアント（エンドユーザ端末６１）に各種サービスを提供するように構成された仮想サーバとして機能することができる。
【００１４】
ホスト（サーバ）２は、フラッシュアレイを構成する複数のフラッシュストレージデバイス３を管理するストレージ管理機能と、エンドユーザ端末６１それぞれに対してストレージアクセスを含む様々なサービスを提供するフロントエンド機能とを含む。
フラッシュストレージデバイス３は、ＮＡＮＤ型フラッシュメモリのような不揮発性メモリを含む。一つのフラッシュストレージデバイス３は、不揮発性メモリ内の複数のブロックから割り当てられた複数の書き込み先ブロックを管理する。書き込み先ブロックとは、データが書き込まれるべきブロックを意味する。
【００１５】
フラッシュストレージデバイス３によって管理される複数の書き込み先ブロックは、ホスト（サーバ）２を利用する複数のクライアントによってそれぞれ使用される。あるクライアントに対応するデータはある一つ以上の書き込み先ブロックに書き込まれ、他のクライアントに対応するデータは他の一つ以上の書き込み先ブロックに書き込まれる。
【００１６】
もし一つのフラッシュストレージデバイス３のみがホスト（サーバ）２に接続されているならば、ホスト（サーバ）２を利用するクライアントの総数と同数またはそれ以上のブロックが書き込み先ブロックとして割り当てられる。
一方、複数のフラッシュストレージデバイス３、例えば、８台のフラッシュストレージデバイス３がホスト（サーバ）２に接続されており、ホスト２がこれら８台のフラッシュストレージデバイス３に同数のクライアントを均等に割り当てたならば、各フラッシュストレージデバイス３においては、クライアントの総数の１／８の数のブロックが書き込み先ブロックとして割り当てられてもよい。
【００１７】
ＮＡＮＤ型フラッシュメモリの多くはメモリセル当たりに複数ビットのデータを書き込むように構成されており、書き込み先ブロック毎に、この書き込み先ブロックに書き込まれるべき複数ページ分のデータを保持しておくことが必要である。
したがって、同時に利用可能な複数の書き込み先ブロックがフラッシュストレージデバイス３に存在する環境においては、これら書き込み先ブロックの数と同数のライトバッファを用意することが必要となる。換言すれば、クライアントの数と同数のライトバッファを用意することが必要となる。
【００１８】
また、現代のＮＡＮＤ型フラッシュメモリにおいては、プログラムディスターブを削減するために、ＮＡＮＤ型フラッシュメモリに複数ページ分の同じデータを複数回転送するという複数段階の書き込み動作が適用されるケースがある。この複数段階の書き込み動作は、少なくとも第１段階の書き込み動作と第２段階の書き込み動作とを含む。
【００１９】
第１段階の書き込み動作では、複数ページ分のデータがＮＡＮＤ型フラッシュメモリに転送され、ＮＡＮＤ型フラッシュメモリ内のある書き込み先ブロック内の同じワード線に接続された複数のメモリセルに書き込まれる。第２段階の書き込み動作では、この複数ページ分のデータがＮＡＮＤ型フラッシュメモリに再び転送され、この書き込み先ブロック内のこれら複数のメモリセルに書き込まれる。このように、同じデータを複数回転送することを伴う複数段階の書き込み動作の典型例としては、フォギー・ファイン書き込み動作が挙げられる。
【００２０】
通常、フォギー・ファイン書き込み動作のような複数段階の書き込み動作では、ワード線間の干渉に起因するプログラムディスターブを削減するために、データ書き込み動作は複数のワード線を往復しながら実行される。
例えば、３つのワード線を往復するフォギー・ファイン書き込み動作では、複数ページ分の第１のライトデータがＮＡＮＤ型フラッシュメモリに転送され、そして第１のライトデータが最初の物理ページ（最初のワード線に接続された複数のメモリセル）に書き込まれる（フォギー書き込み動作）。次に、複数ページ分の第２のライトデータがＮＡＮＤ型フラッシュメモリに転送され、そして第２のライトデータが次の物理ページ（次のワード線に接続された複数のメモリセル）に書き込まれる（フォギー書き込み動作）。次に、複数ページ分の第３のライトデータがＮＡＮＤ型フラッシュメモリに転送され、そして第３のライトデータがさらに次の物理ページ（さらに次のワード線に接続された複数のメモリセル）に書き込まれる（フォギー書き込み動作）。そして、書き込み対象の物理ページが最初の物理ページ（最初のワード線に接続された複数のメモリセル）に戻され、複数ページ分の上述の第１のライトデータがＮＡＮＤ型フラッシュメモリに再び転送され、そしてこの第１のライトデータが最初の物理ページ（最初のワード線に接続された複数のメモリセル）に書き込まれる（ファイン書き込み動作）。
【００２１】
したがって、フォギー・ファイン書き込み動作のような複数段階の書き込み動作を実行するケースにおいては、書き込み先ブロック毎に、一つのメモリセルに書き込まれるべきビットの数と、往復するワード線の数との積によって表されるページ数分のデータをライトバッファに保持することが必要とされる。
【００２２】
さらに、実際には、より高いデータ書き込み速度を得るために、複数のブロックにデータが並列に書き込まれるケースが多い。この場合、各ライトバッファに保持することが必要なデータの量は、さらに増加する。
よって、フラッシュストレージデバイス３が複数のクライアントによって共有されるケースにおいては、クライアント毎に、つまり書き込み先ブロック毎にライトバッファを用意し、且つ各ライトバッファに多数のページ数分のデータを保持することが必要とされる。
【００２３】
しかし、通常、フラッシュストレージデバイス３内のランダムアクセスメモリの容量は限られているので、各々が十分な容量を有する十分な数のライトバッファをフラッシュストレージデバイス３内のランダムアクセスメモリ上に用意することは困難な場合がある。
【００２４】
また、たとえフラッシュストレージデバイス３に大容量のランダムアクセスメモリを設けたとしても、フラッシュストレージデバイス３を共有するクライアントの数が少ない場合には、この大容量のランダムアクセスメモリが無駄になる結果となる。
このため、本実施形態では、ホスト２のメモリ上の所定の記憶領域が、複数の書き込み先ブロックにそれぞれ対応する複数のライトバッファとして利用される。複数の書き込み先ブロックは複数のクライアントにそれぞれ対応しているので、これら複数のライトバッファはこれら複数のクライアントにそれぞれ対応する。
【００２５】
ホスト２のメモリ上に用意されるライトバッファの数は、書き込み先ブロックの数、つまりクライアントの数と同数である。ホスト２においては、あるクライアントからのライトデータは、このクライアントに対応するライトバッファに蓄積される。また、別のクライアントからのライトデータは、この別のクライアントに対応する別のライトバッファに蓄積される。
【００２６】
通常、フラッシュストレージデバイス３が管理可能な最大メモリ容量は４Ｇバイト程度であるのに対し、ホスト２が管理可能な最大メモリ容量は数テラバイトに及ぶ。したがって、ホスト２側のライトバッファを使用するライトバッファリングは、フラッシュストレージデバイス３側のライトバッファを使用するライトバッファリングに比べ、ホスト２を利用するクライアントの数を容易に増やすことを可能にする。
【００２７】
しかし、現代のＮＡＮＤ型フラッシュメモリの多くにおいては、プログラムディスターブを低減するために、上述したように、フォギー・ファイン書き込み動作のような複数段階の書き込み動作を行うことが要求される。この場合、ＮＡＮＤ型フラッシュメモリに同じデータを複数回転送することが必要になるので、もしホスト側のライトバッファのみを使用する構成が利用されたならば、ホスト２からフラッシュストレージデバイス３に同じデータを複数回転送することが必要とされる。これにより、ホスト２からフラッシュストレージデバイス３に転送することが必要なデータ量、つまりホスト２とフラッシュストレージデバイス３との間のデータトラフィックが増大し、この結果、Ｉ／Ｏ性能が低下される可能性がある。
【００２８】
そこで、本実施形態では、フラッシュストレージデバイス３においては、複数の書き込み先ブロック間で共有されるライトバッファ（共有デバイス側ライトバッファ）が用意される。そして、フラッシュストレージデバイス３内に設けられているコントローラは、ホスト２からライト要求を受信する度に、ホスト側の複数のライトバッファのいずれかに格納されているライトデータをホスト２から受信し、受信したライトデータをフラッシュストレージデバイス３内の共有デバイス側ライトバッファに格納する。つまり、ライトデータが書き込まれるべき書き込み先ブロックとは関係なく、どのライトデータもこの共有デバイス側ライトバッファに格納される。
【００２９】
フラッシュストレージデバイス３のコントローラは、フォギー・ファイン書き込み動作のような複数段階の書き込み動作によって、ライトデータをＮＡＮＤ型フラッシュメモリに書き込む。複数段階の書き込み動作は、少なくとも、フォギー書き込み動作のような第１段階の書き込み動作とファイン書き込み動作のような第２段階の書き込み動作とを含む。フォギー書き込み動作は各メモリセルの閾値分布を荒く設定する書き込み動作であり、ファイン書き込み動作は各メモリセルの閾値分布を調整する書き込み動作である。さらに、フォギー書き込み動作とファイン書き込み動作との間に、中間の書き込み動作が実行されてもよい。
【００３０】
フラッシュストレージデバイス３のコントローラは、複数の書き込み先ブロック内のある書き込み先ブロックに書き込むべき複数ページ分のライトデータ（第１のライトデータ）を共有デバイス側ライトバッファから取得し、フォギー書き込み動作のような第１段階の書き込み動作によって第１のライトデータをこの書き込み先ブロックに書き込む。
【００３１】
共有デバイス側ライトバッファにホスト２からのライトデータを効率よく蓄積できるようにするため、共有デバイス側ライトバッファに空き領域がない状態でホスト２から新たなライトデータを受信した場合には、フラッシュストレージデバイス３のコントローラは、フォギー書き込み動作のような第１段階の書き込み動作が終了している共有デバイス側ライトバッファ内のライトデータ（フォギーステートのライトデータ）を破棄して、新たなライトデータを格納可能な空き領域を共有デバイス側ライトバッファに確保する。例えば、共有デバイス側ライトバッファ全体が多数のフォギーステートのライトデータで満たされている状態でホスト２から新たなライトデータを受信した場合には、フラッシュストレージデバイス３のコントローラは、これらフォギーステートのライトデータの中から破棄すべき特定のライトデータを選択し、この選択したライトデータを破棄する。これにより、制限された容量を有する共有デバイス側ライトバッファに複数のクライアントに対応する多くの量のライトデータを効率よく蓄積することができる。
【００３２】
そして、フラッシュストレージデバイス３は、第１のライトデータのファイン書き込み動作のような第２段階の書き込み動作を実行すべき時点において第１のライトデータが共有デバイス側ライトバッファに存在しない場合には、第１のライトデータを取得するための要求（転送要求）をホスト２に送信することによってホスト２から第１のライトデータを取得する。
【００３３】
共有デバイス側ライトバッファはある限られた容量を有しているが、ホスト２を利用するクライアントの数がある一定数以下であるならば、第２段階の書き込み動作を実行すべき時点において第１のライトデータが共有デバイス側ライトバッファに存在する確率（ヒット率）は比較的高い。したがって、同じライトデータをホスト２からフラッシュストレージデバイス３に複数回転送すること無く、フォギー・ファイン書き込み動作のような複数段階の書き込み動作を実行することができる。これにより、ホスト２とフラッシュストレージデバイス３との間のデータトラフィックを削減できるので、データ書き込みの度に同じライトデータをホスト２からフラッシュストレージデバイス３に複数回転送する場合に比し、フラッシュストレージデバイス３のＩ／Ｏ性能を向上することができる。
【００３４】
ホスト２を利用するクライアントの数が増えるにつれて、共有デバイス側ライトバッファのヒット率は低下する。しかし、第１のライトデータが共有デバイス側ライトバッファに存在しない場合（ミス）には、フラッシュストレージデバイス３のコントローラは、転送要求をホスト２に送信することによって第１のライトデータをホスト２から取得する。したがって、クライアントの数が増加しても、フォギー・ファイン書き込み動作のような複数段階の書き込み動作を正常に実行することができる。
【００３５】
よって、フラッシュストレージデバイス３は、フラッシュストレージデバイス３を共有するクライアントの数の増加に柔軟に対応でき且つホスト２とフラッシュストレージデバイス３との間のデータトラフィックを削減することができる。
図２は、ホスト２に設けられる複数のライトバッファ（ホスト側ライトバッファ）とフラッシュストレージデバイス３に設けられる共有ライトバッファ（共有デバイス側ライトバッファ）との関係を示す。
【００３６】
ホスト（サーバ）２においては、複数のエンドユーザ（複数のクライアント）にそれぞれ対応する複数の仮想マシン４０１が実行される。ハイパースケーラ型のデータセンターにおいては、多数のクライアント、例えば、数百から千程度のクライアントがホスト（サーバ）２を利用する場合がある。これらクライアントはテナントとも称される。
【００３７】
ホスト（サーバ）２はクライアント（テナント）毎に独立したサービスを提供する。図２においては、クライアント＃０、クライアント＃１、クライアント＃２、…、クライアント＃ｍ−１がホスト（サーバ）２を利用している場合が例示されている。
各仮想マシン４０１においては、対応するクライアント（テナント）によって使用される、オペレーティングシステム４０２およびユーザアプリケーション４０３が実行される。
【００３８】
また、ホスト（サーバ）２においては、複数のクライアントにそれぞれ対応する複数のＩ／Ｏサービス４０４が実行される。これらＩ／Ｏサービス４０４には、ブロックＩ／Ｏサービス、キー・バリュー・ストアサービス、他の様々なＩ／Ｏサービスが含まれてもよい。各Ｉ／Ｏサービス４０４は、データを識別するためのタグそれぞれとフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングを管理するアドレス変換テーブルであるルックアップテーブル（ＬＵＴ）４０４Ａを含む。ここで、タグは、論理アドレス空間上の位置を指定する論理アドレス（例えば、論理ブロックアドレス：ＬＢＡ）であってもよいし、キー・バリュー・ストアのキーであってもよい。
【００３９】
例えば、ＬＢＡベースのブロックＩ／Ｏサービスにおいては、論理アドレス（ＬＢＡ）それぞれとフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングを管理するＬＵＴが使用されてもよい。
また、キー・バリュー・ストアサービスにおいては、キーそれぞれとこれらキーに対応するデータが格納されているフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングを管理するＬＵＴが使用されてもよい。このＬＵＴにおいては、タグと、このタグによって識別されるデータが格納されている物理アドレスと、このデータのデータ長との対応関係が管理されてもよい。
【００４０】
これら各ＬＵＴ４０４Ａは、ユーザアプリケーション４０３からのタグ（例えばＬＢＡ）それぞれをフラッシュストレージデバイス３用のＬＢＡそれぞれに変換するのではなく、ユーザアプリケーション４０３からのタグ（例えばＬＢＡ）それぞれをフラッシュストレージデバイス３の物理アドレスそれぞれに変換する。
【００４１】
また、ホスト（サーバ）２においては、複数のクライアント（複数のテナント）＃０、＃１、＃２、…、＃ｍ−１にそれぞれ対応する複数のホスト側ライトバッファ（＃０、＃１、＃２、…、＃ｍ−１）４０５が設けられる。これらホスト側ライトバッファ４０５はホスト（サーバ）２のメモリ上に設けられる。
【００４２】
各ホスト側ライトバッファ４０５は、対応するクライアントからのライトデータを一時的に保持するために使用される。例えば、クライアント（テナント）＃０のライトデータはホスト側ライトバッファ＃０に格納され、クライアント（テナント）＃１のライトデータはホスト側ライトバッファ＃１に格納され、クライアント（テナント）＃２のライトデータはホスト側ライトバッファ＃２に格納され、同様に、クライアント（テナント）＃ｍ−１のライトデータはホスト側ライトバッファ＃ｍ−１に格納される。
【００４３】
ホスト（サーバ）２からフラッシュストレージデバイス３へのコマンドの送信およびフラッシュストレージデバイス３からホスト（サーバ）２へのコマンド完了のレスポンス等の返送は、複数のクライアントにそれぞれ対応する複数のＩ／Ｏキュー５００を介して実行される。
【００４４】
フラッシュストレージデバイス３のコントローラは、フラッシュストレージデバイス３を共有する複数のクライアント（複数のテナント）＃０、＃１、＃２、…、＃ｍ−１にそれぞれ対応する複数の書き込み先ブロック（フラッシュブロック＃０、＃１、＃２、…、＃ｍ−１）６０２を管理する。また、フラッシュストレージデバイス３においては、複数の書き込み先ブロック（フラッシュブロック）６０２によって共有される共有デバイス側ライトバッファ６０１が設けられている。共有デバイス側ライトバッファ６０１は、複数の書き込み先ブロック（フラッシュブロック＃０、＃１、＃２、…、＃ｍ−１）６０２のいずれかに書き込まれるべきライトデータを一時的に格納するために使用される。換言すれば、どのクライアントからのライトデータも共有デバイス側ライトバッファ６０１に格納される。
【００４５】
図３は、共有デバイス側ライトバッファ６０１を使用してフラッシュストレージデバイス３によって実行される、各書き込み先ブロックへのデータ書き込み動作を示す。
ここでは、フラッシュストレージデバイス３においては、各書き込み先ブロックへのデータ書き込みが上述のフォギー・ファイン書き込み動作によって実行される場合を想定する。
【００４６】
フォギー・ファイン書き込み動作をサポートできるようにするために、各ホスト側ライトバッファ４０５は十分な容量を有することが必要とされる。
例えば、ページサイズ＝１６Ｋバイト、ＮＡＮＤ型フラッシュメモリチップ当たりのプレーン数＝２、往復するワード線数＝３、メモリセル当たりに書き込まれるビット数＝４（ＱＬＣ）、並列アクセスされるＮＡＮＤ型フラッシュメモリチップの数＝３２の場合には、各ホスト側ライトバッファ４０５の容量は、１２Ｍバイト（＝１６Ｋバイト×２×３×４×３２）となる。ホスト側ライトバッファ４０５の数はクライアント（テナント）の数と同数であるので、これらホスト側ライトバッファ４０５の総容量は、１２Ｍバイトとクライアント（テナント）数との積で表される。例えば、クライアント（テナント）の数が１０００であるならば、これらホスト側ライトバッファ４０５の総容量は１２Ｇバイトとなる。
【００４７】
クライアント（テナント）＃０に対応するユーザアプリケーションよって書き込みが要求されたライトデータはホスト側ライトバッファ（＃０）４０５に格納され、クライアント（テナント）＃１に対応するユーザアプリケーションよって書き込みが要求されたライトデータはホスト側ライトバッファ（＃１）４０５に格納され、同様に、クライアント（テナント）＃ｍ−１に対応するユーザアプリケーションよって書き込みが要求されたライトデータはホスト側ライトバッファ（＃ｍ−１）４０５に格納される。
【００４８】
これら各ホスト側ライトバッファ（＃ｍ−１）４０５は一種のキャッシュとしても利用される。したがって、あるクライアントからのリード要求によって指定されたデータがこのクライアントに対応するホスト側ライトバッファ４０５に存在する場合には、このデータがこのホスト側ライトバッファ４０５から読み出されてもよい。
【００４９】
フラッシュストレージデバイス３に設けられる共有デバイス側ライトバッファ６０１の容量は、実現すべき書き込み速度に応じて決定される。例えば、共有デバイス側ライトバッファ６０１の容量は、２Ｍバイトから３Ｇバイトの範囲内の任意の容量であってもよいし、２Ｍバイトから４Ｇバイトの範囲内の任意の容量であってもよい。
【００５０】
フラッシュストレージデバイス３においては、ホスト２から受信されるどのライトデータも共有デバイス側ライトバッファ６０１に格納される。
フラッシュストレージデバイス３のコントローラは、フォギー・ファイン書き込み動作によって各書き込み先ブロック６０２にライトデータを書き込む。
【００５１】
ホスト２から受信される各ライト要求は、ライトデータが書き込まれるべき書き込み先ブロックを指定するブロックアドレスを含む。フラッシュストレージデバイス３のコントローラは、複数の書き込み先ブロック６０２内のある書き込み先ブロック（例えば、ここでは、書き込み先ブロック＃０とする）を指定する一つ以上のライト要求に関連付けられた複数ページ分のライトデータ（第１のライトデータ）をフォギー書き込み動作用のライトデータ（フォギーデータ）として共有デバイス側ライトバッファ６０１から取得する。例えば、ページサイズが１６Ｋバイトで、一つのメモリセルに４ビットのデータを書き込む場合には、フラッシュストレージデバイス３のコントローラは、書き込み先ブロック＃０に書き込むべき６４Ｋバイトのライトデータをフォギーデータとして共有デバイス側ライトバッファ６０１から取得する。この６４Ｋバイトのライトデータは、書き込み先ブロック＃０を指定するブロックアドレスを含む一つのライト要求に関連付けられたライトデータであってもよい。あるいは、書き込み先ブロック＃０を指定するブロックアドレスを含む各ライト要求に関連付けられたライトデータのサイズが６４Ｋバイトよりも小さい場合には、この６４Ｋバイトのライトデータは、幾つかのライト要求にそれぞれ関連付けられている複数のライトデータ部の集合であってもよい。
【００５２】
そして、フラッシュストレージデバイス３のコントローラは、フォギー書き込み動作によってこの第１のライトデータ（フォギーデータ）を書き込み先ブロック＃０内の書き込み対象の一つのワード線に接続された複数のメモリセル（複数の第１のメモリセル）に書き込む。
【００５３】
同様にして、フラッシュストレージデバイス３のコントローラは、この書き込み先ブロック＃０内の後続の一つ以上のワード線に対するフォギー書き込み動作を実行する。
そして、第１のライトデータのファイン書き込み動作を実行すべき時点において、フラッシュストレージデバイス３のコントローラは、共有デバイス側ライトバッファ６０１に対して第１のライトデータを要求する。共有デバイス側ライトバッファ６０１に第１のライトデータが存在しているならば（ヒット）、フラッシュストレージデバイス３のコントローラは、この第１のライトデータをファイン書き込み動作用のライトデータ（ファインデータ）として共有デバイス側ライトバッファ６０１から取得する。そして、フラッシュストレージデバイス３のコントローラは、ファイン書き込み動作によってこの第１のライトデータ（ファインデータ）を書き込み先ブロック＃０内の上述の複数の第１のメモリセルに書き込む。
【００５４】
他の各書き込み先ブロック６０２に関しても、同様にしてフォギー・ファイン書き込み動作が実行される。
フラッシュストレージデバイス３のコントローラは、例えば、書き込み先ブロック＃ｍ−１を指定する一つ以上のライト要求に関連付けられた複数ページ分のライトデータ（第２のライトデータ）をフォギー書き込み動作用のライトデータ（フォギーデータ）として共有デバイス側ライトバッファ６０１から取得する。そして、フラッシュストレージデバイス３のコントローラは、フォギー書き込み動作によってこの第２のライトデータ（フォギーデータ）を書き込み先ブロック＃ｍ−１内の書き込み対象の一つのワード線に接続された複数のメモリセル（複数の第２のメモリセル）に書き込む。
【００５５】
同様にして、フラッシュストレージデバイス３のコントローラは、この書き込み先ブロック＃ｍ−１内の後続の一つ以上のワード線に対するフォギー書き込み動作を実行する。
そして、第２のライトデータのファイン書き込み動作を実行すべき時点において、フラッシュストレージデバイス３のコントローラは、共有デバイス側ライトバッファ６０１に対して第２のライトデータを要求する。本実施形態では、共有デバイス側ライトバッファ６０１に空き領域がない状態でホスト２から新たなライトデータが受信された場合には、フォギー書き込み動作が終了している共有デバイス側ライトバッファ６０１内のあるライトデータが破棄され、これによって新たなライトデータを格納するための空き領域が共有デバイス側ライトバッファ６０１に確保される。新たなライトデータはこの確保された空き領域に格納される。換言すれば、フォギー書き込み動作が終了している共有デバイス側ライトバッファ６０１内のあるライトデータが共有デバイス側ライトバッファ６０１から追い出され、このライトデータが格納されていた共有デバイス側ライトバッファ６０１内の領域の内容がこの新たなライトデータで置き換えられる。
【００５６】
したがって、ホスト２を利用するクライアントの数が比較的多い場合には、あるワード線に対してファイン書き込み動作を実行すべき時点において、このワード線に対するフォギー書き込み動作で使用したライトデータが既に破棄されている可能性がある。
もし上述の第２のライトデータが共有デバイス側ライトバッファ６０１に存在しない場ならば（ミス）、フラッシュストレージデバイス３のコントローラは、第２のライトデータを取得するための要求（転送要求）をホスト２に送信することによって、ホスト２のホスト側ライトバッファ＃ｍ−１から第２のライトデータをファイン書き込み動作用のライトデータ（ファィンデータ）として取得する。この場合、第２のライトデータが、ホスト２のホスト側ライトバッファ＃ｍ−１からフラッシュストレージデバイス３に転送される。この転送された第２のライトデータは、共有デバイス側ライトバッファ６０１に格納されてもよい。
【００５７】
そして、フラッシュストレージデバイス３のコントローラは、ファイン書き込み動作によってこの第２のライトデータ（ファインデータ）を書き込み先ブロック＃ｍ−１内の上述の複数の第２のメモリセルに書き込む。
ここで、フォギー・ファイン書き込み動作をサポートするために必要な各ホスト側ライトバッファ４０５の容量が１２Ｍバイトであり、１０００個のクライアント（テナント）に対応する１０００個のホスト側ライトバッファ４０５の総容量が１２Ｇバイトである場合を想定する。共有デバイス側ライトバッファ６０１の容量（総容量）が３Ｇバイトに設定されている場合においては、クライアント（テナント）の数が２５０個以下であれば、同じライトデータをホスト２からフラッシュストレージデバイス３に複数回転送すること無く、フォギー・ファイン書き込み動作のような複数段階の書き込み動作を実行することができる。
【００５８】
ホスト２を利用するクライアントの数が増えるにつれて、共有デバイス側ライトバッファ６０１のヒット率は徐々に低下する。しかし、ファイン書き込み動作で使用すべきライトデータが共有デバイス側ライトバッファ６０１に存在しない場合（ミス）には、フラッシュストレージデバイス３は、転送要求をホスト２に送信することによってこのライトデータをホスト２から取得する。したがって、クライアント（テナント）の数が１０００まで増加したとしても、フォギー・ファイン書き込み動作のような複数段階の書き込み動作を正常に実行することができる。
【００５９】
また、１０００個のクライアント（テナント）が存在する場合であっても、例えば、８台のフラッシュストレージデバイス３がホスト（サーバ）２に接続されており、且つホスト２がこれら８台のフラッシュストレージデバイス３に同数のクライアントを均等に割り当てたならば、各フラッシュストレージデバイス３は、１．５Ｇバイトの共有デバイス側ライトバッファ６０１を備えるだけで、同じライトデータをホスト２からフラッシュストレージデバイス３に複数回転送すること無く、フォギー・ファイン書き込み動作のような複数段階の書き込み動作を実行することができる。
【００６０】
図４は、３つのワード線を往復する場合のフォギー・ファイン書き込み動作を示す。
ここでは、フラッシュストレージデバイス３内のＮＡＮＤ型フラッシュメモリが、メモリセル当たりに４ビットのデータを格納するＱＬＣ−フラッシュである場合を想定する。あるＮＡＮＤ型フラッシュメモリ内の一つの特定の書き込み先ブロックに対するフォギー・ファイン書き込み動作は以下のように実行される。
【００６１】
（１）まず、４ページ（Ｐ０〜Ｐ３）分のライトデータがこのＮＡＮＤ型フラッシュメモリに転送され、この書き込み先ブロック内のワード線ＷＬ０に接続された複数のメモリセルに、これら４ページ（Ｐ０〜Ｐ３）分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【００６２】
（２）次いで、次の４ページ（Ｐ４〜Ｐ７）分のライトデータがこのＮＡＮＤ型フラッシュメモリに転送され、この書き込み先ブロック内のワード線ＷＬ１に接続された複数のメモリセルに、これら４ページ（Ｐ４〜Ｐ７）分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【００６３】
（３）次いで、次の４ページ（Ｐ８〜Ｐ１１）分のライトデータがこのＮＡＮＤ型フラッシュメモリに転送され、この書き込み先ブロック内のワード線ＷＬ２に接続された複数のメモリセルに、これら４ページ（Ｐ８〜Ｐ１１）分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【００６４】
（４）ワード線ＷＬ２に接続された複数のメモリセルに対するフォギー書き込み動作が終了すると、書き込み対象のワード線はワード線ＷＬ０に戻り、ワード線ＷＬ０に接続された複数のメモリセルに対するファイン書き込み動作の実行が可能となる。そして、ワード線ＷＬ０に対するフォギー書き込み動作で使用された４ページ（Ｐ０〜Ｐ３）分のライトデータと同じ４ページ（Ｐ０〜Ｐ３）分のライトデータがＮＡＮＤ型フラッシュメモリに再び転送され、この書き込み先ブロック内のワード線ＷＬ０に接続された複数のメモリセルに、これら４ページ（Ｐ０〜Ｐ３）分のライトデータを書き込むためのファイン書き込み動作が実行される。これにより、ページＰ０〜Ｐ３に対するフォギー・ファイン書き込み動作が終了する。この結果、ページＰ０〜Ｐ３からデータを読み出すことが可能となる。
【００６５】
（５）次いで、次の４ページ（Ｐ１２〜Ｐ１５）分のライトデータがＮＡＮＤ型フラッシュメモリに転送され、この書き込み先ブロック内のワード線ＷＬ３に接続された複数のメモリセルに、これら４ページ（Ｐ１２〜Ｐ１５）分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【００６６】
（６）ワード線ＷＬ３に接続された複数のメモリセルに対するフォギー書き込み動作が終了すると、書き込み対象のワード線はワード線ＷＬ１に戻り、ワード線ＷＬ１に接続された複数のメモリセルに対するファイン書き込み動作の実行が可能となる。そして、ワード線ＷＬ１に対するフォギー書き込み動作で使用された４ページ（Ｐ４〜Ｐ７）分のライトデータと同じ４ページ（Ｐ４〜Ｐ７）分のライトデータがＮＡＮＤ型フラッシュメモリに再び転送され、この書き込み先ブロック内のワード線ＷＬ１に接続された複数のメモリセルに、これら４ページ（Ｐ４〜Ｐ７）分のライトデータを書き込むためのファイン書き込み動作が実行される。これにより、ページＰ４〜Ｐ７に対するフォギー・ファイン書き込み動作が終了する。この結果、ページＰ４〜Ｐ７からデータを読み出すことが可能となる。
【００６７】
図５は、２つのワード線を往復する場合のフォギー・ファイン書き込み動作を示す。
ここでは、フラッシュストレージデバイス３内のＮＡＮＤ型フラッシュメモリが、メモリセル当たりに４ビットのデータを格納するＱＬＣ−フラッシュである場合を想定する。あるＮＡＮＤ型フラッシュメモリ内の一つの特定の書き込み先ブロックに対するフォギー・ファイン書き込み動作は以下のように実行される。
【００６８】
（１）まず、４ページ（Ｐ０〜Ｐ３）分のライトデータがこのＮＡＮＤ型フラッシュメモリに転送され、この書き込み先ブロック内のワード線ＷＬ０に接続された複数のメモリセルに、これら４ページ（Ｐ０〜Ｐ３）分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【００６９】
（２）次いで、次の４ページ（Ｐ４〜Ｐ７）分のライトデータがこのＮＡＮＤ型フラッシュメモリに転送され、この書き込み先ブロック内のワード線ＷＬ１に接続された複数のメモリセルに、これら４ページ（Ｐ４〜Ｐ７）分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【００７０】
（３）ワード線ＷＬ１に接続された複数のメモリセルに対するフォギー書き込み動作が終了すると、書き込み対象のワード線はワード線ＷＬ０に戻り、ワード線ＷＬ０に接続された複数のメモリセルに対するファイン書き込み動作の実行が可能となる。そして、ワード線ＷＬ０に対するフォギー書き込み動作で使用された４ページ（Ｐ０〜Ｐ３）分のライトデータと同じ４ページ（Ｐ０〜Ｐ３）分のライトデータがＮＡＮＤ型フラッシュメモリに再び転送され、この書き込み先ブロック内のワード線ＷＬ０に接続された複数のメモリセルにこれら４ページ（Ｐ０〜Ｐ３）分のライトデータを書き込むためのファイン書き込み動作が実行される。これにより、ページＰ０〜Ｐ３に対するフォギー・ファイン書き込み動作が終了する。この結果、ページＰ０〜Ｐ３からデータを読み出すことが可能となる。
【００７１】
（４）次いで、次の４ページ（Ｐ８〜Ｐ１１）分のライトデータがＮＡＮＤ型フラッシュメモリに転送され、この書き込み先ブロック内のワード線ＷＬ２に接続された複数のメモリセルに、これら４ページ（Ｐ８〜Ｐ１１）分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【００７２】
（５）ワード線ＷＬ２に接続された複数のメモリセルに対するフォギー書き込み動作が終了すると、書き込み対象のワード線はワード線ＷＬ１に戻り、ワード線ＷＬ１に接続された複数のメモリセルに対するファイン書き込み動作の実行が可能となる。そして、ワード線ＷＬ１に対するフォギー書き込み動作で使用された４ページ（Ｐ４〜Ｐ７）分のライトデータと同じ４ページ（Ｐ４〜Ｐ７）分のライトデータがＮＡＮＤ型フラッシュメモリに再び転送され、この書き込み先ブロック内のワード線ＷＬ１に接続された複数のメモリセルに、これら４ページ（Ｐ４〜Ｐ７）分のライトデータを書き込むためのファイン書き込み動作が実行される。これにより、ページＰ４〜Ｐ７に対するフォギー・ファイン書き込み動作が終了する。この結果、ページＰ４〜Ｐ７からデータを読み出すことが可能となる。
【００７３】
（６）次いで、次の４ページ（Ｐ１２〜Ｐ１５）分のライトデータがＮＡＮＤ型フラッシュメモリに転送され、この書き込み先ブロック内のワード線ＷＬ３に接続された複数のメモリセルに、これら４ページ（Ｐ１２〜Ｐ１５）分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【００７４】
図６は、本実施形態のフラッシュストレージデバイス３とホスト２とを含む計算機システム１の構成例を示す。
フラッシュストレージデバイス３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。フラッシュストレージデバイス３は、ランダムアクセスメモリ、例えば、ＤＲＡＭ６も備えていてもよい。
【００７５】
ＮＡＮＤ型フラッシュメモリ５は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。ＮＡＮＤ型フラッシュメモリ５は、２次元構造のＮＡＮＤ型フラッシュメモリであってもよいし、３次元構造のＮＡＮＤ型フラッシュメモリであってもよい。
【００７６】
ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、複数のブロックＢＬＫ０〜ＢＬＫｍ−１を含む。ブロックＢＬＫ０〜ＢＬＫｍ−１の各々は多数のページによって編成される。消去動作はブロックの単位で実行され、データ書き込み動作およびデータ読み込み動作はページの単位で実行される。
【００７７】
ＮＡＮＤ型フラッシュメモリ５は、一つのメモリセルに複数のビットを格納可能な多値−フラッシュメモリ、例えば、一つのメモリセルに４ビットを格納可能なクワドレベルセル（ＱＬＣ）−フラッシュメモリによって実現されていてもよい。この場合、ＮＡＮＤ型フラッシュメモリ５は、一つのメモリセルに４ビットを書き込むための書き込みモード（ＱＬＣモード）と、一つのメモリセルに１ビットを書き込むための書き込みモード（シングルレベルセル（ＳＬＣ）モード）とをブロック毎に選択的に使用することができる。ＱＬＣモードが適用されるブロックはＱＬＣブロックとして参照され、ＳＬＣモードが適用されるブロックはＳＬＣブロックとして参照される。上述の複数段階の書き込み動作は、ＱＬＣブロックへのデータの書き込みのために使用される。なお、ＮＡＮＤ型フラッシュメモリ５はＱＬＣ−フラッシュメモリに限らず、一つのメモリセルに２ビットを格納可能なマルチレベルセル（ＭＬＣ）−フラッシュメモリ、または一つのメモリセルに３ビットを格納可能なトリプルレベルセル（ＴＬＣ）−フラッシュメモリによって実現されてよい。上述の複数段階の書き込み動作は、ＭＬＣモードが適用されるブロック（ＭＬＣブロック）へのデータの書き込みのために使用されてもよいし、ＴＬＣモードが適用されるブロック（ＴＬＣブロック）へのデータの書き込みのために使用されてもよい。
【００７８】
コントローラ４は、ＴｏｇｇｌｅＮＡＮＤインタフェース、オープンＮＡＮＤフラッシュインタフェース（ＯＮＦＩ）のようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラとして動作する。このコントローラ４は、Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ（ＳｏＣ）のような回路によって実現されてもよい。
【００７９】
ＮＡＮＤ型フラッシュメモリ５は、図７に示すように、複数のＮＡＮＤ型フラッシュメモリチップ（ＮＡＮＤ型フラッシュメモリダイ）を含んでいてもよい。個々のＮＡＮＤ型フラッシュメモリチップは独立して動作可能である。このため、ＮＡＮＤ型フラッシュメモリチップは、並列動作可能な単位として機能する。図７においては、ＮＡＮＤインタフェース１３に１６個のチャンネルＣｈ．１〜Ｃｈ．１６が接続されており、１６個のチャンネルＣｈ．１〜Ｃｈ．１６の各々に２つのＮＡＮＤ型フラッシュメモリチップが接続されている場合が例示されている。この場合、チャンネルＣｈ．１〜Ｃｈ．１６に接続された１６個のＮＡＮＤ型フラッシュメモリチップ＃１〜＃１６がバンク＃０として編成されてもよく、またチャンネルＣｈ．１〜Ｃｈ．１６に接続された残りの１６個のＮＡＮＤ型フラッシュメモリチップ＃１７〜＃３２がバンク＃１として編成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。図７の構成例においては、１６チャンネルと、２つのバンクを使用したバンクインタリーブとによって、最大３２個のＮＡＮＤ型フラッシュメモリチップを並列動作させることができる。
【００８０】
消去動作は、一つのブロック（物理ブロック）の単位で実行されてみよいし、並列動作可能な複数のブロックの集合を含むスーパーブロックの単位で実行されてもよい。一つのスーパーブロックは、これに限定されないが、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２から一つずつ選択される計３２個のブロックを含んでいてもよい。なお、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２の各々はマルチプレーン構成を有していてもよい。例えば、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２の各々が、２つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２に対応する６４個のプレーンから一つずつ選択される計６４個のブロックを含んでいてもよい。
【００８１】
図８には、３２個のブロック（ここでは、ＮＡＮＤ型フラッシュメモリチップ＃１内のブロックＢＬＫ２、ＮＡＮＤ型フラッシュメモリチップ＃２内のブロックＢＬＫ３、ＮＡＮＤ型フラッシュメモリチップ＃３内のブロックＢＬＫ７、ＮＡＮＤ型フラッシュメモリチップ＃４内のブロックＢＬＫ４、ＮＡＮＤ型フラッシュメモリチップ＃５内のブロックＢＬＫ６、…ＮＡＮＤ型フラッシュメモリチップ＃３２内のブロックＢＬＫ３）を含む一つのスーパーブロック（ＳＢ）が例示されている。
【００８２】
図２、図３で説明した各書き込み先ブロック６０２としては、並列アクセス可能な複数のブロックの集合であるスーパーブロックが用いられてもよい。
次に、図６のコントローラ４の構成について説明する。
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４等を含む。これらホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続される。
【００８３】
このホストインタフェース１１は、ホスト２との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース１１は、例えば、ＰＣＩｅコントローラ（ＮＶＭｅコントローラ）であってもよい。あるいは、フラッシュストレージデバイス３がＥｔｈｅｒｎｅｔ（登録商標）を介してホスト２に接続される構成においては、ホストインタフェース１１は、ＮＶＭｅ  ｏｖｅｒ  Ｆａｂｒｉｃｓ（ＮＶＭｅＯＦ）コントローラであってもよい。フラッシュストレージデバイス３がＥｔｈｅｒｎｅｔ（登録商標）を介してホスト２に接続される構成は、必要に応じて、フラッシュストレージデバイス３の数を容易に増やすことを可能にする。さらに、ホスト２の数を容易に増やすことも可能である。
【００８４】
ホストインタフェース１１は、ホスト２から様々な要求（コマンド）を受信する。これら要求（コマンド）には、ライト要求（ライトコマンド）、リード要求（リードコマンド）、他の様々な要求（コマンド）が含まれる。
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、フラッシュストレージデバイス３の電源オンに応答してＮＡＮＤ型フラッシュメモリ５または図示しないＲＯＭから制御プログラム（ファームウェア）をＤＲＡＭ６にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ４内の図示しないＳＲＡＭ上にロードされてもよい。このＣＰＵ１２は、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行することができる。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行される上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ４内の専用ハードウェアによって実行してもよい。
【００８５】
ＣＰＵ１２は、ライト制御部２１、およびリード制御部２２として機能することができる。これらライト制御部２１およびリード制御部２２もコントローラ４内の専用ハードウェアによって実現されてもよい。
ライト制御部２１は、複数ページ分のデータをＮＡＮＤ型フラッシュメモリ５に転送することを伴う第１段階の書き込み動作とこのデータをＮＡＮＤ型フラッシュメモリ５に転送することを伴う第２段階の書き込み動作とを少なくとも含む複数段階の書き込み動作によってこのデータをＮＡＮＤ型フラッシュメモリ５の特定の書き込み先ブロック内の同じワード線に接続された複数のメモリセルに書き込むように構成されている。この複数段階の書き込み動作の典型例には、上述したように、フォギー・ファイン書き込み動作がある。
【００８６】
ライト制御部２１は、ＮＡＮＤ型フラッシュメモリ５内に含まれる複数のブロックから割り当てられた複数の書き込み先ブロックを管理する。ライト制御部２１は、複数の書き込み先ブロックのいずれか一つを指定するブロックアドレスを含むライト要求をホスト２から受信する。ライト要求をホスト２から受信する度に、ライト制御部２１は、ホスト２のメモリ３３上の複数のホスト側ライトバッファ４０５のいずれかに格納されているライトデータをホスト２から受信し、受信したライトデータをＤＲＡＭ６上の共有デバイス側ライトバッファ６０１に格納する。
【００８７】
ライト制御部２１は、ある書き込み先ブロック（第１の書き込み先ブロック）を指定する一つ以上のライト要求に関連付けられた複数ページ分のライトデータ（第１のライトデータ）を共有デバイス側ライトバッファ６０１から取得する。そして、ライト制御部２１は、フォギー書き込み動作のような第１段階の書き込み動作によってこの第１のライトデータを第１の書き込み先ブロック内の書き込み対象の一つのワード線に接続された複数のメモリセル（複数の第１のメモリセル）に書き込む。
【００８８】
第１のライトデータの第２段階の書き込み動作を実行すべき時点において第１のライトデータが共有デバイス側ライトバッファ６０１に存在する場合には、ライト制御部２１は、第１のライトデータを共有デバイス側ライトバッファ６０１から取得し、第２段階の書き込み動作によって第１のライトデータを第１の書き込み先ブロックの上述の複数の第１のメモリセルに書き込む。
【００８９】
第１のライトデータの第２段階の書き込み動作を実行すべき時点において第１のライトデータが共有デバイス側ライトバッファ６０１に存在しない場合には、ライト制御部２１は、第１のライトデータを取得するための要求（転送要求）をホスト２に送信することによってホスト２から第１のライトデータを取得し、第２段階の書き込み動作によって第１のライトデータを第１の書き込み先ブロックの上述の複数の第１のメモリセルに書き込む。
【００９０】
また、ライト制御部２１は、共有デバイス側ライトバッファ６０１内のあるライトデータを破棄することによって空き領域を共有デバイス側ライトバッファ６０１に確保する。
例えば、ライト制御部２１は、あるライトデータのファイン書き込み動作が終了した場合、つまりこのライトデータの複数段階の書き込み動作が終了した場合、このライトデータを共有デバイス側ライトバッファ６０１から破棄する。
【００９１】
また、共有デバイス側ライトバッファ６０１に空き領域がない状態でホスト２から新たなライトデータを受信した場合、ライト制御部２１は、フォギー書き込み動作が終了している共有デバイス側ライトバッファ６０１内のライトデータの中から破棄すべきライトデータを選択し、選択したライトデータを共有デバイス側ライトバッファ６０１から破棄する。
【００９２】
破棄すべきライトデータを選択するためのアルゴリズムとしては、フォギー書き込み動作のような第１段階の書き込み動作が終了している共有デバイス側ライトバッファ６０１内のライトデータのうちで、最も古いライトデータを選択するファースト・イン・ファースト・アウトを使用することができる。
【００９３】
データ書き込み量の少ないクライアント（テナント）に対応する書き込み先ブロックへのデータ書き込み動作の進行速度に比べ、データ書き込み量の多いクライアント（テナント）に対応する書き込み先ブロックへのデータ書き込み動作の進行速度は速くなる傾向がある。このため、フォギー書き込み動作のような第１段階の書き込み動作が終了している共有デバイス側ライトバッファ６０１内のライトデータのうちで最も古いライトデータを破棄するという方法を使用することにより、転送要求がホスト２に送信される頻度を低減することが可能となる。
【００９４】
なお、フォギー書き込み動作のような第１段階の書き込み動作が終了している共有デバイス側ライトバッファ６０１内のライトデータの中から破棄すべきライトデータを選択するためのアルゴリズムは、ファースト・イン・ファースト・アウトに限定されず、ＬＲＵ、ランダムのような他のアルゴリズムを使用してもよい。
【００９５】
リード制御部２２は、ブロックアドレスおよびページアドレスを指定するリード要求（リードコマンド）をホスト２から受信し、このブロックアドレスおよびページアドレスによって指定されるＮＡＮＤ型フラッシュメモリ５内の物理記憶位置に格納されているデータを読み出し、この読み出したデータをホスト２に返送する。
【００９６】
ＮＡＮＤインタフェース１３は、ＣＰＵ１２の制御の下、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリ制御回路である。
ＤＲＡＭインタフェース１４は、ＣＰＵ１２の制御の下、ＤＲＡＭ６を制御するように構成されたＤＲＡＭ制御回路である。ＤＲＡＭ６の記憶領域の一部は、共有デバイス側ライトバッファ６０１として使用される。
【００９７】
ホスト２は、サーバのようなコンピュータであり、そのハードウェアコンポーネントとして、ホストストレージコントローラ３１、プロセッサ３２、およびメモリ３３を備える。これらホストストレージコントローラ３１、プロセッサ３２、メモリ３３は、バス３０を介して相互接続されていてもよい。メモリ３３はＤＲＡＭのようなランダムアクセスメモリであり、メモリ３３の記憶領域の一部は、複数のホスト側ライトバッファ４０５として使用される。
【００９８】
ホスト２は、さらに、ネットワークインターフェース３４を備えていてもよい。
図９は、ホスト２とフラッシュストレージデバイス３とによって実行されるデータ書き込み処理の例を示す。
ここでは、ある書き込み先ブロックのあるワード線に対するファイン書き込み動作を実行すべきタイミングで、このワード線に接続された複数のメモリセルに書き込むべきライトデータが共有デバイス側ライトバッファ６０１に存在している場合を想定する。
【００９９】
（１）あるクライアント（テナント）に対応するユーザアプリケーションがデータの書き込みを要求すると、このデータ（ライトデータ）がこのクライアント（テナント）に対応するホスト側ライトバッファ４０５に蓄積される。そして、ホスト２からフラッシュストレージデバイス３にライト要求が送信される。ライト要求は、例えば、ブロックアドレスとタグとを含んでいてもよい。上述したように、タグはライトデータを識別するための情報（例えば、ＬＢＡ、キー・バリュー・ストアのキー、等）である。また、ライト要求は、ライトデータが格納されているホスト側ライトバッファ４０５内の位置を示す記憶位置情報を含んでいてもよい。ライト要求は、例えば、ホスト側ライトバッファ４０５に所定量のライトデータが蓄積されるといった条件が満たされたときにホスト２からフラッシュストレージデバイス３に送信されてもよい。フラッシュストレージデバイス３のコントローラ４においては、ライト制御部２１がホスト２からのライト要求を受信した場合、ライト制御部２１は、ホスト側ライトバッファ４０５に格納されているライトデータをホスト２から受信する。このライトデータはライト要求と一緒にホスト２からフラッシュストレージデバイス３に送信されてもよいし、ライト制御部２１が、ライトデータを取得するための要求（転送要求）をホスト２に送信することによってこのライトデータをホスト２から取得してもよい。この転送要求は、ホスト側ライトバッファ４０５内の位置を示す上述の記憶位置情報を含む。
【０１００】
（２）（３）フラッシュストレージデバイス３のコントローラ４においては、ライト制御部２１は、受信したライト要求内のブロックアドレスによって指定される書き込み先ブロック内の書き込み対象のページのページアドレスを決定する。ライト制御部２１は、この書き込み先ブロックに書き込むべき複数ページ分の第１のライトデータを共有デバイス側ライトバッファ６０１から取得する。ライト制御部２１は、フォギー書き込み動作によってこの複数ページ分の第１のライトデータをＮＡＮＤインタフェース１３を介してこの書き込み先ブロックに書き込む。この場合、ライト制御部２１は、この複数ページ分の第１のライトデータ（フォギーデータ）を、この書き込み先ブロックを含むＮＡＮＤ型フラッシュメモリチップに転送し、第１のライトデータをこの書き込み先ブロック内の書き込み対象のワード線に接続された複数の第１のメモリセルに書き込む（フォギー書き込み動作）。
【０１０１】
（４）後続の１以上のワード線に対するフォギー書き込み動作の終了によって、この第１のライトデータのファイン書き込みを実行すべき時点になると、ライト制御部２１は、複数ページ分の第１のライトデータを共有デバイス側ライトバッファ６０１に要求する。この複数ページ分の第１のライトデータが共有デバイス側ライトバッファ６０１に存在する場合、ライト制御部２１は、複数ページ分の第１のライトデータを共有デバイス側ライトバッファ６０１から取得する。ライト制御部２１は、ファイン書き込み動作によってこの複数ページ分の第１のライトデータをＮＡＮＤインタフェース１３を介してこの書き込み先ブロックに書き込む。この場合、ライト制御部２１は、この複数ページ分の第１のライトデータ（ファインデータ）を、この書き込み先ブロックを含むＮＡＮＤ型フラッシュメモリチップに転送し、第１のライトデータをこの書き込み先ブロック内の上述の複数の第１のメモリセルに書き込む（ファイン書き込み動作）。
【０１０２】
（５）ライト制御部２１は、ファイン書き込み動作が終了した複数ページ分の第１のライトデータ（ファインステートのライトデータ）を共有デバイス側ライトバッファ６０１から破棄し、これによって共有デバイス側ライトバッファ６０１の空き領域を増やす。
【０１０３】
図１０は、ホスト２とフラッシュストレージデバイス３とによって実行されるデータ書き込み処理の別の例を示す。
ここでは、ある書き込み先ブロックのあるワード線に対するファイン書き込み動作を実行すべきタイミングで、このワード線に接続された複数のメモリセルに書き込むべきライトデータが共有デバイス側ライトバッファ６０１に存在しない場合を想定する。
【０１０４】
（１’）あるクライアント（テナント）に対応するユーザアプリケーションがデータの書き込みを要求すると、このデータ（ライトデータ）がこのクライアント（テナント）に対応するホスト側ライトバッファ４０５に蓄積される。そして、ホスト２からフラッシュストレージデバイス３にライト要求が送信される。ライト要求は、例えば、ブロックアドレスとタグとを含んでいてもよい。上述したように、タグはライトデータを識別するための情報（例えば、ＬＢＡ、キー・バリュー・ストアのキー、等）である。また、ライト要求は、ライトデータが格納されているホスト側ライトバッファ４０５内の位置を示す記憶位置情報を含んでいてもよい。ライト要求は、例えば、ホスト側ライトバッファ４０５に所定量のライトデータが蓄積されるといった条件が満たされたときにホスト２からフラッシュストレージデバイス３に送信されてもよい。フラッシュストレージデバイス３のコントローラ４においては、ライト制御部２１がホスト２からのライト要求を受信した場合、ライト制御部２１は、ホスト側ライトバッファ４０５に格納されているライトデータをホスト２から受信する。このライトデータはライト要求と一緒にホスト２からフラッシュストレージデバイス３に送信されてもよいし、ライト制御部２１が、ライトデータを取得するための要求（転送要求）をホスト２に送信することによってこのライトデータをホスト２から取得してもよい。この転送要求は、ホスト側ライトバッファ４０５内の位置を示す上述の記憶位置情報を含む。
【０１０５】
（２’）（３’）フラッシュストレージデバイス３のコントローラ４においては、ライト制御部２１は、受信したライト要求内のブロックアドレスによって指定される書き込み先ブロック内の書き込み対象のページのページアドレスを決定する。ライト制御部２１は、この書き込み先ブロックに書き込むべき複数ページ分の第１のライトデータを共有デバイス側ライトバッファ６０１から取得する。ライト制御部２１は、フォギー書き込み動作によってこの複数ページ分の第１のライトデータをＮＡＮＤインタフェース１３を介してこの書き込み先ブロックに書き込む。この場合、ライト制御部２１は、この複数ページ分の第１のライトデータ（フォギーデータ）を、この書き込み先ブロックを含むＮＡＮＤ型フラッシュメモリチップに転送し、第１のライトデータをこの書き込み先ブロック内の書き込み対象のワード線に接続された複数の第１のメモリセルに書き込む（フォギー書き込み動作）。
【０１０６】
（４’）後続の１以上のワード線に対するフォギー書き込み動作の終了によって、この第１のライトデータのファイン書き込みを実行すべき時点になると、ライト制御部２１は、複数ページ分の第１のライトデータを共有デバイス側ライトバッファ６０１に要求する。この複数ページ分の第１のライトデータが共有デバイス側ライトバッファ６０１に存在しない場合、ライト制御部２１は、第１のライトデータを取得するための要求（転送要求）をホスト２に送信することによってホスト２から第１のライトデータを取得する。この転送要求は、ホスト側ライトバッファ４０５内の位置を示す上述の記憶位置情報を含む。取得された第１のライトデータは共有デバイス側ライトバッファ６０１に格納されてもよい。
【０１０７】
（５’）ライト制御部２１は、ファイン書き込み動作によってこの複数ページ分の第１のライトデータをＮＡＮＤインタフェース１３を介してこの書き込み先ブロックに書き込む。この場合、ライト制御部２１は、この複数ページ分の第１のライトデータ（ファインデータ）を、この書き込み先ブロックを含むＮＡＮＤ型フラッシュメモリチップに転送し、第１のライトデータをこの書き込み先ブロック内の上述の複数の第１のメモリセルに書き込む（ファイン書き込み動作）。
【０１０８】
（６’）ライト制御部２１は、ファイン書き込み動作が終了した複数ページ分の第１のライトデータ（ファインステートのライトデータ）を共有デバイス側ライトバッファ６０１から破棄し、これによって共有デバイス側ライトバッファ６０１の空き領域を増やす。
【０１０９】
図１１は、共有デバイス側ライトバッファ６０１を使用してフラッシュストレージデバイス３のコントローラ４によって実行されるフォギー・ファイン書き込み動作と共有デバイス側ライトバッファ６０１のデータを破棄する処理とを示す。
図１１においては、図示の簡単化のために、共有デバイス側ライトバッファ６０１が、領域１０１〜１０９を含む場合が例示されている。これら領域１０１〜１０９の各々は、例えば４ページ分のサイズを有している。また、図１１においては、３つのワード線ＷＬを往復しながらフォギー・ファイン書き込み動作が実行される場合を想定する。
【０１１０】
共有デバイス側ライトバッファ６０１の領域１０１、１０２にそれぞれ格納されたライトデータＤ１、Ｄ２が書き込み先ブロックＢＬＫ１１に書き込むべきライトデータである場合、コントローラ４は、（１）４ページ分のライトデータＤ１をフォギー書き込み動作によって書き込み先ブロックＢＬＫ１１のページＰ０−Ｐ３（ワード線ＷＬ０に接続された複数のメモリセル）に書き込み、そして、（２）４ページ分のライトデータＤ２をフォギー書き込み動作によって書き込み先ブロックＢＬＫ１１のページＰ４−Ｐ７（ワード線ＷＬ１に接続された複数のメモリセル）に書き込む。
【０１１１】
共有デバイス側ライトバッファ６０１の領域１０３、１０４、１０５に格納されたライトデータＤ１１、Ｄ１２、Ｄ１３が書き込み先ブロックＢＬＫ１０１に書き込むべきライトデータである場合、コントローラ４は、（３）４ページ分のライトデータＤ１１をフォギー書き込み動作によって書き込み先ブロックＢＬＫ１０１のページＰ０−Ｐ３（ワード線ＷＬ０に接続された複数のメモリセル）に書き込み、（４）４ページ分のライトデータＤ１２をフォギー書き込み動作によって書き込み先ブロックＢＬＫ１０１のページＰ４−Ｐ７（ワード線ＷＬ１に接続された複数のメモリセル）に書き込み、（５）４ページ分のライトデータＤ１３をフォギー書き込み動作によって書き込み先ブロックＢＬＫ１０１のページＰ８−Ｐ１１（ワード線ＷＬ２に接続された複数のメモリセル）に書き込む。
【０１１２】
ワード線ＷＬ２に対する４ページ分のライトデータＤ１３のフォギー書き込み動作が終了した後、コントローラ４は、（６）４ページ分のライトデータＤ１１をファイン書き込み動作によって書き込み先ブロックＢＬＫ１０１のページＰ０−Ｐ３（ワード線ＷＬ０に接続された複数のメモリセル）に書き込む。ライトデータＤ１１のファイン書き込み動作が終了すると、このライトデータＤ１１のステートはフォギーステートからファインステートに変わる。そして、コントローラ４は、（７）ファイン書き込み動作が終了したこのライトデータＤ１１（ファインステートのライトデータ）を共有デバイス側ライトバッファ６０１から破棄して領域１０３を空き領域にする。
【０１１３】
図１２は、共有デバイス側ライトバッファ６０１に空き領域がない状態でホスト２から新たなライトデータを受信した場合によって実行される、ファイン書き込み動作が終了した共有デバイス側ライトバッファ６０１内のライトデータを破棄する処理を示す。
【０１１４】
図１２の上部は、共有デバイス側ライトバッファ６０１全体が、フォギー書き込み動作が終了しているフォギーステートのライトデータ（Ｄ２１〜Ｄ２３、Ｄ３１〜Ｄ３３、Ｄ４１〜Ｄ４３）で満たされており、共有デバイス側ライトバッファ６０１に空き領域がない状態を示している。
【０１１５】
この状態でホスト２から新たなライトデータを受信した場合、フラッシュストレージデバイス３のコントローラ４は、図１２の中部に示すように、フォギー書き込み動作が終了しているライトデータ（フォギーステートのライトデータ）の中から最も古いライトデータ（ここではライトデータＤ１１）を破棄すべきライトデータとして選択し、この最も古いライトデータ（ここではライトデータＤ１１）を共有デバイス側ライトバッファ６０１から破棄する。
【０１１６】
そして、フラッシュストレージデバイス３のコントローラ４は、図１２の下部に示すように、ライトデータＤ１１を破棄することによって空き領域となった領域１０１に、受信された新たなライトデータ（ここではライトデータＤ５１）を格納する。
図１３のフローチャートは、フラッシュストレージデバイス３のコントローラ４によって実行されるデータ書き込み処理の手順を示す。
【０１１７】
ステップＳ１０１では、コントローラ４は、複数の書き込み先ブロック６０２のいずれか一つを指定するブロックアドレスを含むライト要求をホスト２から受信する。コントローラ４がホスト２からライト要求を受信する度、コントローラ４は、複数のホスト側ライトバッファ４０５のいずれかに格納されているライトデータをホスト２から受信し、受信したライトデータを共有デバイス側ライトバッファ６０１に格納する。
【０１１８】
ステップＳ１０２では、コントローラ４は、ある書き込み先ブロックを指定する一つ以上のライト要求に関連付けられた複数ページ分の第１のライトデータを共有デバイス側ライトバッファ６０１から取得する。
ステップＳ１０３、Ｓ１０４では、コントローラ４は、取得した複数ページ分の第１のライトデータをＮＡＮＤ型フラッシュメモリ５に転送し、フォギー書き込み動作によってこの第１のライトデータをこの書き込み先ブロック内の書き込み対象の一つのワード線に接続された複数の第１のメモリセルに書き込む。
【０１１９】
ステップＳ１０５では、この第１のライトデータのファイン書き込み動作を開始すべきタイミングにおいて、コントローラ４は、この第１のライトデータが、共有デバイス側ライトバッファ６０１に存在するか否かを判定する。
この第１のライトデータが共有デバイス側ライトバッファ６０１に存在するならば（ステップＳ１０６のＹＥＳ）、ステップＳ１０７で、コントローラ４は、第１のライトデータを共有デバイス側ライトバッファ６０１から取得する。ステップＳ１０８、Ｓ１０９で、コントローラ４は、取得した複数ページ分の第１のライトデータをＮＡＮＤ型フラッシュメモリ５に転送し、ファイン書き込み動作によってこの第１のライトデータをこの書き込み先ブロック内の上述の複数の第１のメモリセルに書き込む。そして、ステップＳ１１０で、コントローラ４は、第１のライトデータを共有デバイス側ライトバッファ６０１から破棄する。
【０１２０】
この第１のライトデータが共有デバイス側ライトバッファ６０１に存在しないならば（ステップＳ１０６のＮＯ）、ステップＳ１１１で、コントローラ４は、転送要求をホスト２に送信し、ホスト側ライトバッファ４０５からフラッシュストレージデバイス３に転送されるこの第１のライトデータを共有デバイス側ライトバッファ６０１に格納する。そして、コントローラ４は、ステップＳ１０７〜Ｓ１１０の処理を実行する。
【０１２１】
図１４は、ホスト２が書き込み先ブロックを指定し且つフラッシュストレージデバイス３が書き込み先ページを決定するデータ書き込み動作と、ホスト２がブロックアドレスとページアドレスとを指定するデータ読み出し動作とを説明するための図である。
ホスト２のＩ／Ｏサービス４０４は、ブロック割り当て要求およびライト要求をフラッシュストレージデバイス３に送出する。
【０１２２】
フラッシュストレージデバイス３のコントローラ４は、ブロック割り当て部７０１、およびページ割り当て部７０２を含む。ブロック割り当て部７０１、およびページ割り当て部７０２は、図６で説明したライト制御部２１に含まれていてもよい。
データ書き込み動作は以下の手順で実行される。
【０１２３】
（１）ホスト２のＩ／Ｏサービス４０４がフラッシュストレージデバイス３にデータ（ライトデータ）を書き込むことが必要な時、Ｉ／Ｏサービス４０４は、書き込み先ブロックとして使用可能なフリーブロックを割り当てるようにフラッシュストレージデバイス３に要求してもよい。ブロック割り当て部７０１がこの要求（ブロック割り当て要求）を受信した時、ブロック割り当て部７０１は、フリーブロック群の一つのフリーブロックを書き込み先ブロックとしてホスト２に割り当て、割り当てられた書き込み先ブロックのブロックアドレス（ＢＬＫ＃）をホスト２に通知する。
【０１２４】
（２）ホスト２のＩ／Ｏサービス４０４は、割り当てられた書き込み先ブロックを指定するブロックアドレスと、ライトデータを識別するタグと、このライトデータのデータ長とを含むライト要求を、フラッシュストレージデバイス３に送信する。また、Ｉ／Ｏサービス４０４は、ライトデータをフラッシュストレージデバイス３に転送する。
【０１２５】
（３）ページ割り当て部７０２がライト要求を受信した時、ページ割り当て部７０２は、ライト要求によって指定されたブロックアドレスを有するブロック（書き込み先ブロック）内の書き込み先ページを示すページアドレスを決定する。コントローラ４は、ライトデータを共有デバイス側ライトバッファ６０１から取得し、書き込み先ブロック内のこの決定された書き込み先ページにこのライトデータを書き込む。
【０１２６】
（４）コントローラ４は、この書き込み先ページを示すページアドレスを、ライト要求に対するレスポンスとしてホスト２に通知する。あるいは、コントローラ４は、ライト要求に含まれているタグと、ライト要求に含まれているブロックアドレスと、決定されたページアドレスとの組を、ライト要求に対するレスポンスとしてホスト２に通知してもよい。ホスト２においては、ライトデータが書き込まれた物理記憶位置を示す物理アドレス（ブロックアドレス、ページアドレス）が、このライトデータのタグにマッピングされるように、ＬＵＴ４０４Ａが更新される。
【０１２７】
データリード動作は以下の手順で実行される。
（１）’ホスト２がフラッシュストレージデバイス３からデータをリードすることが必要な時、ホスト２は、ＬＵＴ４０４Ａを参照することによって、リードすべきデータのタグに対応する物理アドレス（ブロックアドレス、ページアドレス）をＬＵＴ４０４Ａから取得する。
【０１２８】
（２）’ホスト２は、取得されたブロックアドレスおよびページアドレスを指定するリード要求をフラッシュストレージデバイス３に送出する。フラッシュストレージデバイス３のコントローラ４がこのリード要求をホスト２から受信した時、コントローラ４は、ブロックアドレスおよびページアドレスに基づいて、データを、リード対象のブロック内のリード対象の物理記憶位置からリードする。
【０１２９】
図１５は、フラッシュストレージデバイス３に適用されるブロックアロケートコマンドを示す。
ブロックアロケートコマンドは、フラッシュストレージデバイス３に書き込み先ブロック（フリーブロック）の割り当てを要求するコマンド（ブロック割り当て要求）である。ホスト２は、ブロックアロケートコマンドをフラッシュストレージデバイス３に送信することによって、書き込み先ブロックを割り当てるようにフラッシュストレージデバイス３に要求し、これによってブロックアドレス（割り当てられた書き込み先ブロックのブロックアドレス）を取得することができる。
【０１３０】
図１６は、ブロックアロケートコマンドに対するレスポンスを示す。
ブロックアロケートコマンドをホスト２から受信した時、フラッシュストレージデバイス３は、フリーブロックリストから、ホスト２に割り当てるべきフリーブロックを選択し、選択したフリーブロックを書き込み先ブロックとして割り当て、そしてこの書き込み先ブロックのブロックアドレスを含むレスポンスをホスト２に返す。
【０１３１】
図１７は、フラッシュストレージデバイス３に適用されるライトコマンドを示す。
ライトコマンドは、フラッシュストレージデバイス３にデータの書き込みを要求するコマンドである。このライトコマンドは、コマンドＩＤ、ブロックアドレス、タグ、長さ、等を含んでもよい。
【０１３２】
コマンドＩＤはこのコマンドがライトコマンドであることを示すＩＤ（コマンドコード）であり、ライトコマンドにはライトコマンド用のコマンドＩＤが含まれる。
ブロックアドレスは、データが書き込まれるべき書き込み先ブロックを指定する物理アドレスである。
【０１３３】
タグは、書き込まれるべきライトデータを識別するための識別子である。このタグは、上述したように、ＬＢＡのような論理アドレスであってもよいし、キー・バリュー・ストアのキーであってもよい。タグがＬＢＡのような論理アドレスである場合には、このライトコマンドに含まれる論理アドレス（開始ＬＢＡ）は、ライトデータが書き込まれるべき、論理アドレス空間内の論理位置（最初の論理位置）を示す。
【０１３４】
長さは、書き込まれるべきライトデータの長さを示す。
ライトコマンドは、さらに、ライトデータが格納されているホスト側ライトバッファ４０５内の位置を示す記憶位置情報を含んでいてもよい。
ホスト２からライトコマンドを受信した時、コントローラ４は、ライトコマンドによって指定されたブロックアドレスを有する書き込み先ブロック内の書き込み先位置（書き込み先ページ）を決定する。この書き込み先ページは、ページ書き込み順序の制約およびバッドページ等を考慮して決定される。そして、コントローラ４は、ホスト２からのデータを、この書き込み先ブロック内のこの書き込み先位置（書き込み先ページ）に書き込む。
【０１３５】
図１８は、図１７のライトコマンドに対するレスポンスを示す。
このレスポンスは、ページアドレス、長さを含む。ページアドレスは、データが書き込まれた、書き込み先ブロック内の物理記憶位置を示す物理アドレスである。この物理アドレスは、ブロック内オフセット（つまりページアドレスとページ内オフセットとの組）によって表されてもよい。長さは、書き込まれたデータの長さを示す。
【０１３６】
あるいは、このレスポンスは、ページアドレス（ブロック内オフセット）および長さだけでなく、タグ、ブロックアドレスをさらに含んでいてもよい。タグは、図１７のライトコマンドに含まれていたタグである。ブロックアドレスは、図１７のライトコマンドに含まれていたブロックアドレスである。
【０１３７】
図１９は、フラッシュストレージデバイス３に適用されるリードコマンドを示す。
リードコマンドは、フラッシュストレージデバイス３にデータの読み出しを要求するコマンドである。このリードコマンドは、コマンドＩＤ、タグ、ブロックアドレス、ページアドレス、長さを含む。
【０１３８】
コマンドＩＤはこのコマンドがリードコマンドであることを示すＩＤ（コマンドコード）であり、リードコマンドにはリードコマンド用のコマンドＩＤが含まれる。
ブロックアドレスは、リードすべきデータが格納されているブロックを指定する。ページアドレスは、リードすべきデータが格納されているページを指定する。このページアドレスは、リードすべきデータが格納されているブロック内の物理記憶位置を示すブロック内オフセット（つまりページアドレスとページ内オフセットとの組）によって表されてもよい。長さは、リードすべきデータの長さを示す。
【０１３９】
図２０は、１以上のＳＬＣ−ブロックによって実現される共有デバイス側ライトバッファ６０１の例を示す。
これまでの説明では、ＤＲＡＭ６のようなランダムアクセスメモリによって共有デバイス側ライトバッファ６０１が実現される場合が想定されていた。しかし、メモリセル当たりに１ビットのデータが書き込まれるＳＬＣ−ブロックのデータ書き込み速度は、メモリセル当たりに複数ビットのデータが書き込まれるブロックのデータ書き込み速度よりも速いため、共有デバイス側ライトバッファ６０１は、図２０に示すように、メモリセル当たりに１ビットのデータが書き込まれる一つ以上のＳＬＣ−ブロックによって実現されてもよい。この場合、各書き込み先ブロックは、メモリセル当たりに複数ビットのデータが書き込まれるブロック、例えば、メモリセル当たりに４ビットのデータが書き込まれるＱＬＣ−ブロックによって実現されてもよい。
【０１４０】
以上説明したように、本実施形態によれば、ホスト２からライト要求が受信される度に、複数の書き込み先ブロック６０２にそれぞれ対応する複数のホスト側ライトバッファ４０５のいずれかに格納されているライトデータが、複数の書き込み先ブロック６０２間で共有される共有デバイス側ライトバッファ６０１に格納される。そして、複数の書き込み先ブロック６０２内の第１の書き込み先ブロックに書き込むべき複数ページ分の第１のライトデータが共有デバイス側ライトバッファ６０１から取得され、フォギー書き込み動作のような第１段階の書き込み動作によって第１のライトデータが第１の書き込み先ブロックに書き込まれる。共有デバイス側ライトバッファ６０１に空き領域がない状態でホスト２からライトデータが受信された場合には、第１段階の書き込み動作が終了している共有デバイス側ライトバッファ６０１内のライトデータが破棄され、空き領域が共有デバイス側ライトバッファ６０１に確保される。第１のライトデータのファイン書き込み動作のような第２段階の書き込み動作を実行すべき時点において第１のライトデータが共有デバイス側ライトバッファ６０１に存在しない場合には、第１のライトデータを取得するための要求がホスト２に送信することによってホスト２から第１のライトデータが取得される。
【０１４１】
したがって、第１のライトデータが共有デバイス側ライトバッファ６０１に存在しない場合にのみ、同じライトデータをホスト２からフラッシュストレージデバイス３に再度転送すればよいので、書き込み先ブックの増加つまりフラッシュストレージデバイス３を共有するクライアントの数の増加に柔軟に対応でき、且つホスト２とフラッシュストレージデバイス３との間のデータトラフィックを削減することができる。
【０１４２】
なお、本実施形態では、共有デバイス側ライトバッファ６０１を使用してフォギー・ファイン書き込み動作のような複数段階の書き込み動作を実行する場合を説明したが、本実施形態の構成および書き込み処理の手順は、複数段階の書き込み動作のみならず、複数ページ分のデータをＮＡＮＤ型フラッシュメモリ５に１回だけ転送するフルシーケンス書き込み動作にも適用することができる。
【０１４３】
また、本実施形態では、フラッシュストレージデバイス３に適用されるライトコマンドとして、書き込み先ブロックを指定するブロックアドレスを含むライト要求（ライトコマンド）を説明したが、ブロックアドレスとページアドレスの双方を含むライト要求（ライトコマンド）が使用されてもよい。
【０１４４】
また、本実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０１４５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１４６】
２…ホスト、３…フラッシュストレージデバイス３…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、２１…ライト制御部、４０５…ホスト側ライトバッファ、６０１…共有デバイス側ライトバッファ。
【図１】
2019185596.tif 000003
【図２】
2019185596.tif 000004
【図３】
2019185596.tif 000005
【図４】
2019185596.tif 000006
【図５】
2019185596.tif 000007
【図６】
2019185596.tif 000008
【図７】
2019185596.tif 000009
【図８】
2019185596.tif 000010
【図９】
2019185596.tif 000011
【図１０】
2019185596.tif 000012
【図１１】
2019185596.tif 000013
【図１２】
2019185596.tif 000014
【図１３】
2019185596.tif 000015
【図１４】
2019185596.tif 000016
【図１５】
2019185596.tif 000017
【図１６】
2019185596.tif 000018
【図１７】
2019185596.tif 000019
【図１８】
2019185596.tif 000020
【図１９】
2019185596.tif 000021
【図２０】
2019185596.tif 000022