(57)【特許請求の範囲】
【請求項１】
上位装置からのアクセスコマンドに従うアクセス対象のデータのアクセスをアクセス先の記憶領域の基になっている記憶デバイスに対して行うコントローラと、
前記記憶デバイスに対してアクセスされるアクセス対象のデータが一時的に格納されるキャッシュメモリ（ＣＭ）と
を有し、
前記ＣＭは、記憶媒体として不揮発性半導体メモリ（ＮＶＭ）を有しており、
前記ＣＭは、前記コントローラに対して論理空間を提供し、前記コントローラは、前記論理空間を複数のセグメントに分割して管理するようになっており、前記論理空間の論理アドレスを指定して前記ＣＭにアクセスし、前記ＣＭは、前記論理アドレスを指定したアクセスを受けて、前記ＮＶＭを構成する複数の物理領域のうち、前記コントローラから指定された論理アドレスに属する論理領域に割り当てられた物理領域にアクセスするようになっており、
セグメントの単位である第１管理単位は、前記ＣＭにおいて前記ＮＶＭに対して行われるアクセスの単位である第２管理単位よりも大きく、
前記論理空間の容量は、前記ＮＶＭの記憶容量よりも大きい容量であり、
前記コントローラは、前記論理空間を構成する複数のセグメントの各々の属性を管理しており、
セグメントの属性として、前記記憶デバイスに未格納のデータが記憶されているセグメントであることを意味するダーティと、前記記憶デバイスに格納済のデータが記憶されていることを意味するクリーンと、新たにデータが書き込まれてよいセグメントであることを意味するフリーとがあり、
前記論理空間の残容量は、フリーのセグメントの合計容量であり、
前記コントローラは、前記ＮＶＭにおけるフリーの物理領域の合計容量である残容量に関する容量情報を含んだ内部情報を前記ＣＭから受信するようになっており、
フリーの物理領域は、いずれの論理領域にも割り当てられておらず、データが新たに書き込まれることが可能な記憶領域であり、
前記コントローラは、所定の契機で、前記容量情報を基に、前記ＣＭの残容量を特定し、特定した残容量が所定の閾値以下の場合に、残容量が所定の閾値より多くなるように、クリーンのセグメントの属性をフリーに変更する、
ストレージ装置。
【請求項２】
前記コントローラは、属性がフリーに変更されるセグメントの論理アドレスを前記ＣＭに通知し、前記ＣＭが、通知された論理アドレスに属する論理領域に対する物理領域をフリーの物理領域に変更する、
請求項１記載のストレージ装置。
【請求項３】
前記ＣＭは、論理アドレスが指定されたライトリクエストを前記コントローラから受信し、且つ、前記ライトリクエストに従うデータを、前記ライトリクエストで指定されている論理アドレスに属する論理領域に割り当てた物理領域に書き込んだ場合に、前記内部情報を前記コントローラに送信するようになっており、
前記所定の契機は、前記ライトリクエストに応答して前記ＣＭから前記内部情報を前記コントローラが受信したときである、
請求項２記載のストレージ装置。
【請求項４】
前記コントローラから前記ＣＭへのライトリクエストは、前記アクセスコマンドとして受信したリードコマンドに従うデータであり前記記憶デバイスから読み出されたデータのライトリクエスト、又は、前記上位装置からアクセスコマンドとして受信したライトコマンドに従うデータのライトリクエストである、
請求項３記載のストレージ装置。
【請求項５】
前記容量情報は、前記ＮＶＭの実際の残容量よりも少ない残容量が特定される偽容量情報である、
請求項１記載のストレージ装置。
【請求項６】
前記容量情報が前記偽容量情報とされるのは、前記ＮＶＭの書き換え頻度が所定の閾値より多い場合である、
請求項５記載のストレージ装置。
【請求項７】
前記セグメントの属性として、クリーンのセグメントのうち相対的にアクセス数の少ないデータを格納しており許可されたセグメントであることを意味するフリーウェイトがあり、
前記コントローラは、前記ＣＭに対して、複数のフリーウェイトアドレスを通知し、前記ＣＭは、前記複数のフリーウェイトアドレスに属する複数の論理領域にそれぞれ割り当てられている複数の物理領域の中から、フリーの物理領域とする物理領域を選択し、
フリーウェイトアドレスは、フリーウェイトのセグメントに属する論理アドレスである、
請求項２記載のストレージ装置。
【請求項８】
前記ＮＶＭは、それぞれが複数の物理ページで構成された複数の物理ブロックを有するフラッシュメモリであり、
前記ＣＭは、フリーの物理ブロックを増やすためのリクラメーション処理において、移動される有効データの総量が所定の閾値以下となるように、複数のフリーウェイトアドレスに属する複数の論理ブロックに割り当てられている複数の物理ブロックの中から、フリーの物理ブロックとする物理ブロックを選択する、
請求項７記載のストレージ装置。
【請求項９】
前記ＣＭは、選択した物理ブロックに対応したフリーウェイトアドレスを指定したアクセスを前記コントローラから受けた場合、前記コントローラに対して、前記指定されたフリーウェイアドレスについてフリーとされたことを通知する、
請求項７記載のストレージ装置。
【請求項１０】
前記ＣＭは、選択した物理ブロックに対応したフリーウェイトアドレスを前記コントローラに通知し、通知したフリーウェイトアドレスのうち前記コントローラから許諾されたフリーウェイトアドレスに対応する物理領域のみを、フリーの物理領域とする、
請求項７記載のストレージ装置。
【請求項１１】
前記ＣＭは、前記コントローラからのデータを圧縮して前記ＮＶＭに格納するようになっており、且つ、圧縮されたデータを格納した場合に、前記圧縮されたデータが格納された物理領域の容量に従い容量情報を更新し更新後の容量情報を含んだ前記内部情報を前記コントローラに送信するようになっている、
請求項１記載のストレージ装置。
【請求項１２】
前記論理空間の容量は、前記第２管理単位に対する前記第１管理単位の比率と、前記ＮＶＭの記憶容量とに基づいて決定された容量である、
請求項１記載のストレージ装置。
【請求項１３】
上位装置からアクセスコマンドを受信し前記アクセスコマンドに従うアクセス対象のデータのアクセスをアクセス先の記憶領域の基になっている記憶デバイスに対して行うコントローラに対して、前記記憶デバイスに対してアクセスされるアクセス対象のデータが一時的に格納され不揮発性半導体メモリ（ＮＶＭ）を有するキャッシュメモリ（ＣＭ）によって、論理空間を提供し、
前記ＣＭによって、複数のセグメントで構成される前記論理空間の論理アドレスを指定したアクセスを前記コントローラから受けて、前記ＮＶＭを構成する複数の物理領域のうち、前記コントローラから指定された論理アドレスに属する論理領域に割り当てられた物理領域にアクセスし、
セグメントの単位である第１管理単位は、前記ＣＭにおいて前記ＮＶＭに対して行われるアクセスの単位である第２管理単位よりも大きく、
前記論理空間の容量は、前記ＮＶＭの記憶容量よりも大きい容量であり、
前記コントローラは、前記論理空間を構成する複数のセグメントの各々の属性を管理するようになっており、
セグメントの属性として、前記記憶デバイスに未格納のデータが記憶されているセグメントであることを意味するダーティと、前記記憶デバイスに格納済のデータが記憶されていることを意味するクリーンと、新たにデータが書き込まれてよいセグメントであることを意味するフリーとがあり、
前記論理空間の残容量は、フリーのセグメントの合計容量であり、
前記ＣＭによって、前記ＮＶＭにおけるフリーの物理領域の合計容量である残容量に関する容量情報を含んだ内部情報を前記コントローラに送信し、
フリーの物理領域は、いずれの論理領域にも割り当てられておらず、データが新たに書き込まれることが可能な記憶領域であり、
前記コントローラは、所定の契機で、前記容量情報を基に、前記ＣＭの残容量を特定し、特定した残容量が所定の閾値以下の場合に、残容量が所定の閾値より多くなるように、クリーンのセグメントの属性をフリーに変更するようになっている、
ストレージ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性半導体メモリをキャッシュとして用いるストレージ制御に関する。
【背景技術】
【０００２】
ストレージ装置は、例えば、複数の記憶デバイス（例えば、ＨＤＤ（Hard Disk Drive））を制御し、多量のデータを高信頼にそれらの記憶デバイスに保持する装置である。この様な、ストレージ装置は、複数のＨＤＤを並列に処理し、サーバー等の上位装置からのアクセス（リード又はライト）コマンドを処理する。
【０００３】
ストレージ装置は、複数の記憶デバイスに基づく複数の記憶領域（例えばＬＵ（Logical Unit））を管理する。ストレージ装置が管理する全記憶領域の中で、頻繁にアクセスがなされる領域は局所的であることが一般に知られている。このため、ストレージ装置が、アクセス頻度の高い領域へのアクセスコマンドを高速に処理することで、記憶領域全体に対してなされるアクセスコマンドの処理性能を平均的に向上させられることが広く知られている。
【０００４】
ストレージ装置は、一般にアクセスコマンドに対する処理性能（以降、単に性能と記す）を向上させる目的で、アクセス頻度の高い領域を高性能に処理するキャッシュというコンポーネントを備えている。キャッシュは、例えば、ストレージ装置が管理する記憶領域のうち、アクセス頻度が相対的に高い記憶領域内のデータを記憶する領域であり、一般には、ＤＲＡＭ（Dynamic Random Access Memory）である。ＤＲＡＭは、ＨＤＤと比べてアクセスコマンドに対する処理が高速であり、アクセスコマンドのアクセス頻度に局所性があれば、局所性に関わるデータをＤＲＡＭ上に格納しておくと、全アクセスコマンド中の大半をＤＲＡＭ上にて処理可能となるため（処理が遅いＨＤＤ群へのアクセスを減らすことが可能であるため）、ストレージ装置のアクセスコマンドに対する性能が向上する。
【０００５】
一方、近年、半導体製造プロセスの微細化とメモリの多値化によりＮＡＮＤ型フラッシュメモリ（以下、ＦＭ)等の不揮発性半導体メモリ（以下、ＮＶＭ）のビットコストが低下し、ＮＶＭの幅広い用途での採用が進んでいる。
【０００６】
その中の一つとして、ＦＭを、ストレージ装置のキャッシュとして処理させるキャッシュ装置が公開されている（例えば特許文献１）。また、ＦＭを使った記憶デバイスであるＳＳＤ（Sold State Drive）を、キャッシュとして制御するソフトウェアもある。
【０００７】
ＦＭのビットコストは、近年下がっており、キャッシュの容量を低コストで増加させることが可能である。キャッシュの容量を増加すると、上位装置からのアクセスコマンドをキャッシュ上にて処理できる確率が増加するため、ストレージ装置のアクセスコマンドに対する処理性能を高速にするのに有効である。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】米国特許出願公開第２００９／０２１６９４５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００９】
以降、上位装置からのアクセスコマンドに従うデータがキャッシュ上に存在することを「キャッシュヒット」と記す。また、上位装置からのアクセスコマンドに従うデータがキャッシュ上に無いことを「キャッシュミス」と記す。また、以降、ＮＶＭのリード／ライト単位をページと記し、ＮＶＭの消去単位をブロックと記す。また、ストレージ装置が管理するキャッシュ領域の管理単位をセグメントと記す。
【００１０】
ストレージ装置は、上位装置からのアクセスコマンドが高確率でキャッシュにて処理されるように、キャッシュに記憶するデータ、及びデータのアドレス範囲を管理する。こうしたキャッシュ管理方式の一つであるＬＲＵ(Least Recently Used)は、「リクエストされてから最も時間が経過したデータのアドレス範囲」をキャッシュから排除する方法として知られている。このＬＲＵによれば、アクセスが頻繁になされるデータ、及びデータのアドレス範囲が、キャッシュ上に残りやすく、キャッシュヒットとなる確率が高まる。その一方、アクセス頻度の低いデータ、及びデータのアドレス範囲については、キャッシュから排除されやすくなる。しかし、こうしたキャッシュの管理は、ストレージ装置のプロセッサの負荷となる場合がある。
【００１１】
プロセッサの負荷は、アクセス範囲の単位となるセグメントのサイズにより変化する。例えば、セグメントのサイズが１６ＫＢのとき、１２８ＫＢアクセス範囲のコマンドを処理するため、プロセッサは、１２８／１６＝８個のセグメントを制御しなければならない。一方、セグメントサイズが１２８ＫＢであれば、１２８ＫＢアクセス範囲のコマンドを処理するため、プロセッサは、１個のセグメントを制御すれば良い。
【００１２】
このように、プロセッサの負荷の軽減のためには、処理するセグメントの数が少なければ良い。すなわち、セグメントのサイズは、最大アクセスコマンドのサイズ（例えば、１２８ＫＢ）より小さいサイズ内で、且つ大きいサイズであるほど望ましい。
【００１３】
しかし、セグメントのサイズを大きくすると、記憶領域の利用効率が低下するという課題が生じる。例えば、セグメントのサイズが１２８ＫＢであるとき、８ＫＢアクセス範囲のコマンドの処理に対して、１２８ＫＢのセグメントを一つ対応付けるため、セグメント中の１２８−８＝１２０ＫＢのサイズが未使用となる。また、セグメントのサイズが１６ＫＢであれば、セグメント中の１６−８＝８ＫＢの領域が未使用となる。すなわち、セグメントサイズが大きいと、未使用となる領域が大きくなる可能性がある。
【００１４】
このように、キャッシュの効率的な利用のためには、セグメントのサイズは、記憶媒体の最小書き込み単位以上のサイズであり、且つ小さいサイズであるほど望ましい。
【００１５】
以上、上記のようにキャッシュの管理単位であるセグメントのサイズは、プロセッサの負荷軽減の観点からは大きいサイズとすることが望ましいが、記憶領域の利用効率向上の観点からは小さいサイズとすることが望ましいというトレードオフが存在する。
【課題を解決するための手段】
【００１６】
ストレージ装置において、上位装置からのアクセスコマンドに従い記憶デバイスにアクセスするコントローラに対し、記憶デバイスに対してアクセスされるデータが一時的に格納されるキャッシュメモリ（ＣＭ）が接続されている。ＣＭは、不揮発性半導体メモリ（ＮＶＭ）を有しており、コントローラに対して論理空間を提供する。コントローラは、論理空間を複数のセグメントに分割して管理するようになっており、論理空間の論理アドレスを指定してＣＭにアクセスするようになっている。ＣＭは、論理アドレスを指定したアクセスを受けて、その指定された論理アドレスに属する論理領域に割り当てられた物理領域にアクセスする。セグメントの単位である第１管理単位は、ＮＶＭに対して行われるアクセスの単位である第２管理単位よりも大きい。論理空間の容量は、ＮＶＭの記憶容量よりも大きい。
【発明の効果】
【００１７】
ＣＭのセグメント（第１の管理単位）が、ＣＭのＮＶＭの管理単位（第２の管理単位）より大きくても、ＣＭの論物変換機能にてその領域差（管理単位の差）を吸収し、且つ、論理空間の容量がＮＶＭの容量より大きいので、ＮＶＭの利用効率を向上することができる。
【図面の簡単な説明】
【００１８】
【図１】図１は、実施例１に係るコンピュータシステムの概略構成図である。
【図２】図２は、実施例１に係るＮＶＭモジュール１２６の内部構成図である。
【図３】図３は、実施例１に係るＦＭチップ２２０の概略構成図である。
【図４】図４は、実施例１に係るＦＭチップのブロック３０２の概略構成図である。
【図５】図５は、実施例１に係るＦＭチップのページ４０１の内部構成図である。
【図６】図６は、実施例１に係るキャッシュヒット判定情報６００を示す。
【図７】図７は、実施例１に係るキャッシュセグメント管理情報７００を示す。
【図８】図８は、実施例１に係るキャッシュ属性個数管理情報８００を示す。
【図９】図９は、実施例１に係るＬＢＡ−ＰＢＡ変換テーブル９００を示す。
【図１０】図１０は、実施例１に係るブロック管理情報１０００を示す。
【図１１】図１１は、実施例１に係る、ＰＢＡ割り当て管理情報１１００を示す。
【図１２】図１２は、実施例１に係るキャッシュ制御におけるセグメントの属性の遷移について記した概念図である。
【図１３】図１３は、実施例１に係るストレージコントローラ１１０のライト処理の一例を示す。
【図１４】図１４は、実施例１に係るストレージコントローラ１１０のセグメント解放処理の一例を示す。
【図１５】図１５は、実施例１に係るＮＶＭモジュール１２６のライト処理の一例を示す。
【図１６】図１６は、実施例１に係るストレージコントローラ１１０のリード処理の一例を示す。
【図１７】図１７は、実施例１に係るストレージコントローラ１１０のキャッシュヒットリード処理の一例を示す。
【図１８】図１８は、実施例１に係るストレージコントローラ１１０のキャッシュミスリード処理の一例を示す。
【図１９】図１９は、実施例１におけるＮＶＭモジュール１２６のリード処理の一例を示す。
【図２０】図２０は、実施例１のＬＢＡ―ＰＢＡ対応付け概要を示す。
【図２１】図２１は、実施例２のＬＢＡ―ＰＢＡ変換テーブル２１００を示す。
【図２２】図２２は、実施例２に係るＮＶＭモジュール１２６のライト処理の一例を示す。
【図２３】図２３は、実施例２に係るＮＶＭモジュール１２６のリード処理の一例を示す。
【図２４】図２４は、実施例３のリクラメーション処理の概略を示した概念図である。
【図２５】図２５は、実施例３に係るブロック管理情報２５００を示す。
【図２６】図２６は、実施例３に係る、ＰＢＡ割り当て管理情報２６００を示す。
【図２７】図２７は、実施例３に係るキャッシュ制御におけるセグメントの属性の遷移について記した概念図である。
【図２８】図２８は、実施例４のＮＶＭモジュール１２６が行う予備領域増加処理の一例を示す。
【発明を実施するための形態】
【００１９】
幾つかの実施例を、図面に基づいて説明する。なお、本発明は、以下に説明する実施例に限定されるものではない。なお、不揮発性半導体メモリ（ＮＶＭ）としてＮＡＮＤ型フラッシュメモリ（以下、ＦＭ）を例に説明するが、本発明は、不揮発性半導体メモリが、ＦＭに限定されるものではない。
【００２０】
また、以下の説明では、ＮＶＭモジュールがストレージ装置に含まれている構成としているが、ＮＶＭモジュールは、ストレージ装置に含まれない構成とすることもできる。
【００２１】
また、以下の説明では、ストレージ装置が複数の記憶デバイスを含んでいるが、複数の記憶デバイスのうちの少なくとも１つが、ストレージ装置の外部に存在しても良い。
【実施例１】
【００２２】
図１は、実施例１に係るコンピュータシステムの概略構成図である。
【００２３】
コンピュータシステムは、不揮発性半導体メモリモジュール（以下、ＮＶＭ（Non-volatile memory）モジュール）１２６を有するストレージ装置１０１を含む。ＮＶＭモジュール１２６は、記憶媒体として、例えばＦＭ（Flash Memory）を有する。ＮＶＭモジュール１２６は、ストレージ装置１０１又はストレージコントローラ１１０の外部に存在しても良い。
【００２４】
ストレージ装置１０１は、複数のストレージコントローラ１１０を備えている。各ストレージコントローラ１１０は、上位装置（例えば、ホスト１０３）と接続されるホストインターフェース１２４と、記憶デバイス（例えば、ＳＳＤ（Sold State Drive）１１１、ＨＤＤ（Hard Disk Drive）１１２）と接続されるディスクインターフェース１２３を備えている。
【００２５】
ホストインターフェース１２４は、例えば、ＦＣ(Fibre Channel)、ｉＳＣＳＩ(internet Small Computer System Interface)、ＦＣｏＥ(Fibre Channel over Ether)等のプロトコルに対応したデバイスである。
【００２６】
ディスクインターフェース１２３は、例えば、ＦＣ、ＳＡＳ(Serial Attached SCSI)、ＳＡＴＡ(Serial Advanced Technology Attachment )、ＰＣＩ(Peripheral Component Interconnect) -Express等の各種プロトコルに対応したデバイスである。
【００２７】
ストレージコントローラ１１０は、プロセッサ１２１やＤＲＡＭ（Dynamic Random Access Memory）１２５などのハードウェア資源を備え、プロセッサ１２１の制御の下、上位装置１０３からのリード／ライトコマンドに応じて、ＳＳＤ１１１やＨＤＤ１１２等の記憶デバイスへのリード／ライトコマンド処理を行う。ストレージコントローラ１１０には、ＮＶＭモジュール１２６が接続されている。ＮＶＭモジュール１２６は、内部ＳＷ１２２を介してプロセッサ１２１から制御可能となっている。
【００２８】
また、ストレージコントローラ１１０は、ＲＡＩＤ（Redundant Arrays of Inexpensive (or Independent) Disks）パリティ生成機能、及び、RAIDパリティによるデータ復元機能を備えている。ストレージコントローラ１１０は、複数のＳＳＤ１１１、或いは複数のＨＤＤ１１２を任意の単位でＲＡＩＤグループとして管理する。また、ストレージコントローラ１１０は、ＲＡＩＤグループを任意の単位でＬＵ(Logical Unit)として分割し上位装置１０３に記憶領域として提供する。
【００２９】
ストレージコントローラ１１０は、例えば、上位装置１０３からライト先（例えば、ＬＵＮ（Logical Unit Number）とＬＢＡ（Logical Block Address））を指定したライトコマンドを受信した場合、ライトコマンドに従うデータに関するパリティを生成し、生成したパリティを、上位装置１０３からのデータと共に記憶デバイスにライトすることができる。ストレージコントローラ１１０は、上位装置１０３からリード元（例えばＬＵＮ及びＬＢＡ）を指定したリードコマンドを受信した場合、リード元に基づく記憶デバイスからデータをリードした後、データ損失の有無を検査し、データ損失が検出された場合にパリティを用いてデータ損失が検出されたデータを復元し、復元したデータを上位装置１０３にデータを送信することができる。
【００３０】
また、ストレージコントローラ１１０は、記憶デバイスの障害、使用状況、処理状況等を監視、及び管理する機能を持っている。
【００３１】
ストレージ装置１０１は、管理装置１０４と通信ネットワークを介して通信可能に接続されている。この通信ネットワークは、例えばＬＡＮ（Local Area Network）などが挙げられる。この通信ネットワークは、図１では簡略化のために省略したが、ストレージ装置１０１内部の各ストレージコントローラ１１０に接続されている。なお、この通信ネットワークは、ＳＡＮ１０２であっても良い。
【００３２】
管理装置１０４は、例えば、プロセッサやメモリ、ネットワークインターフェース、ローカル入出力デバイス等のハードウェア資源と、管理プログラム等のソフトウェア資源を備えたコンピュータである。管理装置１０４は、プログラムによってストレージ装置１０１から情報を取得し、管理画面を表示することができる。システム管理者は、管理装置１０４に表示された管理画面を用いて、例えば、ストレージ装置１０１の監視、及びストレージ装置１０１の制御を行うことができる。
【００３３】
ＳＳＤ１１１は、ストレージ装置１０１内に複数（例えば１６個）存在している。ＳＳＤ１１１は、同じくストレージ装置１０１内に複数存在するストレージコントローラ１１０と、ディスクインターフェース１２３を介して接続されている。
【００３４】
ＳＳＤ１１１は、ストレージコントローラ１１０からのライトコマンドと共に送信されるデータを格納し、リードコマンドに応じて格納済みのデータを取り出し、ストレージコントローラ１１０に送信する。なお、このときディスクインターフェース１２３は、リード／ライトコマンドに関するデータの論理的な格納位置を、論理アドレス(例えばLBA（Logical Block Address）)によって、ＳＳＤ１１１に対して指定する。また、ストレージコントローラ１１０は、上位装置１０３からの指定により、複数のＳＳＤ１１１を、複数のＲＡＩＤ構成に分割して管理することもでき、データ損失時に損失データの復元が可能な構成とすることもできる。
【００３５】
ＨＤＤ１１２は、ストレージ装置１０１内に複数（例えば１２０個）存在し、ＳＳＤ１１１と同様に、同じストレージ装置１０１内に複数あるストレージコントローラ１１０と、ディスクインターフェース１２３を介して接続されている。ＨＤＤ１１２は、例えば、ストレージコントローラ１１０からのライトコマンドと共に送信されるデータを格納し、リード要求に応じて格納済みのデータを取り出し、ストレージコントローラ１１０に送信する。
【００３６】
なお、このときディスクインターフェース１２３は、リード／ライトコマンドに関するデータの論理的な格納位置を論理アドレス(例えばLBA)によって、ＨＤＤ１１２に対して指定する。また、ストレージコントローラ１１０は、複数のＨＤＤ１１２を、複数のＲＡＩＤ構成に分割して管理することができ、データ損失時に損失データの復元が可能な構成とすることもできる。
【００３７】
ストレージコントローラ１１０は、ホストインターフェース１２４、及びＳＡＮ１０２を介して上位装置１０３と接続される。なお、図１では簡略化のために省略したが、ストレージコントローラ１１０間を、接続パスを介して接続することもできる。接続パスは、ストレージコントローラ１１０間で、例えば、データ、及び制御情報を相互に通信することを可能とする。
【００３８】
上位装置１０３は、例えば、業務システムの中核をなすコンピュータ、ファイルサーバー等が相当する。上位装置１０３は、プロセッサやメモリ、ネットワークインターフェース、ローカル入出力デバイス等のハードウェア資源を備え、デバイスドライバやオペレーティングシステム（ＯＳ）、アプリケーションプログラムなどのソフトウェア資源を備えている。これにより上位装置１０３は、プロセッサ制御の下、各種プログラムを実行することで、ストレージ装置１０１との通信が可能となり、ストレージ装置１０１に対して、データのリード／ライトコマンドを送信する。
【００３９】
また、上位装置１０３は、プロセッサ制御の下、各種プログラムを実行することで、ストレージ装置１０１の使用状況、及びストレージ装置１０１の処理状況等の管理情報を取得することもできる。また、上位装置１０３は、ストレージ装置１０１を介して、記憶デバイスの管理単位の設定、記憶デバイスの制御方法の設定、及び記憶デバイスに対してデータ圧縮に関する設定等を指定し、また、指定した設定の変更を行うことができる。
【００４０】
ここまで、本実施例に係るコンピュータシステムの構成について説明した。
【００４１】
次に、図２を用いて、ＮＶＭモジュール１２６の内部構成について説明する。
【００４２】
図２は、実施例１に係るＮＶＭモジュール１２６の内部構成を示す図である。
ＮＶＭモジュール１２６は、内部に、フラッシュメモリ（ＦＭ）コントローラ２１０と、複数(例えば、３２個)のフラッシュメモリチップ（以下、ＦＭチップ）２２０〜２２８等を有する。
【００４３】
ＦＭコントローラ２１０は、その内部にプロセッサ２１５、ＲＡＭ２１３、データ圧縮／伸長ユニット２１８、データバッファ２１６、Ｉ／Ｏインターフェース２１１、ＦＭ（Flash Memory）インターフェース２１７、及びデータ送信を相互に行うスイッチ２１４を備えている。
【００４４】
スイッチ２１４は、ＦＭコントローラ２１０の各部位（プロセッサ２１５、ＲＡＭ２１３、データ圧縮／伸長ユニット２１８、データバッファ２１６、Ｉ／Ｏインターフェース２１１、及びＦＭインターフェース２１７）を相互に接続し、各部位間のデータを、アドレス又はＩＤによってルーティングし送信する。
【００４５】
Ｉ／Ｏインターフェース２１１は、ストレージ装置１０１内のストレージコントローラ１１０が有する内部スイッチ１２２と接続され、ＮＶＭモジュール１２６とストレージコントローラ１１０との間の通信を仲介する。また、Ｉ／Ｏインターフェース２１１は、スイッチ２１４を介してＦＭコントローラ２１０の各部位と接続される
【００４６】
Ｉ／Ｏインターフェース２１１は、ストレージコントローラ１１０からアクセスリクエスト（リードリクエスト又はライトリクエスト）で指定される論理アドレス（例えばＬＢＡ）を受信する。アクセスリクエストがライトリクエストの場合、Ｉ／Ｏインターフェース２１１は、ライトリクエストに従うデータをストレージコントローラ１１０から受信し、受信したデータを、ＦＭコントローラ２１０内部のＲＡＭ２１３に格納する。
【００４７】
また、Ｉ／Ｏインターフェース２１１は、ストレージコントローラ１１０のプロセッサ１２１からの指示を受信し、ＦＭコントローラ２１０内部のプロセッサ２１５に対して、割り込みコマンドを発行する。更に、Ｉ／Ｏインターフェース２１１は、ストレージコントローラ１１０から、ＮＶＭモジュール１２６を制御するコマンド等も受信し、そのコマンドに応じてＮＶＭモジュール１２６の処理状況、利用状況、及び現在の設定値等をストレージコントローラ１１０に通知する。
【００４８】
プロセッサ２１５は、スイッチ２１４を介してＦＭコントローラ２１０の各部位と接続され、ＲＡＭ２１３に記憶されたプログラム及び管理情報を基に、フＦＭコントローラ２１０全体を制御する。また、プロセッサ２１５は、定期的な情報取得、及び割り込み受信機能によって、ＦＭコントローラ２１０全体を監視する。
【００４９】
データバッファ２１６は、ＦＭコントローラ２１０でのデータ送信処理における一時的なデータを格納する。
【００５０】
ＦＭインターフェース２１７は、複数のバス（例えば１６）を介して各ＦＭチップ（２２０〜２２８）と接続される。各バスには、複数（例えば２つ）のＦＭチップ（２２０等）が接続される。また、ＦＭインターフェース２１７は、ＣＥ（チップ Enable）信号を用いて、同一バスに接続された複数のＦＭチップ（２２０〜２２８等）を独立して制御する。
【００５１】
ＦＭインターフェース２１７は、プロセッサ２１５より指示されるリード／ライトコマンドに応じた処理を行う。リード／ライトコマンドでは、例えば、チップ、ブロック、及びページの各番号が指定される。チップ、ブロック、及びページの各番号を受信したＦＭインターフェース２１７は、リード／ライトコマンド対象のＦＭチップ（２２０〜２２８）に対して、ブロック、ページを指定したリード／ライトコマンドの処理を行う。
【００５２】
具体的に、例えば、ＦＭインターフェース２１７は、リード処理時には、ＦＭチップ（２２０〜２２８）等からデータをリードしてデータバッファ２１６に送信し、ライト処理時には、データ（ライト対象のデータ）をデータバッファ２１６から読み出し、ＦＭチップ（２２０〜２２８）にライトする。
【００５３】
また、ＦＭインターフェース２１７は、ＥＣＣ生成回路、ＥＣＣによるデータ損失検出回路、ＥＣＣ訂正回路を有する。
【００５４】
ＦＭインターフェース２１７は、ライト処理時には、ＥＣＣ生成回路により、ライトデータに対して付加するＥＣＣを生成し、ライトデータと共に生成したＥＣＣを、ＦＭチップ（２２０〜２２８）にライトする。また、ＦＭインターフェース２１７は、データリード時には、ＥＣＣによるデータ損失検出回路によって、ＦＭチップ（２２０〜２２８）からリードしたデータを検査し、データ損失が検出された際には、ＥＣＣ訂正回路によってデータ訂正を行い、訂正Ｂｉｔ数をプロセッサ２１５に通知するために、ＲＡＭ２１３に記憶する。
【００５５】
データ圧縮／伸長ユニット２１８は、データを可逆圧縮するアルゴリズムを処理する機能を有し、複数種のアルゴリズムや、圧縮レベルの変更機能を有する。データ圧縮／伸長ユニット２１８は、プロセッサ２１５からの指示に従って、データバッファ２１６からデータをリードし、可逆圧縮のアルゴリズムによりデータ圧縮演算もしくはデータ圧縮の逆変換であるデータ伸長演算を行い、その結果を再度データバッファ２１６にライトする。なお、データ圧縮／伸長ユニット２１８は、論理回路として実装しても良いし、圧縮／伸長のプログラムをプロセッサで処理することで、同様の機能を実現しても良い。
【００５６】
本実施例では、スイッチ２１４、Ｉ／Ｏインターフェース２１１、プロセッサ２１５、データバッファ２１６、ＦＭインターフェース２１７、データ圧縮／伸長ユニット２１８は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）として、一つの半導体素子内で構成しても良いし、複数の個別専用ＩＣ（Integrated Circuit）を相互に接続した構成としても良い。
【００５７】
ＲＡＭ２１３は、具体的には、ＤＲＡＭなどの揮発性メモリである。ＲＡＭ２１３は、ＮＶＭモジュール１２６内で用いられるＦＭチップ（２２０〜２２８）の管理情報、及び各ＤＭＡ（Direct Memory Access）で用いる送信制御情報を含んだ送信リスト等を格納する。なお、ＲＡＭ２１３は、データを格納するデータバッファ２１６の機能の一部又は全てを含む構成としても良い。
【００５８】
以上、図２を用いて、ＮＶＭモジュール１２６の構成について説明した。なお、本実施例では、ＮＶＭは、フラッシュメモリ（ＦＭ）である。ＦＭは、ブロック単位で消去が行われ、ページ単位でアクセスが行われる種類のフラッシュメモリ、典型的にはＮＡＮＤ型のＦＭであるとする。しかし、ＦＭは、ＮＡＮＤ型に代えて他種のＦＭ（例えばＮＯＲ型）でも良い。また、ＦＭに代えて、他種のＮＶＭ、例えば相変化メモリ、抵抗変化型メモリが採用されても良い。また、本実施例において、データ圧縮／伸長ユニット２１８は、必須の構成要件ではない。
【００５９】
次に、ＦＭチップについて説明する。
【００６０】
図３は、実施例１に係るＦＭチップ２２０の概略構成図である。
【００６１】
なお、ここでは、ＦＭチップ２２０を示して説明するが、他のＦＭチップ（２２１〜２２８等）も同様の構成となっている。
【００６２】
ＦＭチップ２２０は、複数（例えば、４０９６個）の物理ブロック３０２〜３０６で構成された記憶領域を有している。ＦＭチップ２２０においては、ブロック単位でのみデータ消去が可能となっている。各ブロックには、複数のページが格納可能である。また、ＦＭチップ２２０は、Ｉ／Ｏレジスタ３０１を有する。Ｉ／Ｏレジスタ３０１は、ページサイズ（例えば４ＫＢ＋付加ＥＣＣ用の予備領域）以上の記憶容量を持つレジスタである。
【００６３】
ＦＭチップ２２０は、ＦＭインターフェース２１７からのリード／ライトコマンドの指示に従って処理する。
【００６４】
ライト処理時には、ＦＭチップ２２０は、まず、ＦＭインターフェース２１７より、ライトコマンドと、要求対象のブロック、ページ番号、及びページ内のプログラム開始位置とを受信する。次に、ＦＭチップ２２０は、ＦＭインターフェース２１７より送信されるライトデータをページへのプログラム開始位置に対応するアドレスより順にＩ／Ｏレジスタ３０１に格納する。その後、ＦＭチップ２２０は、データ送信完了のコマンド受信とともにＩ／Ｏレジスタ３０１に格納されたデータを指定されたページにライトする。
【００６５】
リード処理時には、ＦＭチップ２２０は、まず、ＦＭインターフェース２１７からリードコマンドと要求対象のブロック、及びページ番号を受信する。次に、ＦＭチップ２２０は、指定されたブロックのページに格納されたデータをリードし、Ｉ／Ｏレジスタ３０１に格納する。その後、ＦＭチップ２２０は、Ｉ／Ｏレジスタ３０１に格納されたデータをＦＭインターフェース２１７に対して送信する。
【００６６】
次に、ＦＭチップのブロックについて説明する。
【００６７】
図４は、実施例１に係るＦＭチップのブロック３０２の概略構成図である。
【００６８】
なお、ここでは、ブロック３０２を示して説明するが、他のブロック３０３〜３０６等も同様な構成となっている。
【００６９】
ブロック３０２は、複数（例えば、１２８）のページ４０１〜４０７等に区分されている。ブロック３０２においては、格納データの読み出しやデータのライトは、ページ単位でのみ処理可能である。また、ブロック３０２内のページ４０１〜４０７等をライトする順序は、ブロックの先頭のページから順に、すなわちページ４０１、４０２、４０３、・・・・の順に規定されている。また、ブロック３０２においては、ライト済みページへの上書きは禁止されており、当該ページが属するブロック全体を消去しなければ、再び当該ページにライトすることはできない。
【００７０】
このため、本実施例に係るＮＶＭモジュール１２６では、ストレージコントローラ１１０が指定する論理アドレス（ＬＢＡ）とＮＶＭモジュール１２６内部における物理的な記憶領域を指定するアドレス(物理ブロックアドレス：ＰＢＡ)を別のアドレス体系として管理し、ＬＢＡとＰＢＡとの対応を示す情報をテーブルにて管理する。
【００７１】
次に、ブロック内のページについて説明する。
【００７２】
図５は、実施例１に係るＦＭチップのページ４０１の内部構成図である。
【００７３】
ここで、ページ４０１を示して説明するが、他のページ４０２〜４０７等も同様な構成となっている。
【００７４】
ページ４０１は、一定ｂｉｔ数(例えば、４ＫＢ)のデータ５０１、５０３、５０５等を記憶する。また、ページ４０１は、データ５０１、５０３、５０５に加えて、ＦＭインターフェース２１７でそれぞれのデータに対して付加されたＥＣＣ５０２、５０４、５０６を格納している。各ＥＣＣ５０２、５０４、５０６等は、保護するデータ（すなわち、誤り訂正をする対象のデータ：保護データという）に対して隣接して記憶される。すなわち、データと、対応するＥＣＣとの組が一つのまとまり（ＥＣＣ  ＣＷ：ECC CodeWord）として記憶される。ここで、同図においては、データ５０１とＥＣＣ５０２との組と、データ５０３とＥＣＣ５０４との組と、データ５０５とＥＣＣ５０６との組等が記憶されている。なお、同図には、１ページにＥＣＣ  ＣＷを４個格納した構成について示しているが、ページサイズや、ＥＣＣの強度（訂正可能ｂｉｔ数）に合わせて、任意のＥＣＣ  ＣＷ数を格納して良い。ここで、データ損失障害とは、１つのＥＣＣ  ＣＷ当たりの障害ｂｉｔ数が、そのＥＣＣ  ＣＷを構成するＥＣＣの訂正可能ｂｉｔ数を超過した際に生じる現象である。
【００７５】
以上、ＮＶＭモジュール１２６の構成、及びＮＶＭモジュール１２６が利用されるコンピュータシステムについて説明を行った。
【００７６】
続いて、ストレージ装置１０１が用いる管理情報について説明する。
【００７７】
図６は、実施例１に係るキャッシュヒット判定情報６００を示す。
【００７８】
キャッシュヒット判定情報６００は、ストレージ装置１０１のストレージコントローラ（例えばＤＲＡＭ１２５）内に格納されている。キャッシュヒット判定情報６００は、例えば、ストレージ装置１０１が上位装置１０３よりリード／ライトコマンドを受信した際、そのコマンドの参照先が、キャッシュ上にあるか否かを判定するための管理情報である。また、キャッシュヒット判定情報６００は、コマンドの参照先がキャッシュ上に無いと判定された場合、そのコマンドの、記憶デバイス（ＳＳＤ１１１、ＨＤＤ１１２）での参照先についても管理する。
【００７９】
キャッシュヒット判定情報６００は、ＬＵ領域毎に、ＬＵ（Logical Unit）６０１、ＬＢＡ（Logical Block Address）６０２、ＲＡＩＤグループ６０３、ＲＡＩＤグループ内ＬＢＡ６０４、及びキャッシュセグメント番号６０５を有する。ＬＵ領域とは、ＬＵを所定サイズ（例えば１２８ＫＢ（キロバイト））で区切ることにより得られた個々の領域である。
【００８０】
ＬＵ６０１は、ＬＵの識別情報である。ＬＵとは、ストレージコントローラ１１０が管理する個々の論理的な記憶領域である。ストレージ装置１０１は、ＬＵを上位装置１０３に提供する。上位装置１０３では、１つのＬＵを１つの記憶領域として認識して管理する。上位装置１０３は、リード／ライトコマンドを送信する時、その対象を指定するため、ＬＵと、後述するＬＢＡをストレージコントローラ１１０に通知する。
【００８１】
ＬＢＡ６０２は、ストレージ装置１０１が管理するＬＵ６０１内のＬＵ領域に属する論理アドレスである。ストレージ装置１０１は、上位装置１０３よりＬＵとＬＢＡを受信することで、上位装置１０３からのリード／ライトコマンド受信時における、コマンドの参照先を取得する。
【００８２】
図６は、ＬＵを１２８ＫＢ単位毎のＬＵ領域に区切って管理した例を示しているが、本発明の実施例は、ＬＵの管理単位をこの単位に限定するものではない。
【００８３】
また、図６では、ＬＵを、１２８ＫＢ単位毎の領域に区切りその領域の先頭アドレスをＬＢＡ６０２に格納し、ＬＢＡ６０２には、その先頭アドレスから１２８ＫＢ範囲内のＬＢＡが該当するとしているが、ＬＢＡ６０２には、必ずしも先頭アドレスが格納される必要はない。
【００８４】
ＲＡＩＤグループ６０３は、上位装置１０３が指定するＬＵとＬＢＡに対応付けられたＲＡＩＤグループ（ＬＵ領域の基になっているＲＡＩＤグループ）の識別情報である。ＲＡＩＤグループ６０３は、同じ種類の複数のＳＳＤ１１１、或いはＨＤＤ１１２により構成される。
【００８５】
ＲＡＩＤグループ内ＬＢＡ６０４は、上位装置１０３が指定するＬＵとＬＢＡに対応付けられた、ＲＡＩＤグループ内のＬＢＡ（ＬＵ領域に対応したＬＢＡ）である。この情報を用いて、ストレージ装置１０１は、上位装置１０３からのリード／ライトコマンドを処理する際、上位装置１０３より取得したＬＵとＬＢＡより、実際にデータを格納しているＲＡＩＤグループと、そのＲＡＩＤグループ内のＬＢＡを取得する。
【００８６】
キャッシュセグメント番号６０５は、上位装置１０３が指定するＬＵとＬＢＡに対応付けられたキャッシュセグメントの番号である。ストレージ装置１０１は、リード／ライトコマンドを処理する際、上位装置１０３から取得したＬＵとＬＢＡ６０２より、そのアクセス対象のデータがキャッシュ上にあるかを判定する。
【００８７】
具体的に、例えば、プロセッサ１２１は、キャッシュセグメント番号６０５にキャッシュセグメント番号が格納されている場合、上位装置１０３から取得したＬＵとＬＢＡの参照先はキャッシュ上にある（キャッシュヒット）と判断する。一方、ストレージコントローラ１１０は、キャッシュセグメント番号６０５にキャッシュセグメント番号が格納されていない場合（図６中の「無し」に該当）、上位装置１０３から取得したＬＵとＬＢＡの参照先は、キャッシュ上に無い（キャッシュミス）と判断する。
【００８８】
プロセッサ１２１がキャッシュヒットと判断した場合、プロセッサ１２１は、キャッシュセグメント番号６０５より、キャッシュ領域でのアドレスを取得し、そのキャッシュ領域に対して、リード／ライト等の処理を実施する。一方、プロセッサ１２１がキャッシュミスと判断した場合は、プロセッサ１２１は、ＲＡＩＤグループ６０３とＲＡＩＤグループ内ＬＢＡ６０４より、記憶デバイス（ＳＳＤ１１１、ＨＤＤ１１２）により構成されたＲＡＩＤグループのＬＢＡに指定された特定領域に対して、リード／ライト等の処理を実施する。
【００８９】
以上が、キャッシュヒット判定情報６００の説明である。なお、キャッシュヒット判定情報６００は、図６に示す構成に限定されるものではなく、上位装置１０３から指定された論理領域（ＬＵとＬＢＡ）がキャッシュへのアクセスであるか否かを判定できるものであれば、如何なる構成でも良い。
【００９０】
例えば、キャッシュヒット判定情報６００は、本実施例のようにストレージ装置１０１が提供するＬＵ６０１とＬＢＡ６０２の全情報を管理せず、ＬＵ６０１とＬＢＡ６０２のみを管理しても良い。この場合、キャッシュヒット判定情報６００に存在しないＬＵ６０１とＬＢＡ６０２については、プロセッサ１２１がキャッシュミスと判定し、プロセッサ１２１が、記憶デバイス対して処理を行うこととしても良い。
【００９１】
また、例えば、プロセッサ１２１は、キャッシュヒットを、ＬＵ６０１、ＬＢＡ６０２に対応付けたビットマップで一度判定し、ヒットとなったＬＢＡ６０１についてのみハッシュを計算し、そのハッシュ値からキャッシュセグメント番号６０５を取得するとしても良い。
【００９２】
また、キャッシュミスとなった場合、プロセッサ１２１は、キャッシュヒット判定情報６００に加えて、別の管理情報も用いて、記憶デバイスにおける物理的なアクセス先を特定しても良い。
【００９３】
続いて、図７を用いてキャッシュセグメント管理情報７００について説明する。
【００９４】
図７は、実施例１に係るキャッシュセグメント管理情報７００を示す。
【００９５】
キャッシュセグメント管理情報７００は、ストレージコントローラ１１０（例えばＤＲＡＭ１２５）内に格納されている。キャッシュセグメント管理情報７００は、プロセッサ１２１がキャッシュヒット判定情報６００を用いてキャッシュヒットと判定した場合に参照する管理情報である。
【００９６】
プロセッサ１２１は、キャッシュヒット判定情報６００より取得したキャッシュセグメント番号６０５を用いて、キャッシュセグメント管理情報７００より、物理的な格納先となるＤＲＡＭ１２５又はＮＶＭモジュール１２６の何れかのＬＢＡを取得する。
【００９７】
キャッシュセグメント管理情報７００は、キャッシュセグメント毎に、キャッシュセグメント番号７０１、ＤＲＡＭ／ＮＶＭモジュール７０２、ＤＲＡＭ Ａｄｄｒｅｓｓ／ＮＶＭモジュールＬＢＡ７０３、属性７０４、データ格納位置（Ｂｉｔｍａｐ）７０５、及びＮＶＭモジュールＰＢＡ割り当て量７０６を有する。
【００９８】
キャッシュセグメント番号７０１は、キャッシュセグメント（セグメント）の番号である。
【００９９】
ＤＲＡＭ／ＮＶＭモジュール７０２は、セグメントが対応付けられているデバイスを示す。セグメントがＤＲＡＭ１２５に対応付けられているときには、ＤＲＡＭ／ＮＶＭモジュール７０２は、対応付けられているデバイスがＤＲＡＭ１２５であることを示す情報となる。一方、セグメントがＮＶＭモジュール１２６に対応付けられているときには、対応付けられているデバイスがＤＲＡＭ／ＮＶＭモジュール７０２は、ＮＶＭモジュール１２６であることを示す情報となる。ここでは、対応付けられているデバイスがＤＲＡＭ１２５であることを示す情報として「ＤＲＡＭ」とし、対応付けられているデバイスがＮＶＭモジュール１２６であることを示す情報として「ＮＶＭモジュール」としてある。
【０１００】
ＤＲＡＭ Ａｄｄｒｅｓｓ／ＮＶＭモジュールＬＢＡ７０３は、セグメントが対応付けられているＤＲＡＭ１２５、又はＮＶＭモジュール１２６いずれかの内部アドレスを示す。
【０１０１】
例えば、セグメント番号０（ＳＥＧ＃０）のセグメントでは、ＤＲＡＭ／ＮＶＭモジュール７０２が「ＤＲＡＭ」であるため、ＤＲＡＭ Ａｄｄｒｅｓｓ／ＮＶＭモジュールＬＢＡ７０３に示されている内部アドレスは、ＤＲＡＭのアドレスである。
【０１０２】
一方、セグメント番号１３１０７３（ＳＥＧ＃１３１０７３）のセグメントは、ＤＲＡＭ／ＮＶＭモジュール７０２が「ＮＶＭモジュール」であるため、ＤＲＡＭ Ａｄｄｒｅｓｓ／ＮＶＭモジュールＬＢＡ７０３に示されている内部アドレスは、ＮＶＭモジュール１２６のアドレスである。
【０１０３】
属性７０４は、キャッシュセグメント番号７０１に示されたセグメントの属性を示す。本実施例では、セグメントの属性として、「クリーン」（記憶デバイスに格納済のデータが記憶されているセグメントであることを意味する属性値）、「ダーティ」（記憶デバイスに未格納のデータが記憶されているセグメントであることを意味する属性値）、及び「フリー」（新たにデータの書き込みが可能であるセグメントであることを意味する属性値）がある。セグメント番号０（ＳＥＧ＃０）のセグメントは、属性が「クリーン」であることを示している。同様に、セグメント番号１３１０７３のセグメントは、属性が「ダーティ」であることを示している。ストレージコントローラ１１０からは、「フリー」のセグメントが優先的に確保され、確保されたセグメントに、データが書き込まれる。
【０１０４】
データの格納位置７０５は、セグメント中でのデータ格納位置を示す。セグメントは、セグメント中の全領域にデータが記憶されるとは限らない。例えば、本実施例のセグメントサイズが１２８ＫＢであり、ストレージ装置１０１が、上位装置１０３から８ＫＢのリードコマンドを受信した場合、８ＫＢのデータに対して、１２８ＫＢサイズのセグメントを割り当て、リードデータを格納する。このとき、セグメント開始アドレス（ＮＶＭモジュールＬＢＡ）から任意バイト離れた位置に８ＫＢが記憶される。この記憶領域の管理のために、１２８ＫＢのセグメント中に実際のデータが格納されている場所を示す情報が必要である。データの格納位置７０５は、その情報をビットマップにて管理する。本実施例のセグメントサイズは１２８ＫＢであり、５１２Ｂ単位のキャッシュ領域毎に、１ｂｉｔを割り当てる管理構成である。このため、データの格納位置７０５は、１２８ＫＢ／５１２Ｂ＝２５６ｂｉｔの情報量で、セグメント中に格納されたデータを管理する。前述の８ＫＢの格納例では、２５６ｂｉｔのビットマップ中８ＫＢ／５１２Ｂ＝１６ｂｉｔがデータを記憶されていることを示す１を格納し、残りのビット２５６ｂｉｔ−１６ｂｉｔ＝２４０ｂｉｔがデータを記憶していないことを示す０を格納する。
ＮＶＭモジュールＰＢＡ割り当て量７０６は、セグメントに割り当てられた物理領域の総容量を示す。ＮＶＭモジュールＰＢＡ割り当て量７０６は、ＮＶＭモジュール１２６から、ストレージコントローラ１１０に通知される。
【０１０５】
例えば、セグメントサイズが１２８ＫＢの場合、ストレージコントローラ１１０は、上位装置１０３から８ＫＢのリードコマンドを受信した際、記憶用のセグメントとして１２８ＫＢのＮＶＭモジュールＬＢＡを割り当てる。このとき、ＮＶＭモジュール１２６は、１２８ＫＢのＮＶＭモジュールＬＢＡ領域に対して、記憶データの量である８ＫＢを記憶するのに十分な量のＮＶＭモジュールＰＢＡを割り当てる。例えば、図２０に示すように、ストレージコントローラ１１０（プロセッサ２１５）は、ＮＶＭモジュール１２６のＮＶＭモジュールＬＢＡとＮＶＭモジュールＰＢＡとの対応付け管理単位が１６ＫＢであれば、８ＫＢのデータを格納するために割り当てた１２８ＫＢ単位のセグメントのＮＶＭモジュールＬＢＡに対して、１６ＫＢのＮＶＭモジュールＰＢＡを対応付ける。従って、このとき、ＮＶＭモジュールＰＢＡ割り当て量７０６の値は、１６ＫＢとされる。
ＮＶＭモジュールＰＢＡ割り当て量７０６は、プロセッサ２１５がデータをＮＶＭモジュール１２６に格納するために推定した物理的な記憶領域でも良い。また、ＰＢＡ割り当て量７０６は、プロセッサ２１５が、送信データをＮＶＭモジュール１２６に格納した際に、実際に割り当てた物理的な記憶容量でも良い。
【０１０６】
なお、ＤＲＡＭに対応付けられているセグメントについては、ＮＶＭモジュールＰＢＡ割り当て量７０６は、「無効」又は「０」となっている。
【０１０７】
以上、キャッシュセグメント管理情報７００について説明した。
【０１０８】
図８は、実施例１に係るキャッシュ属性個数管理情報８００を示す。
【０１０９】
キャッシュ属性個数管理情報８００は、ストレージコントローラ１１０（例えばＤＲＡＭ１２５）内に格納される。キャッシュ属性個数管理情報８００は、ストレージ装置１０１が管理するキャッシュセグメントの属性の分布を管理する管理情報である。
【０１１０】
キャッシュ属性個数管理情報８００は、キャッシュのセグメントの複数の属性８０１〜８０３のそれぞれについて、その属性のセグメントの個数を表す値を有している。
【０１１１】
セグメント属性８０１〜８０３には、ストレージ装置１０１が管理する全てのセグメントについての属性が格納される。セグメントの属性としては、クリーン８０１、ダーティ８０２、及びフリー８０３がある。個数の値としては、各属性のセグメントの個数が格納される。
【０１１２】
具体的に、クリーン８０１の個数は、属性がクリーンとなっているセグメントの個数を示す。属性がクリーンとは、キャッシュに格納されているデータと同一のデータが記憶デバイス（ＳＳＤ１１１、ＨＤＤ１１２）にも格納されていることを示す。キャッシュからデータを削除ししても、記憶デバイスよりデータをリードすることが可能であるため、プロセッサ１２１は、任意にセグメントと、ＬＵ及びＬＢＡとの対応付けを解除できる。
【０１１３】
例えば、アクセスが一定期間無いセグメントがクリーンの属性であるとき、プロセッサ１２１は、キャッシュヒット判定情報６００の該当するＬＵ、ＬＢＡ行のキャッシュセグメント番号６０５を「無し」に書き換えることで、セグメントと、ＬＵ及びＬＢＡとの対応付けを解除できる。一般にこうした処理を「セグメントの解放」と呼ぶ。プロセッサ１２１は、例えば、相対的にアクセスがなされなくなったセグメントを解放し、よりアクセスがなされる領域のデータをセグメントに格納することで、キャッシュヒットとなる確率を向上させることもできる。
【０１１４】
また、ダーティ８０２の個数は、属性がダーティとなっているセグメントの個数を示す。属性がダーティとは、キャッシュに格納されているデータと同一のデータが、記憶デバイス（ＳＳＤ１１１、ＨＤＤ１１２）に格納されていないことを示す。
【０１１５】
例えば、キャッシュ上にてデータの更新がなされ、最新データはキャッシュに格納されているが記憶デバイス（ＳＳＤ１１１、ＨＤＤ１１２）には格納されていない場合、記憶デバイス（ＳＳＤ１１１、ＨＤＤ１１２）に格納されたデータは旧データとなる。この場合、同一のＬＵ、ＬＢＡに対応付けられていても、キャッシュと記憶デバイス（ＳＳＤ１１１、ＨＤＤ１１２）とで異なるデータを格納しており、キャッシュのデータを消すと最新データを失うこととなる。従って、プロセッサ１２１は、一定期間アクセスがなされていないセグメントであっても、その属性がダーティであれば解放できない。このため、プロセッサ１２１は、ストレージ装置１０１へのアクセス負荷が低い時、ダーティ属性のセグメントが一定量以上となった時に、ダーティ属性のセグメントに格納されたデータを、記憶デバイス（ＳＳＤ１１１、ＨＤＤ１１２）に送信することで、キャッシュと記憶デバイス（ＳＳＤ１１１，ＨＤＤ１１２）に記憶されたデータが同一とし、セグメントの属性をクリーンとする。この処理を以降「セグメントのクリーン化」と呼ぶ。
【０１１６】
フリー８０３の個数は、属性がフリーとなっているセグメントの個数を示す。属性がフリーとは、セグメントにデータが格納されていないことを示す。
【０１１７】
プロセッサ１２１は、キャッシュ属性個数管理情報８００を用いて、ライトデータを即座にキャッシュするためにフリー属性のセグメントの一定量をプールとして確保している。具体的に、例えば、プロセッサ１２１は、フリー属性のセグメントの量があらかじめ定められた閾値以下となった際に、クリーン属性のセグメントを解放し、セグメントの属性をフリーに変更することで、フリー属性のセグメントの量が閾値より多くなるようにすることもできる。
【０１１８】
以上、キャッシュ属性個数管理情報８００について説明した。なお、本実施例では、セグメントの属性として「クリーン」、「ダーティ」及び「フリー」の３種類しかない構成について示したが、セグメントの属性は、この３種類に限定されない。すなわち、セグメントの属性は、クリーン、ダーティ及びフリー以外の属性があっても良い。
【０１１９】
ストレージ装置１０１（プロセッサ１２１）は、これまでに述べたキャッシュヒット判定情報６００、キャッシュセグメント管理情報７００、キャッシュ属性個数管理情報８００を用いることで、キャッシュを管理する。
【０１２０】
続いて、ＮＶＭモジュール１２６の制御に用いる管理情報について説明する。
【０１２１】
図９は、実施例１に係るＬＢＡ−ＰＢＡ変換テーブル９００を示す。
【０１２２】
ＬＢＡ−ＰＢＡ変換テーブル９００は、ＮＶＭモジュール１２６（例えばＲＡＭ２１３）内に格納されている。ＬＢＡ−ＰＢＡ変換テーブル９００は、ＬＢＡ毎に、ＮＶＭモジュールＬＢＡ９０１、及びＮＶＭモジュールＰＢＡ９０２を有する。
【０１２３】
プロセッサ２１５は、上位デバイス（ストレージコントローラ１１０）からのリード／ライトコマンドに含まれているＮＶＭモジュールＬＢＡを受信した後、ＬＢＡ−ＰＢＡ変換テーブル９００を用いて、このＮＶＭモジュールＬＢＡから、実際にデータが格納されている場所を示すＮＶＭモジュールＰＢＡ９０２を取得する。
【０１２４】
この処理により、データの上書き更新時に、同一ＮＶＭモジュールＬＢＡへのライトコマンドを、異なるＮＶＭモジュールＰＢＡへのライトとすることができる。このライトの後、ＮＶＭモジュールＬＢＡに対して、最新の更新データを記憶したＮＶＭモジュールＰＢＡを割り当てることで上書き不可の不揮発性メモリにおいてデータの上書き可能とする。
【０１２５】
また、本実施例では、プロセッサ２１５が、ＬＢＡ−ＰＢＡ変換テーブル９００を用いて、データの存在するＮＶＭモジュールＬＢＡ領域にのみＮＶＭモジュールＰＢＡを割り当てることで、ＮＶＭモジュール１２６が搭載する物理的な記憶領域の効率的な利用を図っている。
【０１２６】
ＮＶＭモジュールＬＢＡ９０１は、ＮＶＭモジュール１２６が提供する仮想的な論理領域を１６ＫＢ単位毎に区切った領域を示す（ここでは、１６ＫＢ単位毎に区切った領域を、アドレスが若い順に並べてある）。
【０１２７】
これは、本実施例が、ＮＶＭモジュールＬＢＡとＮＶＭモジュールＰＢＡとの対応付けを１６ＫＢ単位で管理することを示している。但し、これは、ＮＶＭモジュールＬＢＡとＮＶＭモジュールＰＢＡとの対応付けが、１６ＫＢ単位にて管理されることに限定されることを示してはいない。この管理単位は、セグメントのサイズ（ストレージコントローラ１１０のＮＶＭモジュール１２６に対するアクセスの最小単位）より小さいサイズであれば、如何なる単位でも良い。
【０１２８】
図９に示す例では、セグメントサイズは１２８ＫＢであり、ＮＶＭモジュールＬＢＡとＮＶＭモジュールＰＢＡとの対応付けを１６ＫＢ単位で管理している。すなわち、ここでは、ストレージ装置１０１の一つのセグメントは、８個のＮＶＭモジュールＬＢＡにより構成されている。
【０１２９】
ＮＶＭモジュールＰＢＡ９０２は、ＮＶＭモジュール１２６が管理する全ＦＭチップ（２２０〜２２８）の領域を示す情報である。
【０１３０】
本実施例では、ＮＶＭモジュールＰＢＡ９０２は、ＦＭチップ（２２０〜２２８）への最小アクセス単位であるページ単位で区切られたアドレスを持つ。
【０１３１】
図９の例では、ＮＶＭモジュールＬＢＡ９０１「０ｘ０００＿００００＿００００」に対応付けられたＰＢＡ(Physical Block Address)として、「ＸＸＸ」というあるＰＢＡ値が対応付けられている。このＰＢＡ値は、ＮＶＭモジュール１２６が有する、あるＦＭ（２２０〜２２８）の記憶領域を一意に示すアドレスである。例えば、ストレージコントローラ１１０からのリードコマンドの参照先として、ＮＶＭモジュールＬＢＡ９０１「０ｘ０００＿００００＿００００」を受信した場合、ＮＶＭモジュール１２６内のＮＶＭモジュールＰＢＡ９０２「ＸＸＸ」から物理的なデータが取得される。
【０１３２】
また、ＮＶＭモジュールＬＢＡ９０１に対応付けられたＮＶＭモジュールＰＢＡ９０２が無い場合、ＮＶＭモジュールＰＢＡ９０２は「未割当」となる。例えば、図９の例では、セグメント番号ＳＥＧ＃１３１０７３に対応付けられた８つのＮＶＭモジュールＬＢＡのうち、実際にデータを格納しているのは、ＮＶＭモジュールＬＢＡ「０ｘ０００＿０００２＿８０００」に対応付けられたＮＶＭモジュールＰＢＡ「ＺＺＺ」の１６ＫＢの領域のみである。他のＮＶＭモジュールＰＢＡ９０２は「未割当」となっている。
【０１３３】
本実施例は、ＮＶＭモジュール１２６の記憶領域の利用効率向上を目的とし、論理領域であるＮＶＭモジュールＬＢＡをＮＶＭモジュールＰＢＡ９０２の総割り当て量よりも多い量とすることを特徴とするものである。
【０１３４】
本実施例では、論理領域であるＮＶＭモジュールＬＢＡ９０１の総サイズを、ＮＶＭモジュールＰＢＡ９０２の総サイズの定数倍とする。この倍率は、本実施例においては、セグメントの最小管理単位と、最小論物変換単位の比率を倍率として用いる。
【０１３５】
本実施例でのセグメント最小管理単位は１２８ＫＢであり、最小論物変換単位は１６ＫＢであるから、倍率は１２８ＫＢ／１６ＫＢ＝８倍である。このため本実施例ではＮＶＭモジュールＰＢＡの総割り当て量が１００ＧＢであるとき、ＮＶＭモジュールＬＢＡは、１００ＧＢ×８=８００ＧＢとなる。
【０１３６】
本実施例では、ストレージ装置１０１にＮＶＭモジュール１２６が接続された場合において、ストレージ装置１０１が、ＮＶＭモジュール１２６よりＬＢＡ−ＰＢＡ変換テーブル９００の最小管理単位を取得する。また、ＮＶＭモジュール１２６が、ストレージコントローラ１１０よりストレージコントローラ１１０のセグメントの最小管理単位を取得する。
【０１３７】
このとき、ＮＶＭモジュール１２６又はストレージコントローラ１１０が、セグメントの最小管理単位と、最小論物変換単位の比率を計算し、その値に基づいて、ＮＶＭモジュールＬＢＡ９０１の総サイズ（ＮＶＭモジュール１２６の論理空間の容量）を決定する。
【０１３８】
なお、本実施例では、ＮＶＭモジュールＬＢＡ９０１の総サイズをＮＶＭモジュールＰＢＡの総割り当て量の定数倍とする例について記すが、本実施例はこの方式に限定されるものではない。
【０１３９】
本実施例ではＮＶＭモジュールＬＢＡ９０１の総サイズをＮＶＭモジュールＰＢＡの総割り当て量よりも増やすことで、ＮＶＭモジュールの容量利用効率を改善する。以下、改善される理由を説明する。
【０１４０】
本実施例では、図９に示すようにデータのあるＮＶＭモジュールＬＢＡ９０１のみをＮＶＭモジュールＰＢＡ９０２に対応付ける。このため、例えばセグメントに１６ＫＢのデータのみを記憶する際、１２８ＫＢのセグメント中の１つのＮＶＭモジュールＬＢＡ９０１に一つのＮＶＭモジュールＰＢＡ９０２を割り当てる。結果、本来割り当てるはずだったＮＶＭモジュールＰＢＡ９０２が未割当となり、ＮＶＭモジュール１２６の物理的な容量利用効率が低下する。
【０１４１】
この未割当となったＮＶＭモジュールＰＢＡ９０２を対応付けるＮＶＭモジュールＬＢＡ９０１が別にあれば、物理的な記憶領域を有効に利用できる。このため、ＮＶＭモジュールＬＢＡ９０１の総サイズをＮＶＭモジュールＰＢＡ９０２の総割り当て量より拡張すれば、セグメントにセグメントサイズより小さいサイズのデータが記憶され未割当となっているＮＶＭモジュールＰＢＡ９０２を他に割り当てることができ、物理的な記憶領域の利用効率を改善できる。
【０１４２】
つまり、図９に示すＬＢＡ−ＰＢＡ変換テーブル９００により、ＮＶＭモジュールＬＢＡ９０１とＮＶＭモジュールＰＢＡ９０２との関係を実際に記憶データが存在する領域のみ対応付けるように管理し、ＮＶＭモジュールＬＢＡ９０１の総サイズをＮＶＭモジュールＰＢＡ９０２の総割り当て量より拡張することで、物理的な記憶領域の利用効率を改善できる。
【０１４３】
ただし、１２８ＫＢサイズのセグメント中に１２８ＫＢのデータが記憶された場合と、１２８ＫＢサイズのセグメント中に１６ＫＢのデータが記憶された場合とで、ＮＶＭモジュールＬＢＡ９０２に対応付けるＮＶＭモジュールＰＢＡ９０２の量が変わる。つまり、サイズが小さいデータを格納しているセグメントが多量にある時は、未割当となるＮＶＭモジュールＰＢＡ９０２が多量に生じるため、利用可能なＮＶＭモジュールＬＢＡ９０２のサイズを拡張できる。一方、データのサイズがセグメントサイズと同等となっているセグメントが多量にあるときは、未割当となるＮＶＭモジュールＰＢＡ９０２が減少するため、ＮＶＭモジュールＬＢＡ９０１のサイズをＮＶＭモジュールＰＢＡ９０２より拡張してはならない。このように、セグメント中に記憶されるデータのサイズによって、実質的に利用可能なＮＶＭモジュールＬＢＡ９０１の総サイズは変化する。
【０１４４】
本実施例では、拡張したＮＶＭモジュールＬＢＡ９０１の総サイズについては固定とし、ＮＶＮ モジュールＬＢＡ９０１によって構成されるセグメントの利用可能な物理的な容量を可変に制御することで、ストレージコントローラ１１０の使用可能なＮＶＭモジュールＬＢＡ９０１の総サイズを変える。このセグメントの利用量の制御の詳細は後述する。
【０１４５】
以上、ＮＶＭモジュール１２６が用いるＬＢＡ−ＰＢＡ変換テーブル９００について説明した。なお、「ａａａテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ａａａテーブル」を「ａａａ情報」と呼ぶことができる。
【０１４６】
続いて、ＮＶＭモジュール１２６が用いるブロック管理情報について図１０を用いて説明する。
【０１４７】
図１０は、実施例１に係るブロック管理情報１０００を示す。
【０１４８】
ブロック管理情報１０００は、ＮＶＭモジュール１２６内のＲＡＭ２１３内に格納されている。ブロック管理情報１０００は、ＮＶＭモジュール１２６における物理ブロック毎に、ＮＶＭモジュールＰＢＡ１００１、ＮＶＭチップ番号１００２、ブロック番号１００３、及び無効ＰＢＡ量１００４を有する。
ＮＶＭモジュールＰＢＡ１００１は、ＦＭチップ（２２０〜２２８）における物理ブロックを一意に識別する情報を示す。本実施例では、ＮＶＭモジュールＰＢＡがブロック単位で管理される。図１０では、ＮＶＭモジュールＰＢＡ１００１は、物理ブロックの先頭アドレスである。例えば、「０ｘ０００＿００００＿００００」は、「０ｘ０００＿００００＿００００」〜「０ｘ０００＿００３Ｆ＿ＦＦＦＦ」のＮＶＭモジュールＰＢＡ範囲が該当することを示している。
ＮＶＭチップ番号１００２は、物理ブロックを含むＦＭチップ（２２０〜２２８）の番号を示す。
【０１４９】
ブロック番号１００３は、物理ブロックの番号を示す。
【０１５０】
無効ＰＢＡ量１００４は、物理ブロックにおける無効ページの総容量を示す。本明細書では、何のデータも書き込まれていない物理ページを、「空きページ」と言うことがある。各論理ページについて、最近書き込まれたデータを「有効データ」と言い、有効データが書き込まれたことにより旧いデータとなったデータを「無効データ」と言うことがある。また、有効データが格納されている物理ページを「有効ページ」と言い、無効データが格納されている物理ページを「無効ページ」と言うことがある。本実施例では、無効ページ又はそれのＰＢＡを「無効ＰＢＡ」と言い、有効ページ又はそれのＰＢＡを「有効ＰＢＡ」と言うこともある。
【０１５１】
無効ＰＢＡは、データの上書きが不可能な不揮発性メモリにおいて、疑似的に上書きを実現しようとする際に必然的に生じるものである。具体的には、データ更新の際、他の未書き込みＰＢＡに対して更新したデータを記憶し、ＬＢＡ−ＰＢＡ変換テーブル９００のＮＶＭモジュールＰＢＡ９０２を更新データが記憶されたＰＢＡ領域の先頭アドレスに書き換える。この時、更新前のデータが記憶されたＮＶＭモジュールＰＢＡ９０２は、ＬＢＡ−ＰＢＡ変換テーブル９００による対応付けが解除され、無効ＰＢＡとなる。
【０１５２】
図１０の例では、ＮＶＭモジュール１２６が管理するＮＶＭチップ番号１００２「０」及びブロック番号１００３「０」のブロックは、無効ＰＢＡ量１００４が１６０ＫＢであることを示している。
【０１５３】
本実施例では、後述のＮＶＭモジュール１２６が管理するＰＢＡ割り当て管理情報１１００内の無効ＰＢＡ量１１０３が閾値より多くなった（空きページの枯渇した）際に、無効ＰＢＡを含むブロックからデータを消去し、未書き込みＰＢＡ領域（つまり空きの物理ブロック）を作成する。この処理をリクラメーションと呼ぶ。このリクラメーション時に、消去対象ブロック中に有効ＰＡＢが含まれる場合、有効ＰＢＡから有効データをコピーする必要が生じる。有効データのコピーは、ＦＭチップ（２２０〜２２８）へのライト処理を伴うため、ＦＭチップ（２２０〜２２８）の寿命を短くさせるとともに、コピー処理としてＮＶＭモジュール１２６のプロセッサ２１５やバス帯域などのリソースを消費するため、ストレージ装置１０１の性能低下の要因ともなる。このため、有効データのコピーは可能な限り少ないことが望ましい。本実施例のＮＶＭモジュール１２６は、リクラメーション時にブロック管理情報１０００を参照し、無効ＰＢＡ量１００４が大きい（無効ＰＢＡを多く含む）ブロックを消去対象ブロックとすることで、コピーされる有効データの量を削減することができる。
【０１５４】
なお、本実施例では、無効ＰＢＡ量１００４を、無効ページの総容量としたが、これに限定されるものではない。例えば、無効ＰＢＡ量１００４は、無効ページの数でも良い。
【０１５５】
以上、ＮＶＭモジュール１２６が用いるブロック管理情報１０００について説明した。
【０１５６】
図１１は、実施例１に係るＰＢＡ割り当て管理情報１１００を示す。
ＰＢＡ割り当て管理情報１１００は、ＮＶＭモジュール１２６（例えばＲＡＭ２１３）内に格納されている。ＰＢＡ割り当て管理情報１１００は、ＰＢＡ割り当て量１１０１、ＰＢＡ割り当て残量１１０２及び無効ＰＢＡ量１１０３を有する。
ＰＢＡ割り当て量１１０１は、ＬＢＡ−ＰＢＡ変換テーブル９００によってＮＶＭモジュールＬＢＡ９０１に対応付けられているＮＶＭモジュールＰＢＡ９０２の総量（つまり、論理空間を構成する複数の論理ブロックに割り当てられている物理ブロックの総容量）を示す。
ＰＢＡ割り当て残量１１０２は、ＦＭチップ（２２０〜２２８）により構成されるＰＢＡの総量からＰＢＡ割り当て量１１０１を引いた値を示す。
【０１５７】
無効ＰＢＡ量１１０３は、ＮＶＭモジュール１２６が管理するＰＢＡのうち、無効ＰＢＡとなっているＰＢＡの量を示す。本実施例のＮＶＭモジュール１２６は、例えば、この値が閾値より多くとなった場合に、前述のリクラメーションを実施し、無効ＰＢＡ量１００４を一定値以下とする。
【０１５８】
本実施例では、ＰＢＡ割り当て管理情報１１００に更新があった場合に、ＮＶＭモジュール１２６が、ストレージコントローラ１１０に、更新後のＰＢＡ割り当て管理情報１１００（少なくとも更新後の情報部分）を送信する。
【０１５９】
以上、ＰＢＡ割り当て管理情報１１００について説明した。
【０１６０】
本実施例のＮＶＭモジュール１２６は、これまでに述べたＬＢＡ−ＰＢＡ変換テーブル９００、ブロック管理情報１０００、ＰＢＡ割り当て管理情報１１００を用い、キャッシュの記憶領域を管理する。
【０１６１】
続いて、ストレージ装置１０１のキャッシュ制御について説明する。
【０１６２】
図１２は、実施例１に係るキャッシュ制御におけるセグメントの属性の遷移について記した概念図である。
【０１６３】
以下、各遷移１２１１〜１２１７の条件について説明する。
【０１６４】
〜クリーンからフリーへのセグメント属性の遷移１２１１について〜
【０１６５】
クリーンからフリーへのセグメント属性の遷移１２１１は「ＮＶＭモジュールＰＢＡの割り当て残量」が、所定の閾値を以下となった際に、ストレージコントローラ１１０のプロセッサ１２１によって行われる。
【０１６６】
この判断基準として用いられる「ＮＶＭモジュールＰＢＡの割り当て残量」は、ＮＶＭモジュール１２６が管理するＰＢＡ割り当て管理情報１１００のＰＢＡ割り当て残量１１０２でも良いし、或いはストレージ装置１０１が管理するキャッシュセグメント管理情報７００のＮＶＭモジュールＰＢＡ割り当て量７０６の総和をＮＶＭモジュールＰＢＡ割り当て数として算出し、その値をＮＶＭモジュール１２６の全ＰＢＡから減算して求めても良い。
【０１６７】
ストレージコントローラ１１０（プロセッサ１２１）は、「ＮＶＭモジュールＰＢＡ割り当て残量」が所定の閾値以下となった際、クリーン属性のセグメント群より、フリー属性にする（解放対象の）セグメント（例えば最後にアクセスされてからの時間経過が最も長いセグメント）を決定する。
【０１６８】
このとき、ストレージコントローラ１１０（プロセッサ１２１）は、決定した解放対象のセグメント番号を用いて、キャッシュセグメント管理情報７００を参照し、解放対象のセグメントＮＶＭモジュールＰＢＡ割り当て量７０６を取得する。プロセッサ１２１は、解放対象のセグメントの属性７０４を「クリーン」から「フリー」にして、解放されたＮＶＭモジュールＰＢＡ量を「ＮＶＭモジュールＰＢＡ割り当て残量」に加算する。
【０１６９】
加算した結果、「ＮＶＭモジュールＰＢＡの割り当て残量」が所定の閾値を上回ったら、セグメントの解放は終了となる。その一方、依然として「ＮＶＭモジュールＰＢＡの割り当て残量」が所定の閾値以下である場合、ストレージコントローラ１１０（プロセッサ１２１）は、更にセグメントを解放する。このようにプロセッサ１２１は、「ＮＶＭモジュールＰＢＡ割り当て残量」が、所定の閾値を上回るまで、クリーン属性のセグメントを、フリー属性のセグメントにし続ける。
【０１７０】
また、ストレージコントローラ１１０（プロセッサ１２１）は、クリーンからフリーへのセグメント属性の遷移１２１１の契機で、ＤＲＡＭ１２５に格納されているキャッシュヒット判定情報６００を参照し、フリー属性にしたセグメントが該当するキャッシュセグメント番号６０５を「無し」に変更する。
【０１７１】
〜クリーンからクリーンへのセグメント属性の遷移１２１３について〜
【０１７２】
クリーンからクリーンへのセグメント属性の遷移１２１３は、リード対象のデータをキャッシュしているセグメントとして、そのセグメント内のデータ（以下、セグメントデータ）が更新され、且つ、そのセグメントデータが記憶デバイス（ＳＳＤ１１１、ＨＤＤ１１２）にコピーされた際に、実施される。
【０１７３】
セグメントデータが更新されたことで、ＰＢＡの残量に変化が生じている可能性があるため、ストレージコントローラ１１０（プロセッサ１２１）は、ＮＶＭモジュール１２６からＰＢＡ割り当て残量１１０２を取得、もしくはキャッシュセグメント管理情報７００のＮＶＭモジュールＰＢＡ割り当て量７０６を用いたＰＢＡ割り当て残量の算出を行う。
【０１７４】
本実施例では、ＮＶＭモジュールＬＢＡ９０１に対応付けられたセグメントの属性をクリーンからクリーンに遷移するにあたって、セグメントに対応付けられるＬＵ及びＬＢＡが変化した際、ストレージコントローラ１１０（プロセッサ１２１）は、ＮＶＭモジュール１２６に対し、セグメントが対応付けられているＮＶＭモジュールＬＢＡを通知し、そのセグメントのＮＶＭモジュールＬＢＡに対応付けられていた全てのＮＶＭモジュールＰＢＡを解放する（図１８のＳ１８１２に該当）。
【０１７５】
〜クリーンからダーティへのセグメント属性の遷移１２１４について〜
【０１７６】
クリーンからダーティへのセグメント属性の遷移１２１４は、ライト対象のデータ（以下、ライトデータ）をキャッシュしているセグメントにおいて、そのセグメントデータが更新された際に実施される。
【０１７７】
セグメントデータが更新されたことで、ＰＢＡの残量に変化が生じている可能性があるため、ストレージコントローラ１１０（プロセッサ１２１）は、ＮＶＭモジュール１２６からＰＢＡ割り当て残量１１０２を取得、もしくはキャッシュセグメント管理情報７００のＮＶＭモジュールＰＢＡ割り当て量７０６を用いたＰＢＡ割り当て残量の算出を行う。
【０１７８】
〜ダーティからダーティへのセグメント属性の遷移１２１７について〜
【０１７９】
ダーティからダーティへのセグメント属性の遷移１２１７は、ライトデータをキャッシュしているセグメンにおいて、そのセグメントデータが記憶デバイス（ＳＳＤ１１１、ＨＤＤ１１２）にコピーされておらず、且つそのセグメントデータが更新された際に実施される。セグメントのデータが更新されたことで、ＰＢＡの残量に変化が生じている可能性があるため、ストレージコントローラ１１０（プロセッサ１２１）は、ＮＶＭモジュール１２６からＰＢＡ割り当て残量１１０２を取得、もしくはキャッシュセグメント管理情報７００のＮＶＭモジュールＰＢＡ割り当て量７０６を用いたＰＢＡ割り当て残量の算出を行う。
【０１８０】
〜ダーティからクリーンへのセグメント属性の遷移１２１６について〜
【０１８１】
ダーティからクリーンへのセグメント属性の遷移１２１６は、セグメントデータが記憶デバイス（ＳＳＤ１１１、ＨＤＤ１１２）にコピーされた際に、実施される。この場合、セグメントデータは更新されておらず、ＰＢＡの残量にも変化が生じないため、プロセッサ１２１は、ＰＢＡ残量の更新は実施しない。
【０１８２】
〜フリーからクリーンへのセグメント属性の遷移１２１２について〜
【０１８３】
フリーからクリーンへのセグメントの属性の遷移１２１２は、フリー属性のセグメントに、リード対象のデータを格納した際に実施される。
【０１８４】
セグメントにリード対象のデータが格納されたことで、ＰＢＡの残量に変化が生じているため、ストレージコントローラ１１０（プロセッサ１２１）は、ＮＶＭモジュール１２６からＰＢＡ割り当て残量１１０２を取得、もしくはキャッシュセグメント管理情報７００のＮＶＭモジュールＰＢＡ割り当て量７０６を用いたＰＢＡ割り当て残量の算出を行う。
【０１８５】
〜フリーからダーティへのセグメント属性の遷移１２１５について〜
【０１８６】
フリーからダーティへのセグメント属性の遷移１２１５は、フリー属性であったセグメントに対して、ライトデータがライトされた場合に実施される。
【０１８７】
セグメントにライトデータが格納されたことで、ＰＢＡの残量に変化が生じているため、ストレージ装置１０１のプロセッサ１２１は、ＮＶＭモジュール１２６からＰＢＡ割り当て残量１１０２を取得、もしくはキャッシュセグメント管理情報７００のＮＶＭモジュールＰＢＡ割り当て量７０６を用いたＰＢＡ割り当て残量の算出を行う。
【０１８８】
以上、セグメントの属性遷移に関して説明した。なお、本実施例は、セグメントの属性としてクリーン 、フリー、及びダーティの３種しかないことに限定されるものではない。本実施例は、クリーン、フリー、及びダーティを含む３つより多いのセグメントの属性が存在する場合においても適用できる。
【０１８９】
続いて、ストレージ装置１０１のライト処理について図１３を用いて説明する。
【０１９０】
図１３は、実施例１に係るストレージ装置１０１のライト処理の一例を示す。
【０１９１】
Ｓ１３０１で、ストレージコントローラ１１０は、サーバー等の上位装置１０３よりライトデータと、そのライトデータを記憶するアドレス（ＬＵとＬＢＡ）を受信する。
【０１９２】
Ｓ１３０２で、ストレージコントローラ１１０は、Ｓ１３０１にて上位装置１０３より受信したＬＵとＬＢＡを用いて、キャッシュヒットを判定する。具体的には、例えば、プロセッサ１２１が、ストレージコントローラ１１０内のＤＲＡＭ１２５に記憶されているキャッシュヒット判定情報６００を参照し、上位装置１０３からのＬＵとＬＢＡによって特定されるキャッシュセグメント番号６０５の値を取得する。ストレージコントローラ１１０は、取得した値がセグメント番号であれば、キャッシュヒットと判定する。一方、取得した値がセグメント番号でなければ、キャッシュミスと判定する。
【０１９３】
Ｓ１３０３で、ストレージコントローラ１１０は、Ｓ１３０２でのキャッシュヒット判定の結果に基づく処理を実施する。Ｓ１３０２での判定結果がキャッシュヒット（Ｓ１３０３：Ｙｅｓ）であれば、ストレージコントローラ１１０は、Ｓ１３０４の処理をする。一方、Ｓ１３０２での判定結果がキャッシュミス（Ｓ１３０３：Ｎｏ）であれば、ストレージ装置１０１は、Ｓ１３０８の処理をする。
【０１９４】
Ｓ１３０４（Ｓ１３０３：Ｙｅｓ）で、ストレージコントローラ１１０は、既に割り当て済みのキャッシュセグメントの詳細情報を取得する。具体的には、例えば、プロセッサ１２１が、ストレージコントローラ１１０内のＤＲＡＭ１２５に記憶されているキャッシュセグメント管理情報７００を参照し、Ｓ１３０２にて取得したキャッシュセグメント番号６０５（７０１）のＤＲＡＭ／ＮＶＭモジュール７０２とＤＲＡＭ／Ａｄｄｒｅｓｓ／ＮＶＭモジュールＬＢＡ７０３の値を取得する。
【０１９５】
Ｓ１３０８（Ｓ１３０３：Ｎｏ）で、ストレージコントローラ１１０は、セグメントを新規に取得する。ストレージコントローラ１１０は、キャッシュセグメント管理情報７００の属性７０４を参照し、属性がフリーのセグメントの中から、任意のセグメントを、ライトデータをキャッシュするセグメントとして選択する。ストレージコントローラ１１０は、取得したキャッシュセグメント番号６０５（７０１）より、キャッシュセグメントの詳細情報を取得する。具体的には、例えば、プロセッサ１２１が、ストレージコントローラ１１０内のＤＲＡＭ１２５に記憶されているキャッシュセグメント管理情報７００を参照し、属性７０４が「フリー」のセグメントの中から選んだ対象セグメントのＤＲＡＭ／ＮＶＭモジュール７０２とＤＲＡＭ／Ａｄｄｒｅｓｓ／ＮＶＭモジュールＬＢＡ７０３の値を取得する。
【０１９６】
Ｓ１３０５及びＳ１３０９では、ストレージコントローラ１１０は、対象としたキャッシュセグメントに対してライトデータをライトする。本実施例では、ＤＲＡＭ１２５に対応付けられたセグメントとＮＶＭモジュール１２６に対応付けられたセグメントの二種類のセグメントが存在する。ＤＲＡＭ１２５に対応付けられたセグメントの場合、ストレージコントローラ１１０は、上位装置１０３から受信したライトデータをＳ１３０４又はＳ１３０９にて取得したＤＲＡＭ Ａｄｄｒｅｓｓの値が示すＤＲＡＭの特定領域にライトする。一方、ＮＶＭモジュール１２６に対応付けられたセグメントの場合、ストレージコントローラ１１０は、上位装置１０３から受信したライトデータを、Ｓ１３０４又はＳ１３０８にて取得したＮＶＭモジュールＬＢＡの値と共にＮＶＭモジュール１２６に送信する。ストレージコントローラ１１０よりライトデータとＮＶＭモジュールＬＢＡを受信したＮＶＭモジュール１２６は、図１５に示すライト処理を実施する。図１５に示すＮＶＭモジュール１２６のライト処理の詳細な説明は後述する。
【０１９７】
Ｓ１３０６では、ストレージコントローラ１１０は、ＮＶＭモジュールＰＢＡ残量を取得、又は算出する。具体的には、例えば、プロセッサ１２１が、ＮＶＭモジュール１２６より、ＰＢＡ割り当て管理情報１１００を取得し、その中のＰＢＡ割り当て残量１１０２の値を取得する。又は、プロセッサ１２１が、キャッシュセグメント管理情報７００を参照し、Ｓ１３０５にてライトしたセグメントへのＰＢＡ割り当て量を、キャッシュセグメント管理情報７００内のＮＶＭモジュールＰＢＡ割り当て量７０６に記憶し更新する。そして、プロセッサ１２１が、キャッシュセグメント管理情報７００内のＮＶＭモジュールＰＢＡ割り当て量７０６の総和を、ＮＶＭモジュールＰＢＡ割り当て数として算出し、算出した値をＮＶＭモジュール１２６からのＮＶＭモジュールＰＢＡの割り当て総量より減算し、ＰＢＡ割り当て残量を算出する。なお、このステップは、Ｓ１３０５にて、ＮＶＭモジュール１２６に対応付けられたセグメントにライトデータをライトした場合のみ実施され、ＤＲＡＭ１２５に対応付けられたセグメントにライトデータをライトした場合には、実施されないで良い。
【０１９８】
Ｓ１３０７で、ストレージコントローラ１１０は、Ｓ１３０６にて算出又は取得した新たなＮＶＭモジュールＰＢＡの割り当て残量が、あらかじめ定められている閾値より多いか否かを判断する。
ＮＶＭモジュールＰＢＡの割り当て残量があらかじめ定められている閾値より大きいとき、ＮＶＭモジュールＰＢＡの割り当て量には余裕があり、セグメントの解放処理は不要なので、ストレージコントローラ１１０によるライト処理は終了となる。一方、ＮＶＭモジュールＰＢＡの割り当て残量が閾値以下であるとき、ＮＶＭモジュールＰＢＡの割り当て量は枯渇し始めているため、ストレージコントローラ１１０は、セグメント解放処理を実施する。
【０１９９】
Ｓ１３１０で、ストレージコントローラ１１０は、Ｓ１３０９にてライトデータをライトしたセグメントとＳ１３０１にて上位装置１０３から受信したＬＵ、ＬＢＡとの対応付けを管理するため、管理情報を更新する。具体的には、例えば、プロセッサ１２１が、ＤＲＡＭ１２５に格納されたキャッシュヒット判定情報６００を参照し、Ｓ１３０１にて取得したＬＵ、ＬＢＡが該当する行のキャッシュセグメント番号６０５の値を、Ｓ１３０８にて新たに取得したセグメントのセグメント番号に更新する。この処理によって、ＬＵ、ＬＢＡに対して新たに割り当てられたセグメントが対応付けられる。
【０２００】
以上、ストレージコントローラ１１０のライト処理について説明した。なお、本実施例では、セグメントに対するアクセスに関する情報（以下、アクセス情報）を管理すること示していないが、アクセス情報を管理することも、本実施例に含まれる。例えば、ストレージ装置１０１が、セグメントに対するアクセス頻度が相対的に小さい、及び／又はセグメントに対する最終アクセスからの経過時間が長い等のアクセス情報を、管理することもできる。
【０２０１】
続いて、ストレージコントローラ１１０のセグメント解放処理について、図１４を用いて説明する。
【０２０２】
図１４は、実施例１に係るストレージコントローラ１１０のセグメント解放処理の一例を示す。
【０２０３】
実施例１におけるストレージコントローラ１１０のセグメント解放処理は、ＰＢＡ割り当て管理情報１１００のＰＢＡ割り当て残量１１０２の値が、ＮＶＭモジュール１２６からプロセッサ１２１に通知され、通知されたＰＢＡ割り当て残量１１０２があらかじめ定めた閾値以下となっている場合に、プロセッサ１２１により実施される。
ＮＶＭモジュール１２６のＰＢＡ割り当て残量１１０２があらかじめ定められている閾値以下となる場合とは、例えば、仮想的に拡張しているＮＶＭモジュールＬＢＡに割り当てるＮＶＭモジュールＰＢＡが枯渇し始めていることを表しており、ＮＶＭモジュールＬＢＡに対応付けられたセグメントの利用数を減らす必要がある。このため、本実施例では、プロセッサ１２１は、ＮＶＭモジュール１２６のＰＢＡ割り当て残量１１０２が閾値より多くなるまで、クリーン属性のセグメントを解放する（フリー属性のセグメントとする）。
【０２０４】
ストレージ装置１０１のセグメント解放処理の最初のステップであるＳ１４０１で、ストレージコントローラ１１０は、必要なセグメント（必要なＮＶＭモジュールＰＢＡ）の解放量を算出する。具体的には、例えば、まず、プロセッサ１２１が、あらかじめ定められている閾値（あらかじめ定められているＰＢＡ割り当て残量）と、現在のＰＢＡ割り当て残量とを比較する。そして、プロセッサ１２１は、現在のＰＢＡ割り当て残量があらかじめ定められている閾値以下である場合、現在のＰＢＡ割り当て残量があらかじめ定められている閾値より多くなる様に、必要なセグメント（必要なＮＶＭモジュールＰＢＡ）の解放量を決定する。
【０２０５】
Ｓ１４０２で、ストレージコントローラ１１０は、合計ＰＢＡ解放量を０に初期化する。ここで、合計ＰＢＡ解放量とは、プロセッサ１２１が、セグメントを解放することにより、セグメントに割り当てられなくなったＰＢＡ割り当て量を示す。
【０２０６】
Ｓ１４０３で、ストレージコントローラ１１０は、ＬＲＵより最近アクセスの無い又はアクセス頻度が相対的に少ないクリーン属性のセグメントを、解放候補のセグメント（以下、解放候補セグメント）として取得する。なお、本実施例では、ストレージコントローラ１１０は、クリーン属性のセグメントをＬＲＵにて管理し、解放候補セグメントとして、最後にアクセスされてからの経過時間が最も長いセグメントを選択する。しかし、本実施例は、このＬＲＵによる解放候補セグメントの選択の仕方に限定されるものではない。本実施例は、キャッシュヒットとなる確率が向上するような如何なるセグメント管理手法においても適用される。任意のセグメント管理手法の任意の基準と任意のアルゴリズムにて開放候補とすべきクリーン属性のセグメントを選択するとして良い。
【０２０７】
Ｓ１４０４で、ストレージコントローラ１１０は、Ｓ１４０３にて選択した解放候補セグメントを解放することで解放されるＰＢＡ割り当て量を取得する。具体的に、例えば、プロセッサ１２１が、キャッシュセグメント管理情報７００を参照し、Ｓ１４０３にて選択した解放候補セグメントのＮＶＭモジュールＰＢＡ割り当て量７０６の値を取得する。
【０２０８】
Ｓ１４０５で、ストレージコントローラ１１０は、Ｓ１４０４で取得した解放候補セグメントの開放により、実際に解放されるＮＶＭモジュールＰＢＡ解放量を、Ｓ１４０２にて初期化した合計ＰＢＡ解放量に加算する。
【０２０９】
Ｓ１４０６で、ストレージコントローラ１１０は、Ｓ１４０５にて算出した合計ＮＶＭモジュールＰＢＡ解放量の合計ＰＢＡ解放量が、Ｓ１４０１にて算出した必要なＮＶＭモジュールＰＢＡ解放量以上となったかを判断する。Ｓ１４０５にて算出した合計ＰＢＡ解放量が、Ｓ１４０１にて算出した必要なＮＶＭモジュールＰＢＡ解放量を上回ったということは、ＮＶＭモジュールＰＢＡ割り当て残量を閾値より多くするのに必要なセグメントの解放候補が確保できたことを意味する。この場合、プロセッサ１２１は、Ｓ１４０７の処理をする。一方、Ｓ１４０５にて算出した合計ＰＢＡ解放量が、Ｓ１４０１にて算出した必要なＮＶＭモジュールＰＢＡ解放量を下回ったということは、Ｓ１４０３にて選択した解放候補セグメントを解放したとしても、ＮＶＭモジュールＰＢＡ割り当て残量が閾値より多くならないことを意味する。このため、プロセッサ１２１は、追加の解放セグメントを選択するべく、再度Ｓ１４０３の処理をする。
【０２１０】
Ｓ１４０３〜Ｓ１４０６処理により、ストレージコントローラ１１０は、ＮＶＭ モジュールＰＢＡ割り当て残量を、あらかじめ定めた閾値より多くするために必要な量のセグメントを選択できる。
【０２１１】
例えば、Ｓ１４０１にて算出された必要ＮＶＭモジュールＰＢＡの量が６４ＫＢであった場合、最初にＳ１４０３にて選択したセグメントに割り当てられていたＮＶＭ モジュールＰＢＡ量が３２ＫＢであったならば、６４ＫＢに満たないため、更に解放するセグメントを取得するように、プロセッサ１２１は、Ｓ１４０３の処理を再度する。
【０２１２】
次に選択したセグメントに割り当てられたＮＶＭモジュールＰＢＡ量が４８ＫＢであるとき、先に選択したセグメントと合わせて解放するＮＶＭモジュールＰＢＡ量は３２＋４８＝８０ＫＢとなり、必要ＮＶＭモジュールＰＢＡ量を満たすため、プロセッサ１２１は、Ｓ１４０７の処理をする。
【０２１３】
Ｓ１４０７で、ストレージコントローラ１１０は、選択した解放候補セグメントを解放する。具体的には、例えば、プロセッサ１２１が、キャッシュヒット判定情報６００を参照し、ＬＵ及びＬＢＡに対応付けられた解放候補セグメントの情報を削除する。次に、プロセッサ１２１は、ＮＶＭモジュール１２６に対して、複数の解放候補セグメントのＮＶＭモジュールＬＢＡ（開始アドレス、サイズ）を通知し、解放を指示する。指示されたＮＶＭモジュール１２６のプロセッサ２１５は、ＬＢＡ−ＰＢＡ変換テーブル９００を参照し、通知されたＮＶＭモジュールＬＢＡに該当する領域に対応付けられている複数のＮＶＭモジュールＰＢＡ９０２の項目すべてを「未割当」とする。更にＮＶＭモジュール１２６のプロセッサ２１５は、ブロック管理情報１０００を参照し、ＮＶＭモジュールＬＢＡとの対応付けを解除したＮＶＭモジュールＰＢＡの無効ＰＢＡ量１００４を加算する。
【０２１４】
以上、ストレージ装置１０１のセグメント解放処理の一例について説明した。続いて、ＮＶＭモジュール１２６の本実施例のライト処理について、図１５を用いて説明する。
【０２１５】
図１５は、実施例１に係るＮＶＭモジュール１２６のライト処理の一例を示す。
【０２１６】
Ｓ１５０１で、ＮＶＭモジュール１２６（ＦＭコントローラ２１０）が、ストレージコントローラ１１０より、ライトデータとライト先のアドレスとしてＮＶＭモジュールのＬＢＡを受信する。
【０２１７】
Ｓ１５０２で、ＦＭコントローラ２１０が、ライトデータを格納するため、未割当のＮＶＭモジュールＰＢＡから、ＰＢＡを取得する。具体的には、例えば、ＦＭコントローラ２１０（プロセッサ２１５）は、内部に未割当のＮＶＭモジュールＰＢＡ領域を、プールとして確保しており、その中から、所定のルール（例えば、消去回数の少ないブロックに対応付けられている）でライト対象とするＮＶＭモジュールＰＢＡを取得する。
【０２１８】
Ｓ１５０３で、ＦＭコントローラ２１０は、Ｓ１５０２にてライト対象として選択したＮＶＭモジュールＰＢＡの物理ページに、ライトデータを格納する。
【０２１９】
Ｓ１５０４で、ＦＭコントローラ２１０は、Ｓ１５０１にてストレージコントローラ１１０から受信したＮＶＭモジュールＬＢＡに対して、Ｓ１５０２にてライト対象として選択したＮＶＭモジュールＰＢＡを対応付ける。具体的には、例えば、プロセッサ２１５が、ＮＶＭモジュール１２６内のＲＡＭ２１３に格納されているＬＢＡ−ＰＢＡ変換テーブル９００を参照し、Ｓ１５０１にてストレージ装置１０１から受信したＮＶＭモジュールＬＢＡ９０１を、Ｓ１５０２にてライト対象として選択したＮＶＭモジュールＰＢＡ９０２に更新する。更に、プロセッサ２１５が、ＰＢＡ割り当て管理情報１１００を参照し、各種データを更新する。
【０２２０】
具体的には、例えば、ライトが、ＮＶＭモジュールＰＢＡが一つも対応付けられていないセグメント（ＮＶＭモジュールＬＢＡ）に対するライトであった場合、Ｓ１５０２にて取得したライト対象ＮＶＭモジュールＰＢＡ量のみが、ＮＶＭモジュールＰＢＡの変化量となる。具体的には、例えば、プロセッサ２１５は、ＰＢＡ割り当て量１１０１に、Ｓ１５０２にて取得したＮＶＭモジュールＰＢＡの量を加算する。また、例えば、プロセッサ２１５は、ＰＢＡ割り当て残量１１０２を、セグメントに割り当てた全ＰＢＡからＳ１５０２にて取得したＮＶＭモジュールＰＢＡの量を減算した値に更新する。
【０２２１】
一方、ライトが、ＮＶＭモジュールＰＢＡが既に対応付けられているセグメント（ＮＶＭモジュールＬＢＡ）に対するライトであった場合、Ｓ１５０２にて取得したライト対象ＮＶＭモジュールＰＢＡ量とライトによって無効となったＮＶＭモジュールＰＢＡ量との差が変化量となる。具体的には、例えば、Ｓ１５０１にてストレージ装置１０１より指定されたＮＶＭモジュールＬＢＡ領域に対応付けられていた複数のＮＶＭモジュールＰＢＡ領域の内、データの更新によってＮＶＭモジュールＬＢＡとの対応付けが解除されるＮＶＭモジュールＰＢＡ量と、Ｓ１５０２にて取得した新データのライト用のＮＶＭモジュールＰＢＡ量との差が、変化量となる。プロセッサ２１５は、ＰＢＡ割り当て量１１０１に、前述の差を加算する。また、プロセッサ２１５は、ＰＢＡ割り当て残量１１０２を、セグメントに割り当てた全ＰＢＡから前述の差を減算した値に更新する。
【０２２２】
更に、ＦＭコントローラ２１０は、無効ＰＢＡ量１１０３に、データの更新によってＮＶＭモジュールＬＢＡとの対応付けが解除されたＮＶＭモジュールＰＢＡ量を加算する。
【０２２３】
Ｓ１５０５で、ＦＭコントローラ２１０は、Ｓ１５０２〜Ｓ１５０４にてＮＶＭモジュールＰＢＡを割り当てたことで変化したＰＢＡ割り当て残量１１０２を、ストレージコントローラ１１０に通知する。
【０２２４】
以上、ＮＶＭモジュール１２６のライト処理の一例について説明した。
【０２２５】
続いて、実施例１に係るストレージコントローラ１１０のリード処理について図１６、図１７、図１８を用いて説明する。
【０２２６】
図１６は、実施例１に係るストレージコントローラ１１０のリード処理の一例を示す。
【０２２７】
Ｓ１６０１で、ストレージコントローラ１１０がサーバー等の上位装置１０３より、リード対象を指定するアドレス（ＬＵとＬＢＡ）を受信する。
【０２２８】
Ｓ１６０２で、ストレージコントローラ１１０は、Ｓ１６０１にて上位装置１０３より受信したＬＵとＬＢＡを用いてキャッシュヒットを判定する。具体的には、例えば、プロセッサ１２１が、ＤＲＡＭ１２５に記憶されているキャッシュヒット判定情報６００を参照し、ＬＵとＬＢＡによって特定されるキャッシュセグメント番号６０５の値を取得する。取得した値がセグメント番号であれば、プロセッサ１２１は、キャッシュヒットと判定する。一方、取得した値がセグメント番号でなければ、プロセッサ１２１は、キャッシュミスと判定する。
【０２２９】
Ｓ１６０３で、ストレージコントローラ１１０は、Ｓ１６０２でのキャッシュヒット判定の結果に基づく処理を実施する。Ｓ１６０２での判定結果がキャッシュヒット（Ｓ１６０３：Ｙｅｓ）であれば、ストレージコントローラ１１０は、キャッシュヒットリード処理をする（Ｓ１６０４：図１７参照）。一方、Ｓ１６０２での判定結果がキャッシュミス（Ｓ１６０３：Ｎｏ）であれば、ストレージコントローラ１１０は、キャッシュミスリード処理をする（Ｓ１６０５：図１８参照）。
【０２３０】
まず、キャッシュヒットリード処理（Ｓ１６０４）について図１７を用いて説明する。
【０２３１】
図１７は、実施例１に係るストレージコントローラ１１０のキャッシュヒットリード処理の一例を示す。
【０２３２】
ストレージコントローラ１１０のキャッシュヒットリード処理は、上位装置１０３より受信したＬＵ及びＬＢＡで特定される領域に格納されているデータが、ストレージ装置１０１の管理するキャッシュ上にあり、そのキャッシュ上のデータをリードする処理である。
【０２３３】
Ｓ１７０１で、ストレージコントローラ１１０は、ＰＢＡを割り当て済みのセグメントの詳細情報を取得する。具体的には、例えば、プロセッサ１２１が、ＤＲＡＭ１２５に記憶されているキャッシュセグメント管理情報７００を参照し、Ｓ１６０２にて取得したセグメント番号が該当する行のＤＲＡＭ／ＮＶＭモジュール７０２とＤＲＡＭ／Ａｄｄｒｅｓｓ／ＮＶＭモジュールＬＢＡ７０３の値を取得する。
【０２３４】
Ｓ１７０２で、ストレージコントローラ１１０は、対象となるセグメントからデータをリードする。本実施例では、ＤＲＡＭに対応付けられたセグメントとＮＶＭモジュールに対応付けられたセグメントの二種類が存在する。ＤＲＡＭに対応付けられたセグメントの場合、プロセッサ１２１が、Ｓ１７０１にて取得したＤＲＡＭ／Ａｄｄｒｅｓｓ／ＮＶＭモジュールＬＢＡ７０３の値が示すＤＲＡＭの特定領域より、データを上位装置１０３に送信する。一方、ＮＶＭモジュールＬＢＡに対応付けられたセグメントの場合、プロセッサ１２１が、Ｓ１７０４にて取得したＤＲＡＭ／ＮＶＭモジュール７０２の値を用いてＮＶＭモジュール１２６からデータを読み出し、上位装置１０３に送信する。
【０２３５】
ストレージコントローラ１１０よりＮＶＭモジュールＬＢＡを受信したＮＶＭモジュール１２６は、図１９に示すリード処理フローを実施する。図１９に示すＮＶＭモジュールのリード処理フローの詳細な説明は後述する。
【０２３６】
以上、ストレージコントローラ１１０のキャッシュヒットリード処理の一例について説明した。続いて、本実施例におけるストレージコントローラ１１０のキャッシュミスリード処理について図１８を用いて説明する。
【０２３７】
図１８は、実施例１に係るストレージコントローラ１１０のキャッシュミスリード処理の一例を示す。
【０２３８】
キャッシュミスリード処理は、ストレージコントローラ１１０が、Ｓ１６０３にてキャッシュミスと判定した場合に、ストレージコントローラ１１０により実行される処理である。
【０２３９】
Ｓ１８０１で、ストレージコントローラ１１０は、リード対象のデータのリード先となる、複数のＳＳＤ１１１或いはＨＤＤ１１２により構成されたＲＡＩＤグループ内のＬＢＡを、取得する。具体的には、例えば、プロセッサ１２１が、ＤＲＡＭ１２５に記憶されているキャッシュヒット判定情報６００を参照し、ＬＵとＬＢＡによって特定されるＲＡＩＤグループ６０３とＲＡＩＤグループ内ＬＢＡ６０４の値を取得する。
【０２４０】
Ｓ１８０２で、ストレージコントローラ１１０は、Ｓ１８０１より取得したＲＡＩＤグループ６０３とＲＡＩＤグループ内ＬＢＡ６０４に基づいて、データを取得する。具体的には、例えば、プロセッサ１２１が、ディスクインターフェース１２３に対して、ＳＳＤ１１１或いはＨＤＤ１１２により構成されているＲＡＩＤグループよりリード対象のデータをリードし、ストレージコントローラ１１０内のＤＲＡＭ１２５、又はＮＶＭモジュール１２６内のＲＡＭ２１３に送信するように指示する。
【０２４１】
Ｓ１８０３で、ストレージコントローラ１１０は、Ｓ１８０２にて取得したリード対象データを上位装置１０３に送信する。具体的には、例えば、プロセッサ１２１が、ホストインターフェース１２４に対して、Ｓ１８０２にてストレージコントローラ１１０内のＤＲＡＭ１２５又はＮＶＭモジュール１２６内のＲＡＭ２１３に格納したリード対象のデータを上位装置１０３に送信するように指示する。
【０２４２】
Ｓ１８０４で、ストレージコントローラ１１０は、ＰＢＡ割り当て残量を取得、又は算出する。具体的には、例えば、プロセッサ１２１が、ＮＶＭモジュール１２６より、ＰＢＡ割り当て管理情報１１００を取得し、その中のＰＢＡ割り当て残量１１０２の値を取得する。又は、プロセッサ１２１が、キャッシュセグメント管理情報７００内のＮＶＭモジュールＰＢＡ割り当て量７０６の総和をＮＶＭモジュールＰＢＡ割り当て数として算出し、その値をＮＶＭモジュールのＮＶＭモジュールＰＢＡの割り当て総量より減算し、ＰＢＡ割り当て残量を算出する。
【０２４３】
Ｓ１８０５で、ストレージコントローラ１１０は、Ｓ１８０４にて取得、又は算出したＮＶＭモジュールＰＢＡ割り当て残量が、あらかじめ定められた閾値より多いか否かを判断する。Ｓ１８０４にて取得又は算出したＰＢＡ割り当て残量が、閾値より多い場合、ストレージコントローラ１１０は、利用するセグメントを増加させるため、フリー属性としていたセグメントを取得するＳ１８０６の処理をする。一方、Ｓ１８０４にて取得又は算出したＮＶＭモジュールＰＢＡ割り当て残量が、閾値以下である場合、ストレージコントローラ１１０は、利用するセグメント数を変更せずに、既に利用しているクリーン属性のセグメントに新規データを更新して利用するため、クリーン属性のセグメントを取得するＳ１８１１の処理をする。
【０２４４】
Ｓ１８０６（Ｓ１８０５：Ｙｅｓ）で、ストレージコントローラ１１０は、フリー属性のセグメントを取得する。ストレージコントローラ１１０は、利用されていなかったフリー属性のセグメントを、Ｓ１８０２にてＲＡＩＤグループ６０３より取得したリードデータをキャッシュするセグメントとして選択する。
【０２４５】
Ｓ１８１１（Ｓ１８０５：Ｎｏ）で、ストレージコントローラ１１０は、クリーン属性のセグメントを取得する。ストレージコントローラ１１０は、利用中のクリーン属性のセグメント群の中から所定のルール（例えばＬＲＵ管理による、アクセスされてから最も時間が経過したセグメント）に沿って、Ｓ１８０２にてＲＡＩＤグループ６０３より取得したリードデータをキャッシュするセグメントを選択する。
【０２４６】
Ｓ１８１２で、ストレージコントローラ１１０は、Ｓ１８１１にて取得したセグメントがＮＶＭモジュールＬＢＡに対応付けられたものであった場合、そのＮＶＭモジュールＬＢＡに対応付けられているＮＶＭモジュールＰＢＡを解放するようにＮＶＭモジュール１２６に通知する。通知を受けたＮＶＭモジュール１２６（ＦＭコントローラ２１０）は、ＬＢＡ−ＰＢＡ変換テーブル９００を参照し、該当するＮＶＭモジュールＰＢＡ９０２の値を削除する。また、ＦＭコントローラ２１０は、ＰＢＡ割り当て管理情報１１００のＰＢＡ割り当て量１１０１の値に対して、ＮＶＭモジュールＬＢＡとの対応付けを解除されたＮＶＭモジュールＰＢＡの量を減算して更新する。次に、ＦＭコントローラ２１０は、ＰＢＡ割り当て残量１１０２の値に対して、ＮＶＭモジュールＬＢＡとの対応付けを解除されたＮＶＭモジュールＰＢＡの量を加算する。更に、ＦＭコントローラ２１０は、無効ＰＢＡ量１１０３の値に対して、ＮＶＭモジュールＬＢＡとの対応付けを解除されたＮＶＭモジュールＰＢＡの量を加算する。
【０２４７】
Ｓ１８０７で、ストレージコントローラ１１０は、Ｓ１８０６又はＳ１８１１にて取得したライト対象セグメントに対してデータをライトする。
【０２４８】
前述したように、本実施例では、ＤＲＡＭに対応付けられたセグメントとＮＶＭモジュールに対応付けられたセグメントの二種類が存在する。ＤＲＡＭに対応付けられたセグメントの場合、プロセッサ１２１が、上位装置１０３から受信したデータをＳ１３０４又はＳ１３０９にて取得したＤＲＡＭ Ａｄｄｒｅｓｓ／ＮＶＭモジュールＬＢＡ７０３の値が示すＤＲＡＭの特定領域にライトする。一方、ＮＶＭモジュールＬＢＡに対応付けられたセグメントの場合、プロセッサ１２１が、上位装置１０３から受信したライトデータを、Ｓ１３０４又はＳ１３０９にて取得したＮＶＭモジュールＬＢＡの値と共にＮＶＭモジュール１２６に送信する。ストレージコントローラ１１０よりライトデータとＮＶＭモジュールＬＢＡを受信したＮＶＭモジュール１２６は、図１５に示すライト処理を実施する。
【０２４９】
Ｓ１８０８で、ストレージコントローラ１１０は、Ｓ１８０７にてデータをライトしたセグメントとＳ１６０１にて上位装置１０３から受信したＬＵ、ＬＢＡとの対応付けを管理するため、管理情報を更新する。具体的には、例えば、プロセッサ１２１が、ＤＲＡＭ１２５に格納されたキャッシュヒット判定情報６００を参照し、Ｓ１６０１にて取得したＬＵ、及びＬＢＡにより特定されるキャッシュセグメント番号６０５を、Ｓ１８０６又は、Ｓ１８１１にて取得したセグメントのセグメント番号に更新する。この処理によって、新たに割り当てられたセグメントが、リード対象のＬＵ、ＬＢＡに対応付けられる。
【０２５０】
Ｓ１８０９で、ストレージコントローラ１１０は、ＰＢＡ割り当て残量を取得、又は算出する。なお、このステップは、Ｓ１８０７にてＮＶＭモジュールＬＢＡに対応付けられたセグメントにデータをライトした際にのみ、ストレージコントローラ１１０により実施され、ＤＲＡＭに対応付けられたセグメントにデータをライトした際には、実施されない。
【０２５１】
Ｓ１８１０で、ストレージコントローラ１１０は、Ｓ１８０９にて算出又は取得した新たなＰＢＡ割り当て残量があらかじめ定められている閾値より多いか否かを判定する。ＰＢＡ割り当て残量が閾値より多い場合、ＮＶＭモジュールＰＢＡの割り当て量には余裕があり、セグメントの解放処理は不要なので、ストレージコントローラ１１０のライト処理は終了となる。一方、ＮＶＭモジュールＰＢＡの割り当て残量が閾値以下であるとき、ＮＶＭモジュールＰＢＡの割り当て量は枯渇し始めているので、ストレージコントローラ１１０は、セグメント解放処理を実施する。
【０２５２】
以上、ストレージ装置１０１のキャッシュミスリード処理について説明した。
【０２５３】
続いて、実施例１におけるＮＶＭモジュール１２６のリード処理について図１９を用いて説明する。
【０２５４】
図１９は、実施例１におけるＮＶＭモジュール１２６のリード処理の一例を示す。
ＮＶＭモジュール１２６のリード処理の最初のステップであるＳ１９０１で、ＮＶＭモジュール１２６（ＦＭコントローラ２１０）は、ストレージコントローラ１１０よりリード先のアドレスとしてＮＶＭモジュールＬＢＡを受信する。
【０２５５】
Ｓ１９０２で、ＦＭコントローラ２１０は、リード対象とするＰＢＡを取得する。具体的には、例えば、プロセッサ２１５が、ＬＢＡ−ＰＢＡ変換テーブル９００を参照し、Ｓ１９０１にて取得したＮＶＭモジュールＬＢＡ９０１のＮＶＭモジュールＰＢＡ９０２の値をリード対象として取得する。
【０２５６】
Ｓ１９０３で、ＦＭコントローラ２１０は、Ｓ１９０２にてリード対象として取得したＮＶＭモジュールＰＢＡが示すフラッシュメモリよりデータをリードする。このときリードしたデータは、データバッファ２１６に格納される。
【０２５７】
Ｓ１９０４で、ＦＭコントローラ２１０は、Ｓ１９０３にてデータバッファ２１６に格納したデータをストレージコントローラ１１０に送信する。
【０２５８】
以上、ＮＶＭモジュール１２６のリード処理は終了となる。
【０２５９】
実施例１によれば、ＮＶＭモジュール１２６が備えたＬＢＡ―ＰＢＡ変換テーブル９００により、ＮＶＭモジュール１２６がセグメント中に記憶するデータサイズに合わせたＮＶＭモジュールＰＢＡ９０２を割り当てることができる。また、ＮＶＭモジュール１２６は、未割当のＮＶＭモジュールＰＢＡ９０２がある時にはセグメントの利用数を増やし、未割当のＮＶＭモジュールＰＢＡ９０２が枯渇した際には、セグメントの利用数を減らすことができる。
【０２６０】
上記のようなキャッシュの制御が可能となることで、本実施例では、キャッシュ管理単位（セグメントのサイズ）を、プロセッサ１２１負荷を軽減することを目的として大きくしても、ＮＶＭモジュール１２６内の物理的な記憶領域（物理ページ）を効率的に利用でき、キャッシュヒットとなる確率を向上できる。また、最終的にデータが記憶される記憶媒体（以下、最終記憶媒体）において、物理的な容量を仮想化した場合、利用可能な論理領域のサイズ変化を管理するために、多くの管理情報と制御が新たに必要となるが、本実施例では容量を仮想化する対象がキャッシュであるため、通常のキャッシュの制御を拡張すれば、利用可能な論理領域のサイズ変化を吸収できる。つまり、ストレージ装置１０１側では、既存の管理情報を拡張するだけでよく、容量変化を管理するための新たな管理情報を必要としない。さらに、容量を仮想化する対象がキャッシュであるため、最終記憶媒体の容量を仮想化する場合のように一定の物理的な記憶容量を確保する必要が無い。そのため、本実施例のキャッシュ制御では、利用可能な論理領域のサイズ変化に応じて、データをキャッシュから他の記憶装置に移動する、又はデータ他の記憶装置からキャッシュに移動する制御を行うことにより、利用可能な論理領域のサイズ変化を有効に活用できる。
【実施例２】
【０２６１】
次に、実施例２について説明する。
【０２６２】
実施例１では、ＮＶＭモジュール１２６内にデータをライトする際、プロセッサ２１５が、ＮＶＭモジュールＬＢＡ領域中で、データのある領域のみにＮＶＭモジュールＰＢＡを割り当て、未割当となったＮＶＭモジュールＰＢＡを、仮想的に拡張したＮＶＭモジュールＬＢＡへ対応付けるキャッシュの制御の例について記した。
【０２６３】
実施例２では、実施例１のキャッシュの制御に加えて、ＮＶＭモジュール１２６内でデータを可逆圧縮（以下単に圧縮と示す）し、ＮＶＭモジュールＬＢＡに割り当てるＮＶＭモジュールＰＢＡを更に削減する。
ＮＶＭモジュールＬＢＡに割り当てるＮＶＭモジュールＰＢＡを、データを圧縮することにより更に削減することで、実施例２では、実施例１よりＮＶＭモジュールＬＢＡの領域を拡張することができ、ＮＶＭモジュール１２６が有する物理的な記憶領域をより効率的に利用できる。
【０２６４】
実施例２のストレージ装置１０１の構成、及び管理情報については、実施例１と実質的に同一であるため、これらの説明は省略する。また、実施例２のストレージ装置１０１の処理については実施例１と異なる点を重点的に説明する。
【０２６５】
実施例１では、ストレージコントローラ１１０がＮＶＭモジュール１２６にデータ送信する際に、ＮＶＭモジュールＰＢＡ割り当て量が既知であったため、ＮＶＭモジュール１２６よりＮＶＭモジュールＰＢＡ割り当て量を取得せずとも、キャッシュセグメント管理情報７００のＮＶＭモジュールＰＢＡ割り当て量７０６の値を記憶することができた。
【０２６６】
しかし、実施例２では、ＮＶＭモジュール１２６がデータの圧縮を行うため、ＮＶＭモジュールＰＢＡの割り当て量が、データの圧縮率に依存して変化する。このため、ストレージコントローラ１１０は、ＮＶＭモジュールＰＢＡ割り当て量を定期的に（好ましくは逐次に）ＮＶＭモジュール１２６より取得する必要がある。
【０２６７】
これにより、ストレージコントローラ１１０が管理するデータ量と、ＮＶＭモジュール１２６内でデータ圧縮により変化したＮＶＭモジュールＰＢＡ量に差が生じても、ストレージコントローラ１１０は、このＮＶＭモジュールＰＢＡ割り当て量を、ＮＶＭモジュール１２６より取得することができる。このため、ストレージコントローラ１１０は、正確なＮＶＭモジュールＰＢＡ割り当て量、並びにＮＶＭモジュールＰＢＡ割り当て残量を管理することができる。
【０２６８】
ストレージコントローラ１１０が、ＮＶＭモジュールＰＢＡ割り当て量を正確に管理できれば、ストレージコントローラ１１０の処理は、実施例１と実質的に同様である。実施例２では、ＮＶＭモジュール１２６が圧縮機能を利用してキャッシュを制御することが可能となっている。
【０２６９】
続いて、実施例２のＮＶＭモジュール１２６が用いるＬＢＡ−ＰＢＡ変換テーブル２１００について図２１を用いて説明する。
【０２７０】
図２１は、実施例２のＬＢＡ−ＰＢＡ変換テーブル２１００を示す。
【０２７１】
ＬＢＡ−ＰＢＡ変換テーブル２１００は、ＮＶＭモジュール１２６内のＲＡＭ２１３内に格納されており、ＮＶＭモジュールＬＢＡ２１０１、ＮＶＭモジュールＰＢＡ２１０２、及び圧縮データ内オフセット２１０３により構成される。ＮＶＭモジュール１２６のプロセッサ２１５は、上位装置１０３からリード／ライトコマンドに基づくＮＶＭモジュールＬＢＡを受信した後、そのＮＶＭモジュールＬＢＡを用いて、実際のデータが圧縮データとして格納されている領域を示すＮＶＭモジュールＰＢＡと、その圧縮データを伸長したデータ内のオフセットを取得する。また、本実施例では、実施例１と同様にこのＬＢＡ−ＰＢＡ変換テーブル２１００を用いて、データの存在するＮＶＭモジュールＬＢＡ領域にのみＮＶＭモジュールＰＢＡを対応付けることで、ＮＶＭモジュール１２６が有する物理的な記憶領域の効率的な利用を図っている。
【０２７２】
ＮＶＭモジュールＬＢＡ２１０１は、実施例１と同一なので、説明は省略する。
ＮＶＭモジュールＰＢＡ２１０２は、ＮＶＭモジュール１２６が管理する全ＦＭチップ（２２０〜２２８）の特定の領域を示す情報を格納する。本実施例では、ＮＶＭモジュールＰＢＡ２１０２は、ＦＭチップ（２２０〜２２８）の最小書き込み単位であるページ単位で区切られたアドレスを持つ。図９の例では、ＮＶＭモジュールＬＢＡ「０ｘ０００＿００００＿００００」に対応付けられたＰＢＡ（Physical Block Address）として、「ＸＸＸ」というＰＢＡが対応付けられている。このＰＢＡは、ＬＢＡに基づくデータを圧縮したデータ（以下、圧縮データ）を記憶しているＦＭチップ（２２０〜２２８）の記憶領域を一意に示すアドレスである。これにより、リードコマンドの参照先アドレスとして、ＮＶＭモジュールＬＢＡ「０ｘ０００＿００００＿００００」を受信した場合、ＮＶＭモジュール１２６内の圧縮データを記憶した物理的なリード先が取得される。
【０２７３】
圧縮データ内オフセット２１０３は、ＮＶＭモジュールＰＢＡ２１０２が指定する領域に記憶された圧縮データを伸長した際、その伸長したデータ（以下、伸長データ）中のＮＶＭモジュールＬＢＡが対応付けられた領域の開始アドレスを示す。
【０２７４】
ストレージコントローラ１１０は、リード処理時にＮＶＭモジュールＰＢＡが示す領域よりデータを取得し、そのデータを伸長処理した後、伸長データと、伸長データ中の圧縮データ内オフセット２１０３を上位装置１０３に送信する。なお、本実施例では、ストレージ装置１０１が有しているＬＢＡ−ＰＢＡ変換テーブル２１００内に、圧縮データ内オフセット２１０３を記憶した例について示したが、本実施例は、この例に限定されるものではない。
【０２７５】
例えば、圧縮データ内オフセット２１０３は、圧縮データ中の先頭の固定長領域に格納されているとしても良い。この場合、ＬＢＡ−ＰＢＡ変換テーブル２１００は、実施例１と同一となる。圧縮データ中に圧縮データ内オフセットが記憶されている場合、ストレージ装置１０１が、ＮＶＭモジュールＰＢＡの示す領域の圧縮データを伸長した後、その伸長データに含まれるＬＢＡと圧縮データ内オフセットの対応付け情報を取得する。
【０２７６】
以上、実施例２のＬＢＡ−ＰＢＡ変換テーブル２１００について説明した。
【０２７７】
実施例２は実施例１と異なり、ＮＶＭモジュール１２６がデータを圧縮してＦＭチップに格納するため、ストレージコントローラ１１０は、ＮＶＭモジュール１２６に送信したデータ量からＮＶＭモジュールＰＢＡ割り当て量７０６を推定することはできない。これについては、ストレージコントローラ１１０がＮＶＭモジュール１２６よりセグメント毎のＮＶＭモジュールＰＢＡ割り当て量を取得し、取得したＰＢＡ割り当て量に基づき、実施例１と同様に管理する。
【０２７８】
続いて本実施例のＮＶＭモジュールのライト処理について図２２を用いて説明する。
【０２７９】
図２２は、実施例２に係るＮＶＭモジュール１２６のライト処理の一例を示す。このライト処理は、実施例１のライト処理（図１５参照）と比べて、ライトデータを圧縮する処理（Ｓ２２０３）と、ストレージ装置１０１へのＮＶＭモジュールＰＢＡ量の通知する処理（Ｓ２２０７）が追加されたものである。
【０２８０】
Ｓ２２０１については、実施例１のＳ１５０１と実質的に同様であるため、説明を省略する。また、続くＳ２２０２についても、実施例１のＳ１５０２と実質的に同様であるため説明を省略する。
【０２８１】
Ｓ２１０２より続くＳ２２０３で、ライトデータを圧縮する。具体的には、例えば、プロセッサ２１５が、圧縮／伸長ユニット２１８にデータ圧縮を指示する。そして、指示を受けた圧縮／伸長ユニット２１８は、データバッファ２１６に記憶されているＳ２２０１にてストレージ装置１０１より受信したライトデータを圧縮し、圧縮データをデータバッファ２１６の別の領域に記憶する。
【０２８２】
Ｓ２２０３より続くＳ２２０４で、ＦＭコントローラ２１０は、Ｓ２２０３にて圧縮したライトデータをＳ２２０２にて取得したＮＶＭモジュールＰＢＡが示す領域にライトする。具体的には、例えば、プロセッサ２１５が、ＦＭインターフェース２１７に対して、Ｓ２２０３にて作成した圧縮したライトデータのライト先と、Ｓ２２０２にて取得したＮＶＭモジュールＰＢＡとを送信し、ＦＭチップ（２２０〜２２８）へのライトを指示する。そして、指示を受けたＦＭインターフェース２１７は、Ｓ２２０３にて圧縮したライトデータをデータバッファ２１６よりリードし、ＮＶＭモジュールＰＢＡが示すＦＭチップ（２２０〜２２８）にライトデータを送信し、そのＦＭチップ（２２０〜２２８）内のＮＶＭモジュールＰＢＡが指定する記憶領域にデータをライトする。
【０２８３】
Ｓ２２０５で、ＦＭコントローラ２１０は、Ｓ２２０１にて取得したＬＢＡに対し、Ｓ２２０２にて取得した圧縮したライトデータのライト先を示すＮＶＭモジュールＰＢＡと圧縮データ中のオフセットを対応付ける。具体的には、例えば、プロセッサ２１５が、ＲＡＭ２１３内に格納されているＬＢＡ−ＰＢＡ変換テーブル２１００を参照し、Ｓ２２０１にてストレージ装置１０１より取得したＬＢＡのＮＶＭ モジュールＰＢＡ２１０２を、Ｓ２１０２にて圧縮データのライト先として取得したＮＶＭモジュールＰＢＡに更新する。更に、プロセッサ２１５は、Ｓ２２０１にて取得したＬＢＡに対応する圧縮データ内オフセット２１０３を、Ｓ２２０３にて圧縮したデータ内のオフセットに更新する。
【０２８４】
Ｓ２２０６で、ＦＭコントローラ２１０は、ストレージコントローラ１１０に対して、Ｓ２２０１にて上位装置１０３より取得したＬＢＡが割り当てられているセグメント単位で、ＮＶＭモジュール１２６が割り当てたＮＶＭモジュールＰＢＡの量を通知する。
【０２８５】
実施例２のＮＶＭモジュール１２６は、ストレージコントローラ１１０が管理するセグメントとＮＶＭモジュールＬＢＡとの対応関係を把握しており、Ｓ２２０１にて取得したＮＶＭモジュールＬＢＡが割り当てられているセグメント毎に、対応付けたＮＶＭモジュールＰＢＡ量を通知可能である。
【０２８６】
ストレージコントローラ１１０が、セグメント毎のＮＶＭモジュールＰＢＡ割り当て量をＮＶＭモジュール１２６より取得することにより、例えば、ＮＶＭモジュールＰＢＡが枯渇した時に実行するセグメントの解放処理を適切な時期に実施することができる。具体的に、例えば、ストレージコントローラ１１０は、Ｓ１４０４にて解放対象セグメントの解放にて解放されるＮＶＭモジュールＰＢＡ量を取得する際に、圧縮データの圧縮率を反映した正確なＮＶＭモジュールＰＢＡ量を取得することができる。そのため、ストレージコントローラ１１０は、セグメントの解放処理を適切な時期に実施することができる。
【０２８７】
Ｓ２２０７で、ＦＭコントローラ２１０は、ＰＢＡ割り当て残量１１０２を、セグメント毎にストレージコントローラ１１０に通知する。
【０２８８】
以上、ＮＶＭモジュール１２６のライト処理の一例について説明した。
【０２８９】
続いて、本実施例のＮＶＭモジュール１２６のリード処理について図２３を用いて説明する。
【０２９０】
図２３は、実施例２に係るＮＶＭモジュール１２６のリード処理の一例を示す。実施例２のリード処理は、実施例１のリード処理（図１９参照）と比べて、圧縮データの伸長（Ｓ２３０４）が加わった処理である。
【０２９１】
Ｓ２３０１で、ＦＭコントローラ２１０は、リード対象となるＮＶＭモジュールＬＢＡをストレージコントローラ１１０より取得する。
【０２９２】
Ｓ２３０２で、ＦＭコントローラ２１０は、Ｓ２３０１にて取得したＮＶＭモジュールＬＢＡに対応付けられているＮＶＭモジュールＰＢＡと圧縮データ内オフセットを取得する。具体的には、例えば、プロセッサ２１５が、ＲＡＭ２１３内に格納されているＬＢＡ−ＰＢＡ変換テーブル２１００を参照し、Ｓ２３０１にて取得したＮＶＭモジュールＬＢＡのＮＶＭモジュールＰＢＡ２１０２と圧縮データ内オフセット２１０３を取得する。
【０２９３】
Ｓ２３０３で、ＦＭコントローラ２１０は、Ｓ２３０２にて取得したＮＶＭモジュールＰＢＡを用いて、ＦＭチップ（２２０〜２２８）より圧縮データを取得する。具体的には、例えば、プロセッサ２１５が、ＦＭインターフェース２１７に対して、ＮＶＭモジュールＰＢＡを通知し、データをリードするように指示する。そして、指示されたＦＭインターフェース２１７は、ＮＶＭモジュールＰＢＡが指定するＦＭチップ（２２０〜２２８）から、ＮＶＭモジュールＰＢＡの指し示す領域のデータをリードする。更に、ＦＭインターフェース２１７は、ＦＭチップ（２２０〜２２８）よりリードした圧縮データを、データバッファ２１６に送信する。
【０２９４】
Ｓ２３０５で、ＦＭコントローラ２１０は、Ｓ２３０３にて取得した圧縮データを伸長する。具体的には、例えば、プロセッサ２１５が、圧縮／伸長ユニット２１８に対して、圧縮データを記憶したデータバッファ２１６の領域を通知し、圧縮データの伸長を指示する。指示された圧縮／伸長ユニット２１８は、指示されたデータバッファ２１６の領域から圧縮データをリードし、リードした圧縮データを伸長する。また、圧縮／伸長ユニット２１８は、伸長したデータをデータバッファに２１６に格納する。
【０２９５】
Ｓ２３０６で、ＦＭコントローラ２１０は、Ｓ２３０２にて取得した圧縮データ内オフセット２１０３を用いて、伸長データのうちの、要求ＮＶＭモジュールＬＢＡに対応付けられているデータだけを、ストレージコントローラ１１０に送信する。具体的には、例えば、プロセッサ２１５が、データバッファ２１６に記憶されている伸長データより、圧縮データ内オフセット２１０３の指定する領域のみを送信するように、Ｉ／Ｏインターフェース２１１に指示する。指示を受けたＩ／Ｏインターフェース２１１は、伸長データの中から、圧縮データ内オフセット２１０３が指定する領域内のデータを、ストレージコントローラ１１０に送信する。
【０２９６】
以上、ＮＶＭモジュール１２６のリード処理の一例について説明した。
【０２９７】
上記のとおり、実施例２では、ＮＶＭモジュール１２６が、データを圧縮／伸長する機能を有利用するため、ＮＶＭモジュールＰＢＡ領域に記憶するデータ量を減少させることができる。この結果、ＮＶＭモジュールＬＢＡに対応付けるＮＶＭモジュールＰＢＡ量を減らすことができ、ＮＶＭモジュールＬＢＡの仮想的な記憶領域を実施例１よりも拡張できる。また、ストレージ装置１０１が利用するセグメント数も増やすことができるため、実施例１よりも更にＮＶＭモジュールの物理的な記憶領域を有効に利用できる。
【０２９８】
また、実施例２では、データの圧縮率により変化するＮＶＭモジュールＰＢＡの割り当て量をストレージ装置１０１に通知することができるので、ＰＢＡが枯渇した時に実行されるセグメント解放処理を適切な時期に実施することできる。
【実施例３】
【０２９９】
次に、実施例３について説明する。
【０３００】
実施例３のＮＶＭモジュール１２６の構成及び管理情報については、実施例１と実質的に同様であるため説明を省略する。
【０３０１】
ＮＶＭモジュール１２６は、前述のとおり、無効ＰＢＡ量が所定の閾値以上となった契機で、無効ＰＢＡ領域内のデータをブロック単位で削除して、未書き込みＰＢＡ領域をブロック単位で確保する目的から、リクラメーションを行う。
【０３０２】
このリクラメーションにおいて、有効なデータは、他の領域にコピーする必要があるため、削除対象の物理ブロックに含まれる有効データは少ないほど良い。このため、実施例１及び２のＮＶＭモジュール１２６は、有効ＰＢＡ領域の少ないブロックを探索する。しかし、実施例１及び２では、リクラメーション時に、有効ＰＢＡ領域（ＬＢＡに対応付けられているＰＢＡ）の少ないブロックを探索する処理を行う必要がある。
【０３０３】
この方式にてリクラメーションの効率を改善するには、リクラメーション契機となる閾値を増加させる必要がある。この閾値を増加させると、ＮＶＭモジュール１２６の記憶領域全体に含まれる無効ＰＢＡ量の割合が増加する。このため、リクラメーション時の消去領域に含まれる無効ＰＢＡ量が確率的に増加し、有効ＰＢＡ量は確率的に減少する。すなわち、実施例１及び２では、閾値を増加させたことにより、有効ＰＢＡ領域の少ないブロックの数が増加するので、有効ＰＢＡ領域の少ないブロックを探索する処理時間を軽減させることができる。これにより、リクラメーションの効率を改善することができる。
【０３０４】
しかし、このように閾値を増加する処理には、コストの増加という欠点が存在する。何故なら、ＮＶＭモジュール１２６の記憶領域全体に含まれる無効ＰＢＡ量の割合を増加させるには、無効ＰＢＡ量の増加に対応する予備領域（無効ＰＢＡ量を一定量貯めるための領域）を増加させる必要があるためである。例えば、１００ＧＢの記憶領域をストレージ装置１０１に提供するＮＶＭモジュール１２６の場合、領域中に１０％の無効ＰＢＡ量を許容するように閾値を設定するには、物理記憶領域として、少なくとも約１１１ＧＢ必要である。一方、領域中に３０％の無効ＰＢＡ量を許容するように閾値を増加させるには、物理記憶領域として、少なくても１４２ＧＢ必要である。このように、閾値を増やすには、無効ＰＢＡ領域を貯めておくための物理的な予備領域が必要であり、予備領域用のコストが発生する。
【０３０５】
実施例３では、予備領域を増やさずに、リクラメーション時にコピーする有効ＰＢＡ量を減らす方式について説明する。
【０３０６】
実施例３では、ストレージコントローラ１１０が、優先度の低いセグメントをＮＶＭモジュール１２６に通知する。そして、ＮＶＭモジュール１２６（ＦＭコントローラ２１０）は、その優先度の低いセグメントに対応付けられた領域を「消去可能だがアクセス可能な領域」として管理する。そして、ＮＶＭモジュール１２６は、リクラメーション時に「消去可能だがアクセス可能な領域」を無効ＰＢＡ領域と同様に削除可能な領域として扱う。
【０３０７】
優先度の低いセグメントを、リクラメーション時の無効ＰＢＡ領域と同様に扱うことで、前述のＮＶＭモジュール１２６の記憶領域全体に含まれる無効ＰＢＡ量の割合が増加したのと同様の効果が得られる。
【０３０８】
具体的に、例えば、実施例３では、実施例１のように、ストレージコントローラ１１０が、所定のルールで選択されるセグメントから順に解放する指示をＮＶＭモジュール１２６に通知するのではなく、所定のルールで選ばれるセグメントをＮＶＭモジュール１２６に通知するだけで、解放の指示はしない。
【０３０９】
ここで、所定のルールで選択されるセグメントとは、例えば、アクセスされてから最も時間が経っているセグメント、或いは、アクセス頻度が相対的に低いセグメントである。以下、所定のルールに基づき、ストレージ装置１０１により選択されたセグメントをセグメント群とする。
【０３１０】
ストレージコントローラ１１０からセグメント群を通知されたＮＶＭモジュール１２６は、その領域の中から効率的（コピーデータ量が少ない）にリクラメーションが可能な領域を選び、ＮＶＭモジュール１２６が、解放するセグメントを決定する。
【０３１１】
図２４は、実施例３のリクラメーション処理の概略を示した概念図である。
【０３１２】
ストレージコントローラ１１０（プロセッサ１２１）は、クリーン属性のセグメントから、例えば「アクセス頻度が相対的に低いセグメントを選択」し、選択したセグメントの属性をクリーンからフリーウェイトに変更する（Ｓ２４０１）。ここで言う「アクセス頻度が相対的に低いセグメント」とは、クリーン属性のセグメント群のうち、アクセス頻度が下位Ｘ％に属する１以上のセグメントで良い（Ｘは０より大きい数値）。プロセッサ１２１は、フリーウェイト属性のセグメントを複数作成する。以下、この複数のフリーウェイト属性のセグメントを「フリーウェイトセグメント群」とする。フリーウェイト属性のセグメントとは、ストレージ装置１０１が、クリーン属性のセグメントの中で、フリー属性のセグメントとしても良いと判断したセグメントを示す。
【０３１３】
次に、ストレージ装置１０１は、フリーウェイトセグメント群をＮＶＭモジュール１２６に通知にする（Ｓ２４０２）。
【０３１４】
ＮＶＭモジュール１２６（ＦＭコントローラ２１０）は、通知されたフリーウェイトセグメント群より、「削除対象とするセグメントを選択」する（Ｓ２４０３）。この「削除対象とするセグメントを選択」するルールとして、実施例３では消去対処領域に含まれる有効ＰＢＡ領域が少なくなるようにフリーウェイトセグメントの削除候補を選択する。
【０３１５】
次に、ＦＭコントローラ２１０は、消去対象セグメント群をストレージコントローラ１１０に通知する（Ｓ２４０４）。
【０３１６】
ストレージコントローラ１１０は、ＮＶＭモジュール１２６より通知された消去対象セグメント群に該当するセグメントの管理情報を「フリーウェイト」から「フリー」に変更する（Ｓ２４０５）。この結果、新規にフリーセグメント群が作成されたことになる。ストレージコントローラ１１０のこの処理により、属性をフリーに変更されたセグメントは、サーバー等の上位装置１０３より一切のアクセスがなされなくなる。
【０３１７】
ストレージコントローラ１１０は、ＮＶＭモジュールより通知された、消去対象セグメント群から、消去しても良いセグメント群である新規フリーセグメント群を特定するための情報（新規フリーセグメント群情報）をＮＶＭモジュール１２６に通知する（Ｓ２４０６）。
【０３１８】
ＮＶＭモジュール１２６（ＦＭコントローラ２１０）は、新規フリーセグメント群情報をストレージコントローラ１１０から受信したことにより、セグメント内のデータを削除する許可をストレージコントローラ１１０より取得したこととなる。ＦＭコントローラ２１０は、新規フリーセグメント群内のデータ（具体的には、新規フリーセグメントに割り当てられている物理ブロック内のデータ）を削除する。
【０３１９】
以上、本実施例によるリクラメーション処理の概略である。なお、Ｓ２４０１及びＳ２４０２は、実施例１にて述べたＰＢＡ割り当て残量が利用セグメント減閾値を下回った契機にて実施される。一方、Ｓ２４０３〜Ｓ２４０７は、ＮＶＭモジュール１２６が管理するＰＢＡ割り当て管理情報１１００内の無効ＰＢＡ量１１０３の閾値超過を契機にて実施される。
【０３２０】
また、本実施例では、ＮＶＭモジュール１２６が消去対象セグメントをストレージコントローラ１１０に通知し、ストレージコントローラ１１０より消去の許可を取得した後、許可されたセグメント内のデータが削除される。しかし、本実施例は、これに限定されるものではない。例えば、Ｓ２４０４〜２４０６の処理は無くともよく、Ｓ２４０３の後、すぐに、消去対象セグメント内のデータ（消去対象セグメントに割り当てられている物理ブロック内のデータ）が消去されても良い。この場合、ストレージコントローラ１１０は、消去されたセグメントに対してリード／ライトコマンドを発行した際に、ＮＶＭモジュール１２６より既に削除済みである応答を受ける。この応答により、ストレージコントローラ１１０は、セグメントの属性を、「フリーウェイト」から「フリー」に変更する。この処理により、ＮＶＭモジュール１２６は、例えば、存在しないデータ（或いは無効なデータ）をストレージコントローラ１１０に送信しないようにすることができる（Ｓ２４０７）。
【０３２１】
実施例３のストレージ装置１０１の構成、管理情報については、実施例１と同一のため説明は省略する。また、実施例３では、ストレージ装置１０１の処理に関しては、実施例１と異なる点を重点的に説明する。
【０３２２】
実施例３のＮＶＭモジュール１２６の構成については、実施例１と、実質的に同様であるため説明を省略する。
ＮＶＭモジュール１２６の管理情報について説明する。なお、実施例３のＮＶＭモジュール１２６の管理情報であるＬＢＡ−ＰＢＡ変換テーブルは、実施例１と、実質的に同様であるため説明を省略する。
【０３２３】
図２５を用いて、実施例３におけるＮＶＭモジュール１２６が用いるブロック管理情報２５００について説明する。
【０３２４】
図２５は、実施例３に係るブロック管理情報２５００を示す。
【０３２５】
ブロック管理情報２５００は、ＮＶＭモジュール１２６内のＲＡＭ２１３内に格納されている。ブロック管理情報２５００は、ＮＶＭモジュールＰＢＡ（物理ブロック）毎に、ＮＶＭモジュールＰＢＡ２５０１、ＮＶＭチップ番号２５０２、ブロック番号２５０３、無効ＰＢＡ量２５０４、フリーウェイトＰＢＡ量２５０５、及び対応セグメント番号２５０６を有する。
【０３２６】
上記項目の内、ＮＶＭモジュールＰＢＡ２５０１、ＮＶＭチップ番号２５０２、ブロック番号２５０３、及び無効ＰＢＡ量２５０４については、実施例１と、実質的に同様であるため、説明を省略する。
【０３２７】
フリーウェイトＰＢＡ量２５０５は、フリーウェイトのセグメントに割り当てられている物理ブロックにおける有効ページの総容量を示す。フリーウェイトのセグメントに割り当てられている物理ブロック内の有効データは、記憶デバイスに格納済のクリーンデータである。そのため、フリーウェイトのセグメントに割り当てられている物理ブロック内の有効データは、他の物理ブロックにコピーされることなく消去されて良いデータである。
【０３２８】
本実施例のストレージコントローラ１１０は、セグメントの属性をフリーウェイトに変更した際、そのセグメントと、そのセグメントのＮＶＭモジュールＬＢＡをＮＶＭモジュール１２６に通知する。通知を受けたＮＶＭモジュール１２６では、プロセッサ２１５が、ブロック管理情報２５００を参照し、該当するフリーウェイトＰＢＡ量２５０５に、フリーウェイトとして登録されたＰＢＡ量を加算する。本実施例では、例えば、プロセッサ２１５が、ブロック毎に、フリーウェイトＰＢＡ量と無効ＰＢＡ量１００４の合計値を算出し、その合計値が大きいブロックを、リクラメーション処理における消去対象ブロックとする。
【０３２９】
リクラメーション処理において、消去対象ブロックから他ブロックへコピーが必要な有効データは、フリーウェイトＰＢＡと無効ＰＢＡ以外の領域に記憶されたデータである。このため、フリーウェイトＰＢＡ量と無効ＰＢＡ量１００４の合計値が相対的に大きいブロックを消去対象として選択することで、リクラメーション時に有効データをコピーする量が少ないブロックを選択できる。
【０３３０】
対応セグメント番号２５０６は、物理ブロックの割当先の論理ブロックが属するセグメントの番号である。
【０３３１】
本実施例のＮＶＭモジュール１２６は、ストレージコントローラ１１０から受信したデータを記憶する際、ストレージコントローラ１１０から指定されるＮＶＭモジュールＬＢＡに対して、ＮＶＭモジュールＰＢＡを割り当てる。このとき、ＮＶＭモジュール１２６のプロセッサ２１５が、ＮＶＭモジュールＰＢＡを対応付けたＮＶＭモジュールＬＢＡが関連するセグメント番号を取得する。そして、プロセッサ２１５が、ブロック管理情報２５００を参照し、ＮＶＭモジュールＰＢＡが対応する対応セグメント番号２５０６に、取得したセグメント番号を追記する。なお、該当するブロックが消去される際は、対応セグメント番号２５０６も消去される。
【０３３２】
この対応セグメント番号２５０６の情報により、本実施例のＮＶＭモジュール１２６は、リクラメーション処理時に、消去対象として選択したブロックに対応付けられたセグメント番号を取得でき、ストレージコントローラ１１０に消去対象セグメントを通知することができる。
【０３３３】
以上、ＮＶＭモジュール１２６が用いるブロック管理情報２５００について説明した。
【０３３４】
続いて、図２６を用いて本実施例が適用されるＮＶＭモジュール１２６にて用いられるＰＢＡ割り当て管理情報２６００について説明する。
【０３３５】
図２６は、実施例３に係る、ＰＢＡ割り当て管理情報２６００を示す。
【０３３６】
ＰＢＡ割り当て管理情報２６００は、ＮＶＭモジュール１２６（例えばＲＡＭ２１３）内に格納されている。
【０３３７】
ＰＢＡ割り当て管理情報２６００は、ＰＢＡ割り当て量２６０１、ＰＢＡ割り当て残量２６０２、無効ＰＢＡ量２６０３、フリーウェイトＰＢＡ量２６０４、及び記憶容量２６０５を有する。このうち、ＰＢＡ割り当て量２６０１、ＰＢＡ割り当て残量２６０２、無効ＰＢＡ量２６０３については、実施例１と実質的に同様であるため、説明を省略する。
【０３３８】
フリーウェイトＰＢＡ量２６０４は、ＮＶＭモジュール１２６が管理するＰＢＡのうち、フリーウェイトとなっているＰＢＡの総量を示す。
【０３３９】
ＮＶＭモジュール１２６は、無効ＰＢＡ量２６０３の値とフリーウェイトＰＢＡ量２６０４の合計値がクラメーション開始閾値以上となった場合にリクラメーションを実施し、無効ＰＢＡ量とフリーウェイトＰＢＡ量の合計値を一定値以下とする。
【０３４０】
本実施例では、ＮＶＭモジュール１２６が、ＰＢＡ割り当て管理情報２６００に更新があった場合、ストレージコントローラ１１０に、ＰＢＡ割り当て管理情報２６００を通知する。
【０３４１】
以上、ＰＢＡ割り当て管理情報２６００について説明した。
【０３４２】
本実施例のＮＶＭモジュール１２６は、これまでに述べたＬＢＡ−ＰＢＡ変換テーブル９００、ブロック管理情報２５００、及びＰＢＡ割り当て管理情報２６００を用い、キャッシュの記憶領域を制御する。
【０３４３】
図２７は、実施例３に係るキャッシュ制御におけるセグメントの属性の遷移について記した概念図である。なお、ここでは、実施例３の各属性遷移のうち、実施例１と異なる点を重点的に説明する。
【０３４４】
〜クリーンからフリーウェイトへのセグメント属性の遷移２７２２について〜
【０３４５】
クリーンからフリーウェイトへのセグメント属性の遷移２７２２は、ＮＶＭモジュールＰＢＡの割り当て残量が閾値を下回った際、すなわち、利用するセグメント数を減らす必要が生じた際に実施される。この判断基準としても用いるＮＶＭモジュールＰＢＡの割り当て残数は、ＮＶＭモジュール１２６が管理するＰＢＡ割り当て管理情報２６００のＰＢＡ割り当て残量２６０２の値でも良いし、ストレージコントローラ１１０が管理するキャッシュセグメント管理情報７００のＮＶＭモジュールＰＢＡ割り当て量７０６の総和をＮＶＭモジュールＰＢＡ割り当て数として算出し、ＮＶＭモジュールＰＢＡの全割り当て量より減算して求めても良い。
【０３４６】
ストレージコントローラ１１０は、ＮＶＭモジュールＰＢＡ割り当て残量が利用セグメント減閾値を下回った際、クリーン属性のセグメントより、所定のルールに基づき、フリーウェイトとするセグメントを選択する。
【０３４７】
このとき、ストレージコントローラ１１０は、キャッシュセグメント管理情報７００から、選択したセグメントの番号を用いて、フリーウェイトにしたセグメントのＮＶＭモジュールＰＢＡ割り当て量７０６を取得する。
【０３４８】
ＮＶＭモジュール１２６は、この値を、ＰＢＡ割り当て残量２６０２に加算する。加算した結果、ＰＢＡ割り当て残量２６０２が閾値を上回ったら、フリーウェイト化処理は終了となる。
【０３４９】
一方、ＰＢＡ割り当て残量２６０２が所定の閾値以下である場合、ストレージコントローラ１１０は、更に、セグメントをフリーウェイトとする。このようにストレージ装置１０１は、ＰＢＡ割り当て残量２６０２が所定の閾値を上回るまで、クリーン属性のセグメントを、フリーウェイト属性とし、フリーウェイト属性のセグメントを増やし続ける。
【０３５０】
なお、クリーンからフリーウェイトへのセグメント属性の遷移２７２２は、ＰＢＡ割り当て残量２６０２が所定の閾値以下となっていない場合であっても、セグメントのアクセス頻度がある基準以下となった際に、強制的に実施されるとしても良い。
【０３５１】
〜フリーウェイトからクリーンへのセグメント属性の遷移２７２３について〜
【０３５２】
フリーウェイトからクリーンへのセグメント属性の遷移２７２３は、フリーウェイト属性のセグメントに対してリードアクセスがあり、且つ、フリーウェイト属性のセグメントに対応付けられているＮＶＭモジュールＰＢＡにリードアクセスに関するデータが存在する場合に実施される。セグメントの属性がクリーン属性に遷移することで、ＰＢＡ割り当て残量２６０２が所定の閾値を下回った際には、アクセス頻度の低い別のセグメントがクリーンよりフリーウェイトに遷移される。
【０３５３】
〜フリーウェイトからダーティへのセグメント属性の遷移２７２４について〜
【０３５４】
フリーウェイトからダーティへのセグメント属性の遷移２７２４は、フリーウェイト属性のセグメントにライトアクセスがあった場合、つまり、フリーウェイト属性のセグメントに対するデータの更新要求があった場合に実施される。セグメントの属性がダーティ属性に遷移することで、ＰＢＡ割り当て残量２６０２が所定の閾値を下回った際には、アクセス頻度の低い別のセグメントがクリーンよりフリーウェイトに遷移される。
【０３５５】
〜フリーウェイトからフリーへのセグメント属性の遷移２７２５について〜
【０３５６】
フリーウェイトからフリーへのセグメント属性の遷移２７２５は、ＮＶＭモジュール１２６より「消去対象セグメント群を通知」されたことを契機に、ストレージ装置１０１により実施される。ＮＶＭモジュール１２６は、削除予定のセグメントの属性を、フリーウェイトよりフリーに変更する。
【０３５７】
ストレージコントローラ１１０は、フリーウェイトからフリーへのセグメント属性の遷移２７２５の契機で、ＤＲＡＭ１２５に格納されているキャッシュヒット判定情報６００を参照し、フリー化したセグメントが該当するキャッシュセグメント番号６０５の値を「無し」に変更する。
【０３５８】
以上、セグメントの属性遷移に関して説明した。なお、本実施例は、セグメントの属性としてクリーン 、フリーウェイト、フリー、及びダーティの４種しかないことに限定されるものではない。本実施例は、クリーン、フリーウェイト、フリー及びダーティを含む４種以上のセグメント属性のが存在する場合においても有効である。
【０３５９】
上記のとおり、実施例３では、ストレージ装置１０１が、アクセス頻度の低いセグメントをフリーウェイト属性としてＮＶＭモジュール１２６に通知する。そして、ＮＶＭモジュール１２６がフリーウェイト属性のセグメントに対応付けられたＮＶＭモジュールＰＢＡ領域を、リクラメーション処理時のみ、無効ＰＢＡ領域と同等の消去可能領域とする。
【０３６０】
この処理により、リクラメーション時に生じる、有効ＰＢＡ領域のコピー量を削減し、効率的なリクラメーション処理を可能となる。効率的なリクラメーション処理により、ＮＶＭモジュール１２６の性能は向上し、コピーによるＦＭチップ（２２０〜２２８）へのライト量が減少することから、ライトに伴うＦＭチップ（２２０〜２２８）の劣化が軽減されＮＶＭモジュール１２６の寿命が延長される。これらの効果は、実施例１により示された効果に更に追加されるものである。
【実施例４】
【０３６１】
次に、実施例４について説明する。
【０３６２】
ＮＡＮＤ型フラッシュメモリ等の不揮発性半導体メモリは、書き換え回数だけでなく、書き換え頻度により劣化度合いが変化することが知られている。例えば３０００回の書き換えが可能なＦＭチップであっても、書き換え頻度が高ければ劣化が進み、１０００回程度でデータ保持能力を失い、記憶媒体としての信頼性が低下することがある。
【０３６３】
このため、書き換え頻度により劣化の進展が異なるメモリを用いたＮＶＭモジュール１２６では、寿命を短くしないように、書き換え頻度を制御する必要がある。
【０３６４】
実施例４のＮＶＭモジュール１２６は、ＦＭチップ（２２０〜２２８）の書き換え頻度を管理しており、その書き換え頻度が、書き換え頻度上限閾値を上回った際に、予備領域（無効ＰＢＡ量を一定量貯めるための領域）を増加させ、書き換え頻度を低下させる。
【０３６５】
ＮＶＭモジュール１２６の予備領域の増加が、書き換え頻度の低下につながる理由を以下に説明する。本実施例のＮＶＭモジュール１２６では、同一ＬＢＡへの更新データを、同一ＬＢＡに異なるＮＶＭモジュールＰＢＡを対応付け、対応付けたＮＶＭモジュールＰＢＡに更新データ記憶することで実施する。
【０３６６】
そして、ＮＶＭモジュール１２６は、更新前の古いデータを格納しているＮＶＭモジュールＰＢＡ領域を、無効ＰＢＡとして管理する。無効ＰＢＡ量が所定の閾値を超えたら、ＮＶＭモジュール１２６は、無効ＰＢＡを削除するリクラメーションを実施する。
【０３６７】
このようなリクラメーション処理を実施するＮＶＭモジュール１２６において、物理的な記憶領域の書き換え頻度が最も高い処理は、ＮＶＭモジュール１２６への局所的なデータ更新である。
【０３６８】
例えば、ＮＶＭモジュールＬＢＡ上のある１６ＫＢの領域にのみ、データが更新され続けたケースである。より具体的には、ＮＶＭモジュールＬＢＡ上のある１６ＫＢの領域が、１時間で１０２４×１０２４＝１０４８５７６回書き換えられた場合、ＮＶＭモジュールＰＢＡでは、１６ＫＢ×１０４８５７６回＝約１６ＧＢの領域が書き換えられたこととなる。このとき、予備領域が１ＧＢであれば、１ＧＢの無効ＰＢＡ量が貯まるたびに、リクラメーションにより消去されるので、予備領域に割り当てられているＮＶＭモジュールＰＢＡ領域は１時間で１６ＧＢ／１ＧＢ＝１６回（３．７５分に１回の頻度で書き換え）の書き換えが実施されることとなる。
【０３６９】
一方、予備領域が２ＧＢであれば、予備領域に割り当てられているＮＶＭモジュールＰＢＡ領域は、１時間で、１６ＧＢ／２ＧＢ＝８回（７．５分に１回の頻度で書き換え）の書き換えが実施されることとなる。このようにＮＶＭモジュールＬＢＡへのデータ更新量が等しい場合、予備領域が大きいほど、物理領域であるＮＶＭモジュールＰＢＡの書き換え頻度は低下する（書き換え間隔は延長される）。
【０３７０】
以上、書き換え頻度を低下させるために、予備領域を増加させる制御を実施する理由について説明した。
【０３７１】
実施例４のストレージ装置１０１の構成、管理情報、処理については、実施例１と実質的に同一であるため説明を略する。なお、実施例４では、ＰＢＡ割り当て残量の取得方法として、キャッシュセグメント管理情報７００のＮＶＭモジュールＰＢＡ割り当て量７０６を用いた算出は行わず、ＮＶＭモジュール１２６より通知されるＰＢＡ 割り当て残量のみを用いて制御する。
【０３７２】
実施例４のＮＶＭモジュール１２６の構成、管理情報については、実施例１と実質的に同様であるため説明を省略する。また、実施例４のＮＶＭモジュール１２６の処理については、実施例１と異なる点を重点的に説明する。
【０３７３】
なお、本実施例のＮＶＭモジュール１２６は、管理するＦＭチップ（２２０〜２２８）を構成するブロックに対して行った消去時刻を、全ブロックに関して管理している。ＮＶＭモジュール１２６は、ブロックを消去する際、例えば、前回消去時の時刻と現在時刻の差を算出することで、各ブロックの消去頻度を算出する。
【０３７４】
この消去頻度は、上書きが不可能な不揮発性半導体メモリにおいて、上記書き換え頻度とほぼ等価であるため、この各ブロックの消去頻度を各ブロックの書き換え頻度とする。また、そのブロック毎の書き換え頻度の最小値を、各ＮＶＭモジュール１２６の代表値として、書き換え頻度が制御される。
【０３７５】
なお、本実施例では、各ＮＶＭモジュール１２６の書き換え頻度が、書き換え頻度の最小値を代表値として制御されるとしたが、書き換え頻度の平均値により制御されるとしても良い。
【０３７６】
図２８は、実施例４のＮＶＭモジュール１２６が行う予備領域増加処理の一例を示す。
【０３７７】
この処理は、書き換え頻度が、所定の閾値を上回った際に実施される。Ｓ２８０１で、ＦＭコントローラ２１０が、ブロック毎の現在の書き換え頻度を取得する。ＦＭコントローラ２１０は、例えば４回／ｈｏｕｒ等の値を取得する。
【０３７８】
Ｓ２８０２で、ＦＭコントローラ２１０が、単位時間当たりのライト量を算出する。具体的には、例えば、プロセッサ２１５は、Ｓ２８０１にて取得した現在の書き換え頻度と現在の予備領域との積を算出する。現在の書き換え頻度が４回／ｈｏｕｒ、単位時間が１時間、及び予備領域が１００ＧＢである場合、プロセッサ２１５は、（４回／ｈｏｕｒ）×１００ＧＢ＝４００ＧＢと算出する。
【０３７９】
Ｓ２８０３で、ＦＭコントローラ２１０が、増加目標とする予備領域を算出する。具体的には、例えば、プロセッサ２１５は、Ｓ２８０２にて算出した単位時間のライト量を目標書き換え頻度で割った商を算出する。単位時間当たりのライト量が４００ＧＢ、目標書き換え頻度が１回／ｈｏｕｒである場合、プロセッサ２１５は、４００ＧＢ／（１回／ｈｏｕｒ）＝４００ＧＢと算出する。この例では、現在のライト量で、１回／ｈｏｕｒの書き換え頻度を実現するために、プロセッサ２１５が、４００ＧＢを目標予備領域として算出する。
【０３８０】
Ｓ２８０４で、ＦＭコントローラ２１０は、ＮＶＭモジュール１２６がＳ２８０３にて算出した目標予備領域と、現在の予備領域との差を、予備領域変化量として算出する。
【０３８１】
Ｓ２８０５で、ＦＭコントローラ２１０は、ＮＶＭモジュール１２６が現在のＰＢＡ割り当て残量１１０２とＳ２８０４にて算出した予備領域変化量の差を算出し、その差を現在のＰＢＡ割り当て残量に加算して、新たなＰＢＡ割り当て残量とする。
【０３８２】
Ｓ２８０６で、ＦＭコントローラ２１０は、Ｓ２８０５にて算出した新たなＰＢＡ割り当て残量をストレージコントローラ１１０に通知する。このステップにより、ストレージコントローラ１１０は、ＮＶＭモジュール１２６のＰＢＡ割り当て残量が少なくなっているか否かを判断でき、ＰＢＡ割り当て残量が所定の閾値より多くなるまで、クリーン属性のセグメントを解放することができる。
ＮＶＭモジュール１２６は、このとき解放されたＮＶＭモジュールＰＢＡ領域を予備領域として管理し制御することで、予備領域を増加させることができる。
【０３８３】
以上、実施例４のＮＶＭモジュール１２６が行う予備領域増加処理の一例を説明した。なお、予備領域の減少処理は、書き換え頻度が所定の閾値以下となった際に、ＮＶＭモジュール１２６がストレージコントローラ１１０に通知するＰＢＡ割り当て残量を増加させ、ストレージ装置１０１にセグメントの利用量を増加させることで実現する。
【０３８４】
上記のとおり、実施例４では、書き換え頻度に応じて最適な量の予備領域を算出し、その予備領域を実現するために、ＮＶＭモジュール１２６がストレージ装置１０１に通知するＰＢＡ割り当て残量を制御する。
【０３８５】
ストレージコントローラ１１０は、ＮＶＭモジュール１２６より通知されるＰＢＡ割り当て残量が減少すれば、ＮＶＭモジュール１２６は、実施例１にて述べたセグメント解放処理Ｓ１４０１〜Ｓ１４０７にて利用セグメント数を減少させる。また、ＰＢＡ割り当て残量が増えれば、ＮＶＭモジュール１２６は、実施例１にて述べた各種制御にて利用セグメント数を増加させる。
【０３８６】
本実施例では、ＮＶＭモジュール１２６のストレージコントローラ１１０に提供するＮＶＭモジュールＬＢＡの量は仮想化されており、ストレージコントローラ１１０は、実施例１にて述べた利用セグメント数を変更する機能を有する。このため、ＮＶＭモジュール１２６は、ブロックの書き換え頻度の増減に応じて、ストレージコントローラ１１０に利用させるＮＶＭモジュールＬＢＡ量を変更可能である。
【０３８７】
また、ＮＶＭモジュール１２６は、予備領域の量についても書き換え頻度に応じて自由に制御できる。すなわち、書き換え頻度が高い時、ＮＶＭモジュール１２６は、予備領域の量を増やすことで物理的な記憶領域の書き換え頻度を一定値以下に制御でき、ＮＶＭモジュール１２６のデータ保持能力に関する信頼性を維持できる。一方、書き換え頻度が低い時、ＮＶＭモジュール１２６は、予備領域の量を減らし、ストレージコントローラ１１０が使用可能なＮＶＭモジュールＬＢＡ量を一定値以上に制御でき、ストレージコントローラ１１０が使用可能なキャッシュ容量を増加させることができる。
【０３８８】
上述した幾つかの実施例は、本発明の説明のための例示であり、本発明の範囲をそれらの実施例にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【符号の説明】
【０３８９】
１０１…ストレージ装置、１１０…ストレージコントローラ、１２６…ＮＶＭモジュール、２１０…フラッシュメモリコントローラ
【図１】
0005918906.tif 000002
【図２】
0005918906.tif 000003
【図３】
0005918906.tif 000004
【図４】
0005918906.tif 000005
【図５】
0005918906.tif 000006
【図６】
0005918906.tif 000007
【図７】
0005918906.tif 000008
【図８】
0005918906.tif 000009
【図９】
0005918906.tif 000010
【図１０】
0005918906.tif 000011
【図１１】
0005918906.tif 000012
【図１２】
0005918906.tif 000013
【図１３】
0005918906.tif 000014
【図１４】
0005918906.tif 000015
【図１５】
0005918906.tif 000016
【図１６】
0005918906.tif 000017
【図１７】
0005918906.tif 000018
【図１８】
0005918906.tif 000019
【図１９】
0005918906.tif 000020
【図２０】
0005918906.tif 000021
【図２１】
0005918906.tif 000022
【図２２】
0005918906.tif 000023
【図２３】
0005918906.tif 000024
【図２４】
0005918906.tif 000025
【図２５】
0005918906.tif 000026
【図２６】
0005918906.tif 000027
【図２７】
0005918906.tif 000028
【図２８】
0005918906.tif 000029