(57)【要約】      （修正有）【課題】アクセス競合によるＩ／Ｏ性能の低下を低減することができるメモリシステムを提供する。【解決手段】メモリシステム３は、複数の不揮発性メモリダイを含む不揮発性メモリと、コントローラとを具備する。コントローラは、複数の物理セットの各々を共有する複数の記憶領域であって、各々が複数の物理セットに跨る複数の記憶領域を作成する。コントローラは、複数の物理セット内の物理セットをライト動作およびリード動作が許可された第１モードに設定し、且つ、複数の物理セット内の他の物理セットそれぞれをリード動作が許可され且つライト動作が禁止された第２モードに設定する。全ての物理セットが交代で第１モードに設定されるように、第１モードに設定されている物理セットを第２モードに変更し且つ第２モードに設定されている他の物理セットのいずれか一つを第１モードに変更する。【選択図】図１６
2019008729.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なメモリシステムであって、
複数の不揮発性メモリダイを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラとを具備し、
前記コントローラは、
前記複数の不揮発性メモリダイの各々が一つの物理セットにのみ属するように前記複数の不揮発性メモリダイを複数の物理セットに分類し、
前記複数の物理セットの各々を共有する複数の記憶領域であって、各々が前記複数の物理セットに跨る複数の記憶領域を作成し、
前記複数の物理セット内の物理セットをライト動作およびリード動作が許可された第１モードに設定し、且つ前記複数の物理セット内の他の物理セットそれぞれをリード動作が許可され且つライト動作が禁止された第２モードに設定し、
前記複数の記憶領域のいずれか一つの記憶領域を指定するパラメータを含む前記ホストからのライト要求に応じて、前記第１モードに設定されている前記物理セット内のフリーブロック群から割り当てられた書き込み先ブロックに前記ホストからのデータを書き込み、
前記複数の記憶領域のいずれか一つの記憶領域を指定するパラメータを含む前記ホストからのリード要求に応じて、リードすべきデータを前記複数の記憶領域のいずれか一つから読み出し、
全ての物理セットが交代で前記第１モードに設定されるように、前記第１モードに設定されている前記物理セットを前記第２モードに変更し且つ前記第２モードに設定されている前記他の物理セットのいずれか一つを前記第１モードに変更する、メモリシステム。
【請求項２】
前記コントローラは、
次に前記第１モードに設定されるべき第１の物理セットに格納されている有効データを第１のリードキャッシュに格納し、
前記第１の物理セットが前記第１モードである間、前記ホストからのリード要求によって指定される前記第１の物理セット内のデータを前記第１のリードキャッシュから読み出す請求項１記載のメモリシステム。
【請求項３】
前記コントローラは、
前記第１の物理セットが前記第１モードである期間中に、前記第１の物理セットの次に前記第１モードに設定されるべき第２の物理セットに格納されている有効データを第２のリードキャッシュに格納し、
前記第２の物理セットが前記第１モードである間、前記ホストからのリード要求によって指定される前記第２の物理セット内のデータを前記第２のリードキャッシュから読み出す請求項２記載のメモリシステム。
【請求項４】
前記第１のリードキャッシュは、前記メモリシステム内のランダムアクセスメモリによって実現される請求項２記載のメモリシステム。
【請求項５】
前記第１のリードキャッシュおよび前記第２のリードキャッシュは、前記メモリシステム内のランダムアクセスメモリによって実現される請求項３記載のメモリシステム。
【請求項６】
前記コントローラは、
次に前記第１モードに設定されるべき第１の物理セットに格納されている全ての有効データを前記第１モードに設定されている物理セットにコピーし、
前記全ての有効データのコピーの進行中に、前記第１の物理セット内の第１のデータのリードが前記ホストからのリード要求によって要求された場合、前記第１のデータを前記第１の物理セットから読み出し、
前記全ての有効データのコピーの完了の後、前記第１の物理セットに対する消去動作を実行し、全ての物理セットが交代で前記第１モードに設定されるように、前記第１モードに設定されている前記物理セットを前記第２モードに変更し且つ前記消去動作が実行された前記第１の物理セットを前記第１モードに変更する請求項１記載のメモリシステム。
【請求項７】
前記コントローラは、
前記第１モードに設定されている物理セット内のフリーブロック群から前記複数の記憶領域に対応する複数のコピー先ブロックを割り当て、
前記第１モードに設定されている物理セットに属し、且つ前記複数の記憶領域に対応する複数のデータが格納されているブロックを特定し、
前記特定されたブロック内に格納されている前記複数の記憶領域に対応する複数の有効データ部を前記複数のコピー先ブロックにそれぞれコピーするガベージコレクションを実行する請求項１記載のメモリシステム。
【請求項８】
前記コントローラは、
前記第１モードに設定されている物理セット内のフリーブロック群から前記複数の記憶領域に対応する複数のコピー先ブロックを割り当て、
前記複数の記憶領域にそれぞれ対応する複数の有効データ部を、前記第１モードに設定されている物理セットよりも多い書き換え回数を有し且つ前記第２モードに設定されている他の物理セットから前記複数のコピー先ブロックにコピーするガベージコレクションを実行する請求項１記載のメモリシステム。
【請求項９】
複数の不揮発性メモリダイを含む不揮発性メモリを制御する制御方法であって、
前記複数の不揮発性メモリダイの各々が一つの物理セットにのみ属するように前記複数の不揮発性メモリダイを複数の物理セットに分類することと、
前記複数の物理セットの各々を共有する複数の記憶領域であって、各々が前記複数の物理セットに跨る複数の記憶領域を作成することと、
前記複数の物理セット内の物理セットをライト動作およびリード動作が許可された第１モードに設定し、且つ前記複数の物理セット内の他の物理セットそれぞれをリード動作が許可され且つライト動作が禁止された第２モードに設定することと、
前記複数の記憶領域のいずれか一つの記憶領域を指定するパラメータを含むホストからのライト要求に応じて、前記第１モードに設定されている前記物理セット内のフリーブロック群から割り当てられた書き込み先ブロックに前記ホストからのデータを書き込むことと、
前記複数の記憶領域のいずれか一つの記憶領域を指定するパラメータを含む前記ホストからのリード要求に応じて、リードすべきデータを前記複数の記憶領域のいずれか一つから読み出すことと、
全ての物理セットが交代で前記第１モードに設定されるように、前記第１モードに設定されている前記物理セットを前記第２モードに変更し且つ前記第２モードに設定されている前記他の物理セットのいずれか一つを前記第１モードに変更することとを具備する制御方法。
【請求項１０】
次に前記第１モードに設定されるべき第１の物理セットに格納されている有効データを第１のリードキャッシュに格納することと、
前記第１の物理セットが前記第１モードである間、前記ホストからのリード要求によって指定される前記第１の物理セット内のデータを前記第１のリードキャッシュから読み出すこととをさらに具備する請求項９記載の制御方法。
【請求項１１】
次に前記第１モードに設定されるべき第１の物理セットに格納されている全ての有効データを前記第１モードに現在設定されている物理セットにコピーすることと、
前記全ての有効データのコピーの進行中に、前記第１の物理セット内の第１のデータのリードが前記ホストからのリード要求によって要求された場合、前記第１のデータを前記第１の物理セットから読み出すことと、
前記全ての有効データのコピーの完了の後、前記第１の物理セットに対する消去動作を実行し、全ての物理セットが交代で前記第１モードに設定されるように、前記第１モードに設定されている前記物理セットを前記第２モードに変更し且つ前記消去動作が実行された前記第１の物理セットを前記第１モードに変更することとをさらに具備する請求項９記載の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【０００３】
このようなメモリシステムの一つとして、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）が知られている。
【０００４】
最近では、データセンターのサーバにおいても、ストレージとしてＳＳＤが使用されている。データセンターのサーバにおいては、複数のエンドユーザからのアクセス要求（リード要求、ライト要求、等）がＳＳＤに同時的に発行される場合がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願公開第２０１６／０１２４８４２号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
この場合、もし書き込み動作が実行されている不揮発性メモリダイへのリード要求が起きると（アクセス競合）、そのリード要求の応答時間（リードレイテンシ）が非常に長くなり、これによってＩ／Ｏ性能が低下される場合がある。
【０００７】
本発明が解決しようとする課題は、アクセス競合によるＩ／Ｏ性能の低下を低減することができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【０００８】
実施形態によれば、ホストに接続可能なメモリシステムは、複数のチャンネルに接続された複数の不揮発性メモリダイを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続されたコントローラとを具備する。前記コントローラは、前記複数の不揮発性メモリダイの各々が一つの物理セットにのみ属するように前記複数の不揮発性メモリダイを複数の物理セットに分類する。前記コントローラは、前記複数の物理セットの各々を共有する複数の記憶領域であって、各々が前記複数の物理セットに跨る複数の記憶領域を作成する。前記コントローラは、前記複数の物理セット内の物理セットをライト動作およびリード動作が許可された第１モードに設定し、且つ前記複数の物理セット内の他の物理セットそれぞれをリード動作が許可され且つライト動作が禁止された第２モードに設定する。前記コントローラは、前記複数の領域のいずれか一つの領域を指定するパラメータを含む前記ホストからのライト要求に応じて、前記第１モードに設定されている前記物理セット内のフリーブロック群から割り当てられた書き込み先ブロックに前記ホストからのデータを書き込む。前記コントローラは、前記複数の領域のいずれか一つの領域を指定するパラメータを含む前記ホストからのリード要求に応じて、リードすべきデータを前記複数の領域のいずれか一つから読み出す。前記コントローラは、全ての物理セットが交代で前記第１モードに設定されるように、前記第１モードに設定されている前記物理セットを前記第２モードに変更し且つ前記第２モードに設定されている前記他の物理セットのいずれか一つを前記第１モードに変更する。
【図面の簡単な説明】
【０００９】
【図１】実施形態のメモリシステムの構成例を示すブロック図。
【図２】同実施形態のメモリシステム内のＮＡＮＤインタフェースと複数のＮＡＮＤ型フラッシュメモリダイとの関係を示すブロック図。
【図３】従来型ＳＳＤを使用した仮想化環境と、同実施形態に係るメモリシステム（仮想ＳＳＤプラットホームを含むＳＳＤ）を使用した仮想化環境とを説明するためのブロック図。
【図４】同実施形態に係るメモリシステム内の記憶領域（仮想ＳＳＤ（ＶＳＳＤ））の数とホスト（サーバ）側の仮想マシンの数との関係の例を示す図。
【図５】同実施形態に係るメモリシステム内の各記憶領域（ＶＳＳＤ）を説明するためのブロック図。
【図６】同実施形態のメモリシステムの記憶領域（ＶＳＳＤ）管理を説明するための図。
【図７】同実施形態のメモリシステムに適用される記憶領域（ＶＳＳＤ）管理コマンドを説明するための図。
【図８】各記憶領域（ＶＳＳＤ）に含まれるユーザ領域とオーバープロビジョニング領域とを説明するための図。
【図９】複数のＶＳＳＤによって実現されるＩｓｓＳ／ＰａａＳ環境を説明するための図。
【図１０】複数のＶＳＳＤによって実現されるデータベースキャッシュ環境を説明するための図。
【図１１】ＱｏＳ要件の遷移を説明するための図。
【図１２】ＩｓｓＳ／ＰａａＳ環境に複数のＶＳＳＤを適用することによって実現される効果を説明するための図。
【図１３】データベースキャッシュ環境に複数のＶＳＳＤを適用することによって実現される効果を説明するための図。
【図１４】複数の物理セットと複数のＶＳＳＤとの関係を説明するための図。
【図１５】図１４の複数のＶＳＳＤに含まれるユーザ領域とオーバープロビジョニング領域との関係を示す図。
【図１６】複数の物理セットを交代でライト許可モードに設定された物理セットになるようにライト許可モードに設定されるべき物理セットを複数の物理セット間で変更する動作を示す図。
【図１７】複数のＮＡＮＤダイをチャンネル境界で分割することによって得られる複数の物理セットの構成例を示す図。
【図１８】同じチャンネルを共有する幾つかの物理セットの構成例を示す図。
【図１９】全てのチャンネルを横断する複数の物理セットであって、全てのチャンネルから物理セット毎に一つずつＮＡＮＤダイを選択することによって得られる複数の物理セットの構成例を示す図。
【図２０】各々が幾つかのチャンネルのみを横断する幾つかの物理セットの構成例を示す図。
【図２１】同実施形態のメモリシステムにおけるホスト書き込み動作とガベージコレクション（ＧＣ）動作を示す図。
【図２２】ストリーム書き込みを利用することによって、更新頻度の異なる複数種のデータを異なるブロックに書き込む動作を示す図。
【図２３】同実施形態のメモリシステムによって実行されるリード／ライト処理の手順を示すフローチャート。
【図２４】同実施形態のメモリシステムによって実行されるリード／ライト処理の別の手順を示すフローチャート。
【図２５】同実施形態のメモリシステムによって実行されるガベージコレクション（ＧＣ）動作の手順を示すフローチャート。
【図２６】同実施形態のメモリシステムによって実行される物理セット間ウェアレベリングの手順を示すフローチャート。
【図２７】次にライト許可モードに設定されるべき物理セットに格納されている全ての有効データをライト許可モードに現在設定されている物理セットにコピーする動作を説明するための図。
【図２８】同実施形態のメモリシステムによって実行されるリード／ライト／ガベージコレクション（ＧＣ）動作の手順を示すフローチャート。
【図２９】データコピー前のＧＣソース物理セット／ＧＣデスティネーション物理セットの内容とデータコピー後のＧＣソース物理セット／ＧＣデスティネーション物理セットの内容を示す図。
【図３０】リードキャッシュを利用する構成における、データコピー前のＧＣソース物理セット／ＧＣデスティネーション物理セットの内容とデータコピー後のＧＣソース物理セット／ＧＣデスティネーション物理セットの内容を示す図。
【図３１】各物理セット内の個々のブロックの状態遷移を説明するための図。
【図３２】複数のＳＳＤを搭載したコンピュータの構成例を示す図。
【発明を実施するための形態】
【００１０】
以下、図面を参照して、実施形態を説明する。  
【００１１】
まず、図１を参照して、一実施形態に係るメモリシステムを含む情報処理システム１の構成を説明する。
【００１２】
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）３として実現されている。
【００１３】
情報処理システム１は、ホスト（ホストデバイス）２と、ＳＳＤ３とを含む。ホスト２は、サーバ、パーソナルコンピュータのような情報処理装置である。ホスト２として機能するサーバの典型例としては、データセンター内のサーバが挙げられる。
【００１４】
ホスト２がデータセンター内のサーバによって実現されるケースにおいては、このホスト（サーバ）２は、ネットワーク５０を介して複数のエンドユーザ端末（クライアント）９０に接続されてもよい。ホスト２は、これらエンドユーザ端末９０に対して様々なサービスを提供することができる。
【００１５】
ホスト（サーバ）２によって提供可能なサービスの例には、（１）システム開発プラットフォームを各クライアント（各エンドユーザ端末９０）に提供するプラットホーム・アズ・ア・サービス（ＰａａＳ）、（２）仮想サーバのようなインフラストラクチャを各クライアント（各エンドユーザ端末９０）に提供するインフラストラクチャ・アズ・ア・サービス（ＩａａＳ）、等がある。
【００１６】
複数の仮想マシン＃１、＃２、＃３、…＃ｎが、このホスト（サーバ）２として機能する物理サーバ上で実行されてもよい。これら仮想マシン＃１、＃２、＃３、…＃ｎは、対応するクライアント（エンドユーザ端末９０）に各種サービスを提供するように構成された仮想サーバとして機能することができる。
【００１７】
なお、コンテナ型仮想化環境がホスト（サーバ）２に適用されてもよい。この場合には、ホスト（サーバ）２のオペレーティングシステム上に複数のコンテナ（複数のユーザ空間）それぞれが配置される。これらコンテナの各々は、アプリケーションを実行するための独立したリソースを含み、仮想マシン（仮想サーバ）と同等の機能を実行することができる。
【００１８】
ＳＳＤ３は、ホスト２として機能する情報処理装置（計算機）のメインストレージとして使用され得る。ＳＳＤ３は、情報処理装置に内蔵されてもよいし、情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【００１９】
ホスト２とＳＳＤ３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）、Ｅｔｈｅｒｎｅｔ（登録商標），Ｆｉｂｒｅ  ｃｈａｎｎｅｌ、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）等を使用し得る。
【００２０】
ＳＳＤ３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。ＳＳＤ３は、ランダムアクセスメモリ、例えば、ＤＲＡＭ６も備えていてもよい。
【００２１】
ＮＡＮＤ型フラッシュメモリ５は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。ＮＡＮＤ型フラッシュメモリ５は、２次元構造のＮＡＮＤ型フラッシュメモリであってもよいし、３次元構造のＮＡＮＤ型フラッシュメモリであってもよい。
【００２２】
ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、複数のブロックＢＬＫ０〜ＢＬＫｍ−１を含む。ブロックＢＬＫ０〜ＢＬＫｍ−１の各々は多数のページ（ここではページＰ０〜Ｐｎ−１）によって編成される。ブロックＢＬＫ０〜ＢＬＫｍ−１は、消去単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページＰ０〜Ｐｎ−１の各々は、同一ワード線に接続された複数のメモリセルを含む。ページＰ０〜Ｐｎ−１は、データ書き込み動作およびデータ読み込み動作の単位である。
【００２３】
コントローラ４は、Ｔｏｇｇｌｅ、オープンＮＡＮＤフラッシュインタフェース（ＯＮＦＩ）のようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラ（制御回路）である。このコントローラ４は、例えば、ワンチップＬＳＩによって実現されていてもよい。
【００２４】
ＮＡＮＤ型フラッシュメモリ５は、図２に示すように、複数のＮＡＮＤ型フラッシュメモリダイ（図２においては「ＮＡＮＤダイ」として示されている）を含む。各ＮＡＮＤ型フラッシュメモリダイは、複数のブロックを含むメモリセルアレイとこのメモリセルアレイを制御する周辺回路とを含む不揮発性メモリダイである。個々のＮＡＮＤ型フラッシュメモリダイは独立して動作可能である。このため、ＮＡＮＤ型フラッシュメモリダイは、並列動作単位として機能する。ＮＡＮＤ型フラッシュメモリダイは、「ＮＡＮＤ型フラッシュメモリチップ」または「不揮発性メモリチップ」とも称される。
【００２５】
図２においては、ＮＡＮＤインタフェース１３に８つのチャンネルＣｈ１、Ｃｈ２、…Ｃｈ８が接続されており、これらチャンネルＣｈ１、Ｃｈ２、…Ｃｈ８の各々に、同数（例えばチャンネル当たり４個のダイ）のＮＡＮＤ型フラッシュメモリダイそれぞれが接続されている場合が例示されている。各チャンネルは、対応するＮＡＮＤ型フラッシュメモリダイと通信するための通信線（メモリバス）を含む。
【００２６】
コントローラ４は、チャンネルＣｈ１、Ｃｈ２、…Ｃｈ８を介してＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２を制御する。コントローラ４は、チャンネルＣｈ１、Ｃｈ２、…Ｃｈ８を同時に駆動することができる。
【００２７】
本実施形態では、コントローラ４は、ＮＡＮＤ型フラッシュメモリダイの各々が一つの物理セットにのみ属するように、３２個のＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２を、複数の物理セット（ＮＶＭセット）に分類する。これら物理セットは、ある一つの物理セットが一つの専用チャンネルを含むようにチャンネル境界で分離されてもよい。この場合、ある一つの物理セットは、専用チャンネル上の専用の４個のダイを含む。あるいは、これら物理セットの各々は、チャンネルＣｈ１、Ｃｈ２、…Ｃｈ８に跨がっていてもよい。この場合、各物理セットは、異なる８つのチャンネルにそれぞれ接続された専用の幾つかのダイ（例えば８個のダイ）を含んでもよい。
【００２８】
このように、本実施形態では、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２の各々が一つの物理セットにのみ属するように不揮発性メモリダイ＃１〜＃３２を複数の物理セットに分類することによって、互いに分離された複数の物理セットが管理される。
【００２９】
上述したように、個々のＮＡＮＤ型フラッシュメモリダイは独立して動作することができるので、各ＮＡＮＤ型フラッシュメモリダイは並列処理の単位として機能し得る。
【００３０】
しかし、通常、一つのＮＡＮＤ型フラッシュメモリダイに対する動作は、並列には実行されず、逐次的に実行される。このため、もし書き込み動作が実行されているＮＡＮＤ型フラッシュメモリダイへのリード要求が起きると（リード・オン・ライト・ダイ・コンテンション）、そのリード要求の応答時間（リードレイテンシ）は非常に長くなる場合がある。
【００３１】
ＳＳＤ３は、複数のエンドユーザ（複数のテナント）によって共有されるストレージとして機能する。したがって、ＳＳＤ３においては、エンドユーザ間のアクセスの競合（あるエンドユーザからのライトアクセスと別のエンドユーザからのリードアクセスとの間の衝突）に起因して長いリードレイテンシが生じる場合がある。より詳しくは、もしあるエンドユーザからのライト要求に応じてあるＮＡＮＤ型フラッシュメモリダイへの書き込み動作が実行されている間に、別のエンドユーザからのリード要求に応じてこのＮＡＮＤ型フラッシュメモリダイからデータのリードが必要とされたならば、このリード要求は、実行中の書き込み動作が完了するまでは実行することができない。これにより、長いリードレイテンシが生じる可能性がある。
【００３２】
安定したリードレイテンシを実現する方法の一つとしては、専用のチャンネルまたは専用の幾つかのダイを使用して、複数のエンドユーザのための複数の記憶領域を作成する方法が考えられる。
【００３３】
この方法は、各記憶領域に専用のチャンネルまたは専用の幾つかのダイを割り当てることによって、これら記憶領域を互いに完全に分離する。よって、複数のエンドユーザは異なるチャンネルまたは異なるダイをそれぞれ使用するので、あるエンドユーザからのライトアクセスと別のエンドユーザからのリードアクセスとの間の衝突を防ぐことができる。
【００３４】
しかし、この方法では、一つのＳＳＤを共用するエンドユーザの最大数、つまりＩ／Ｏ性能を保証可能なエンドユーザの最大数は、一つのＳＳＤ内に含まれるチャンネルの数またはダイの数までに制限されてしまう。近年では、３次元ＮＡＮＤ型フラッシュメモリの開発等によって、一つのダイの容量は増加する傾向にある。ダイ当たりの容量の増加は、あるストレージ容量を有するＳＳＤを実現するためにそのＳＳＤに搭載することが必要なダイの数が減少されることに繋がる。したがって、上述の方法では、ダイ当たりの容量の増加に起因して、一つのＳＳＤを共用可能なエンドユーザの最大数、つまりＩ／Ｏ性能を保証可能なエンドユーザの最大数、の減少を招くという現象が生じうる。
【００３５】
またさらに、記憶領域を互いに完全に分離する上述の方法では、ある特定の幾つかのチャンネルまたはある特定の幾つかのダイにデータ書き込みが集中してしまう場合がある。この場合、この特定の幾つかのブロックのプログラム／イレーズサイクルの数が早く制限値に達しやすくなり、この結果、ＳＳＤの寿命が短くなる可能性がある。
【００３６】
そこで、本実施形態では、ＳＳＤ３は、異なるＮＡＮＤ型フラッシュメモリダイを含む複数の物理セットの各々を共有する複数の記憶領域を作成する。これら記憶領域の各々は、複数の物理セットに跨っている。これら記憶領域は、互いに独立したＳＳＤであるかのように動作する仮想ＳＳＤ（ＶＳＳＤ）として機能し得る。これら記憶領域（ＶＳＳＤ）は、異なるネームスペースの識別子によって識別されてもよい。
【００３７】
複数の物理セットの各々から取得される幾つかのブロックが各記憶領域（ＶＳＳＤ）にその物理リソースとして割り当てられる。複数の記憶領域がそれぞれ専用の物理セットを含むのではなく、複数の記憶領域が複数の物理セットの各々を共有する。したがって、本実施形態では、無数の記憶領域（無数のＶＳＳＤ）を作成することができる。このことは、記憶領域を互いに完全に分離する方法に比較して、より多くのエンドユーザを一つのＳＳＤ３上に共存させることを可能とする。
【００３８】
本実施形態のＳＳＤ３においては、データ書き込みは、複数の物理セットの少なくとも一つ（例えば、一つの物理セットまたは２つの物理セット）のみに許可される。一方、データ読み出しは、他の全ての物理セットに対して許可される。例えば、複数の物理セットのうちの一つの物理セットは、ライト動作およびリード動作が許可された第１モード（以下、ライト許可モードという）に設定され、残りの全ての物理セットはリード動作が許可され且つライト動作が禁止された第２のモード（以下、リードオンリーモードという）に設定される。ライト許可モードの物理セットにおいては、ホスト２からのデータ書き込みが許可される。さらに、ライト許可モードの物理セットにおいては、ガベージコレクションによるデータ書き込み（データコピー）も許可される。
【００３９】
複数の記憶領域（複数のＶＳＳＤ）のいずれか一つの記憶領域（ＶＳＳＤ）を指定するパラメータを含むライト要求がホスト２から受信された時、ライトデータは、ライト許可モードに現在設定されている特定の物理セット内のフリーブロック群から割り当てられた書き込み先ブロックに書き込まれる。書き込み先ブロックとは、ホスト２からのライトデータの書き込みに利用されるブロックを意味する。書き込み先ブロックは、インプットブロックと称されることもある。
【００４０】
本実施形態では、ライト許可モードに設定されるべき物理セットは、複数の物理セット間で順番に変更される。
【００４１】
したがって、ある期間においては、ホスト２からのどのライトデータも、ライト許可モードに現在設定されている特定の物理セット内の書き込み先ブロックに書き込まれ、リードオンリーモードに現在設定されている物理セットに書き込まれることはない。よって、リード・オン・ライト・ダイ・コンテンションが生じる可能性がある物理セットを、ライト許可モードに現在設定されている特定の物理セットのみに制限することができる。残りの全ての物理セットはリードオンリーモードであるので、残りの全ての物理セットにおいては、データ書き込み動作は実行されない。したがって、残りの全ての物理セットにおいては、リード・オン・ライト・ダイ・コンテンションは生じない。
【００４２】
この結果、本実施形態のＳＳＤ３では、リード・オン・ライト・ダイ・コンテンションが生じる確率を、全ての物理セットへのデータ書き込みが常に許可される通常のＳＳＤに比べて低減することができ、これによってＳＳＤ３を共有する複数のエンドユーザ間のアクセス競合（リード・オン・ライト・ダイ・コンテンション）によるＩ／Ｏ性能の低下を低減することができる。
【００４３】
また、本実施形態では、各物理セットは複数のＶＳＳＤによって共有されており、且つライト許可モードに設定されるべき物理セットが複数の物理セット間で順番に変更される。したがって、どの記憶領域（どのＶＳＳＤ）についても、データ書き込みを複数の物理セットに分散させることが可能となり、これによって物理セット間の消耗の差（物理セット間のプログラム／イレーズサイクルの数の差）を小さくすることができる。このことは、ＳＳＤ３の寿命を最大化することを可能にする。
【００４４】
このように、本実施形態のＳＳＤ３は、複数のＶＳＳＤを管理する機能（以下、「仮想ＳＳＤ（ＶＳＳＤ）プラットホーム」と云う）を有している。このＶＳＳＤプラットホームは、仮想マシン＃１、＃２、＃３、…＃ｎのような複数の仮想サーバがＳＳＤ３の複数のＶＳＳＤを利用することを可能にし、さらにまた複数の仮想サーバが直接的に複数のＶＳＳＤをアクセスすることを可能にする。
【００４５】
一つの仮想マシンに対してＳＳＤ３内の１つ以上のＶＳＳＤが、この仮想マシンに専用のストレージリソース（仮想ディスク）として割り当てられてもよい。
【００４６】
ここで、仮想ディスクとは、仮想マシン上で実行されるゲストオペレーティングシステムが物理ディスクとして認識する一種のファイルを意味する。各仮想マシンは、この仮想マシンに割り当てられた仮想ディスクを物理ディスクとして扱うことができる。
【００４７】
ＳＳＤ３は、容量／性能（耐久性）に関する特徴が互いに異なる様々な記憶領域（ＶＳＳＤ）を作成および管理することができる。また、ＳＳＤ３は、ホスト２によって削除（リムーブ）が要求されたＶＳＳＤを削除することもできる。あるＶＳＳＤの削除によって増加されるＮＡＮＤ型フラッシュメモリ５内のフリーエリアは、新たなＶＳＳＤの作成に利用され得る。
【００４８】
ＶＳＳＤは、仮想ディスクと同等の機能を有する。したがって、ＳＳＤ３は、仮想ディスクを作成および管理するためのエミュレーション機能をホスト２からＳＳＤ３にオフロードすることを可能にする。これによって、ホスト２がストレージ管理のために実行することが必要な処理量を低減でき、この結果、ホスト２のＩ／Ｏ性能の向上を図ることができる。
【００４９】
また、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５のデータ管理とＮＡＮＤ型フラッシュメモリ５のブロック管理とを実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）としても機能することができる。
【００５０】
このＦＴＬによって実行されるデータ管理には、（１）論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ページ単位のリード／ライトと物理ブロック単位の消去動作とを隠蔽するための処理、等が含まれる。論理アドレスは、ＳＳＤ３をアドレス指定するためにホスト２によって使用されるアドレスである。この論理アドレスとしては、通常、論理ブロックアドレス（ＬＢＡ）が使用される。
【００５１】
論理ブロックアドレス（ＬＢＡ）それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル（論理物理アドレス変換テーブル）として機能するルックアップテーブル（ＬＵＴ）を用いて実行される。
【００５２】
本実施形態では、コントローラ４は、複数のＶＳＳＤ（ＶＳＳＤ＃１、ＶＳＳＤ＃２、…ＶＳＳＤ＃ｎ）にそれぞれ対応する複数のルックアップテーブルＬＵＴ＃１、ＬＵＴ＃２、…ＬＵＴ＃ｎを使用して、ＶＳＳＤ毎に、ＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを管理する。
【００５３】
あるＬＢＡに対応する物理アドレスは、このＬＢＡのデータがライトされたＮＡＮＤ型フラッシュメモリ５内の物理記憶位置を示す。ルックアップテーブルＬＵＴ＃１、ＬＵＴ＃２、…ＬＵＴ＃ｎは、ＳＳＤ３の電源オン時にＮＡＮＤ型フラッシュメモリ５からＤＲＡＭ６にロードされてもよい。一般に、各ルックアップテーブルのサイズは、比較的大きい。したがって、各ルックアップテーブルの少なくとも一部がＤＲＡＭ６にアドレス変換テーブルキャッシュとして格納されてもよい。
【００５４】
ＮＡＮＤ型フラッシュメモリ５においては、ページへのデータ書き込みは、１消去サイクル当たり１回のみ可能である。このため、コントローラ４は、あるＬＢＡに対応する更新データを、このＬＢＡに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ４は、対応するルックアップテーブル（ＬＵＴ）を更新してこのＬＢＡをこの別の物理記憶位置に関連付け、そして以前のデータを無効化する。
【００５５】
ブロック管理には、バッドブロックの管理と、ウェアレベリングと、ガベージコレクション等が含まれる。
【００５６】
ウェアレベリングは、ＳＳＤ３内のブロックそれぞれの消耗を均一化するための動作である。
【００５７】
ガベージコレクション（ＧＣ）は、データを書き込むことが可能なフリーブロックの個数を増やすため、有効データと無効データとが混在する幾つかのＧＣ対象ブロック（ＧＣソースブロックとも云う）内の有効データを別のブロック（例えばフリーブロック）にコピーする。ここで、有効データとは、ＬＵＴから参照されているデータ（すなわち論理アドレスから最新のデータとして紐付けられているデータ）であって、後にホスト２からリードされる可能性があるデータを意味する。無効データとは、もはやホスト２からリードされる可能性が無いデータを意味する。例えば、ある論理アドレスに関連付けられているデータは有効データであり、どの論理アドレスにも関連付けられていないデータは無効データである。そして、コントローラ４は、コピーされた有効データのＬＢＡそれぞれを、その有効データのコピー先物理アドレスにマッピングする。有効データが別のブロック（コピー先ブロック）にコピーされることによって無効データのみになったブロックは、フリーブロックとして解放される。これによって、このブロックはその消去動作が実行された後に再利用することが可能となる。
【００５８】
本実施形態では、コントローラ４は、まず、同じＶＳＳＤに関連付けられた有効データをガベージコレクション（ＧＣ）によって同じ幾つかのブロックに集める。そして、その後は、コントローラ４は、ＶＳＳＤ毎に独立してガベージコレクション（ＧＣ）を実行する。これにより、異なるエンドユーザのデータを異なるブロックに存在させることが可能となるので、たとえあるＶＳＳＤのガベージコレクションが実行中であっても、このガベージコレクションが、他のＶＳＳＤに対する通常のアクセスに悪影響を及ぼす可能性を大幅に低減することができる。この結果、いわゆるノイジーネイバー問題を解決することができる。
【００５９】
次に、コントローラ４の構成について説明する。
【００６０】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４等を含む。これらＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続される。
【００６１】
このホストインタフェース１１は、ホスト２との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース１１は、例えば、ＰＣＩｅコントローラ（ＮＶＭｅコントローラ）であってよい。ホストインタフェース１１は、ホスト２から様々な要求（コマンド）を受信する。これら要求（コマンド）には、ライト要求（ライトコマンド）、リード要求（リードコマンド）、ＶＳＳＤ管理のための要求（ＶＳＳＤ管理コマンド）等が含まれる。
【００６２】
ライトコマンドは、ＳＳＤ３に対し、このライトコマンドによって指定されたデータをライトするように要求する。ライトコマンドは、開始ＬＢＡと、転送長と、データが書き込まれるべきＶＳＳＤを指定するためのＶＳＳＤ指定パラメータとを含んでいてもよい。上述の複数のＶＳＳＤは、複数のネームスペースによって実現され得る。複数のＶＳＳＤが複数のネームスペースによって実現されている場合には、ネームスペースの識別子（ＮＳＩＤ）を、ＶＳＳＤ指定パラメータとして利用することができる。ライトコマンド内のＮＳＩＤは、データが書き込まれるべきネームスペース（ここでは、データが書き込まれるべきＶＳＳＤ）を一意に識別するための識別子である。
【００６３】
リードコマンドは、ＳＳＤ３に対し、このリードコマンドによって指定されたデータをリードするように要求する。リードコマンドは、開始ＬＢＡと、転送長と、データがリードされるべきＶＳＳＤを指定するためのＶＳＳＤ指定パラメータとを含んでいてもよい。上述の複数のＶＳＳＤが複数のネームスペースによって実現されている場合には、ネームスペースの識別子（ＮＳＩＤ）を、ＶＳＳＤ指定パラメータとして利用することができる。リードコマンド内のＮＳＩＤは、データがリードされるべきネームスペース（ここでは、データがリードされるべきＶＳＳＤ）を一意に識別するための識別子である。
【００６４】
ＶＳＳＤ管理コマンドは、ＳＳＤ３に対し、ＶＳＳＤの作成または削除を要求するコマンドである。ＶＳＳＤ管理コマンドは、個々のエンドユーザのストレージ要件に適合したＶＳＳＤを作成するための様々なパラメータを含んでいてもよい。データセンタープロバイダは、個々のエンドユーザの容量／性能のニーズに応じて、これらエンドユーザに提供するストレージ（ＶＳＳＤ）の容量、性能を自由に設定することができる。
【００６５】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、ＳＳＤ３の電源オンに応答してＮＡＮＤ型フラッシュメモリ５または図示しないＲＯＭから制御プログラム（ファームウェア）をＤＲＡＭ６にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ４内の図示しないＳＲＡＭ上にロードされてもよい。このＣＰＵ１２は、例えば、上述のＦＴＬの処理に加え、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行することができる。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行される上述のファームウェアによって制御される。なお、ＦＴＬ処理およびコマンド処理の一部または全部は、コントローラ４内の専用ハードウェアによって実行してもよい。
【００６６】
ＣＰＵ１２は、ＶＳＳＤ作成部２１、書き込み可能物理セット変更部２２、ガベージコレクション（ＧＣ）制御部２３、リードキャッシュ制御部２４、データコピー制御部２５として機能することができる。
【００６７】
ＶＳＳＤ作成部２１は、複数のＶＳＳＤを管理するためのマルチＶＳＳＤ管理機能を有する。各ＶＳＳＤは、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５内の一種の論理的な領域（記憶領域）に相当する。各ＶＳＳＤは、すべての物理セットに跨るように作成される。各ＶＳＳＤは、すべての物理セットの各々からこのＶＳＳＤ用に割り当てられた一つ以上のブロックを含む。
【００６８】
ＶＳＳＤ作成部２１は、複数のＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２の各々が一つの物理セットにのみ属するようにＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２を複数の物理セットに分類し、そして、ホスト２からのＶＳＳＤそれぞれの作成要求に基づいて、複数の物理セットの各々を共有する複数の記憶領域（ＶＳＳＤ）であって、各々が複数の物理セットに跨る複数の記憶領域（ＶＳＳＤ）を作成する。
【００６９】
ホスト２は、上述のＶＳＳＤ管理コマンドを使用してＶＳＳＤそれぞれの作成をＳＳＤ３に要求することができる。ＶＳＳＤ作成部２１は、ホスト２によって指定された容量／性能（耐久性）等に関する要件を満たすＶＳＳＤそれぞれを作成することができる。
【００７０】
ホスト２は、幾つかのＶＳＳＤ管理コマンドをＳＳＤ３に発行することにより、容量／性能（耐久性）等に関するパラメータをＶＳＳＤ毎に指定することができる。
【００７１】
ＶＳＳＤの性能（耐久性）に関するパラメータは、例えば、ＶＳＳＤのオーバープロビジョニング領域の容量を指定するパラメータであってもよい。ここで、オーバープロビジョン領域について説明する。
【００７２】
オーバープロビジョニングは、ホスト２に利用可能なユーザスペース（「ユーザアクセス可能ＬＢＡスペース」、または「ｖｉｓｉｂｌｅ  ｒｅｇｉｏｎ」とも云う）として見えないＳＳＤ３内のストレージ容量を割り当てることを意味する。ＶＳＳＤは、ユーザ領域とオーバープロビジョン領域とを含み得る。ユーザ領域の容量は、ホスト２にユーザアクセス可能ＬＢＡスペースとして見えるストレージ容量である。一方、ホスト２にユーザアクセス可能ＬＢＡスペースとして見えないストレージ容量が割り当てられたスペースが、オーバープロビジョン領域である。オーバープロビジョニングにより、ユーザアクセス可能ＬＢＡスペース（ユーザ領域の容量）を超える容量に対応するブロック群をこのＶＳＳＤへのデータ書き込みに使用することができる。
【００７３】
通常のＳＳＤにおいては、ホストはあるネームスペース用のＬＢＡの数をユーザ領域の容量として指定することはできても、このネームスペース用に割り当てるべきオーバープロビジョニング領域の容量を指定することはできない。また、通常は、ただ一つのオーバープロビジョン領域のみが、１台のＳＳＤ内に設定される。
【００７４】
これに対し、本実施形態では、ホスト２からの要求に応じて、ＶＳＳＤ毎に、ユーザ領域の容量（このＶＳＳＤに割り当てられるＬＢＡの数）のみならず、オーバープロビジョニング領域の容量を設定することができる。
【００７５】
例えば、データ書き込み量が多いＶＳＳＤ（頻繁に更新されるデータが書き込まれるＶＳＳＤ）に関しては、ホスト２は、ユーザ領域の容量に対するオーバープロビジョン領域の容量の比率、つまり［オーバープロビジョン領域の容量］  ／  ［ユーザ領域の容量］、が比較的大きな値になるように、オーバープロビジョニング領域の容量を指定してもよい。
【００７６】
ユーザ領域の容量に対するオーバープロビジョン領域の容量の比率が大きいＶＳＳＤにおいては、この大きなサイズのオーバープロビジョン領域の活用によって、このＶＳＳＤのライトアンプリフィケーションを効率よく減少することができる。なぜなら、たとえこのＶＳＳＤのユーザ領域の容量に対応するブロック群すべてがデータで満たされ、この結果、これらブロックがそのブロックの消去動作無しで利用可能ページを含まない状態になっても、これらブロックの代わりに、オーバープロビジョン領域に対応する数のブロック群をデータのライト（データ更新）に使用することができるからである。よって、このＶＳＳＤのガベージコレクションが実行されるタイミングを十分に遅らせることができる。オーバープロビジョン領域のブロック群に更新データがライトされるにつれ、ユーザ領域のブロック群内のデータはその更新によって無効化される。全てのデータが無効化されたブロックはそのガベージコレクションなしで再利用することができる。したがって、このＶＳＳＤのライトアンプリフィケーションを効率よく減少することができるので、このＶＳＳＤのブロック群のライト／イレーズ回数を低く抑えることができる。このことは、このＶＳＳＤの耐久性を向上させることできることを意味している。
【００７７】
書き込み可能物理セット変更部２２は、複数の物理セット内の少なくとも一つの物理セットをライト動作およびリード動作が許可されたライト許可モードに設定し、且つ複数の物理セット内の他の物理セットそれぞれをリード動作が許可され且つライト動作が禁止されたリードオンリーモードに設定する。ライト許可モードに設定されている物理セットにおいては、ホスト２からのデータ書き込みのみが許可されるだけでなく、ガベージコレクションによるデータ書き込み（データコピー）も許可される。
【００７８】
さらに、書き込み可能物理セット変更部２２は、全ての物理セットが交代でライト許可モードに設定されるように、ライト許可モードに設定されている物理セットをリードオンリーモードに変更し且つリードオンリーモードに設定されている他の物理セットのいずれか一つをライト許可モードに変更する。つまり、ライト許可モードの物理セットは複数の物理セット間でローテーションされる。
【００７９】
例えば、複数のＶＳＳＤによって共有される４つの物理セット＃１〜＃４が存在する場合には、ある期間Ｔ１においては、物理セット＃１がライト許可モードに設定されてもよく、他の全ての物理セット＃２〜＃４がリードオンリーモードに設定されてもよい。ホスト２からのライトデータは、物理セット＃１に、つまり物理セット＃１のフリーブロック群から割り当てられた書き込み先ブロックに書き込まれ、物理セット＃２〜＃４のブロックには書き込まれない。ホスト２からデータのリードが要求された場合には、リードすべきデータは、このデータが格納されている任意の物理セット（物理セット＃１、＃２、＃３または＃４）から読み出される。
【００８０】
次の期間Ｔ２においては、ライト許可モードに設定されるべき物理セットは、物理セット＃１から他の物理セットのいずれかに変更される。
【００８１】
ライト許可モードに設定されるべき物理セットを変更する処理は、ある条件（ローテーション条件）が満たされた時に実行される。このローテーション条件としては、
（１）ライト許可モードに現在設定されている物理セット内のフリーブロックの数がある閾値Ｘ以下に低下したという条件
（２）ライト許可モードに現在設定されている物理セット内のフリーブロック群から書き込み先ブロックとして割り当てられたフリーブロックの数がある閾値Ｙに達したという条件
（３）ライト許可モードに現在設定されている物理セット内のフリーブロック群から書き込み先ブロックとして割り当てられたフリーブロックの数とこのフリーブロック群からコピー先ブロック（「ＧＣコピー先ブロック」または「ＧＣデスティネーションブロック」とも云う）として割り当てられたフリーブロックの数との合計がある閾値Ｚに達したという条件、または
（４）ある物理セットがライト許可モードに設定されてからの経過時間が閾値Ｔに達したという条件
等が使用されてもよい。
【００８２】
期間Ｔ２においては、物理セット＃２がライト許可モードに設定されてもよく、物理セット＃１、＃３〜＃４がリードオンリーモードに設定されてもよい。
【００８３】
さらに次の期間Ｔ３においては、物理セット＃３がライト許可モードに設定されてもよく、物理セット＃１、＃２、＃４がリードオンリーモードに設定されてもよい。
【００８４】
さらに次の期間Ｔ４においては、物理セット＃４がライト許可モードに設定されてもよく、物理セット＃１〜＃３がリードオンリーモードに設定されてもよい。
【００８５】
なお、ある期間においてライト許可モードに設定される物理セットは必ずしも一つの物理セットである必要はなく、少なくとも一つの物理セットがある期間においてライト許可モードに設定され、他の全ての物理セットそれぞれがリードオンリーモードに設定されればよい。
【００８６】
リードキャッシュ制御部２４は、次にライト許可モードに設定されるべき物理セット（リードオンリーモードに現在設定されている物理セットの一つ）に格納されている有効データをリードキャッシュに格納する処理を実行することができる。換言すれば、リードキャッシュ制御部２４は、ある物理セットがライト許可モードに設定される前に、この物理セット内の有効データをリードキャッシュ（例えばリードキャッシュ（ＲＣ＃１）３１Ａ）に格納することができる。この物理セット内の有効データのすべてがリードキャッシュＲＣ＃１に格納されてもよいし、有効データの一部のみがリードキャッシュ（ＲＣ＃１）３１Ａに格納されてもよい。
【００８７】
この物理セットがライト許可モードに設定された物理セットとして動作している期間中においては、この物理セット内に存在するデータのリードがホスト２からのリード要求によって要求されたならば、コントローラ４は、リード要求によって指定されたこのデータを、このリードキャッシュ（ＲＣ＃１）３１Ａから読み出すことができる。したがって、ＳＳＤ３がリードキャッシュ（ＲＣ＃１）３１Ａを使用するように構成されているケースにおいては、リードオンリーモードに設定されている各物理セットのみならず、ライト許可モードに設定されている物理セットにおいても、リード・オン・ライト・ダイ・コンテンションは生じない。これにより、複数のＶＳＳＤがそれぞれ割り当てられた複数のエンドユーザ間の干渉をさらに効率よく低減することができる。
【００８８】
また、この物理セットがライト許可モードに設定された物理セットとして動作している期間中においては、リードキャッシュ制御部２４は、この物理セットの次にライト許可モードに設定されるべき別の物理セットに格納されている有効データをリードキャッシュ（ＲＣ＃２）３１Ｂに格納する処理を実行することができる。換言すれば、リードキャッシュ（ＲＣ＃１、ＲＣ＃２）３１Ａ，３１Ｂはダブルバッファとして機能する。リードキャッシュ（ＲＣ＃１、ＲＣ＃２）３１Ａ，３１Ｂのいずれか一方のリードキャッシュは、ホスト２へのデータ読み出し用に使用される。リードキャッシュ（ＲＣ＃１、ＲＣ＃２）３１Ａ，３１Ｂの他方のリードキャッシュは、次にライト許可モードに設定されるべき物理セットからコピーされる有効データのコピー先として使用される。
【００８９】
本実施形態では、リードキャッシュ（ＲＣ＃１、ＲＣ＃２）３１Ａ，３１Ｂの各々は、ランダムアクセスメモリ、例えばＤＲＡＭ６によって実現される。別の実施形態では、リードキャッシュ（ＲＣ＃１、ＲＣ＃２）３１Ａ，３１Ｂの各々は、コントローラ４内のＳＲＡＭによって実現されてもよい。
【００９０】
データコピー制御部２５は、リードキャッシュを使用することなく、ライト許可モードに設定されている物理セットにおいてもリード・オン・ライト・ダイ・コンテンションが生じないようにするために、次にライト許可モードに設定されるべき物理セットに格納されているすべての有効データをライト許可モードに現在設定されている物理セットにコピーする処理を実行することができ、これによって、次にライト許可モードに設定されるべき物理セットを有効データを含まないフリー物理セットにすることができる。
【００９１】
次にライト許可モードに設定されるべき物理セットからライト許可モードに現在設定されている物理セットへの有効データのコピーの進行中に、次にライト許可モードに設定されるべき物理セットに存在するデータのリードがホスト２からのリード要求によって要求された場合には、コントローラ４は、このデータを、次にライト許可モードに設定されるべき物理セットから読み出すことができる。ここで、有効データのコピーの進行中とは、次にライト許可モードに設定されるべき物理セット内の全ての有効データのコピーがまだ完了しておらず、コピー動作が実行されている状態を意味する。
【００９２】
コントローラ４は、全ての有効データのコピーの完了の後、フリー物理セットとなった物理セットをライト許可モードに設定し、且つこれまでライト許可モードに設定されていた物理セットをリードオンリーモードに設定（変更）する。ライト許可モードに設定された新たな物理セットは、有効データを含まないフリー物理セットである。したがって、通常、ライト許可モードに設定された物理セットへのリード要求は生じないので、ライト許可モードに設定された物理セットにおいても、リード・オン・ライト・ダイ・コンテンションが生じないようにすることができる。
【００９３】
なお、ライト許可モードに設定された新たな物理セットにホスト２からの新たなデータが書き込まれ、このデータのリードがホスト２によって要求される場合もある。この場合は、コントローラ４は、ライトバッファ（ＷＢ）３０にライトデータを維持しておくことによって、このデータをライトバッファ（ＷＢ）３０から読み出してホスト２に返すことができる。
【００９４】
ＮＡＮＤインタフェース１３は、ＣＰＵ１２の制御の下、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリ制御回路である。ＤＲＡＭインタフェース１４は、ＣＰＵ１２の制御の下、ＤＲＡＭ６を制御するように構成されたＤＲＡＭ制御回路である。ＤＲＡＭ６の記憶領域の一部は、ライトバッファ（ＷＢ）３０の格納のために使用される。また、ＤＲＡＭ６の記憶領域の他の一部は、リードキャッシュ（ＲＣ＃１、ＲＣ＃２）３１Ａ，３１Ｂの格納のために使用される。さらに、ＤＲＡＭ６の記憶領域のさらに他の一部は、複数のルックアップテーブルＬＵＴ＃１〜ＬＵＴ＃ｎの格納のために使用される。
【００９５】
図３は、従来型ＳＳＤを使用した仮想化環境と、本実施形態のＳＳＤ３（仮想ＳＳＤ（ＶＳＳＤ）プラットホーム３Ａを含むＳＳＤ）を使用した仮想化環境とを示す。
【００９６】
図３の左部は従来型ＳＳＤを使用した仮想化環境を示す。従来型ＳＳＤを使用した仮想化環境においては、ホスト（サーバ）側ＣＰＵ上で動作するソフトウェアには仮想ディスクサービスソフトウェアが含まれており、この仮想ディスクサービスソフトウェアが、エミュレーションによって物理ストレージ（ここではＳＳＤ）から仮想ディスク＃１、＃２、＃３を生成する。つまり、仮想ディスクサービスソフトウェアは、物理ストレージ（ここではＳＳＤ）の資源を論理的なストレージプールとして管理し、このストレージプールを使用して仮想ディスク＃１、＃２、＃３…を生成し、これら仮想ディスク＃１、＃２、＃３…を仮想マシン＃１、＃２、＃３…にそれぞれに提供する。
【００９７】
図３の右部はＶＳＳＤプラットホーム３Ａを含むＳＳＤ３を使用した仮想化環境を示す。
【００９８】
ＶＳＳＤプラットホーム３Ａを含むＳＳＤ３を使用した仮想化環境においては、ＳＳＤ３内のＶＳＳＤプラットホーム３ＡによってＶＳＳＤ＃１、ＶＳＳＤ＃２、ＶＳＳＤ＃３…がＳＳＤ３内に作成される。
【００９９】
これらＶＳＳＤ＃１、ＶＳＳＤ＃２、ＶＳＳＤ＃３…は、仮想ディスク＃１、＃２、＃３…と同等の機能を有している。したがって、仮想ディスク＃１、＃２、＃３…を作成するエミュレーション機能をホスト（サーバ）側ＣＰＵ上で動作するソフトウェアから取り除くことが可能となる。この結果、ホスト（サーバ）側ＣＰＵ上で動作するソフトウェアの構成を簡単化することができるので、ソフトウェア内の処理の遅延を短くでき、これによってホスト（サーバ）のＩ／Ｏ性能の向上を図ることができる。ＳＳＤ３の物理リソースは、仮想マシン＃１、＃２、＃３…によって共有される。仮想マシン＃１、＃２、＃３…は、デバイスドライバを介してＳＳＤ３内のＶＳＳＤ＃１、ＶＳＳＤ＃２、ＶＳＳＤ＃３…をそれぞれ直接的にアクセスすることができる。
【０１００】
図４は、ＳＳＤ３内のＶＳＳＤの数とホスト（サーバ）側の仮想マシンの数との関係を示す。
【０１０１】
図４では、ホスト（サーバ）側では仮想マシン＃１〜＃ｎが実行され、ＳＳＤ３においては仮想マシン＃１〜＃ｎにそれぞれ対応するＶＳＳＤ＃１〜＃ｎが作成されている場合が想定されている。ＶＳＳＤプラットホーム３Ａを含むＳＳＤ３を使用した仮想化環境においては、ホスト（サーバ）側ＣＰＵ上で動作するソフトウェアの構成を簡単化することができるので、ホスト（サーバ）側の仮想マシンの数を容易に増やすことができる。これにより、一つのホスト（サーバ）当たりのエンドユーザの数を容易に増やすことが可能となる。また、上述したように、本実施形態では、複数のＶＳＳＤがそれぞれ専用の物理セットを含むのではなく、複数のＶＳＳＤが複数の物理セットの各々を共有する。したがって、本実施形態では、無数のＶＳＳＤを作成することができる。このことは、一つのホスト（サーバ）当たりのエンドユーザの数をより多くすることを可能にする。
【０１０２】
次に、図５を参照して、ＳＳＤ３内に作成されるＶＳＳＤについて説明する。
【０１０３】
ＳＳＤ３のＶＳＳＤプラットホーム３Ａは、仮想マシン＃１〜＃ｎにそれぞれ対応する複数のＶＳＳＤ＃１〜＃ｎを作成する。この場合、ＶＳＳＤプラットホーム３Ａは、複数のＶＳＳＤＶＳＳＤ＃１〜＃ｎそれぞれに対応する複数の論理アドレス空間（ＬＢＡ空間）を管理することができる。
【０１０４】
各ＶＳＳＤは、上述したように、ネームスペースによって実現されてもよい。この場合、ＮＡＮＤ型フラッシュメモリ５の記憶領域を論理的に複数の領域に分割するために、複数のネームスペースが利用される。各ネームスペースは、ＮＡＮＤ型フラッシュメモリ５内の記憶領域であり、論理アドレス範囲（ＬＢＡ範囲）が割り当てられる。個々のネームスペースは、これらネームスペースの識別子によって識別される。各ＶＳＳＤがネームスペースによって実現された場合、各ＶＳＳＤには、ＬＢＡ範囲（ＬＢＡ０〜ＬＢＡｎ−１）が割り当てられる。ＬＢＡ範囲のサイズ（つまりＬＢＡの数）は、ＶＳＳＤ（ネームスペース）毎に可変である。各ＬＢＡ範囲は、ＬＢＡ０から始まる。
【０１０５】
図６は、ＳＳＤ３によって実行されるＶＳＳＤ管理を示す。
【０１０６】
ここでは、複数のＶＳＳＤが複数のネームスペースによって実現されている場合を想定する。ＶＳＳＤ＃１には、０〜ｎ−１の論理アドレス空間（ＬＢＡ空間）Ａ１が割り当てられている。ＶＳＳＤ＃２には、０〜ｎ−１の論理アドレス空間（ＬＢＡ空間）Ａ２が割り当てられている。同様に、ＶＳＳＤ＃ｎには、０〜ｎ−１の論理アドレス空間（ＬＢＡ空間）Ａｎが割り当てられている。
【０１０７】
本実施形態では、ルックアップテーブルＬＵＴは、ＶＳＳＤ毎に分割されている。つまり、ＶＳＳＤ＃１〜＃ｎに対応するルックアップテーブルＬＵＴ＃１〜＃ｎがＳＳＤ３のコントローラ４によって管理される。
【０１０８】
ルックアップテーブルＬＵＴ＃１は、ＶＳＳＤ＃１のＬＢＡ空間Ａ１とＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間のマッピングを管理する。ルックアップテーブルＬＵＴ＃２は、ＶＳＳＤ＃２のＬＢＡ空間Ａ２とＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間のマッピングを管理する。ルックアップテーブルＬＵＴ＃ｎは、ＶＳＳＤ＃ｎのＬＢＡ空間ＡｎとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間のマッピングを管理する。
【０１０９】
コントローラ４は、ルックアップテーブルＬＵＴ＃１〜＃ｎを使用することによって、ＶＳＳＤ（記憶領域）毎に独立してガベージコレクションを行うことができる。あるＶＳＳＤのガベージコレクションにおいては、このＶＳＳＤに割り当てられているブロックそれぞれからガベージコレクション対象の１以上のブロックが選択され、この選択された各ブロック内の有効データが、このＶＳＳＤに割り当てられたブロック（フリーブロック）にコピーされる。そして、このＶＳＳＤに対応するルックアップテーブルＬＵＴが更新されて、コピーされたデータに対応するＬＢＡそれぞれにコピー先物理アドレスが関連付けられる。このＶＳＳＤ（記憶領域）毎に独立したガベージコレクションは、異なるＶＳＳＤに関連付けられたデータがガベージコレクションによって同じブロックに格納されてしまうことを防止することができる。
【０１１０】
図７は、ＶＳＳＤ管理コマンドを示す。
【０１１１】
ＶＳＳＤ管理コマンドは、ＶＳＳＤの作成および削除を含むＶＳＳＤ管理のために使用されるコマンドである。ＶＳＳＤ管理コマンドは、以下のパラメータを含んでもよい。
【０１１２】
（１）作成（クリエイト）／削除（リムーブ）
（２）ｃａｐａｃｉｔｙ
（３）ｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｉｎｇ
作成／削除のパラメータの値０ｈは、ＶＳＳＤの作成をＳＳＤ３に要求する。作成／削除のパラメータの値１ｈは、ＶＳＳＤの削除をＳＳＤ３に要求する。ＶＳＳＤの削除を要求する場合には、削除対象のＶＳＳＤの識別子（ＶＳＳＤＩＤ）を指定するパラメータがＶＳＳＤ管理コマンドに設定されてもよい。
【０１１３】
ｃａｐａｃｉｔｙのパラメータは、作成対象のＶＳＳＤに割り当てるべきユーザ領域の容量（ｖｉｓｉｂｌｅ  ｃａｐａｃｉｔｙ）を指定する。ユーザ領域の容量は、上述したように、ユーザアクセス可能ＬＢＡスペースに相当する。このユーザ領域の容量は、このＶＳＳＤに割り当てるべきＬＢＡの数に相当する。このユーザ領域の容量はバイトによって指定されてもよいし、このＶＳＳＤに割り当てるべきＬＢＡの数によって指定されてもよい。
【０１１４】
ｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｉｎｇのパラメータは、作成対象のＶＳＳＤに割り当てるべきオーバープロビジョニング領域の容量を指定する。
【０１１５】
次に、図８を参照して、ユーザ領域の容量とオーバープロビジョニング領域の容量との組をＶＳＳＤ毎に指定するホスト２からの要求に基づいて、個々のＶＳＳＤにユーザ領域およびオーバープロビジョニング領域を割り当てる動作を説明する。
【０１１６】
コントローラ４のＶＳＳＤ作成部２１は、ユーザ領域の容量とオーバープロビジョニング領域の容量との組をＶＳＳＤ毎に指定するホスト２からの要求に基づいて、指定されたユーザ領域の容量と指定されたオーバープロビジョニング領域の容量との合計の容量を個々のＶＳＳＤに割り当てる。
【０１１７】
ホスト２が、あるＶＳＳＤ（ここではＶＳＳＤ＃ｎ）の作成をＳＳＤ３に要求する場合、ホスト２は、このＶＳＳＤ＃ｎ用に割り当てるべきユーザ領域の容量とこのＶＳＳＤ＃ｎ用に割り当てるべきオーバープロビジョニング領域の容量とを指定する。コントローラ４のＶＳＳＤ作成部２１は、指定されたユーザ領域の容量と指定されたオーバープロビジョニング領域の容量との合計の容量をこのＶＳＳＤ＃ｎ用に割り当てる。図８に示すように、割り当てられたユーザ領域の容量とオーバープロビジョニング領域の容量との合計がこのＶＳＳＤ＃ｎの総容量となる。上述したように、ユーザ領域の容量に対するオーバープロビジョニング領域の容量の割合が大きいほど、このＶＳＳＤ＃ｎの性能および耐久性が向上する。ホスト２は、ｃａｐａｃｉｔｙのパラメータおよびｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｉｎｇのパラメータを使用することによって、エンドユーザの要件に合った性能および耐久性を有するＶＳＳＤの作成をＳＳＤ３に要求することができる。ＳＳＤ３は、ｃａｐａｃｉｔｙのパラメータによって指定されるユーザ領域の容量とｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｉｎｇのパラメータによって指定されるオーバープロビジョニング領域の容量との合計の容量をＶＳＳＤに割り当てることによって、エンドユーザの要件に合った性能および耐久性を有するＶＳＳＤを作成する。
【０１１８】
図９は、複数のＶＳＳＤによって実現されるＩｓｓＳ／ＰａａＳ環境を示す。
【０１１９】
ＩｓｓＳ／ＰａａＳ環境においては、個々のエンドユーザは、契約した通りの計算機、ストレージの能力／容量を使用することを望み、また、必要なタイミングまたは期間で、計算機やストレージの能力／容量を増減することをのぞむ場合がある。一方、データセンターサービスプロバイダは、多数のエンドユーザに対する多数のサービスを実行することによって、つまりサーバ当たりのエンドユーザの数を増やすことによって、サーバの平均稼働率を改善することを望み、また、電力、メンテナンスのような運用コストを削減することを望み、また、エンドユーザのコンフィグレーション変更に柔軟に対応することを望む場合がある。
【０１２０】
本実施形態では、複数の物理セットを共有する複数のＶＳＳＤが作成されるので、作成可能なＶＳＳＤの数を容易に増加することができる。したがって、多数のエンドユーザに対する多数のサービスを同時に実行することが可能となり、サーバ当たりのエンドユーザの数を増やすことができる。
【０１２１】
図１０は、複数のＶＳＳＤによって実現されるデータベースキャッシュ環境を示す。
【０１２２】
ＳＮＳサービスのように、データベースキャッシュ環境を使用するクラウドシステムにおいては、ＳＳＤのライトアンプリフィケーションを下げ且つＳＳＤへのデータ書き込みの量を下げようとすると、更新周期の異なる複数種のコンテンツそれぞれに対応する複数のＳＳＤが必要となる場合がある。
【０１２３】
本実施形態では、更新周期の異なる複数種のコンテンツそれぞれに対応する複数のＶＳＳＤをＳＳＤ３上に作成することによって、複数のＳＳＤ（複数の物理ＳＳＤ）を用意することなく、ライトアンプリフィケーションを下げ且つ一つのＳＳＤ３へのデータ書き込みの量を下げることが可能となる。
【０１２４】
図１１は、ＱｏＳ要件の遷移を示す。
【０１２５】
従来では、図１１の上部に示すように、ＱｏＳは、物理サーバとストレージとの間で規定されていた。本実施形態では、図１１の下部に示すように、複数のエンドユーザに対応する複数のＶＳＳＤをＳＳＤ３上に作成することによって、個々のエンドユーザと個々のＶＳＳＤとの間でＱｏＳを規定することが可能となる。
【０１２６】
図１２は、ＩｓｓＳ／ＰａａＳ環境に複数のＶＳＳＤを適用することによって実現される効果を示す。
【０１２７】
本実施形態では、例えば、ＳＳＤ３が有するＶＳＳＤプラットホームによって、仮想マシン（ＶＭ）とＶＳＳＤを各が含む多数の仮想化環境を物理サーバ上で動作させることができる。この多数の仮想化環境は、多数のエンドユーザに対する多数のサービスを同時に実行することが可能となり、サーバの稼働率を上げることができる。
【０１２８】
また、本実施形態では、上述したように、リード・オン・ライト・ダイ・コンテンションが生じる確率を低減できるので、ＳＳＤ３を共有する複数のエンドユーザ間のアクセス競合（リード・オン・ライト・ダイ・コンテンション）によるＩ／Ｏ性能の低下を低減することができる。
【０１２９】
図１３は、データベースキャッシュ環境に複数のＶＳＳＤを適用することによって実現される効果を示す。
【０１３０】
図１３の上部は、複数のデータベースキャッシュを含む階層化データベースキャッシュシステムを示す。この階層化データベースキャッシュシステムにおいては、更新周期の異なる複数種のコンテンツをそれぞれ格納するための、複数の物理ＳＳＤがデータベースキャッシュとして使用される。
【０１３１】
本実施形態では、図１３の下部に示されているように、ＳＳＤ３内に複数のＶＳＳＤを作成することによって、更新周期の異なる複数種のコンテンツを一つのＳＳＤ３に効率よく配置することが可能となる。
【０１３２】
図１４は、複数の物理セットと複数のＶＳＳＤとの関係を示す。
【０１３３】
図１４では、ＮＡＮＤ型フラッシュメモリ５を構成するＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２は、物理セット＃１、＃２、＃３、＃４に分類されており、これら物理セット＃１、＃２、＃３、＃４を共有するＶＳＳＤ＃１、＃２、＃３、＃４、＃５、＃６、＃７、＃８が作成されている場合が例示されている。図１４では、物理セット＃１、＃２、＃３、＃４は縦方向に延在するバーによって表されており、ＶＳＳＤ＃１、＃２、＃３、＃４、＃５、＃６、＃７、＃８は、物理セット＃１、＃２、＃３、＃４と直交する横方向に伸びるバーによって表されている。
【０１３４】
ＶＳＳＤ＃１、＃２、＃３、＃４、＃５、＃６、＃７、＃８に対応するバーの面積は、これらＶＳＳＤ＃１、＃２、＃３、＃４、＃５、＃６、＃７、＃８の容量（総容量）を表している。
【０１３５】
ＶＳＳＤ＃１〜＃８はエンドユーザ＃１〜＃８（仮想マシン＃１〜＃８）用の記憶領域としてそれぞれ使用される。
【０１３６】
ある期間においては、物理セット＃１、＃２、＃３、＃４のうちの少なくとも一つのみがライト許可モードに設定され、他のすべての物理セットはリードオンリーモードに設定される。図１４では、物理セット＃２がライト許可モードに設定され、物理セット＃１、＃３、＃４がリードオンリーモードに設定されている場合が例示されている。
【０１３７】
図１５は、図１４の複数のＶＳＳＤに含まれるユーザ領域とオーバープロビジョニング領域との関係を示す。
【０１３８】
上述したように、本実施形態のＳＳＤ３は、ホスト２からの要求に応じて、ＶＳＳＤ毎に、ＶＳＳＤに割り当てるユーザ領域の容量（ｖｉｓｉｂｌｅ  ｃａｐａｃｉｔｙ）とオーパプロビジョニング領域の容量とを設定することができる。各ＶＳＳＤにおいて、ハッチングによって示される領域がオーパプロビジョニング領域を表している。
【０１３９】
図１６は、全ての物理セットが交代でライト許可モードに設定されるように、ライト許可モードに設定されている物理セットをリードオンリーモードに変更し且つリードオンリーモードに設定されている他の物理セットそれぞれをライト許可モードに変更する動作を示す。
【０１４０】
図１６の左上部に示すように、ある期間（あるサイクル）においては、物理セット＃２がライト許可モードに設定され、物理セット＃１、＃３、＃４がリードオンリーモードに設定される。
【０１４１】
図１６の右上部に示すように、次の期間（次のサイクル）においては、ライト許可モードに設定されるべき物理セットは、物理セット＃２から物理セット＃３に変更される。そして、物理セット＃１、＃２、＃４はリードオンリーモードに設定される。つまり、ライト許可モードに設定されていた物理セット＃２はリードオンリーモードに変更され、リードオンリーモードに設定されていた物理セット＃３はライト許可モードに変更される。
【０１４２】
図１６の左下部に示すように、さらに次の期間（さらに次のサイクル）においては、ライト許可モードに設定されるべき物理セットは、物理セット＃３から物理セット＃４に変更される。そして、物理セット＃１、＃２、＃３はリードオンリーモードに設定される。
【０１４３】
図１６の右下部に示すように、さらに次の期間（さらに次のサイクル）においては、ライト許可モードに設定されるべき物理セットは、物理セット＃４から物理セット＃１に変更される。そして、物理セット＃２、＃３、＃４はリードオンリーモードに設定される。
【０１４４】
さらに次の期間（さらに次のサイクル）においては、図１６の左上部に示すように、物理セット＃２がライト許可モードに再び設定され、物理セット＃１、＃３、＃４がリードオンリーモードに再び設定される。
【０１４５】
図１７は、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２をチャンネル境界で分割することによって得られる複数の物理セットの構成例を示す。
【０１４６】
図１７では、物理セット＃１は、チャンネルＣｈ１に含まれるＮＡＮＤ型フラッシュメモリダイ＃１、＃９、＃１７、＃２５を含む。物理セット＃２は、チャンネルＣｈ２に含まれるＮＡＮＤ型フラッシュメモリダイ＃２、＃１０、＃１８、＃２６を含む。同様に、物理セット＃８は、チャンネルＣｈ８に含まれるＮＡＮＤ型フラッシュメモリダイ＃８、＃１６、＃２４、＃３２を含む。
【０１４７】
図１８は、同じチャンネルを共有する幾つかの物理セットの構成例を示す。
【０１４８】
図１８では、物理セット＃１〜＃７は専用のチャンネルを有しているが、物理セット＃８、＃９はチャンネルＣｈ８を共有している。物理セット＃８は、チャンネルＣｈ８に含まれるＮＡＮＤ型フラッシュメモリダイ＃８、＃１６を含み、物理セット＃９は、チャンネルＣｈ８に含まれるＮＡＮＤ型フラッシュメモリダイ＃２４、＃３２を含む。
【０１４９】
図１９は、全てのチャンネルを横断する複数の物理セットであって、全てのチャンネルから物理セット毎に一つずつＮＡＮＤダイを選択することによって得られる複数の物理セットの構成例を示す
図１９では、物理セット＃１は、チャンネルＣｈ１〜Ｃｈ８にそれぞれ属するＮＡＮＤ型フラッシュメモリダイ＃１〜＃８を含む。物理セット＃２は、チャンネルＣｈ１〜Ｃｈ８にそれぞれ属するＮＡＮＤ型フラッシュメモリダイ＃９〜＃１６を含む。同様に、物理セット＃４は、チャンネルＣｈ１〜Ｃｈ８にそれぞれ属するＮＡＮＤ型フラッシュメモリダイ＃２５〜＃３２を含む。
【０１５０】
図２０は、各々が幾つかのチャンネルのみに跨がる幾つかの物理セットの構成例を示す。
【０１５１】
図２０では、物理セット＃１〜＃３の各々は、すべてのチャンネルＣｈ１〜Ｃｈ８に跨がっているが、物理セット＃４、＃５は幾つかのチャンネルのみに跨がっている。物理セット＃４は、チャンネルＣｈ１〜Ｃｈ４にのみ跨がっており、チャンネルＣｈ１〜Ｃｈ４にそれぞれ属するＮＡＮＤ型フラッシュメモリダイ＃２５〜＃２８を含む。物理セット＃５は、チャンネルＣｈ５〜Ｃｈ８にのみ跨がっており、チャンネルＣｈ５〜Ｃｈ８にそれぞれ属するＮＡＮＤ型フラッシュメモリダイ＃２９〜＃３２を含む。
【０１５２】
図２１は、ＳＳＤ３におけるホスト書き込み動作とガベージコレクション（ＧＣ）動作を示す。
【０１５３】
図２１では、物理セット＃２がライト許可モードに設定されており、物理セット＃１、＃３、…がリードオンリーモードに設定されている場合が例示されている。
【０１５４】
物理セット＃１、＃２、＃３…の各々において、この物理セットに属するダイそれぞれに含まれるブロックそれぞれの状態は、有効データを格納しているアクティブブロックと、有効データを格納していないフリーブロックとに大別される。
【０１５５】
ある物理セットに属し且つアクティブブロックである各ブロックは、この物理セットに対応するアクティブブロックプールによって管理される。例えば、物理セット＃１内のアクティブブロックそれぞれは物理セット＃１に対応するアクティブブロックプールによって管理され、物理セット＃２内のアクティブブロックそれぞれは、物理セット＃２に対応するアクティブブロックプールによって管理され、物理セット＃３内のアクティブブロックそれぞれは、物理セット＃３に対応するアクティブブロックプールによって管理される。
【０１５６】
ある物理セットに属し且つフリーブロックである各ブロックは、この物理セットに対応するフリーブロックプールによって管理される。例えば、物理セット＃１内のフリーブロックそれぞれは物理セット＃１に対応するフリーブロックプールによって管理され、物理セット＃２内のフリーブロックそれぞれは物理セット＃２に対応するフリーブロックプールによって管理され、物理セット＃３内のフリーブロックそれぞれは物理セット＃３に対応するフリーブロックプールによって管理される。
【０１５７】
ホスト書き込みは以下の手順で実行される。
【０１５８】
コントローラ４は、ライト許可モードに現在設定されている物理セット＃２のフリーブロック群（物理セット＃２に対応するフリーブロックプール）からフリーブロックを選択し、選択したフリーブロックを書き込み先ブロックとして割り当てる。コントローラ４は、ホスト２から受信されるライト要求に応じて、書き込むべきデータ（ライトデータ）を書き込み先ブロックに書き込む。この場合、受信されたライト要求がどのＶＳＳＤを指定しているかに関係なく、ライトデータは同じ書き込み先ブロックに書き込まれてもよい。この書き込み先ブロック全体がホスト２からのライトデータで満たされると、この書き込み先ブロックはアクティブブロックとなり、物理セット＃２のアクティブブロックプールによって管理される。また、コントローラ４は、物理セット＃２のフリーブロック群（物理セット＃２に対応するフリーブロックプール）からフリーブロックを選択し、選択したフリーブロックを新たな書き込み先ブロックとして割り当てる。この場合、最小プログラム／イレーズサイクル数を有するフリーブロックがフリーブロックプールから選択されてもよい。
【０１５９】
アクティブブロックの状態は、共有ブロックと非共有ブロックとに大別される。共有ブロックとは、幾つかのＶＳＳＤのデータが混在されているブロックを意味する。非共有ブロックとは、ある特定のＶＳＳＤのデータのみが格納されているブロックを意味する。
【０１６０】
書き込み先ブロックがアクティブブロックになった直後は、通常、このアクティブブロックは、複数のＶＳＳＤに対応する複数種のデータを含む。したがって、物理セット＃２のアクティブブロックプールにおいては、このアクティブブロックは、共有ブロックとして管理される。
【０１６１】
ある物理セットにおいて、ガベージコレクションまたはデータ更新によってあるアクティブブロック（共有ブロックまたは非共有ブロック）内のすべてのデータが無効化されると、このアクティブブロックはフリーブロックとなり、この物理セットに対応するフリーブロックプールによって管理される。
【０１６２】
なお、リードキャッシュ（ＲＣ＃１またはＲＣ＃２）３１Ａまたは３１Ｂを使用する構成においては、コントローラ４は、物理セット＃２がライト許可モードに設定される前に、物理セット＃２内の有効データをリードキャッシュ（ＲＣ＃１またはＲＣ＃２）３１Ａまたは３１Ｂに事前に格納しておいてもよい。
【０１６３】
ガベージコレクション（ＧＣ）は以下の手順で実行される。
【０１６４】
コントローラ４は、ライト許可モードに現在設定されている物理セット＃２のフリーブロック群（物理セット＃２に対応するフリーブロックプール）から複数のＶＳＳＤ＃１〜＃ｎに対応する複数のフリーブロックを選択し、選択したフリーブロックをＧＣコピー先ブロック＃１〜＃ｎとして割り当てる。ＧＣコピー先ブロック＃１は、ＧＣによって他の幾つかのブロックからコピーされるＶＳＳＤ＃１の有効データを格納するためのブロックである。ＧＣコピー先ブロック＃２は、ＧＣによって他の幾つかのブロックからコピーされるＶＳＳＤ＃２の有効データを格納するためのブロックである。同様に、ＧＣコピー先ブロック＃ｎは、ＧＣによって他の幾つかのブロックからコピーされるＶＳＳＤ＃ｎの有効データを格納するためのブロックである。
【０１６５】
コントローラ４は、書き込み許可モードに設定されている物理セット（ここでは物理セット＃２）に属し、且つ幾つかのＶＳＳＤに対応する複数種のデータが格納されている幾つかのブロック（つまり、幾つかの共有ブロック）を特定する。そして、コントローラ４は、特定された共有ブロックそれぞれをＧＣソースブロックとして選択する。ＧＣソースブロックとは、ＧＣが施されるブロックを意味する。ＧＣソースブロックは、「ＧＣ対象ブロック」とも称される。
【０１６６】
コントローラ４は、ＧＣソースブロックとして選択された幾つかの共有ブロック内のＶＳＳＤ＃１用の有効データを、ＶＳＳＤ＃１用のＧＣコピー先ブロック＃１にコピーする。コントローラ４は、ＧＣソースブロックとして選択された幾つかの共有ブロック内のＶＳＳＤ＃２用の有効データを、ＶＳＳＤ＃２用のＧＣコピー先ブロック＃２にコピーする。同様に、コントローラ４は、ＧＣソースブロックとして選択された幾つかの共有ブロック内のＶＳＳＤ＃ｎ用の有効データを、ＶＳＳＤ＃ｎ用のＧＣコピー先ブロック＃ｎにコピーする。これにより、複数のＶＳＳＤに対応する複数種のデータを異なるブロックに格納することができ、これによってこれら複数種のデータを互いに分離することができる。
【０１６７】
あるＧＣコピー先ブロック全体が有効データで満たされると、このＧＣコピー先ブロックはアクティブブロックとなり、物理セット＃２のアクティブブロックプールによって管理される。このアクティブブロックは特定のＶＳＳＤのみに対応するデータのみを含む。したがって、物理セット＃２のアクティブブロックプールにおいては、このアクティブブロックは、非共有ブロックとして管理される。コントローラ４は、ＶＳＳＤ＃１用のデータのみを含むアクティブブロック群をＶＳＳＤ＃１用の非共有ブロック群として管理し、ＶＳＳＤ＃２用のデータのみを含むアクティブブロック群をＶＳＳＤ＃２用の非共有ブロック群として管理し、そして、ＶＳＳＤ＃ｎ用のデータのみを含むアクティブブロック群をＶＳＳＤ＃ｎ用の非共有ブロック群として管理する。通常は、時間の経過に伴って、幾つかの非共有ブロック内のデータの一部は、このデータの更新によって無効化される。
【０１６８】
ここで、複数のＶＳＳＤに対応する複数種のデータ（複数のＶＳＳＤに対応する複数種のライトデータ）を同じ書き込み先ブロックに書き込む理由について説明する。
【０１６９】
基本的には、ガベージコレクションの効率を上げるためには、同じＶＳＳＤのデータ（同じエンドユーザのデータ）を同じブロックに書き込むことが好ましい。しかし、このためには、ＶＳＳＤの数（エンドユーザの数）と同数の多数の書き込み先ブロックを割り当てることが必要となる。例えば、ＶＳＳＤの数が１００〜１０００の場合には、割り当てることが必要な書き込み先ブロックの数も１００〜１０００となる。一般に、データ書き込み量は、ＶＳＳＤ（エンドユーザ）毎に異なる。このため、これら多数の書き込み先ブロックがデータで満たされるタイミングがばらばらになる。例えば、ある書き込み先ブロック全体がデータで満たされ、他の書き込み先ブロックにはほとんどデータが書き込まれていない、という状況も生じうる。このことは、データで満たされた書き込み先ブロック群をアクティプブロックプールに移動するための処理およびフリーブロック群を書き込み先ブロック群として新たに割り当てるための処理を複雑化させる要因となり得る。
【０１７０】
本実施形態では、コントローラ４は、複数のＶＳＳＤに対応する複数種のデータを同じ書き込み先ブロックに書き込むことができ、そして、後に、ＧＣによってこれら複数種のデータを分離することができる。したがって、処理の複雑化を招くことなく、複数種のデータを容易に分離することが可能となる。
【０１７１】
ＧＣにおいては、コントローラ４は、共有ブロックのみならず、有効データと無効データとが混在する非共有ブロックもＧＣソースブロックとして選択することもできる。
【０１７２】
この場合、コントローラ４は、物理セット＃２のアクティブブロックプールから有効データと無効データとが混在するＶＳＳＤ＃１用の非共有ブロックをＧＣソースブロックとして選択し、この選択したＶＳＳＤ＃１用の非共有ブロック内の有効データをＶＳＳＤ＃１用のＧＣコピー先ブロック＃１にコピーする。
【０１７３】
また、コントローラ４は、物理セット＃２のアクティブブロックプールから有効データと無効データとが混在するＶＳＳＤ＃２用の非共有ブロックをＧＣソースブロックとして選択し、この選択したＶＳＳＤ＃２用の非共有ブロック内の有効データをＶＳＳＤ＃２用のＧＣコピー先ブロック＃２にコピーする。
【０１７４】
同様に、コントローラ４は、物理セット＃２のアクティブブロックプールから有効データと無効データとが混在するＶＳＳＤ＃ｎ用の非共有ブロックをＧＣソースブロックとして選択し、この選択したＶＳＳＤ＃ｎ用の非共有ブロック内の有効データをＶＳＳＤ＃ｎ用のＧＣコピー先ブロック＃ｎにコピーする。
【０１７５】
したがって、たとえ共有ブロック群内に存在する特定のＶＳＳＤの有効データの量が比較的少ない場合でも、この特定のＶＳＳＤに関する有効データを、非共有ブロックからこの特定のＶＳＳＤに対応するＧＣコピー先ブロックにコピーすることによって、この特定のＶＳＳＤに対応するＧＣコピー先ブロック全体をこの特定のＶＳＳＤの有効データで満たすことができる。これにより、ＧＣコピー先ブロックにダミーデータを書き込むことなく、このＧＣコピー先ブロック全体を有効データで満たすことができる。このことは、ＧＣの効率を高めることを可能にする。
【０１７６】
また、ＧＣにおいては、コントローラ４は、リードオンリーモードに設定されている他の物理セット（ここでは、物理セット＃１、＃３）内のブロックをＧＣソースブロックとして利用することもできる。コントローラ４は、まず、書き込み許可モードに設定されている物理セット＃２よりも多い書き換え回数（プログラム／イレーズサイクル）を有し且つリードオンリーモードに設定されている他の物理セットをＧＣソース物理セットとして選択する。ある物理セットの書き換え回数としては、この物理セットに属するブロックそれぞれの書き換え回数の合計値を使用してもよい。そして、コントローラ４は、複数のＶＳＳＤ＃１〜＃ｎにそれぞれ対応する複数の有効データ部を、選択されたＧＣソース物理セットから、物理セット＃２内のＧＣコピー先ブロック＃１〜＃ｎにそれぞれコピーする。この場合、コントローラ４は、ＧＣソース物理セットのアクティブブロックプールから、有効データと無効データとが混在する幾つかのブロック（例えば、有効データと無効データとが混在する幾つかの共有ブロック、有効データと無効データとが混在する幾つかの非共有ブロック）をＧＣソースブロックとして選択してもよい。そして、コントローラ４は、選択された各ＧＣソースブロック内のＶＳＳＤ＃１用の有効データをＶＳＳＤ＃１用のＧＣコピー先ブロック＃１にコピーし、選択された各ＧＣソースブロック内のＶＳＳＤ＃２用の有効データをＶＳＳＤ＃２用のＧＣコピー先ブロック＃２にコピーし、そして選択された各ＧＣソースブロック内のＶＳＳＤ＃ｎ用の有効データをＶＳＳＤ＃ｎ用のＧＣコピー先ブロック＃ｎにコピーする。
【０１７７】
これにより、例えば、ライト許可モードに現在設定されている物理セットが最小プログラム／イレーズサイクル数を有する物理セットであるならば、この物理セット内の低い消耗度のフリーブロック（書き換え回数の少ないブロック）を各ＶＳＳＤのためのＧＣ書き込み先ブロック（ＧＣコピー先ブロック）として優先的に利用して、ＧＣを実行することができる。この結果、物理セット間の消耗の不均衡を均一化する物理セット間ウェアレベリングを実行することができる。
【０１７８】
図２２は、ストリーム書き込みを利用することによって、更新頻度の異なる複数種のデータを異なるブロックに書き込む動作を示す。
【０１７９】
ストリーム書き込みとは、同じストリームに関連付けられたデータを同じブロックに書き込むことによって、異なるストリームに関連付けられた異なる種類のデータを異なるブロックに書き込む動作を意味する。ホスト２からのライト要求は、あるＶＳＳＤを指定するネームスペースのＩＤ（ＮＳＩＤ）と、あるストリームのＩＤ（ストリームＩＤ）との双方を含んでもよい。
【０１８０】
本実施形態では、更新頻度の異なる複数種のデータは、異なるストリームに関連付けられる。この場合、ホスト２は、書き込まれるべきデータを、更新頻度の異なる複数種のデータタイプのいずれかに分類する。本実施形態では、データタイプとして、「Ｈｏｔ（微粒度）」、「Ｈｏｔ（粗粒度）」、「Ｃｏｌｄ」、「Ｕｎｋｎｏｗｎ」が使用されてもよい。「Ｈｏｔ（微粒度）」は、頻繁に更新され、且つ小さなサイズを有するデータである。「Ｈｏｔ（粗粒度）」頻繁に更新され、且つ「Ｈｏｔ（微粒度）」のデータよりも大きなサイズを有するデータである。「Ｃｏｌｄ」は、頻繁には更新されないか、あるいは滅多に更新されないデータである。「Ｕｎｋｎｏｗｎ」は、その更新頻度が不明のデータである。
【０１８１】
コントローラ４は、ライト許可モードに現在設定されている物理セット＃２のフリーブロック群（物理セット＃２に対応するフリーブロックプール）から四つのフリーブロックを選択し、選択した四つのフリーブロックを書き込み先ブロックとしてそれぞれ割り当てる。
【０１８２】
コントローラ４は、ホスト２から受信されるライト要求に応じて、書き込むべきデータ（ライトデータ）を四つの書き込み先ブロックのいずれかに書き込む。受信されたライト要求がストリーム＃１のストリームＩＤを含む場合、ライトデータ（「Ｈｏｔ（微粒度）」データ）は、ストリーム＃１に対応する書き込み先ブロックに書き込まれる。受信されたライト要求がストリーム＃２のストリームＩＤを含む場合、ライトデータ（「Ｈｏｔ（粗粒度）」データ）は、ストリーム＃２に対応する書き込み先ブロックに書き込まれる。受信されたライト要求がストリーム＃３のストリームＩＤを含む場合、ライトデータ（「Ｃｏｌｄ」データ）は、ストリーム＃３に対応する書き込み先ブロックに書き込まれる。受信されたライト要求がストリーム＃４のストリームＩＤを含む場合、ライトデータ（「Ｕｎｋｎｏｗｎ」データ）は、ストリーム＃４に対応する書き込み先ブロックに書き込まれる。
【０１８３】
これら書き込み先ブロックがデータで満たされると、これら書き込み先ブロックはアクティブブロック（ここでは共有ブロック）となり、アクティブブロックプールにおいて管理される。これにより、同じ共有ブロックに異なる更新頻度を有するデータが混在されることを防止することができる。このことは、ガベージコレクションが実行される頻度を減少させることを可能とし、この結果、ライトアンプリフィケーションを低下させることができる。なぜなら、Ｈｏｔデータのみで満たされたブロックは、そのデータの更新によってそのブロック内のすべてのデータが無効される可能性があるためである。この場合、このブロックにガベージコレクションを施すことなく、このブロックをフリーブロックとして開放することができる。また、Ｃｏｌｄデータのみで満たされたブロックは、長い間、有効データのみを含む可能性が高い。したがって、このブロックに対してガベージコレクションを施す必要もない。
【０１８４】
図２３のフローチャートは、コントローラ４によって実行されるリード／ライト処理の手順を示す。
【０１８５】
コントローラ４は、ＮＡＮＤ型フラッシュメモリダイの各々が一つの物理セットにのみ属するように３２個のＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２を複数の物理セットに分類することによって、これら複数の物理セットを管理する（ステップＳ１１）。コントローラ４は、ＳＳＤ３を共有する複数のクライアント（複数のエンドユーザ）に対応する複数のＶＳＳＤ＃１〜＃ｎを作成する（ステップＳ１２）。ＶＳＳＤ＃１〜＃ｎの各々は複数の物理セットに跨り、ＶＳＳＤ＃１〜＃ｎは複数の物理セットの各々を共有する。コントローラ４は、ある物理セットをライト許可モードに設定し、他の物理セットそれぞれをリードオンリーモードに設定する（ステップＳ１３）。
【０１８６】
コントローラ４がホスト２からライト要求（ライトコマンド）を受信したならば（ステップＳ１４のＹＥＳ）、コントローラ４は、このライト要求に応じて、書き込み動作を実行する（ステップＳ１６）。ライト要求は、複数のＶＳＳＤ＃１〜＃ｎのいずれか一つのＶＳＳＤを指定するＶＳＳＤ指定パラメータを含む。ステップＳ１６では、コントローラ４は、書き込むべきデータ（ライトデータ）を、ライト許可モードに設定されている物理セット内のフリーブロック群から割り当てられた書き込み先ブロックに書き込む。コントローラ４は、データが書き込まれたＶＳＳＤ（ＶＳＳＤ指定パラメータによって指定されるＶＳＳＤ）に対応するルックアップテーブルＬＵＴを更新して、このデータに対応する論理アドレスに、このデータが書き込まれたＮＡＮＤ型フラッシュメモリ５上の物理記憶位置を示す物理アドレスをマッピングする（ステップＳ１７）。
【０１８７】
コントローラ４がホスト２からリード要求（リードコマンド）を受信したならば（ステップＳ１５のＹＥＳ）、コントローラ４は、このリード要求に応じて、リードすべきデータを複数のＶＳＳＤのいずれか一つから読み出す読み出し動作を実行する（ステップＳ１８、Ｓ１９）。このリード要求は、ＶＳＳＤ指定パラメータを含む。ステップＳ１８では、コントローラ４は、このリード要求によって指定されるＶＳＳＤ（ＶＳＳＤ指定パラメータによって指定されるＶＳＳＤ）に対応するルックアップテーブルＬＵＴを参照して、リード要求内に含まれる開始ＬＢＡにマッピングされている物理アドレスをルックアップテーブルＬＵＴから取得する。ステップＳ１９では、コントローラ４は、この物理アドレスによって示されるＮＡＮＤ型フラッシュメモリ５上の物理記憶位置からデータを読み出し、この読み出されたデータをホスト２に返す。
【０１８８】
コントローラ４は、ライト許可モードの物理セットを別の物理セットに変更することが必要か否かを判定する（ステップＳ２０）。ステップＳ２０では、上述のローテーション条件が満たされたか否かが判定されてもよい。この場合、ローテーション条件が満たされているならば、コントローラ４は、ライト許可モードの物理セットを別の物理セットに変更することが必要であると判定し（ステップＳ２０のＹＥＳ）、ライト許可モードの物理セットを別の物理セットに変更する（ステップＳ２１）。ステップＳ２１では、コントローラ４は、複数の物理セットが交代でライト許可モードに設定された物理セットになるように、ライト許可モードに設定されるべき物理セットを複数の物理セット間で変更する。換言すれば、コントローラ４は、全ての物理セットが交代でライト許可モードに設定されるように、ライト許可モードに設定されている物理セットをリードオンリーモードに変更し且つリードオンリーモードに設定されている他の物理セットのいずれか一つをライト許可モードに変更する。これにより、ライト許可モードに設定されるべき物理セットは、複数の物理セット間でローテーションされる。
【０１８９】
図２４のフローチャートは、リード／ライト処理の別の手順を示す。
【０１９０】
コントローラ４は、ＮＡＮＤ型フラッシュメモリダイの各々が一つの物理セットにのみ属するように３２個のＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２を複数の物理セットに分類することによって、これら複数の物理セットを管理する（ステップＳ３１）。コントローラ４は、ＳＳＤ３を共有する複数のクライアント（複数のエンドユーザ）に対応する複数のＶＳＳＤ＃１〜＃ｎを作成する（ステップＳ３２）。ＶＳＳＤ＃１〜＃ｎの各々は複数の物理セットに跨り、ＶＳＳＤ＃１〜＃ｎは複数の物理セットの各々を共有する。コントローラ４は、ある物理セットをライト許可モードに設定し、他の物理セットそれぞれをリードオンリーモードに設定する（ステップＳ３３）。ライト許可モードに設定された物理セット内の有効データは、コントローラ４によって、リードキャッシュ（ＲＣ＃１）３１Ａに事前に格納されている。
【０１９１】
コントローラ４がホスト２からライト要求（ライトコマンド）を受信したならば（ステップＳ３４のＹＥＳ）、コントローラ４は、このライト要求に応じて、書き込み動作を実行する（ステップＳ３６）。ライト要求は、複数のＶＳＳＤ＃１〜＃ｎのいずれか一つのＶＳＳＤを指定するＶＳＳＤ指定パラメータを含む。ステップＳ３６では、コントローラ４は、書き込むべきデータ（ライトデータ）を、ライト許可モードに設定されている物理セット内のフリーブロック群から割り当てられた書き込み先ブロックに書き込む。コントローラ４は、データが書き込まれたＶＳＳＤ（ＶＳＳＤ指定パラメータによって指定されるＶＳＳＤ）に対応するルックアップテーブルＬＵＴを更新して、このデータに対応する論理アドレスに、このデータが書き込まれたＮＡＮＤ型フラッシュメモリ５上の物理記憶位置を示す物理アドレスをマッピングする（ステップＳ３７）。
【０１９２】
コントローラ４がホスト２からリード要求（リードコマンド）を受信したならば（ステップＳ３５のＹＥＳ）、コントローラ４は、このリード要求に応じて、リードすべきデータを複数のＶＳＳＤのいずれか一つまたはリードキャッシュ（ＲＣ＃１）３１Ａから読み出す読み出し動作を実行する（ステップＳ３９〜Ｓ４２）。このリード要求は、ＶＳＳＤ指定パラメータを含む。
【０１９３】
ステップＳ３９では、コントローラ４は、このリード要求によって指定されるＶＳＳＤ（ＶＳＳＤ指定パラメータによって指定されるＶＳＳＤ）に対応するルックアップテーブルＬＵＴを参照して、リード要求内に含まれる開始ＬＢＡにマッピングされている物理アドレスをルックアップテーブルＬＵＴから取得する。ステップＳ４０では、コントローラ４は、この物理アドレスに基づいて、リード対象のデータが格納されている物理セットがライト許可モードに設定されている物理セットであるか否か、つまりリード対象のデータが格納されている物理記憶位置がライト許可モードに設定されている物理セットに属しているか否かを判定する。リード対象のデータが格納されている物理セットがライト許可モードに設定されている物理セットであるならば（ステップＳ４０のＹＥＳ）、ステップＳ４１において、コントローラ４は、リード対象のデータをリードキャッシュ（ＲＣ＃１）３１Ａから読み出し、この読み出されたデータをホスト２に返す。一方、リード対象のデータが格納されている物理セットがライト許可モードに設定されている物理セットでないならば（ステップＳ４０のＮＯ）、ステップＳ４２において、コントローラ４は、この物理アドレスによって示される物理記憶位置、つまりリードオンリーモードの物理セット内の物理記憶位置からデータを読み出し、この読み出されたデータをホスト２に返す。
【０１９４】
このようなライト／リード処理のバックグラウンドで、コントローラ４は、次にライト許可モードに設定されるべき物理セット内の有効データをリードキャッシュ（ＲＣ＃２）３１Ｂに格納する処理を実行する（ステップＳ３８）。
【０１９５】
そして、コントローラ４は、ライト許可モードの物理セットを別の物理セットに変更することが必要か否かを判定する（ステップＳ３８）。ステップＳ３８では、上述のローテーション条件が満たされたか否かが判定されてもよい。この場合、ローテーション条件が満たされているならば、コントローラ４は、ライト許可モードの物理セットを別の物理セットに変更することが必要であると判定し（ステップＳ４３のＹＥＳ）、ライト許可モードの物理セットを別の物理セットに変更する（ステップＳ４４）。ステップＳ４４では、コントローラ４は、複数の物理セットが交代でライト許可モードに設定された物理セットになるように、ライト許可モードに設定されるべき物理セットを複数の物理セット間で変更する。換言すれば、コントローラ４は、全ての物理セットが交代でライト許可モードに設定されるように、ライト許可モードに設定されている物理セットをリードオンリーモードに変更し且つリードオンリーモードに設定されている他の物理セットのいずれか一つ（次にライト許可モードに設定されるべき物理セット）をライト許可モードに変更する。これにより、ライト許可モードに設定されるべき物理セットは、複数の物理セット間でローテーションされる。
【０１９６】
新たにライト許可モードに設定された物理セット内の有効データはリードキャッシュ（ＲＣ＃２）３１Ｂに格納されている。したがって、ステップＳ４１では、リードキャッシュ（ＲＣ＃２）３１Ｂからデータがリードされる。また、ステップＳ３８では、次にライト許可モードに設定されるべき物理セット内の有効データをリードキャッシュ（ＲＣ＃１）３１Ａに格納する処理が実行される。
【０１９７】
図２５のフローチャートは、ガベージコレクション（ＧＣ）動作の手順を示す。
【０１９８】
コントローラ４は、ライト許可モードに設定されている物理セット内の幾つかの共有ブロックをＧＣ対象ブロック（ＧＣソースブロック）として選択する（ステップＳ５１）。そして、コントローラ４は、ＧＣ対象ブロックにＧＣを施すことによって、選択された各選択された共有ブロック内の有効データを、ＶＳＳＤ＃１〜ＶＳＳＤ＃ｎに対応するｎ種類のデータに分類する（ステップＳ５２）。ステップＳ５２では、コントローラ４は、（１）選択された共有ブロック内のＶＳＳＤ＃１用の有効データを、ライト許可モードに設定されている物理セットのフリーブロック群から割り当てられたＶＳＳＤ＃１用のＧＣコピー先ブロック＃１にコピーし、（２）選択された共有ブロック内のＶＳＳＤ＃２用の有効データを、ライト許可モードに設定されている物理セットのフリーブロック群から割り当てられたＶＳＳＤ＃２用のＧＣコピー先ブロック＃２にコピーし、そして、同様にして、（３）選択された共有ブロック内のＶＳＳＤ＃ｎ用の有効データを、ライト許可モードに設定されている物理セットのフリーブロック群から割り当てられたＶＳＳＤ＃ｎ用のＧＣコピー先ブロック＃ｎにコピーする。さらに、コントローラ４は、ライト許可モードに設定されている物理セット内の幾つかの非共有ブロックもＧＣ対象ブロック（ＧＣソースブロック）として選択してもよい。この場合、ＶＳＳＤ＃１用の非共有ブロック内の有効データは、ＶＳＳＤ＃１用のＧＣコピー先ブロック＃１にコピーされる。ＶＳＳＤ＃２用の非共有ブロック内の有効データは、ＶＳＳＤ＃２用のＧＣコピー先ブロック＃２にコピーされる。ＶＳＳＤ＃ｎ用の非共有ブロック内の有効データは、ＶＳＳＤ＃ｎ用のＧＣコピー先ブロック＃ｎにコピーされる。
【０１９９】
図２６のフローチャートは、物理セット間ウェアレベリングの手順を示す。
【０２００】
コントローラ４は、ライト許可モードに設定されている物理セットのフリーブロックプール内のフリーブロックをＧＣコピー先ブロックとして選択する（ステップＳ６１）。そして、コントローラ４は、ライト許可モードに設定されている物理セットよりも書き換え回数が多い物理セット内のアクティブブロックの有効データを、ライト許可モードに設定されている物理セット内のＧＣコピー先ブロックにコピーし、これによってこれら物理セット間の消耗の差を減少させる（ステップＳ６２）。
【０２０１】
より詳しくは、ステップＳ６２では、まず、書き込み許可モードに設定されている物理セットよりも多い書き換え回数（プログラム／イレーズサイクル）を有し且つリードオンリーモードに設定されている他の物理セットがＧＣソース物理セットとして選択される。そして、複数のＶＳＳＤ＃１〜＃ｎにそれぞれ対応する複数の有効データ部が、選択されたＧＣソース物理セットから、書き込み許可モードに設定されている物理セット内のフリーブロック群から割り当てられたＧＣコピー先ブロック＃１〜＃ｎにそれぞれコピーされる。
【０２０２】
図２７は、次にライト許可モードに設定されるべき物理セットに格納されている全ての有効データをライト許可モードに現在設定されている物理セットにコピーする動作を示す。
【０２０３】
サイクル１では、物理セット＃１はライト許可モードに設定され、物理セット＃２、＃３、＃４はリードオンリーモードに設定される。物理セット＃４は、次にライト許可モードに設定されるべき物理セットである。
【０２０４】
サイクル１では、ホスト２からのライトデータは、まず、ライトバッファ（ＷＢ）３０に書き込まれる。そして、このライトデータが、ライトバッファ（ＷＢ）３０から物理セット＃１内の書き込み先ブロックに書き込まれる。ライトバッファ（ＷＢ）３０に書き込まれたライトデータは、サイクル１が終了するまでライトバッファ（ＷＢ）３０内に維持される。したがって、サイクル１においてホスト２から物理セット＃１に書き込まれたデータは、ライトバッファ（ＷＢ）３０から読み出すことができる。
【０２０５】
また、サイクル１では、この物理セット＃４に格納されている全ての有効データが、ライト許可モードに設定されている物理セット＃１にコピーされる。この場合、物理セット＃４に格納されているＶＳＳＤ＃１用の全ての有効データは、物理セット＃１のフリーブロック群から割り当てられたＶＳＳＤ＃１用のＧＣコピー先ブロック群にコピーされる。物理セット＃４に格納されているＶＳＳＤ＃２用の全ての有効データは、物理セット＃１のフリーブロック群から割り当てられたＶＳＳＤ＃２用のＧＣコピー先ブロック群にコピーされる。同様に、物理セット＃４に格納されているＶＳＳＤ＃ｎ用の全ての有効データは、物理セット＃１のフリーブロック群から割り当てられたＶＳＳＤ＃ｎ用のＧＣコピー先ブロック群にコピーされる。
【０２０６】
有効データのコピーの進行中に、物理セット＃４内のデータのリードがホスト２からのリード要求によって要求された場合、このデータは、物理セット＃１からではなく、物理セット＃４から読み出される。したがって、物理セット＃４から物理セット＃１への有効データのコピーに起因して、物理セット＃１において、リード・オン・ライト・ダイ・コンテンションが生じる可能性が高くなることはない。
【０２０７】
全ての有効データのコピーの完了の後、コントローラ４は、物理セット＃４に対する消去動作を実行して物理セット＃４を有効データを含まないフリー物理セットにし、この物理セット＃４をライト許可モードに変更する。
【０２０８】
これにより、サイクル２では、物理セット＃４は、ライト許可モードに設定された物理セットとして再利用される。物理セット＃１はリードオンリーモードに変更される。物理セット＃３は、次にライト許可モードに設定されるべき物理セットとなる。
【０２０９】
このサイクル２の開始時点では、物理セット＃４は有効データを含まない。したがって、この物理セット＃４がリード対象となる確率を低減できる。
【０２１０】
サイクル２では、ホスト２からのライトデータは、まず、ライトバッファ（ＷＢ）３０に書き込まれる。そして、このライトデータが、ライトバッファ（ＷＢ）３０から物理セット＃４内の書き込み先ブロックに書き込まれる。ライトバッファ（ＷＢ）３０に書き込まれたライトデータは、サイクル２が終了するまでライトバッファ（ＷＢ）３０内に維持される。したがって、サイクル２においてホスト２から物理セット＃４に書き込まれたデータは、ライトバッファ（ＷＢ）３０から読み出すことができる。
【０２１１】
また、このサイクル２では、次にライト許可モードに設定されるべき物理セット＃３に格納されている全ての有効データが、ライト許可モードに設定されている物理セット＃４にコピーされる。この場合、物理セット＃３に格納されているＶＳＳＤ＃１用の全ての有効データは、物理セット＃４のフリーブロック群から割り当てられたＶＳＳＤ＃１用のＧＣコピー先ブロック群にコピーされる。物理セット＃３に格納されているＶＳＳＤ＃２用の全ての有効データは、物理セット＃４のフリーブロック群から割り当てられたＶＳＳＤ＃２用のＧＣコピー先ブロック群にコピーされる。同様に、物理セット＃３に格納されているＶＳＳＤ＃ｎ用の全ての有効データは、物理セット＃４のフリーブロック群から割り当てられたＶＳＳＤ＃ｎ用のＧＣコピー先ブロック群にコピーされる。
【０２１２】
有効データのコピーの進行中に、物理セット＃３内のデータのリードがホスト２からのリード要求によって要求された場合、このデータは、物理セット＃４からではなく、物理セット＃３から読み出される。したがって、物理セット＃３から物理セット＃４への有効データのコピーに起因して、物理セット＃４において、リード・オン・ライト・ダイ・コンテンションが生じる可能性が高くなることはない。
【０２１３】
全ての有効データのコピーの完了の後、コントローラ４は、物理セット＃３に対する消去動作を実行して物理セット＃３を有効データを含まないフリー物理セットにし、この物理セット＃３をライト許可モードに変更する。
【０２１４】
これにより、サイクル３では、物理セット＃３は、ライト許可モードに設定された物理セットとして再利用される。物理セット＃４はリードオンリーモードに変更される。物理セット＃２は、次にライト許可モードに設定されるべき物理セットとなる。
【０２１５】
図２８のフローチャートは、リード／ライト／ガベージコレクション（ＧＣ）動作の手順を示す。
【０２１６】
コントローラ４は、次にライト許可モードに設定されるべき物理セットをＧＣソース物理セットとして選択する（ステップＳ７１）。コントローラ４は、ＧＣソース物理セット内の全ての有効データを、ライト許可モードに設定されている物理セット（ＧＣデスティネーション物理セット）にコピーする（ステップＳ９２）。
【０２１７】
コントローラ４は、ホスト２から受信されるＩ／Ｏ要求がリード要求またはライト要求のいずれであるかを判定する（ステップＳ７３、Ｓ７４）。
【０２１８】
ホスト２から受信されたＩ／Ｏ要求がライト要求であるならば（ステップＳ７４のＹＥＳ）、コントローラ４は、ホスト２からのライトデータをライトバッファ（ＷＢ）３０に蓄積した状態（残した状態）でこのライトデータを、ライト許可モードに設定されている物理セット内の書き込み先ブロックに書き込む（ステップＳ７５）。
【０２１９】
ホスト２から受信されたＩ／Ｏ要求がリード要求であるならば（ステップＳ７３のＹＥＳ）、コントローラ４は、リード対象のデータがライトバッファ（ＷＢ）３０に蓄積されているか否かを判定する（ステップＳ７６）。
【０２２０】
一方、リード対象のデータがライトバッファ（ＷＢ）３０に蓄積されているならば（ステップＳ７６のＹＥＳ）、コントローラ４は、リード対象のデータをライトバッファ（ＷＢ）３０から読み出し、読み出したデータをホスト２に返す（ステップＳ７７）。
【０２２１】
リード対象のデータがライトバッファ（ＷＢ）３０に蓄積されていないならば（ステップＳ７６のＮＯ）、コントローラ４は、リード対象のデータがＧＣソース物理セットに格納されているデータであるか否かを判定する（ステップＳ７８）。
【０２２２】
リード対象のデータがＧＣソース物理セットに格納されているデータであるならば（ステップＳ７８のＹＥＳ）、コントローラ４は、リード対象のデータをＧＣソース物理セットから読み出し、読み出したデータをホスト２に返す（ステップＳ７９）。
【０２２３】
一方、リード対象のデータがＧＣソース物理セットに格納されていないデータであるならば（ステップＳ７８のＮＯ）、コントローラ４は、リード対象のデータを、このリード対象のデータが格納されている物理セットから読み出し、読み出したデータをホスト２に返す（ステップＳ８０）。
【０２２４】
コントローラ４は、ＧＣソース物理セットに格納されている全ての有効データのコピーが完了したか否かを判定する（ステップＳ８１）。
【０２２５】
全ての有効データのコピーが完了していないならば（ステップＳ８１のＮＯ）、コントローラ４は、ステップＳ７２からの処理を再び実行する。
【０２２６】
全ての有効データのコピーが完了したならば（ステップＳ８１のＹＥＳ）、コントローラ４は、ライト許可モードの物理セットを他の物理セットに変更する（ステップＳ８２）。ライト許可モードの物理セットを変更する処理は、上述のローテーション条件が満たされた時に実行されてもよい。ステップＳ８２では、コントローラ４は、ライト許可モードに設定されている物理セットをリードオンリーモードに変更し、次にライト許可モードに設定されるべき物理セットをライト許可モードに変更する。
【０２２７】
図２９は、データコピー前のＧＣソース物理セット／ＧＣデスティネーション物理セットの内容とデータコピー後のＧＣソース物理セット／ＧＣデスティネーション物理セットの内容を示す。
【０２２８】
ＧＣソース物理セットは、次にライト許可モードに設定されるべき物理セットである。ＧＣデスティネーション物理セットは、ライト許可モードに現在設定されている物理セットである。
【０２２９】
図２７で説明したように、本実施形態では、次にライト許可モードに設定されるべき物理セット（ＧＣソース物理セット）に格納されている全ての有効データを、ライト許可モードに現在設定されている物理セット（ＧＣデスティネーション物理セット）にコピーするＧＣ処理（データコピー処理）を実行することができる。
【０２３０】
図２９の左部に示されているように、データコピー前においては、通常、ＧＣソース物理セットに格納されているデータ（アクティブデータ）は、有効データと無効データとの双方を含む。ライト許可モードに設定された直後の物理セット（ＧＣデスティネーション物理セット）は、有効データを含まないフリー物理セットである。
【０２３１】
コントローラ４は、ＧＣ処理（データコピー処理）を実行して、ＧＣソース物理セットに格納されている全ての有効データをＧＣデスティネーション物理セットにコピーする。
【０２３２】
図２９の右部に示されているように、データコピー後においては、ＧＣソース物理セットは有効データを含まないフリー物理セットとなる。ＧＣデスティネーション物理セットは、ＧＣソース物理セットからコピーされた有効データ（Ｃｏｐｉｅｄ）を含む。また、ＧＣデスティネーション物理セットは、ＧＣソース物理セットの無効データの量に相当する容量を有する空き領域（フリー領域）を含む。この空き領域は、ホスト２からの新データの書き込みに利用することができる。
【０２３３】
このため、コントローラ４は、ライト許可モードに設定された物理セット（ＧＣデスティネーション物理セット）に書き込み可能なホスト２からのデータの量を、ＧＣソース物理セットの無効データ量（ガベージ量）までに制限してもよい。
【０２３４】
ＧＣソース物理セットの無効データの総量は、ＶＳＳＤ＃１に対応する無効データの量と、ＶＳＳＤ＃２に対応する無効データの量と、ＶＳＳＤ＃３に対応する無効データの量と、…ＶＳＳＤ＃nに対応する無効データの量との合計である。したがって、コントローラ４は、ＶＳＳＤ＃１〜ＶＳＳＤ＃nそれぞれがホスト２から受け取ることが可能なライトデータの量を、ＧＣソース物理セットのＶＳＳＤ＃１〜ＶＳＳＤ＃nそれぞれの無効データ量までにそれぞれ制限してもよい。
【０２３５】
ＧＣ処理（データコピー処理）によってフリー物理セットとなったＧＣソース物理セットは、その消去動作が実行された後に、ライト許可モードに設定された物理セット（新たなＧＣデスティネーション物理セット）として再利用される。
【０２３６】
図３０は、リードキャッシュを利用する構成における、データコピー前のＧＣソース物理セット／ＧＣデスティネーション物理セットの内容とデータコピー後のＧＣソース物理セット／ＧＣデスティネーション物理セットの内容を示す。
【０２３７】
リードキャッシュを利用する構成においては、ＧＣソース物理セット内のアクティブブロック群のうち、有効データと無効データとが混在するアクティブブロック群のみをＧＣ処理（データコピー処理）の対象とすることができる。
【０２３８】
図３０の左部に示されているように、データコピー前においては、ＧＣソース物理セットは、ＧＣ対象領域（ＧＣ  Ｔａｒｇｅｔ）と、非ＧＣ対象領域（ＮｏｎＧＣ）とを含む。ＧＣ対象領域（ＧＣ  Ｔａｒｇｅｔ）は、有効データと無効データとが混在するアクティブブロック群を含む。非ＧＣ対象領域（ＮｏｎＧＣ）は、有効データのみでほぼ満たされているアクティブブロック群（コールドユーザデータ）を含む。有効データのみでほぼ満たされているアクティブブロック群とは、ブロック内の有効データ量が閾値よりも大きいブロック（コールドユーザデータブロック）、つまりたとえＧＣが施されても空きスペースを実行されてもフリースペースの作成にほとんど貢献しないブロックを意味する。コールドユーザデータブロックの例には、書き換え頻度の低いコールドユーザデータ（単にコールドデータとも云う）で満たされているブロック等が含まれてもよい。ライト許可モードに設定された直後の物理セット（ＧＣデスティネーション物理セット）は、有効データを含まないフリー領域と、非ＧＣ対象領域（ＮｏｎＧＣ）とを含む。
【０２３９】
コントローラ４は、ＧＣ処理（データコピー処理）を実行して、ＧＣソース物理セットのＧＣ対象領域（ＧＣ  Ｔａｒｇｅｔ）に格納されている有効データのみをＧＣデスティネーション物理セットにコピーする。
【０２４０】
図３０の右部に示されているように、データコピー後においては、ＧＣソース物理セットは、有効データを含まないフリー領域と、コールドユーザデータを含む非ＧＣ対象領域（ＮｏｎＧＣ）とを含む。ＧＣソース物理セット内のコールドユーザデータは、リードキャッシュに格納される。ＧＣデスティネーション物理セットは、コールドユーザデータ（ＮｏｎＧＣ）と、ＧＣソース物理セットからコピーされた有効データ（Ｃｏｐｉｅｄ）とを含む。また、ＧＣデスティネーション物理セットは、ＧＣソース物理セットのＧＣ対象領域（ＧＣ  Ｔａｒｇｅｔ）内の無効データの量に相当する容量を有する空き領域（フリー領域）を含む。この空き領域は、ホスト２からの新データの書き込みに利用することができる。
【０２４１】
このため、コントローラ４は、ライト許可モードに設定された物理セット（ＧＣデスティネーション物理セット）に書き込み可能なホスト２からのデータの量を、ＧＣソース物理セットのＧＣ対象領域（ＧＣ  Ｔａｒｇｅｔ）内の無効データ量（ガベージ量）までに制限してもよい。この場合、コントローラ４は、ＶＳＳＤ＃１〜ＶＳＳＤ＃nそれぞれがホスト２から受け取ることが可能なライトデータの量を、ＧＣソース物理セットのＧＣ対象領域（ＧＣ  Ｔａｒｇｅｔ）内のＶＳＳＤ＃１〜ＶＳＳＤ＃nそれぞれの無効データ量までにそれぞれ制限してもよい。
【０２４２】
ＧＣ処理（データコピー処理）によってフリー領域が増加されたＧＣソース物理セットは、そのフリー領域の消去動作が実行された後に、ライト許可モードに設定された物理セット（新たなＧＣデスティネーション物理セット）として再利用される。
【０２４３】
図３１は、各物理セット内の個々のブロックの状態遷移を示す。
【０２４４】
（１）コントローラ４は、ホスト２から受信したライトデータ（ＶＳＳＤ＃１に対するライトデータ、ＶＳＳＤ＃２に対するライトデータ、…ＶＳＳＤ＃ｎに対するライトデータ）をライトバッファ（ＷＢ）３０に書き込む。
【０２４５】
（２）コントローラ４は、ライトバッファ（ＷＢ）３０内のライトデータを、ライト許可モードに設定されている物理セット＃２内の書き込み先ブロック（共有書き込み先ブロック）に書き込む。この共有書き込み先ブロックは、ＶＳＳＤ＃１に対するライトデータ、ＶＳＳＤ＃２に対するライトデータ、…ＶＳＳＤ＃ｎに対するライトデータが書き込まれるべき書き込み先ブロックである。
【０２４６】
（３）共有書き込み先ブロック全体がライトデータで満たされた時、コントローラ４は、この共有書き込み先ブロックを、物理セット＃２内のアクティブブロックプールに移動して共有ブロックとして管理する。
【０２４７】
（４）コントローラ４は、ＧＣを実行する。このＧＣでは、コントローラ４は、ＶＳＳＤ＃１〜ＶＳＳＤ＃ｎに対応する複数種のデータを共有ブロック群から、ＶＳＳＤ＃１〜ＶＳＳＤ＃ｎに対応する複数のＧＣコピー先ブロックにコピーし、これによってこれら複数種のデータを互いに分離する。また、このＧＣでは、リードオンリーモードに設定されている他の物理セットもＧＣ対象となり得る。例えば、コントローラ４は、次にライト許可モードに設定されるべき物理セット（ここでは、物理セット＃１）のＧＣ対象領域（ＧＣ  Ｔａｒｇｅｔ）内の有効データを、複数のＧＣコピー先ブロックにコピーする。
【０２４８】
（５）あるＶＳＳＤに対応するＧＣコピー先ブロックが有効データで満たされると、コントローラ４は、このＧＣコピー先ブロックを、物理セット＃２内のアクティブブロックプールに移動して非共有ブロックとして管理する。
【０２４９】
（６）コントローラ４は、次にライト許可モードに設定されるべき物理セット（ここでは、物理セット＃１）内のコールドユーザデータをリードキャッシュに格納する処理を実行する。物理セット＃２内のコールドユーザデータはリードキャッシュ（ＲＣ＃１）３１Ａにすでに存在している。このため、コントローラ４は、物理セット＃１内のコールドユーザデータは、別のリードキャッシュ（ＲＣ＃２）３１Ｂに格納する。なお、物理セット＃１内のコールドユーザデータもＧＣ対象にしてもよい。この場合には、物理セット＃１全体をフリー物理セットにすることができるので、コールドユーザデータをリードキャッシュに格納する処理は不要となる。
【０２５０】
図３２は、複数のＳＳＤを搭載したコンピュータ（サーバ）の構成例を示す。
【０２５１】
このコンピュータ（情報処理装置）は、ラックに収容可能な薄い箱形の筐体３０１を備える。多数のＳＳＤ３は筐体３０１内に配置されてもよい。この場合、各ＳＳＤ３は筐体３０１の前面３０１Ａに設けられたスロットに取り外し可能に挿入されてもよい。多数のＳＳＤ３の各々は、多数のＶＳＳＤ、例えば、１００〜１０００のＶＳＳＤを含む。
【０２５２】
システムボード（マザーボード）３０２は筐体３０１内に配置される。システムボード（マザーボード）３０２上においては、ＣＰＵ、メモリ、ネットワークコントローラを含む様々な電子部品が実装されている。これら電子部品がホスト２として機能する。
【０２５３】
以上説明したように、本実施形態によれば、複数の不揮発性メモリダイ（例えばＮＡＮＤ型フラッシュメモリダイ）の各々が一つの物理セットにのみ属するように複数の不揮発性メモリダイが複数の物理セットに分類され、複数の物理セットの各々を共有する複数の記憶領域（ＶＳＳＤ）であって、各々が複数の物理セットに跨る複数の記憶領域（ＶＳＳＤ）が作成される。複数の物理セット内の物理セットがライト動作およびリード動作が許可されたライト許可モード（第１モード）に設定される。複数の物理セット内の他の物理セットそれぞれは、リード動作が許可され且つライト動作が禁止されたリードオンリーモード（第２モード）に設定される。そして、全ての物理セットが交代でライト許可モード（第１モード）に設定されるように、ライト許可モード（第１モード）に設定されている物理セットをリードオンリーモード（第２モード）に変更し且つリードオンリーモード（第２モード）に設定されている他の物理セットのいずれか一つをライト許可モード（第１モード）に変更する処理が実行される。
【０２５４】
したがって、ある期間においては、ホスト２からのどのライトデータも、ライト許可モードに現在設定されている特定の物理セットに書き込まれ、リードオンリーモードに現在設定されている物理セットに書き込まれることはない。よって、リード・オン・ライト・ダイ・コンテンションが生じる可能性がある物理セットを、ライト許可モードに現在設定されている特定の物理セットのみに制限することができる。残りの全ての物理セットはリードオンリーモードであるので、残りの全ての物理セットにおいては、データ書き込み動作は実行されない。したがって、残りの全ての物理セットにおいては、リード・オン・ライト・ダイ・コンテンションは生じない。この結果、本実施形態のＳＳＤ３では、リード・オン・ライト・ダイ・コンテンションが生じる確率を低減することができ、これによってＳＳＤ３を共有する複数のエンドユーザ（テナント）間のアクセス競合（リード・オン・ライト・ダイ・コンテンション）によるＩ／Ｏ性能の低下を低減することができる。
【０２５５】
また、本実施形態では、各物理セットは複数のＶＳＳＤによって共有されており、且つライト許可モードに設定されるべき物理セットが複数の物理セット間で変更される。したがって、どの記憶領域（どのＶＳＳＤ）についても、データ書き込みを複数の物理セットに分散させることが可能となり、これによって物理セット間の消耗の差（プログラム／イレーズサイクルの数の差）を小さくすることができる。このことは、ＳＳＤ３の寿命を最大化することを可能にする。
【０２５６】
なお、本実施形態の構成は、ＮＡＳ、オールフラッシュアレイといった、複数のＳＳＤを含むストレージシステム（ストレージアレイ）に適用することもできる。
【０２５７】
また、本実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０２５８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２５９】
２…ホスト、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、２１…ＶＳＳＤ作成部、２２…書き込み可能物理セット変更部、２３…ＧＣ制限部、２４…リードキャッシュ制御部、２５…データコピー制御部。
【図１】
2019008729.tif 000003
【図２】
2019008729.tif 000004
【図３】
2019008729.tif 000005
【図４】
2019008729.tif 000006
【図５】
2019008729.tif 000007
【図６】
2019008729.tif 000008
【図７】
2019008729.tif 000009
【図８】
2019008729.tif 000010
【図９】
2019008729.tif 000011
【図１０】
2019008729.tif 000012
【図１１】
2019008729.tif 000013
【図１２】
2019008729.tif 000014
【図１３】
2019008729.tif 000015
【図１４】
2019008729.tif 000016
【図１５】
2019008729.tif 000017
【図１６】
2019008729.tif 000018
【図１７】
2019008729.tif 000019
【図１８】
2019008729.tif 000020
【図１９】
2019008729.tif 000021
【図２０】
2019008729.tif 000022
【図２１】
2019008729.tif 000023
【図２２】
2019008729.tif 000024
【図２３】
2019008729.tif 000025
【図２４】
2019008729.tif 000026
【図２５】
2019008729.tif 000027
【図２６】
2019008729.tif 000028
【図２７】
2019008729.tif 000029
【図２８】
2019008729.tif 000030
【図２９】
2019008729.tif 000031
【図３０】
2019008729.tif 000032
【図３１】
2019008729.tif 000033
【図３２】
2019008729.tif 000034