(57)【特許請求の範囲】
【請求項１】
それぞれ記憶領域を提供する少なくとも１つのフラッシュメモリチップを有する複数のフラッシュメモリモジュールと、前記複数のフラッシュメモリモジュールの前記フラッシュメモリチップに対するデータの読み書きを制御するストレージコントローラとを備えたストレージ装置において、
前記ストレージコントローラは、
前記フラッシュメモリチップが提供する前記記憶領域上に定義された物理的な単位領域内の所定の管理情報格納領域に、対応する１又は複数の論理的な単位領域の論理アドレスを格納することにより、重複データを排除するデータ重複排除を行なうと共に、前記管理情報格納領域に格納された前記論理アドレスの延べ数である使用度と、当該物理的な単位領域に対応する有効な前記論理アドレスの数である重複度とを前記物理的な単位領域毎に管理し、前記使用度と前記重複度との差が既定値を超える前記物理的な単位領域に対して、当該物理的な単位領域を初期状態に戻す再生処理を実行する
ことを特徴とするストレージ装置。
【請求項２】
前記物理的な単位領域は、
データを一括消去する単位であり、
前記ストレージコントローラは、
前記物理的な単位領域を単位として、前記フラッシュメモリチップが提供する前記記憶領域データを読み書きすると共に前記データ重複排除のための処理を実行する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記ストレージコントローラは、
前記管理情報格納領域に格納されている前記論理アドレスのうちの無効となった前記論理アドレスを０で上書きする
ことを特徴とする請求項１に記載のストレージ装置。
【請求項４】
前記ストレージコントローラは、
同一のデータが格納された前記物理的な単位領域の数をＸ、前記同一のデータが格納された前記物理的な単位領域の前記管理情報格納領域に格納された有効な前記論理アドレスの数をＹ、前記管理情報格納領域に格納可能な前記論理アドレスの最大数をｎ、Ｙをｎで割った商以上の最小の整数をＺとして、ＸとＺの差が所定値以上のときに、Ｚ個の未使用の前記物理的な単位領域にコピーするようにして、重複したデータを排除する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項５】
前記ストレージコントローラは、
同一のデータが格納された複数の前記物理的な単位領域の中から、前記論理アドレスに対する前記管理情報格納領域の空きが最大の第１の前記物理的な単位領域を選択すると共に、前記論理アドレスに対する前記管理情報格納領域の空きが最小であって、かつ当該管理情報格納領域に格納された有効な前記論理アドレスの数が最小である第２の前記物理的な単位領域を選択し、
前記第１の物理的な単位領域の前記論理アドレスに対する前記管理情報格納領域の空きの数が、前記第２の物理的な単位領域の前記管理情報格納領域に格納されている有効な前記論理アドレスの数以上である場合に、前記第１の物理的な単位領域の前記管理情報格納領域の空き領域に前記第２の物理的な単位領域の前記管理情報格納領域に格納されている有効な前記論理アドレスをコピーするようにして、重複したデータを排除する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項６】
前記物理的な単位領域は、
データを一括消去する単位である物理ブロック内のデータの読書き単位である少なくとも１つのページからなるサブブロックである
ことを特徴とする請求項１に記載のストレージ装置。
【請求項７】
前記ストレージコントローラは、
データを所定単位で分割して前記複数のフラッシュメモリモジュールに読み書きすると共に、当該所定単位以上のデータサイズのデータに対して、前記複数のフラッシュメモリモジュールに跨る範囲で重複データを排除するデータ重複排除処理を行い、
前記複数のフラッシュメモリモジュールは、
前記所定単位以下のデータサイズのデータに対して、当該フラッシュメモリモジュール毎にデータ重複排除処理を行う
ことを特徴とする請求項１に記載のストレージ装置。
【請求項８】
前記ストレージコントローラは、
前記複数のフラッシュメモリモジュールに対して、当該フラッシュメモリモジュールにおける前記データ重複排除処理の処理単位を指示する
ことを特徴とする請求項７に記載のストレージ装置。
【請求項９】
所定単位の記憶領域毎に、前記ストレージコントローラ又は前記フラッシュメモリモジュールが実行する前記データ重複排除処理の実行の可否を設定できる
ことを特徴とする請求項８に記載のストレージ装置。
【請求項１０】
それぞれ記憶領域を提供する少なくとも１つのフラッシュメモリチップを有する複数のフラッシュメモリモジュールと、前記複数のフラッシュメモリモジュールの前記フラッシュメモリチップに対するデータの読み書きを制御するストレージコントローラとを備えたストレージ装置におけるデータの重複を排除するデータ重複排除方法において、
前記ストレージコントローラが、前記フラッシュメモリチップが提供する前記記憶領域上に定義された物理的な単位領域内の所定の管理情報格納領域に、対応する１又は複数の論理的な単位領域の論理アドレスを格納するようにして前記データ重複排除処理を行うと共に、前記管理情報格納領域に格納された前記論理アドレスの延べ数である使用度と、当該物理的な単位領域に対応する有効な前記論理アドレスの数である重複度とを前記物理的な単位領域毎に管理する第１のステップと、
前記使用度と前記重複度との差が既定値を超える前記物理的な単位領域に対して、当該物理的な単位領域を初期状態に戻す再生処理を実行する第２のステップと
を備えることを特徴とするストレージ装置におけるデータ重複排除方法。
【請求項１１】
前記物理的な単位領域は、
データを一括消去する単位であり、
前記第１のステップでは、
前記ストレージコントローラが、前記物理的な単位領域を単位として、前記フラッシュメモリチップが提供する前記記憶領域にデータが読み書きされると共に前記データ重複排除のための処理を実行する
ことを特徴とする請求項１０に記載のストレージ装置におけるデータ重複排除方法。
【請求項１２】
前記第２のステップでは、
前記ストレージコントローラが、前記管理情報格納領域に格納されている前記論理アドレスのうちの無効となった前記論理アドレスを０で上書きする
ことを特徴とする請求項１０に記載のストレージ装置におけるデータ重複排除方法。
【請求項１３】
前記第１のステップでは、
前記ストレージコントローラが、同一のデータが格納された前記物理的な単位領域の数をＸ、前記同一のデータが格納された前記物理的な単位領域の前記管理情報格納領域に格納された有効な前記論理アドレスの数をＹ、前記管理情報格納領域に格納可能な前記論理アドレスの最大数をｎ、Ｙをｎで割った商以上の最小の整数をＺとして、ＸとＺの差が所定値以上のときに、Ｚ個の未使用の前記物理的な単位領域にコピーするようにして重複したデータを排除するための処理を実行する
ことを特徴とする請求項１０に記載のストレージ装置におけるデータ重複排除方法。
【請求項１４】
前記第２のステップでは、
前記ストレージコントローラが、同一のデータが格納された複数の前記物理的な単位領域の中から、前記論理アドレスに対する前記管理情報格納領域の空きが最大の第１の前記物理的な単位領域を選択すると共に、前記論理アドレスに対する前記管理情報格納領域の空きが最小であって、かつ当該管理情報格納領域に格納された有効な前記論理アドレスの数が最小である第２の前記物理的な単位領域を選択し、
前記第１の物理的な単位領域の前記論理アドレスに対する前記管理情報格納領域の空きの数が、前記第２の物理的な単位領域の前記管理情報格納領域に格納されている有効な前記論理アドレスの数以上である場合に、前記第１の物理的な単位領域の前記管理情報格納領域の空き領域に前記第２の物理的な単位領域の前記管理情報格納領域に格納されている有効な前記論理アドレスをコピーするようにして重複したデータを排除するための処理を実行する
ことを特徴とする請求項１０に記載のストレージ装置におけるデータ重複排除方法。
【請求項１５】
前記物理的な単位領域は、
データを一括消去する単位である物理ブロック内のデータの読書き単位である少なくとも１つのページからなるサブブロックである
ことを特徴とする請求項１０に記載のストレージ装置におけるデータ重複排除方法。
【請求項１６】
前記第１のステップでは、
前記ストレージコントローラが、データを所定単位で分割して前記複数のフラッシュメモリモジュールに読み書きすると共に、当該所定単位以上のデータサイズのデータに対して、前記複数のフラッシュメモリモジュールに跨る範囲で重複データを排除するデータ重複排除処理を行い、
前記第２のステップでは、
前記複数のフラッシュメモリモジュールが、前記所定単位以下のデータサイズのデータに対して、当該フラッシュメモリモジュール毎にデータ重複排除処理を行う
ことを特徴とする請求項１０に記載のストレージ装置におけるデータ重複排除方法。
【請求項１７】
前記第２のステップでは、
前記ストレージコントローラが、前記複数のフラッシュメモリモジュールに対して、当該フラッシュメモリモジュールにおける前記データ重複排除処理の処理単位を指示する
ことを特徴とする請求項１６に記載のデータ重複排除方法。
【請求項１８】
所定単位の記憶領域毎に、前記ストレージコントローラ又は前記フラッシュメモリモジュールが実行する前記データ重複排除処理の実行の可否を設定できる
ことを特徴とする請求項１７に記載のストレージ装置におけるデータ重複排除方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置及びストレージ装置におけるデータ重複排除方法に関し、特に、フラッシュメモリを記憶媒体とするストレージ装置に適用して好適なものである。
【背景技術】
【０００２】
従来、ストレージ装置では、例えば磁気ディスクや光ディスク等のランダムアクセス可能な不揮発性記憶媒体がデータ記憶媒体として用いられている。現在主流のストレージ装置は、小型ディスクドライブを多数備える。
【０００３】
また、近年の半導体技術の進歩に伴って、一括消去可能な不揮発性半導体メモリが開発されている。このような不揮発性半導体メモリとしては、例えばフラッシュメモリが存在する。フラッシュメモリを記憶媒体とするストレージ装置では、小型ディスクドライブを多数備えるストレージ装置に比べて、寿命、省電力及びアクセス時間等に優れていると考えられている。
【０００４】
ここで、フラッシュメモリについて説明する。フラッシュメモリにおいて、ブロックはデータを一括消去する単位の記憶領域であり、ページはデータを読み書きする単位である。後述のように１つのブロック内に複数のページが設けられる。またフラッシュメモリは、特性上、データを直接書き換えることができない。つまり、フラッシュメモリは、記憶しているデータを書き換える場合、記憶している有効なデータを他のブロックに退避させる。次に、記憶しているデータをブロック単位で消去する。そして、データを消去したブロックにデータを書き込む。
【０００５】
具体的には、フラッシュメモリは、「１」を「０」に書き換えることはできるが、「０」を「１」に書き換えることができない。そこで、フラッシュメモリでは、データの書き換え時に、ブロックに記憶されたデータの全体を消去する。このように、フラッシュメモリにおけるデータの書き換えは、ブロックごとのデータの消去が伴う。しかし、フラッシュメモリの１ブロック分のデータ消去にかかる時間は、１ページ分のデータを書き込むのに要する時間と比べて約１桁長い。従って、１ページ分のデータの書換えのために毎回１ブロック分のデータ消去を行なうようにすると、フラッシュメモリのデータ書換え性能が悲観的に悪くなる。つまり記憶媒体としてフラッシュメモリを用いる場合、フラッシュメモリからデータを消去する時間を隠蔽できるアルゴリズムでデータを書き込むことが必須となる。
【０００６】
通常のフラッシュメモリに対するデータの書換え動作では、未使用領域への追記方式で行い、データを書き換えるごと毎にデータを消去することは行わない。しかし、データの書き換えが重なると、フラッシュメモリ内の未使用領域が少なくなるため、フラッシュメモリに書き込まれている不要なデータを消去して記憶領域を再利用可能な状態にする必要が生ずる。そこで、旧データを含むブロック内の有効なデータのみを未使用領域にコピーし、コピー元のブロックを消去して再利用可能な状態にするブロック再生処理（以下、これをリクラメーションと呼ぶ）が、フラッシュメモリのデータ高速書換えには必須となる。このリクラメーションは、無効データが多くなったブロックを対象に実行される。
【０００７】
一方、フラッシュメモリでは、データ消去の回数に制限がある。例えば、ブロック当たり１０万回までの消去回数が保証されている。データの書換えが集中して消去回数が増大したブロックは、データの消去ができなくなり使用不能となる問題点がある。そのため、フラッシュメモリを記憶媒体とする場合、特定ブロックに対するデータ消去処理が集中しないような消去回数の平準化処理が必須となる。
【０００８】
以上述べたデータ消去時間の隠蔽とデータ消去回数の平準化のため、フラッシュメモリモジュール内ではデータ書込みの際に、論理アドレスから物理アドレスへのアドレス変換処理が行われる。フラッシュメモリモジュールは１つ以上のフラッシュメモリチップと該フラッシュメモリチップへのデータの読み書きを制御するフラッシュメモリコントローラから構成されている。このフラッシュメモリコントローラが、論理アドレスと物理アドレスの変換を行ない、さらにアドレス変換テーブルを保存するため、フラッシュメモリにおける物理的な単位領域である物理ブロック毎の所定の論理アドレス格納領域に、その物理ブロックに対応付けられた論理的な単位領域である論理ブロックの論理アドレスを格納している。
【０００９】
また、ストレージ装置の容量コスト低減のため、データ重複排除技術（deduplicationあるいはデータ重複除去技術とも呼ばれる）が注目されている。データ重複排除技術は、同一のデータが格納された複数の論理ブロックを当該データが格納された１つの物理ブロックに対応付ける技術であり、ストレージのデータ容量を節約することが可能となる（特許文献１参照）。データ重複排除技術によれば、データの書換え回数を低減することができるため、フラッシュメモリを記憶媒体とするストレージ装置にこのデータ重複排除技術を適用することによって、フラッシュメモリの長寿命化が期待できる。
【特許文献１】米国特許６９２８５２６号
【発明の開示】
【発明が解決しようとする課題】
【００１０】
ところで、フラッシュメモリを記憶媒体とするストレージ装置にデータ重複排除技術を適用する場合、物理ブロック毎に当該物理ブロックに対応付けられた各論理ブロックの論理アドレスを保持する必要がある。
【００１１】
しかしながら、物理ブロック毎の論理アドレス格納領域は有限なため、多数の論理アドレスを該論理アドレス格納領域へ書き込むと、該論理アドレス格納領域の容量が不足する。また、フラッシュメモリはデータ上書きできない記憶媒体であるため、重複書込状態の物理ブロックに対するデータ更新が重なると、無効な論理アドレスが増加し、データ重複排除の効率が低下する。
【００１２】
従って、フラッシュメモリを記憶媒体とするストレージ装置にデータ重複排除技術を適用するに際しては、各物理ブロックの論理アドレス領域に格納されている無効な論理アドレスをタイミング良く消去することが必要となり、このようにすることができればフラッシュメモリの長寿命化を図りながら、データ重複排除の効率劣化を有効に防止して、フラッシュメモリの使用効率を向上させ得るものと考えられる。
【００１３】
一方、上述のようなデータ重複排除は、フラッシュメモリの記憶領域の管理単位ごとに行なわれる。例えばそれぞれ複数のフラッシュメモリチップを搭載したフラッシュメモリモジュールを複数搭載したストレージ装置では、かかるデータ重複排除処理がフラッシュメモリモジュール毎に独立して行なわれることになる。
【００１４】
しかしながら、データの重複はフラッシュメモリモジュール内だけでなくフラッシュメモリモジュール間でもデータが重複することがある。従って、このようなフラッシュメモリモジュール間でのデータ重複を排除することができれば、データ重複排除の効率をより向上させ得るものと考えられる。
【００１５】
本発明は、以上の点を考慮してなされたもので、記憶媒体としてのフラッシュメモリの長寿命化を図りながら、フラッシュメモリの使用効率を向上させ得るストレージ装置及びストレージ装置におけるデータ重複排除方法を提供することを目的とする。
【課題を解決するための手段】
【００１６】
かかる課題を解決するため、本発明においては、それぞれ記憶領域を提供する少なくとも１つのフラッシュメモリチップを有する複数のフラッシュメモリモジュールと、前記複数のフラッシュメモリモジュールの前記フラッシュメモリチップに対するデータの読み書きを制御するストレージコントローラとを備えたストレージ装置において、前記ストレージコントローラは、前記フラッシュメモリチップが提供する前記記憶領域上に定義された物理的な単位領域内の所定の管理情報格納領域に、対応する１又は複数の論理的な単位領域の論理アドレスを格納することにより、重複データを排除するデータ重複排除を行なうと共に、前記管理情報格納領域に格納された前記論理アドレスの延べ数である使用度と、当該物理的な単位領域に対応する有効な前記論理アドレスの数である重複度とを前記物理的な単位領域毎に管理し、前記使用度と前記重複度との差が既定値を超える前記物理的な単位領域に対して、当該物理的な単位領域を初期状態に戻す再生処理を実行することを特徴とする。
【００１８】
また本発明においては、それぞれ記憶領域を提供する少なくとも１つのフラッシュメモリチップを有する複数のフラッシュメモリモジュールと、前記複数のフラッシュメモリモジュールの前記フラッシュメモリチップに対するデータの読み書きを制御するストレージコントローラとを備えたストレージ装置におけるデータの重複を排除するデータ重複排除方法において、前記ストレージコントローラが、前記フラッシュメモリチップが提供する前記記憶領域上に定義された物理的な単位領域内の所定の管理情報格納領域に、対応する１又は複数の論理的な単位領域の論理アドレスを格納するようにして前記データ重複排除処理を行うと共に、前記管理情報格納領域に格納された前記論理アドレスの延べ数である使用度と、当該物理的な単位領域に対応する有効な前記論理アドレスの数である重複度とを前記物理的な単位領域毎に管理する第１のステップと、前記使用度と前記重複度との差が既定値を超える前記物理的な単位領域に対して、当該物理的な単位領域を初期状態に戻す再生処理を実行する第２のステップとを備えることを特徴とする。
【発明の効果】
【００２０】
本発明によれば、記憶媒体としてのフラッシュメモリの長寿命化を図りながら、フラッシュメモリを有効活用することができる。また本発明によれば、データ重複排除の効率をより向上させることができる。
【発明を実施するための最良の形態】
【００２１】
以下図面について、本発明の一実施の形態を詳述する。
【００２２】
（１）第１の実施の形態
図１は、第１の実施の形態によるストレージ装置１の構成を示す。このストレージ装置１は、それぞれ記憶領域を提供する複数のフラッシュメモリモジュール３Ａ〜３Ｐと、これらフラッシュメモリモジュール３Ａ〜３Ｐに対するデータの読み書きを制御するストレージコントローラ２から構成される。
【００２３】
ストレージコントローラ２は、チャネルアダプタ４Ａ，４Ｂ、キャッシュメモリ５Ａ，５Ｂ、ストレージアダプタ６Ａ，Ｂ６及び相互接続網７Ａ，７Ｂを備える。なお、図１においてはチャネルアダプタ４Ａ，４Ｂ、キャッシュメモリ５Ａ，５Ｂ及びストレージアダプタ６Ａ，６Ｂが２つずつ設けられた場合について示しているが、これらが１つずつ又は３つ以上あっても良い。
【００２４】
相互接続網７Ａ，７Ｂは、例えばスイッチ等から構成され、チャネルアダプタ４Ａ、キャッシュメモリ５Ａ及びストレージアダプタ６Ａを相互に接続すると共に、チャネルアダプタ４Ｂ、キャッシュメモリ５Ｂ及びストレージアダプタ６Ｂを相互に接続する。
【００２５】
チャネルアダプタ４Ａは、チャネル８ＡＡ〜８ＤＡを介して図示しない外部の上位装置に接続されている。同様に、チャネルアダプタ４Ｂは、チャネル８ＡＢ〜８ＤＢを介して外部の上位装置に接続されている。なお、上位装置は、本実施の形態のストレージ装置１にデータを読み書きする計算機である。
【００２６】
キャッシュメモリ５Ａ，５Ｂは、チャネルアダプタ４Ａ，４Ｂ及びストレージアダプタ５Ａ，５Ｂから受信したデータを一時的に記憶するために用いられる。
【００２７】
ストレージアダプタ６Ａは、チャネル９ＡＡ〜９ＤＡを介して各フラッシュメモリモジュール３Ａ〜３Ｐとそれぞれ接続されており、対応するチャネル９ＡＡ〜９ＤＡを介して所望のフラッシュメモリモジュール３Ａ〜３Ｐにアクセスし得るようになされている。具体的に、ストレージアダプタ６Ａは、チャネル９ＡＡを介してフラッシュメモリモジュール３Ａ〜３Ｄに接続され、チャネル９ＢＡを介してフラッシュメモリモジュール３Ｅ〜３Ｈに接続されている。また、ストレージアダプタ６Ａは、チャネル９ＣＡを介してフラッシュメモリモジュール３Ｉ〜３Ｌに接続され、チャネル９ＤＡを介してフラッシュメモリモジュール３Ｍ〜３Ｐに接続されている。
【００２８】
同様に、ストレージアダプタ６Ｂは、チャネル９ＡＢ〜９ＤＢを介して各フラッシュメモリモジュール３Ａ〜３Ｐとそれぞれ接続されており、対応するチャネル９ＡＢ〜９ＤＢを介して所望のフラッシュメモリモジュール３Ａ〜３Ｐにアクセスし得るようになされている。具体的に、ストレージアダプタ６Ｂは、チャネル９ＡＢを介してフラッシュメモリモジュール３Ａ〜３Ｄに接続され、チャネル９ＢＢを介してフラッシュメモリモジュール３Ｅ〜３Ｈに接続されている。また、ストレージアダプタ６Ｂは、チャネル９ＣＢを介してフラッシュメモリモジュール３Ｉ〜３Ｌに接続され、チャネル９ＤＢを介してフラッシュメモリモジュール３Ｍ〜３Ｐに接続されている。
【００２９】
チャネルアダプタ４Ａ，４Ｂ及びストレージアダプタ６Ａ，６Ｂは、保守端末１０に接続されている。保守端末１０は、ＣＰＵ（Central Processing Unit）やメモリ等の情報処理資源を備えたコンピュータ装置であり、例えばノート型のパーソナルコンピュータから構成される。保守端末１０は、ストレージ装置１の管理者から入力された設定情報を、チャネルアダプタ４Ａ，４Ｂ及び／又はストレージアダプタ６Ａ，６Ｂに送信する。
【００３０】
なお、チャネルアダプタ４Ａ及びストレージアダプタ６Ａに代えて、これらチャネルアダプタ４Ａ及びストレージアダプタ６Ａの機能を備えた一つのアダプタを設けるようにしても良い。
【００３１】
１１Ａ〜１１Ｄは、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）グループを示す。例えばＲＡＩＤグループ１１Ａは、フラッシュメモリモジュール３Ａ，３Ｅ，３Ｉ，３Ｍからなる。ＲＡＩＤグループ１１Ａに属するフラッシュメモリモジュール３Ａ，３Ｅ，３Ｉ，３Ｍの１つ、例えばフラッシュメモリモジュール３Ａでエラーが発生してデータを読み出せなくなった場合、同じＲＡＩＤグループ１１Ａに属する他のフラッシュメモリモジュール３Ｅ，３Ｉ，３Ｍに格納された関連するデータに基づいて、かかるフラッシュメモリモジュール３Ａに格納されたデータを復元することができる。
【００３２】
フラッシュメモリモジュール３Ａ〜３Ｐはネットワーク１２Ａを介してストレージアダプタ６Ａと接続されると共に、ネットワーク１２Ｂを介してストレージアダプタ６Ｂと接続されている。ストレージコントローラ２及びフラッシュメモリモジュール３Ａ〜３Ｐは、ネットワーク１２Ａ，１２Ｂを介してデータ重複排除制御のための情報等を相互に通信する。
【００３３】
図２は、チャネルアダプタ４Ａ，４Ｂの構成を示す。この図２に示すように、チャネルアダプタ４Ａ，４Ｂは、ホストチャネルインターフェース２１、キャッシュメモリインターフェース２２、ネットワークインターフェース２３、プロセッサ２４、ローカルメモリ２５及びプロセッサ周辺制御部２６を備えて構成される。
【００３４】
ホストチャネルインターフェース２１は、チャネル８ＡＡ〜８ＤＡ，８ＡＢ〜８ＤＢを介して上位装置と通信を行なうためのインターフェースであり、チャネル８ＡＡ〜８ＤＡ，８ＡＢ〜８ＤＢ上のデータ転送プロトコルと、ストレージコントローラ２の内部のデータ転送プロトコルとを相互に変換する。またキャッシュメモリインターフェース２２は、相互結合網７Ａ，７Ｂに対するインターフェースであり、ネットワークインターフェース２３は、保守端末１０と通信を行なうためのインターフェースである。なお、ホストチャネルインターフェース２１とキャッシュメモリインターフェース２２とは、信号線２７を介して接続されている。
【００３５】
プロセッサ２４は、そのチャネルアダプタ４Ａ，４Ｂ全体の動作制御を司るプロセッサであり、ローカルメモリ２５に格納されたプログラムに基づいて各種の制御処理を行う。例えば、プロセッサ２４は、上位装置と相互結合網７Ａ，７Ｂとの間のデータ転送を制御する。
【００３６】
ローカルメモリ２５は、プロセッサ２４によって実行されるプログラム及びテーブルを記憶する。このテーブルは、管理者によって設定又は変更される。この際、管理者は、テーブルの設定又はテーブルの変更に関する情報を保守端末１０に入力する。保守端末１０は、入力された情報を、ネットワークインターフェース２３を介してプロセッサ２４に送信する。プロセッサ２４は、受信した情報に基づいて、テーブルを作成又は変更し、作成又は変更したテーブルをローカルメモリ２５に格納する。
【００３７】
プロセッサ周辺制御部２６は、ホストチャネルインターフェース２１、キャッシュメモリインターフェース２２、ネットワークインターフェース２３、プロセッサ２４及びローカルメモリ２５間のデータ転送を制御する。プロセッサ周辺制御部２６は、例えば、チップセット等から構成される。
【００３８】
図３は、ストレージアダプタ６Ａ，６Ｂの構成を示す。この図３に示すように、ストレージアダプタ６Ａ，６Ｂは、キャッシュメモリインターフェース３１、ストレージチャネルインターフェース３２、ネットワークインターフェース３３、プロセッサ３４、ローカルメモリ３５及びプロセッサ周辺制御部３６を備えて構成される。
【００３９】
キャッシュメモリインターフェース３１は、そのストレージアダプタ６Ａ，６Ｂを相互結合網７Ａ，７Ｂに接続するためのインターフェースである。またストレージチャネルインターフェース３２は、そのストレージアダプタ６Ａ，６Ｂをチャネル９ＡＡ〜９ＤＡ，９ＡＢ〜９ＤＢに接続するためのインターフェースであり、チャネル９ＡＡ〜９ＤＡ，９ＡＢ〜９ＤＢ上のデータ転送プロトコルと、ストレージコントローラ２の内部のデータ転送プロトコルとを相互に変換する。なお、キャッシュメモリインターフェース３１とストレージチャネルインターフェース３２とは、信号線３７を介して接続されている。
【００４０】
ネットワークインターフェース３３は、そのストレージアダプタ６Ａ，６Ｂを保守端末１０とフラッシュメモリモジュール３Ａ〜３Ｐとに接続するためのインターフェースである。
【００４１】
プロセッサ３４は、そのストレージアダプタ６Ａ，６Ｂ全体の動作制御を司るプロセッサであり、ローカルメモリ３５に格納されたプログラムに基づいて各種の制御処理を行う。例えば、プロセッサ３４は、各フラッシュメモリモジュール３Ａ〜３Ｐと相互結合網７Ａ，７Ｂとの間のデータ転送を制御する。
【００４２】
ローカルメモリ３５は、プロセッサ３４によって実行されるプログラム及びテーブルを記憶する。このテーブルは、管理者によって設定又は変更される。この際、管理者は、テーブルの設定又はテーブルの変更に関する情報を保守端末１０に入力する。保守端末１０は、入力された情報を、ネットワークインターフェース３３を介してプロセッサ３４に送信する。プロセッサ３４は、受信した情報に基づいて、テーブルを作成又は変更し、作成又は変更したテーブルをローカルメモリ３５に格納する。
【００４３】
プロセッサ周辺制御部３６は、キャッシュメモリインターフェース３１、ストレージチャネルインターフェース３２、ネットワークインターフェース３３、プロセッサ３４及びローカルメモリ３５間のデータ転送を制御する。プロセッサ周辺制御部３６は、例えばチップセット等から構成される。
【００４４】
図４は、フラッシュメモリモジュール３Ａ〜３Ｐの構成を示す。フラッシュメモリモジュール３Ａ〜３Ｐは、フラッシュメモリコントローラ４１及びフラッシュメモリ４２を備える。フラッシュメモリ４２はデータを記憶するための不揮発性記憶媒体であり、フラッシュメモリコントローラ４１は、フラッシュメモリ４２に対してデータを読み書きし又はフラッシュメモリ４２に格納されたデータを消去するための制御処理を行う。
【００４５】
このフラッシュメモリコントローラ４１は、プロセッサ５０、インターフェース部５１、内部バス５２、ＲＡＭ（Random Access Memory）５３、ＲＯＭ（Read Only Memory）５４、ネットワークインターフェース５５、フラッシュメモリインターフェース部５６及びデータ転送部５７を備えて構成される。
【００４６】
フラッシュメモリ４２は、複数のフラッシュメモリチップ５８から構成される。フラッシュメモリチップ５８が提供する記憶領域には、複数の物理ブロック５９が設定され、この物理ブロック５９にデータが格納される。ブロック５９は、メモリコントローラ４１がデータを消去する単位である。
【００４７】
インターフェース部５１は、チャネル９ＡＡ〜９ＤＡを介してストレージコントローラ２内のストレージアダプタ６Ａに接続されると共に、チャネル９ＡＢ〜９ＤＢを介してストレージコントローラ２内のストレージアダプタ６Ｂに接続されている。そしてインターフェース部５１は、これらのチャネル９ＡＡ〜９ＤＡ，９ＡＢ〜９ＤＢを介してストレージアダプタ６Ａ及びストレージアダプタ６Ｂからのデータや命令（例えばＳＣＳＩコマンド）を送受信する。
【００４８】
例えばインターフェース部５１は、チャネル９ＡＡ〜９ＤＡ，９ＡＢ〜９ＤＢを介してストレージアダプタ６Ａやストレージアダプタ６Ｂから送信されるデータを受信し、受信したデータをメモリ５３に格納する。また、インターフェース部５１は、ＲＡＭ５３に格納されているデータを、チャネル９ＡＡ〜９ＤＡ，９ＡＢ〜９ＤＢを介してストレージアダプタ６Ａやストレージアダプタ６Ｂに送信する。
【００４９】
ＲＡＭ５３は、データを高速に読み書き可能なＳＲＡＭ（Static RAM）又はＤＲＡＭ（Dynamic RAM）から構成され、インターフェース部５１が送受信するデータを一時的に記憶するために用いられる。また、ＲＯＭ５４は不揮発性メモリから構成され、プロセッサ５０が実行するプログラムが格納される。このプログラムは、プロセッサ５０が実行可能となるように、ストレージ装置起動時にＲＯＭ５４からＲＡＭ５３へコピーされる。
【００５０】
また、ＲＡＭ５３には、プロセッサ５０によって参照されるテーブルも格納される。このテーブルは、例えば、フラッシュメモリ４２の論理アドレスと物理アドレスとの変換テーブルである。論理アドレスは、フラッシュメモリモジュール３Ａ〜３Ｐ外から（例えばストレージアダプタ６Ａ，６Ｂから）、フラッシュメモリ４２にアクセスするためのアドレスであり、物理アドレスは、フラッシュメモリコントローラ４１が、フラッシュメモリ４２にアクセスするためのアドレスである。
【００５１】
内部バス５２は、プロセッサ５０、インターフェース部５１、ＲＡＭ５３、ＲＯＭ５４、ネットワークインターフェース５５、データ転送部５７及びフラッシュメモリインターフェース部５６を相互に接続するもので、データの転送路として機能する。
【００５２】
ネットワークインターフェース５５は、フラッシュメモリコントローラ４１とストレージコントローラ２間の通信を制御する。ネットワークインターフェース５５は、ネットワーク１２Ａ，１２Ｂを介してストレージアダプタ６Ａ，６Ｂと接続されている。
【００５３】
フラッシュメモリインターフェース部５６は、フラッシュメモリコントローラ４１とフラッシュメモリ４２とを接続するインターフェースである。
【００５４】
データ転送部５７は、プロセッサ５０の命令により、インターフェース部５１とＲＡＭ５３及びフラッシュメモリ４２間等におけるデータ転送を制御する。なお、データ転送部５７の機能をプロセッサ５０が実行する場合は、データ転送部５７を省略することができる。
【００５５】
プロセッサ５０は、フラッシュメモリモジュール３Ａ〜３Ｐ全体の動作制御を司るもので、ＲＡＭ５３にコピーされたプログラムに基づいて各種の制御処理を行う。例えば、プロセッサ５０は、ＲＡＭ５３にコピーされたフラッシュメモリ４２の論理アドレスと物理アドレスとの変換テーブルを参照して、フラッシュメモリ４２にデータを読み書きする。また、プロセッサ５０は、フラッシュメモリモジュール３Ａ〜３Ｐ内のブロック５９に対して、リクラメーション処理（ブロック再生処理）及びウエアレベリング処理（消去回数平準化処理）を行う。
【００５６】
図５は、フラッシュメモリチップの記憶領域に設定されるブロック５９の構造を示している。この図５に示すように、ブロック５９は、数十個（例えば６４個）程度のページ６０から構成される。
【００５７】
ページ６０は、上述のようにフラッシュメモリコントローラ４１がフラッシュメモリチップ５８にデータを読み書きする単位である。例えば、ＮＡＮＤ（Not AND）型フラッシュメモリの場合、フラッシュメモリコントローラ４１は、２０〜３０μｓ弱／ページの速度でデータを読み出し、０.２〜０.３ｍｓ／ページの速度でデータを書き込む。また、フラッシュメモリコントローラ４１は、２〜４ｍｓ／ブロックの速度でデータを消去する。
【００５８】
ページ６０は、通常のデータを格納するための領域であるデータ部６１と、そのページ６０の管理情報及びエラー訂正情報を格納するための領域である冗長部６２とから構成される。例えば、１ページ当たりの容量は２１１２バイトであり、そのうちの２０４８バイトがデータ部、６４バイトが冗長部６２に設定される。
【００５９】
管理情報は、オフセットアドレス及びページステータスを含む。このオフセットアドレスは、対応するブロック５９内におけるそのページ６０の相対的なアドレスである。またページステータスは、そのページ６０が有効ページ、無効ページ、未使用ページ又は処理中のページのいずれであるかを表す。
【００６０】
エラー訂正情報は、そのページ６０のエラーを検出及び訂正するための情報であり、例えばハミングコードが用いられる。このエラー訂正情報は、例えば、プロセッサ５０がＲＡＭ５３又はＲＯＭ５４に格納されたプログラムを実行することにより生成される。
【００６１】
冗長部６２は、通常、フラッシュメモリコントローラ４１のみがアクセスできる。従ってストレージアダプタ６Ａ，６Ｂからは、データ部６１のみがアクセス可能な領域である。換言すれば、論理アドレスはデータ部６１のメモリ空間にマッピングされると言うことができる。
【００６２】
ブロック５９は、所定のメモリ位置に、管理情報格納領域６３を有する。この管理情報格納領域６３は、ブロック５９内の物理アドレスに対応付けられた論理アドレス等の管理情報を格納する領域である。従って、ブロック５９に属するページ６０のデータ部６１の合計から管理情報格納領域６３を除いた容量が、ストレージコントローラ２がフラッシュメモリモジュール３Ａ〜３Ｐの１ブロック当たりに格納可能なデータ容量となる。
【００６３】
なお、本実施の形態においては、説明の簡単のため、フラッシュメモリモジュール３Ａ〜３Ｐにデータの読み書きするアクセス単位が、フラッシュメモリ４２の１ブロック当たりに格納可能な容量であるものとする。つまり、ストレージコントローラ２はフラッシュメモリモジュール３Ａ〜３Ｐに対して、フラッシュメモリ４２内のブロック５９へのデータ格納容量単位でデータを読み書きする。
【００６４】
図６は、管理情報格納領域６３の構造を示す。この図６からも明らかなように、管理情報格納領域６３は、ブロック管理情報格納領域６４、ハッシュ値格納領域６５及び論理アドレス格納領域６６から構成される。
【００６５】
このうちブロック管理情報格納領域６４には、そのブロック５９の現在までの消去回数や、ブロック５９のステータス（有効、無効、未使用又は書き込み済み）を示す情報が格納される。
【００６６】
またハッシュ値格納領域６５には、そのブロック５９に書き込まれたデータを識別する情報であるハッシュ値が格納される。このハッシュ値は、ストレージコントローラ２により生成するようにしても、またフラッシュメモリモジュール３Ａ〜３Ｐ内のプロセッサ５０により生成するようにしても良い。
【００６７】
ハッシュ値をストレージコントローラ２により生成する場合には、ストレージコントローラ２が書き込みデータと共に、生成したハッシュ値をフラッシュメモリモジュール３Ａ〜３Ｐへ送信する。この方法によれば、プロセッサ５０の負荷を低減させ得るメリットがある。また、フラッシュメモリモジュール３Ａ〜３Ｐ内でハッシュ値を生成する場合には、例えば、フラッシュメモリモジュール３Ａ〜３Ｐ内のエラー訂正情報を生成する何らかの手段を用いてハッシュ値を生成するようにする。この方法によれば、ストレージコントローラ２及びフラッシュメモリモジュール３Ａ〜３Ｐ間のチャネル負荷を低減させ得るメリットがある。
【００６８】
さらに論理アドレス格納領域６６には、そのブロック５９と対応付けられた論理ブロックの論理アドレスが格納される。この場合において、本実施の形態のストレージ装置１には、データ重複排除機能が搭載されており、このデータ重複排除機能により１つの物理ブロック（ブロック５９）に最大８個までの論理ブロックを対応付けることができる。そこで、本実施の形態の場合、論理アドレス格納領域６６には、そのブロック５９に対応付けられた論理ブロックの論理アドレス（ＬＢＡ００〜ＬＢＡ０７）を最大８個まで格納し得るようになされている。
【００６９】
なお、論理アドレス格納領域６６に格納する情報は、論理ブロックを特定できる情報であるならば論理アドレス以外の情報でも良い。論理アドレス格納領域６６に格納された最大８個の論理アドレスのうちの有効な論理アドレス数を重複度、論理アドレス格納領域６６に格納された論理アドレスの延べ数を使用度と定義する。また、論理アドレス格納領域６６に格納できる論理アドレス数は８個に限るものではなく、幾つでも良い。ただし、あまり大きな容量を論理アドレス格納領域６６に割り当てると、１つのブロック５９に格納できるデータ容量が減少するため、格納する論理アドレス数を決定するに際しては管理情報格納領域６３のオーバーヘッドを考慮する必要がある。
【００７０】
次に、図７及び図８を用いて、論理アドレスと物理アドレスの対応及び使用度と重複度について、具体的に説明する。
【００７１】
図７は、物理アドレス空間７０の物理ブロック５９Ａ，５９Ｂと論理アドレス空間７１の論理ブロック７２Ａ〜７２Ｃとの対応関係を示す。第１の物理ブロック５９Ａは、物理アドレス“ａａａａ”から始まるブロックであり、データ“Ａ”が書き込まれている。この第１の物理ブロック５９Ａには第１〜第３の論理ブロック７２Ａ〜７２Ｂが対応付けられており、当該第１の物理ブロック５９Ａの論理アドレス格納領域６３Ａにこれら第１〜第３の論理ブロック７２Ａ〜７２Ｃの論理アドレス（“ｘｘｘｘ”、“ｙｙｙｙ”、“ｚｚｚｚ”）が格納されているものとする。
【００７２】
この場合、第１の物理ブロック５９Ａの論理アドレス格納領域６３Ａに格納された３個の論理アドレスは全て有効であるため、第１の物理ブロック５９Ａの使用度及び重複度はいずれも“３”となる。
【００７３】
なお、物理アドレス空間７０において、物理アドレス“ｂｂｂｂ”から始まる第２の物理ブロック５９Ｂは未使用ブロックであり、その論理アドレス格納領域６３Ｂに論理アドレスは格納されていないものとする。
【００７４】
一方、この状態から論理アドレス空間７１の第３の論理ブロック７２Ｃに格納されているデータを“Ｂ”に書き換える場合、図８に示すように、物理アドレス空間７０において、未使用であった第２の物理ブロック５９Ｂにデータ“Ｂ”が書き込まれ、当該第２の物理ブロック５９Ｂの論理アドレス格納領域６３Ｂに論理アドレス“ｚｚｚｚ”が書き込まれる（７０３）。
【００７５】
そして、第３の論理ブロック７２Ｃの元のデータである“Ａ”が格納されていた第１の物理ブロック５９Ａの論理アドレス格納領域６６（図６）における第３の論理ブロック７２Ｃの論理アドレスが“０”で上書きされ、無効化される。この第３の論理ブロック７２Ｃのデータ書換えの結果、第１の物理ブロック５９Ａの使用度は“３”、重複度は“２”となる。
【００７６】
このように、重複度はデータ書換えによって増減するが、使用度は増加するのみで減少しない。使用度が論理アドレス格納領域６６の格納可能な論理アドレス数の最大値（例えば、図６では８個）に達した場合は、その物理ブロック５９に対してリクラメーションを実行し、論理アドレス格納領域６６を未使用にする必要がある。
【００７７】
図９〜図１１は、図４について上述したフラッシュメモリモジュール３Ａ〜３ＰのＲＡＭ５３内に保存され、プロセッサ５０が参照する各種管理テーブルを示す。図９は、アドレス変換テーブル８０、図１０はハッシュ値管理テーブル８２、図１１は物理ブロック管理テーブル８４をそれぞれ示している。
【００７８】
アドレス変換テーブル８０は、上位装置が認識する論理アドレスを、その論理アドレスに対応付けられた物理アドレスに変換するために用いられるテーブルであり、図９に示すように、「論理ブロックアドレス」欄８１Ａ、「物理ブロックアドレス」欄８１Ｂ及び「書込み済みフラグ」欄８１Ｃから構成される。
【００７９】
「論理ブロックアドレス」欄８１Ａには、上位装置が認識する論理アドレスのうちのそのフラッシュメモリモジュール３Ａ〜３Ｐが提供する記憶領域と対応付けられた論理ブロックの論理アドレスが格納され、「物理ブロックアドレス」欄８１Ｂには、その論理アドレスと対応付けられた物理ブロックの物理アドレスが格納される。
【００８０】
また「書込み済みフラグ」欄８１Ｃには、その物理ブロックに対して既にデータの書き込みが行なわれたか否かを表す書込み済フラグが格納される。書込み済フラグは、対応する論理アドレス空間が未使用かあるいは書込み済みを示すフラグであり、例えば、書込み済みの場合は“１”、未使用の場合“０”が「書込み済みフラグ」欄８１Ｃに格納される。
【００８１】
ハッシュ値管理テーブル８２は、そのフラッシュメモリモジュール３Ａ〜３Ｐ内の物理ブロックに書き込まれたデータのハッシュ値等を管理するためのテーブルであり、図１０に示すように、「ハッシュ値」欄８３Ａ、「物理ブロックアドレス」欄８３Ｂ、「制御フラグ」欄８３Ｃ及び「論理アドレス」欄８３Ｄから構成される。
【００８２】
このうち「ハッシュ値」欄８３Ａには、対応するデータのハッシュ値が格納され、「物理ブロックアドレス」欄８３Ｂには、そのフラッシュメモリモジュール３Ａ〜３Ｐにおけるそのデータが格納された物理ブロックの物理アドレスが格納される。また「制御フラグ」欄８３Ｃには、後述のようにそのエントリについて処理を行ったか否かを判定するための制御フラグが格納され、「論理ブロックアドレス」欄８３Ｄには、かかるデータが格納された物理ブロックに対応付けられた論理ブロックの論理アドレスが格納される。
【００８３】
なお、ハッシュ値管理テーブル８２において、同一のハッシュ値が複数の物理ブロックの物理アドレスに対応する場合がある。またハッシュ値毎に複数の論理ブロックの論理アドレスが格納される場合がある。
【００８４】
物理ブロック管理テーブル８４は、そのフラッシュメモリモジュール３Ａ〜３Ｐ内の物理ブロックごとの使用度及び重複度等を管理するためのテーブルであり、「物理ブロックアドレス」欄８５Ａ、「使用度」欄８５Ｂ、「重複度」欄８５Ｃ及び「論理アドレス格納領域の空き」欄８５Ｄから構成される。
【００８５】
そして「物理ブロックアドレス」欄８５Ａには、そのフラッシュメモリモジュール３Ａ〜３Ｐ内の各物理ブロックの物理アドレスが格納され、「使用度」欄８５Ｂ及び「重複度」欄８５Ｃには、その物理ブロックの現在の使用度及び重複度がそれぞれ格納される。また「論理アドレス格納領域の空き」欄に８５Ｄは、その物理ブロックの論理アドレス格納領域６６（図６）に格納可能な論理アドレスの残数が格納される。この残数は、例えば図６に示すように論理アドレス格納領域６６に格納可能な論理アドレス数が最大８個の場合、“８”と使用度との差となる。
【００８６】
図１２は、本実施の形態のストレージ装置１におけるデータ書込み処理に関するフラッシュメモリモジュール３Ａ〜３Ｐのプロセッサ５０（図４）の処理内容を示す。本実施の形態においては、フラッシュメモリチップ５８へのデータの書込みとデータ重複排除処理とを同時に実行する点を特徴の１つとしている。
【００８７】
すなわちプロセッサ５０は、ストレージコントローラ２から書込みコマンド及び書込み対象のデータ（以下、これを書込みデータと呼ぶ）を受信すると、この図１２に示すデータ書込み処理を開始し、その書込みデータに対するハッシュ値をハッシュ値管理テーブル８２（図１０）上で検索する（ＳＰ１）。
【００８８】
この場合において、上述のように書込みデータのハッシュ値はストレージコントローラ２（図１）側及びフラッシュメモリコントローラ４１（図４）側のいずれで生成しても良く、例えば、かかるハッシュ値をストレージコントローラ２側で生成する場合には、プロセッサ５０は、ストレージコントローラ２から書込みデータと共にハッシュ値を受信し、このハッシュ値をハッシュ値管理テーブル８２上で検索する。また、かかるハッシュ値をフラッシュメモリモジュール３Ａ〜３Ｐ側内で生成する場合には、その書込みデータからハッシュ値を計算し、このハッシュ値をハッシュ値管理テーブル８２上で検索する。
【００８９】
続いてプロセッサ５０は、ステップＳＰ１の検索結果に基づいて、かかる書込みデータに対するハッシュ値と一致するハッシュ値がハッシュ値管理テーブル８２に登録されているか否かを判断する（ＳＰ２）。
【００９０】
この判断において否定結果を得ることは、その書込みデータと同一と思われるデータが未だ自フラッシュメモリモジュール内に書き込まれていないことを意味する。従って、この場合にはデータ重複排除処理を行う必要がない。かくして、このときプロセッサ５０は、アドレス変換テーブル８０における書込みデータの書込み先として指定された論理ブロックに対応するエントリの書込み済みフラグが「１」であるか否かを判断する（ＳＰ３）。
【００９１】
プロセッサ５０は、この判断において否定結果を得ると、アドレス変換テーブル８０を参照して、書込みデータを書込み先として指定された論理ブロックと対応付けられた物理ブロックに書き込む。またプロセッサ５０は、これと併せてかかる論理ブロックの論理アドレスや、当該書込みデータのハッシュ値などの必要な情報をその物理ブロックの管理情報格納領域６３（図５）に書き込み（ＳＰ４）、この後ステップＳＰ８に進む。
【００９２】
これに対してプロセッサ５０は、かかる判断において肯定結果を得ると、物理ブロック管理テーブル８４を参照して、その論理ブロックに未使用の物理ブロックを割り当て、書込みデータをその物理ブロックに書き込む（ＳＰ５）。
【００９３】
続いてプロセッサ５０は、それまで書込みデータの書込み先として指定された論理ブロックに対応付けられていた物理ブロックの管理情報格納領域６３（図５）の論理アドレス格納領域６６（図６）に格納されている当該論理ブロックの論理アドレスを“０”で上書きすることにより無効化し（ＳＰ６）、さらに物理ブロック管理テーブル８４のその物理ブロックに対応するエントリの重複度を“１”だけ減らす（ＳＰ７）。
【００９４】
次いでプロセッサ５０は、書込みデータの書込み先として指定された論理ブロックと、ステップＳＰ５において書込みデータを書き込んだ物理ブロックとを対応付けたエントリをアドレス変換テーブル８０に登録すると共に、そのエントリにおける書込み済みフラグを“１”に設定する（ＳＰ８）。
【００９５】
その後、プロセッサ５０は、ステップＳＰ５において未使用の物理ブロックに書き込んだ書込みデータのハッシュ値、その物理ブロックの物理アドレス、その物理ブロックに対応付けられている論理ブロックの論理アドレス等の情報からなる新たなエントリをハッシュ値管理テーブル８２に登録する。またプロセッサ５０は、物理ブロック管理テーブル８４におけるその物理ブロックに対応するエントリの論理アドレス格納領域６６の空き数として「７」を設定すると共に、当該エントリの使用度及び重複度をそれぞれ「１」に設定し（ＳＰ９）、この後このデータ書込み処理を終了する。
【００９６】
これに対してプロセッサ５０は、ステップＳＰ２の判断において肯定結果を得た場合、データ重複排除処理を開始し、まず、書込みデータの書込み先の論理ブロックを対応付ける物理ブロックとして、ステップＳＰ２において検出したハッシュ値が同じ既書込みデータが格納された物理ブロックを選択する。この際、プロセッサ５０は、かかるハッシュ値がハッシュ値管理テーブル８２上において複数の物理ブロックに対応している場合において、書込みデータの書込み先論理ブロックに対応する物理ブロックが有る場合は、書込み先論理ブロックに対応する物理ブロックを選択し、書込み先論理ブロックに対応する物理ブロックが無い場合は、物理ブロック管理テーブル８４を参照して、当該複数の物理ブロックの中から使用度が最小の物理ブロックを選択する（ＳＰ１０）。
【００９７】
続いてプロセッサ５０は、そのとき書き込み予定の書込みデータと、ステップＳＰ１０において選択した物理ブロックに書き込まれている既書込みデータとを１ビットずつ比較することにより、これらが完全に一致するか否かを判断する（ＳＰ１１）。なお、ハッシュ値の一致、不一致のみでデータの一致、不一致が判断できる場合は、このステップＳＰ１１を省略しても良い。
【００９８】
そしてプロセッサ５０は、この判断において否定結果を得るとステップＳＰ３に進み、これに対して肯定結果を得ると、物理ブロック管理テーブル８４を参照して、かかる既書込みデータが書き込まれた物理ブロックの使用度が、物理ブロックの論理アドレス格納領域８８に格納可能な論理アドレスの最大数ｎ（ここでは“８”）未満であるか否かを判断する（ＳＰ１２）。
【００９９】
プロセッサ５０は、この判断において否定結果を得るとステップＳＰ３に進み、これに対して肯定結果を得ると、当該物理ブロックの管理情報格納領域６３（図５）の論理アドレス格納領域６６（図６）に、当該書込みデータの書込み先として指定された論理ブロックの論理アドレスが格納されているか否かを判断する（ＳＰ１３）。
【０１００】
この判断において肯定結果を得ることは、当該物理ブロックに既に当該書込みデータと同じ書込みデータが書き込まれていることを意味する。かくして、このときプロセッサ５０は、書込みデータをその物理ブロックに書き込むことなく、このデータ書込み処理を終了する。
【０１０１】
また、ステップＳＰ１３の判断において否定結果を得ると、プロセッサ５０は、データ重複排除のため、かかるステップＳＰ１０において選択した物理ブロックの管理情報格納領域６３の論理アドレス格納領域６６に当該書込みデータの書込み先として指定された論理ブロックの論理アドレスを追記すると共に、これに応じてハッシュ値管理テーブル８２を更新する（ＳＰ１４）。
【０１０２】
またプロセッサ５０は、書込みデータの書込み先として指定された論理ブロックの論理アドレス及びステップＳＰ１０で選択した物理ブロックの物理アドレスのエントリをアドレス変換テーブル８０に登録すると共に、そのエントリにおける書込み済みフラグの値を“１”に設定する（ＳＰ１５）。
【０１０３】
さらにプロセッサ５０は、ステップＳＰ１０で選択した物理ブロックと対応する物理ブロック管理テーブル８４上のエントリにおける論理アドレス格納領域６６の空き数を１減らすと共に、当該エントリの使用度及び重複度をそれぞれ１ずつ増やし（ＳＰ１６）、この後このデータ書込み処理を終了する。
【０１０４】
一方、図１３は、かかるデータ書込み処理とは別個に行われるリクラメーション処理に関するフラッシュメモリモジュール３Ａ〜３Ｐのプロセッサ５０の処理内容を示す。このリクラメーション処理は、物理ブロックの使用度と重複度の差によって当該物理ブロックに対するリクラメーションを実行するか否かを判定する点を特徴とする。
【０１０５】
そしてストレージコントローラ２はアイドル状態のフラッシュメモリモジュール３Ａ〜３Ｐを検出すると、そのフラッシュメモリモジュール３Ａ〜３Ｐにリクラメーションの実行命令を発行し、この実行命令を受信したフラッシュメモリモジュール３Ａ〜３Ｐのプロセッサ５０が、この図１３に示すリクラメーション処理をＲＡＭ５３に格納された対応する制御プログラムに従って実行する。
【０１０６】
すなわちプロセッサ５０は、ストレージコントローラ２からリクラメーションの実行命令が与えられると、リクラメーション処理を開始し、まず、物理ブロック管理テーブル８４を参照して、最も小さい物理アドレスに物理アドレスポインタをセットする（ＳＰ２０）。
【０１０７】
続いてプロセッサ５０は、物理ブロック管理テーブル８４を参照して、そのとき物理ブロックポインタが指し示す物理ブロックの使用度が“０”よりも大きく（その物理ブロックが未使用でなく）、かつその物理ブロックの使用度と重複度との差分の値が予め設定された閾値よりも大きい（その物理ブロックの論理アドレス格納領域６６に格納された論理アドレスのうちの無効化された論理アドレス（“０”が上書きされた論理アドレス）の数がかかる閾値よりも多い）か否かを判断する（ＳＰ２１）。
【０１０８】
プロセッサ５０は、この判断において否定結果を得るとステップＳＰ２７に進み、これに対して肯定結果を得ると、その物理ブロックの重複度が“０”であるか否かを判断する（ＳＰ２２）。
【０１０９】
この判断において肯定結果を得ることは、その物理ブロックの論理アドレス格納領域６６に有効な論理アドレス（“０”が上書きされていない論理アドレス）が存在しない、つまり、その物理ブロックに格納されていた書込みデータは既に更新されて他の物理ブロックに格納されていることを意味する。かくして、このときプロセッサ５０は、ステップＳＰ２４に進む。
【０１１０】
これに対して、かかる判断において否定結果を得ることは、その物理ブロックの論理アドレス格納領域６６に有効な論理アドレスが存在する（その物理ブロックに格納されているデータは未だ更新されていない有効なデータである）ことを意味する。かくして、このときプロセッサ５０は、その物理ブロックに格納されている書込みデータを未使用の物理ブロックにコピーする。プロセッサ５０は、このコピー先物理ブロックとして、消去回数が少ない未使用物理ブロックを選択する。またこのときプロセッサ５０は、コピー元の物理ブロックの論理アドレス格納領域６６に格納されていた論理アドレスのうちの有効な論理アドレスのみをコピー先の物理ブロックの論理アドレス格納領域６６にコピーする（ＳＰ２３）。
【０１１１】
続いてプロセッサ５０は、アドレス変換テーブル８０の対応するエントリの物理アドレスをコピー先の物理ブロックの物理アドレスに書き換えると共に、ハッシュ値管理テーブル８２の対応するエントリにおける物理アドレスをコピー先の物理ブロックの物理アドレスに書き換え（ＳＰ２４）、この後、かかるコピー元の物理ブロックから当該物理ブロックに書き込まれた書込みデータを消去する（ＳＰ２５）。
【０１１２】
次いでプロセッサ５０は、物理ブロック管理テーブル８４におけるコピー元の物理ブロックのエントリを初期化する（ＳＰ２６）。具体的には、プロセッサ５０は、物理ブロック管理テーブル８４におけるコピー元の物理ブロックのエントリについて、使用度及び重複度を共に“０”とし、さらに論理アドレス格納領域６６の空き数を“８”に戻す。
【０１１３】
この後、プロセッサ５０は、物理ブロック管理テーブル８４を参照して、物理ブロックポインタが、物理アドレスが最後の物理ブロックの当該物理アドレスを指し示しているか否かを判断する（ＳＰ２７）。
【０１１４】
プロセッサ５０は、かかる判断において否定結果を得ると、物理ブロック管理テーブル８４を参照して、物理アドレスポインタを、当該物理アドレスポインタがそのとき指し示していた物理アドレスの次の物理アドレスにセットする。ただし、この際、ステップＳＰ２３においてコピー先して選択された物理ブロックの物理アドレスについては対象外とする（ＳＰ２８）。
【０１１５】
そしてプロセッサ５０は、この後ステップＳＰ２７において肯定結果を得るまで、ステップＳＰ２１〜ステップＳＰ２８の処理を繰り返す。この結果、そのフラッシュメモリモジュール３Ａ〜３Ｐ内の物理ブロックのうちのステップＳＰ２１における条件を満たす物理ブロックに対するリクラメーション処理が順次行なわれることになる。
【０１１６】
そしてプロセッサ５０は、やがて該当する全ての物理ブロックに対するリクラメーションが終了することによりステップＳＰ２７において肯定結果を得ると、このリクラメーション処理を終了する。
【０１１７】
次に、本実施の形態のデータ重複排除処理がフラッシュメモリの書換え寿命に与える効果について説明する。まず、データ重複排除処理を行わない場合に、フラッシュメモリの物理ブロックに格納されているデータの消去が必要となる回数Ｅ１は、次式
【数５】
0005026213.tif 000002
となる。一方、データの重複率をｍとして、データ重複排除処理を行った場合に、フラッシュメモリの物理ブロックに格納されたデータの消去が必要となる割合Ｅ２は、次式
【数６】
0005026213.tif 000003
のように表すことができる。
【０１１８】
書込みデータのサイズが十分に大きいと仮定して、Ｅ２の第２項の“＋１”を無視すると、データ重複排除により物理ブロックに格納されたデータの消去回数が（１−ｍ）倍になることになる。つまり、データ重複排除によりフラッシュメモリの書換え寿命が１／（１−ｍ）倍に増加する。例えば平均５０％重複しているデータを書き込むと、媒体寿命が約２倍に延びることになる。また、重複データは実際には物理ブロックへの書込みを行わず、論理アドレスを追加するだけであるため、書換え時間が短縮し、書込み性能が向上する。
【０１１９】
ただし正確には、物理ブロック毎に設けた管理情報格納領域６６（図５）のオーバーヘッドが書換え寿命延命効果に与える影響を考慮する必要がある。１２８ｋＢブロックサイズ当たりに５１２Ｂの管理領域を確保すると、データ重複排除による媒体延命効果が５１２Ｂ／１２８ｋＢ＝約０．４％低下する。
【０１２０】
以上のように本実施の形態によるストレージ装置では、データ重複排除技術を用いたことにより、フラッシュメモリの長寿命化を図ることができることに加え、物理ブロックごとに、使用度及び重複度を管理し、使用度及び重複度の差が閾値を超えたときにその物理ブロックに対するリクラメーションを実行するため、リクラメーションをタイミング良く行なうことができ、かくしてデータ重複排除の効率劣化を防止して、フラッシュメモリの使用効率を向上させることができる。
【０１２１】
（２）第２の実施の形態
第２の実施の形態は、各フラッシュメモリモジュール３Ａ〜３Ｐにおいて、第１の実施の形態のようにフラッシュメモリ４２へのデータ書込み処理時にデータ重複排除処理を実行するのではなく、データ書込み処理とは別のタイミングでかかるデータ重複排除処理を実行する点と、複数の重複したデータごとにデータ重複排除処理を行う点とを特徴とする。
【０１２２】
図１４は、このような第２の実施の形態におけるデータ重複排除処理に関するフラッシュメモリモジュール３Ａ〜３Ｐのプロセッサ５０の具体的な処理内容を示している。プロセッサは、ＲＡＭ５３（図４）に格納された対応するプログラムに従って、この図１４に示すデータ重複排除処理を実行する。
【０１２３】
すなわちプロセッサ５０は、ストレージアダプタ６Ａ，６Ｂ（図１）からデータ重複排除の実行命令が与えられると、このデータ重複排除処理を開始し、まず、ハッシュ値管理テーブル８２の各エントリの制御フラグを全て“０”に設定する（ＳＰ３０）。
【０１２４】
続いてプロセッサ５０は、制御フラグが“０”に設定されている複数のエントリにおいて共通するハッシュ値を、ハッシュ値管理テーブル８２上において検索する（ＳＰ３１）。なおプロセッサ５０は、この検索において上述のようなハッシュ値を複数検出したときには、最初に検出したハッシュ値のみを選択し、このハッシュ値を対象として以下の処理を実行する。
【０１２５】
次いで、プロセッサ５０は、物理ブロック管理テーブル８４を参照して、ステップＳＰ３１の検索により検出したハッシュ値の各エントリに対応する物理ブロックの数をＸ、これら物理ブロックの論理アドレス格納領域に格納された有効な論理アドレスの数をＹとして、これらＸ及びＹが次式
【数７】
0005026213.tif 000004
及び次式
【数８】
0005026213.tif 000005
を満たすか否かを判断する（ＳＰ３２）。ここで、Ｙはこれら物理ブロックの重複度の合計として求めることができる。
【０１２６】
ここで、ｎは物理ブロックの論理アドレス格納領域６６（図６）に格納できる論理アドレスの最大値（ここでは“８”）であり、int（Ｙ／ｎ）は、Ｙ／ｎよりも小さく、かつＹ／ｎに最も近い整数を表す。従って、int（Ｙ／ｎ）＋１はデータ重複排除処理後の使用物理ブロック数であるので、（８）式の左辺はデータ重複排除処理の効果を表す。
【０１２７】
この判断において否定結果を得ることは、制御フラグが“０”に設定されている複数のエントリにおいて共通するハッシュ値が存在しないか、又はかかるハッシュ値は存在するものの、データ重複排除処理を行ってもその効果として大きな効果を見込めないことを意味する。かくして、このときプロセッサ５０は、このデータ重複排除処理を終了する。
【０１２８】
これに対して、ステップＳＰ３２の判断において肯定結果を得ることは、制御フラグが“０”に設定されている複数のエントリにおいて共通するハッシュ値が存在し、かつデータ重複排除処理を行った場合に大きな効果を見込めることを意味する。
【０１２９】
かくして、このときプロセッサ５０は、ステップＳＰ３１において検出した複数のエントリの各物理ブロックに格納されている書込みデータをそれぞれ1ビットずつ比較することにより、かかる複数のエントリの各物理ブロックにそれぞれ格納されている書込みデータが全て同一であるか否かを判断する（ＳＰ３３）。なお、ハッシュ値のみの一致でデータ一致が保証できる場合は、このステップＳＰ３３を省略しても良い。
【０１３０】
そしてプロセッサ５０は、この判断において否定結果を得ると、これら各エントリの物理ブロックに格納された書込みデータに対するデータ重複排除処理を終了し、これら各エントリの制御フラグをいずれも“１”に変更した後（ＳＰ３４）、ステップＳＰ３１に戻る。
【０１３１】
これに対してプロセッサ５０は、かかる判断において肯定結果を得ると、ステップＳＰ３１において検出した複数のエントリの各物理ブロックに格納されている同じ書込みデータを、int（Ｙ／ｎ）＋１個の未使用の物理ブロックにコピーする（ＳＰ３５）。ここでプロセッサ５０は、コピー先物理ブロックとして、消去回数が少ない未使用物理ブロックを選択する。
【０１３２】
続いてプロセッサ５０は、書込みデータのコピー先の各物理ブロックにおける論理アドレス格納領域６６（図６）に、コピー元の各物理ブロックにそれぞれ対応付けられた各論理ブロックの論理アドレスを分散して格納する（ＳＰ３６）。
【０１３３】
次いでプロセッサ５０は、アドレス変換テーブル８０の対応する各エントリ、つまりコピー元の物理ブロックに対応付けられた各論理ブロックとそれぞれ対応するエントリの物理アドレスを、ステップＳＰ３６においてその論理ブロックの論理アドレスが論理アドレス格納領域６６に格納された物理ブロックの物理アドレスに更新する。またプロセッサ５０は、ハッシュ値管理テーブル８２上のステップＳＰ３５においてコピーした書込みデータのハッシュ値に対応する各エントリの制御フラグをそれぞれ“１”に更新すると共に、これと併せてかかるエントリの物理アドレス、又はかかるエントリの物理アドレス及び論理アドレスを、ステップＳＰ３５及びステップＳＰ３６の処理に応じて更新する（ＳＰ３７）。
【０１３４】
続いてプロセッサ５０は、ステップＳＰ３５における書込みデータのコピー元の各物理ブロックについて、当該物理ブロックの論理アドレス格納領域６６に格納されている全ての論理アドレス上に“０”を上書きすることにより、これら全ての論理アドレスを無効化する。さらにプロセッサ５０は、物理ブロック管理テーブル８４におけるこれらコピー元の各物理ブロックの重複度を“０”に書き換える（ＳＰ３８）。
【０１３５】
次いでプロセッサ５０は、ステップＳＰ３１に戻り、この後同様の処理を繰り返す（ＳＰ３１〜ＳＰ３８−ＳＰ３１）。そしてプロセッサ５０は、やがてステップＳＰ３２において否定結果を得ると、このデータ重複処理を終了する。
【０１３６】
以上のように本実施の形態によれば、データ重複排除処理をデータ書込みとは異なる、例えばフラッシュメモリモジュールがアイドル状態のときなどのタイミングで行うため、第１の実施の形態により得られる効果に加えて、例えばデータ書込み処理が多数重なったときにデータ重複排除処理を実行することに起因してデータ書込み処理の処理速度が低減することを未然かつ有効に防止することができるという格別な効果をも得ることができる。
【０１３７】
（３）第３の実施の形態
第３の実施の形態は、第２の実施の形態のように同一のデータが格納された複数の物理ブロックについてまとめてデータ重複排除処理するのではなく、同一のデータが格納された物理ブロックを１対ずつデータ重複排除処理してゆく点を特徴とする。
【０１３８】
図１５は、このような第３の実施の形態におけるデータ重複排除処理に関するフラッシュメモリモジュール３Ａ〜３Ｐのプロセッサ５０の具体的な処理内容を示している。プロセッサ５０は、ＲＡＭ５３（図４）に格納された対応する制御プログラムに従って、この図１５に示すデータ重複排除処理を実行する。
【０１３９】
すなわちプロセッサ５０は、ストレージアダプタ６Ａ，６Ｂ（図１）からデータ重複排除の実行命令が与えられると、データ重複排除処理を開始し、まず、ハッシュ値管理テーブル８２の各エントリの制御フラグを全て“０”に設定する（ＳＰ４０）。
【０１４０】
続いてプロセッサ５０は、それぞれ制御フラグが“０”に設定されている複数のエントリにおいて共通するハッシュ値を、ハッシュ値管理テーブル８２において検索する（ＳＰ４１）。なおプロセッサ５０は、この検索において上述の条件（それぞれ制御フラグが“０”に設定されている複数のエントリにおいて共通する）を満たすハッシュ値を複数検出したときには、最初に検出したハッシュ値を対象として以下の処理を実行する。
【０１４１】
また以下においては、ステップＳＰ４１の検索により検出したハッシュ値の各エントリに対応する物理ブロックのうちの物理ブロック管理テーブル８４上に登録された論理アドレス格納領域６６の空き数が最大の物理ブロックを第１の対象物理ブロックと呼び、ステップＳＰ４１の検索により検出したハッシュ値の各エントリに対応する物理ブロックのうちの論理アドレス格納領域６６の空き数が最小であって、かつ重複度が最小のブロックを第２の対象物理ブロックと呼ぶものとする。
【０１４２】
次いで、プロセッサ５０は、物理ブロック管理テーブル８４を参照して、同じハッシュ値を持ち制御フラグが“０”である複数のエントリが存在し、且つ第１の対象物理ブロックにおける論理アドレス格納領域６６の空き数をＸ、第２の対象物理ブロックの重複度をＹとして、第１の対象物理ブロックにおける論理アドレス格納領域６６の空き領域に、第２の対象物理ブロックにおける論理アドレス格納領域６６に格納されている論理アドレスを追記可能か（Ｘ≧Ｙ）否かを判断する（ＳＰ４２）。
【０１４３】
プロセッサ５０は、この判断において否定結果を得ると、再度、ステップＳＰ４１において上述した条件を満たすハッシュ値を、ハッシュ値管理テーブル８２上において検索することにより、当該条件を満たす他のハッシュ値が存在するか否かを判断する（ＳＰ４３）。そしてプロセッサ５０は、この判断において否定結果を得ると、このデータ重複排除処理を終了する。
【０１４４】
これに対してプロセッサ５０は、かかる判断において肯定結果を得ると、ステップＳＰ４２に戻り、この後ステップＳＰ４２において肯定結果を得又はステップＳＰ４３において否定結果を得るまで同様の処理を繰り返す（ＳＰ４２−ＳＰ４３−ＳＰ４２）。
【０１４５】
そしてプロセッサ５０は、やがてステップＳＰ４２において肯定結果を得ると、第１の対象物理ブロックに格納されているデータと、第２の対象物理ブロックに格納されているデータとをそれぞれ1ビットずつ比較することにより、かかる複数のエントリの各物理ブロックにそれぞれ格納されているデータが同一であるか否かを判断する（ＳＰ４４）。なお、ハッシュ値のみの一致でデータ一致が保証できる場合は、このステップＳＰ４４を省略しても良い。
【０１４６】
プロセッサ５０は、この判断において肯定結果を得ると、図１６に示すように、第２の対象物理ブロックの論理アドレス格納領域６６に格納されている全ての論理アドレスを第１の対象物理ブロックの論理アドレス格納領域６６にコピーする（ＳＰ４５）。なお、この図１６において、第１及び第２の対象物理ブロック５９Ａ，５９Ｂに書き込まれているデータは共に「Ａ」である。そしてこの図１６は、第２の対象物理ブロック５９Ｂの論理アドレス格納領域６６に格納されている「Ｙ」という論理アドレスを、第１の対象物理ブロックの論理アドレス格納領域６６の空き領域にコピーするときの様子を示している。プロセッサ５０は、ステップＳＰ４４において否定結果を得ると、ステップＳＰ４７へ処理を進める。
【０１４７】
次いで、プロセッサ５０は、第２の対象物理ブロックの論理アドレス格納領域６６に格納されている全ての論理アドレス上に“０”を上書きするようにして、これら論理アドレスを無効化する。またプロセッサ５０は、物理ブロック管理テーブル８４の第２の対象物理ブロックに対応するエントリの重複度を“０”に変更する。さらにプロセッサ５０は、アドレス変換テーブル８０の第２の対象物理ブロックに対応するエントリの論理アドレスを全て消去すると共に、この消去した全ての論理アドレスを第１の対象物理ブロックに対応するエントリの論理アドレスとしてアドレス変換テーブル８０に追記する（ＳＰ４６）。
【０１４８】
さらにプロセッサ５０は、ハッシュ値管理テーブル８２において、第２の対象物理ブロックに対応するエントリの制御フラグの値を“１”に変更すると共に、当該エントリにおける物理アドレス及び論理アドレスを更新し、さらに物理ブロック管理テーブル８４において、第１の対象物理ブロックに対応するエントリの使用度、重複度及び論理アドレス格納領域６６の空き数をそれぞれ更新する（ＳＰ４７）。
【０１４９】
次いで、プロセッサ５０は、ステップＳＰ４１に戻り、この後ステップＳＰ４３において否定結果を得るまで同様の処理を繰り返す（ＳＰ４１〜ＳＰ４７−ＳＰ４１）。そしてプロセッサ５０は、やがてステップＳＰ４３において否定結果を得ると、このデータ重複排除処理を終了する。
【０１５０】
以上のように本実施の形態によれば、同一のデータが格納された物理ブロックを１対ずつデータ重複排除処理してゆくため、第１の実施の形態による効果と同等の効果を得ることができる。
【０１５１】
（４）第４の実施の形態
上述した第１〜第３の実施の形態では、物理ブロック単位でデータ重複排除処理を行う場合を説明した。これに対して、第４の実施の形態は、物理ブロックのブロックサイズより小さいデータサイズで、データ重複排除処理を行う点を特徴とする。
【０１５２】
図１７は、本実施の形態におけるフラッシュメモリモジュール３Ａ〜３Ｐにおける物理ブロック１００のデータ構造を示している。この図１７において、物理ブロック１００は、１番目からｍ番目までのページ１００（１０１Ａ〜１０１ｍ（ｍは整数））を含む。これらのページ１０１は、いずれも図６について上述したデータ部６１及び冗長部６２と同様のデータ部１０２及び冗長部１０３から構成される。
【０１５３】
本実施の形態では、２ページ単位でデータ重複排除処理を実行する場合を説明する。以下においては、データ重複排除処理を実行するページ単位（ここでは２ページ）をサブフロック１０４と呼ぶものとする。例えば物理ブロック１００は、１番目及び２番目のページ１０１Ａ，１０１Ｂからなるサブブロック１０４Ａと、３番目及び４番目のページ１０１Ｃ，１０１Ｄからなるサブブロック１０４Ｂと、ｍ−１番目及びｍ番目のページ１０１（ｍ−１），１０１ｍからなるサブブロック１０１ｈ（ｈ＝ｍ／２）とを含む。また、各サブブロック１０４Ａ〜１０４ｈには、それぞれ図４について上述した管理情報格納領域６３と同様の機能を有する管理情報格納領域１０５（１０５Ａ〜１０５ｈ）が設けられる。
【０１５４】
また以下においては、説明を簡単にするため、データの読み書き単位及びデータ重複排除処理単位をサブブロック単位とする。つまり、本実施の形態では、図９のアドレス変換テーブル８０、図１０のハッシュ値管理テーブル８２及び図１１の物理ブロック管理テーブル８４において、情報が全てサブブロック単位で管理されているものとする。サブブロック単位のデータ重複排除処理は、図１４又は図１５について上述した第２又は第３の実施の形態におけるデータ重複排除処理の説明において、「ブロック」を「サブブロック」と読み替えることにより実行可能である。
【０１５５】
ただし、リクラメーション処理に関しては、サブブロックが消去単位ではないため修正が必要である。そこで、データの読み書き単位及びデータ重複排除処理単位をサブブロック１０４とした場合のリクラメーション処理について、以下で説明する。
【０１５６】
図１８は、データの読み書き及びデータ重複排除処理の単位をサブブロック単位とした場合における、リクラメーション処理に関するフラッシュメモリモジュール３Ａ〜３Ｐのプロセッサ５０の処理内容を示している。このリクラメーション処理は、サブブロック単位とブロック単位の２段階のデータコピーを行う点を特徴としており、プロセッサ５０は、ＲＡＭ５３（図４）に格納された対応するプログラムに従って、この図１８に示すリクラメーション処理を実行する。
【０１５７】
すなわちプロセッサ５０は、ストレージコントローラ２からリクラメーションの実行命令が与えられると、リクラメーション処理を開始し、まず、物理ブロック管理テーブル（図１１参照）を参照して、物理アドレスが最も小さい物理ブロックの当該物理アドレスに物理アドレスポインタをセットする（ＳＰ５０）。
【０１５８】
続いてプロセッサ５０は、物理ブロック管理テーブル（図１１参照）を参照して、そのとき物理ブロックポインタが指し示す物理ブロック内のサブブロック１０４の使用度が“０”よりも大きく（そのサブブロック１０４が未使用でなく）、かつそのサブブロック１０４の使用度と重複度との差分の値が予め設定された閾値よりも大きい（そのサブブロック１０４の管理情報格納領域１０５内の論理アドレス格納領域に格納された論理アドレスのうちの無効な論理アドレスの数がかかる閾値よりも多い）か否かを判断する（ＳＰ５１）。
【０１５９】
プロセッサ５０は、この判断において否定結果を得るとステップＳＰ５５に進み、これに対して肯定結果を得ると、そのサブブロック１０４に格納されているデータを未使用の物理ブロック１００のサブブロック１０４にコピーする。またこのときプロセッサ５０は、コピー元のサブブロック１０４内の論理アドレス格納領域に格納されていた論理アドレスのうちの有効な論理アドレスのみをコピー先のサブブロック１０４の論理アドレス格納領域にコピーする（ＳＰ５２）。
【０１６０】
続いてプロセッサ５０は、アドレス変換テーブル（図９参照）の対応するエントリのサブブロック１０４のアドレスをコピー先のサブブロック１０４のアドレスに書き換えると共に、ハッシュ値管理テーブル（図１０参照）の対応するエントリからコピー元のサブブロック１０４に対応するエントリを削除し（ＳＰ５３）、この後、物理ブロック管理テーブルにおけるコピー元のサブブロック１０４に対応するエントリの重複度を“０”に更新する（ＳＰ５４）。
【０１６１】
この後、プロセッサ５０は、物理ブロック管理テーブルに基づいて、そのとき処理したサブブロック１０４が、そのとき対象としている物理ブロック１００内の最後のサブブロック１０４であるか否かを判断する（ＳＰ５５）。
【０１６２】
そしてプロセッサ５０は、この判断において否定結果を得ると、物理アドレスポインタをその物理ブロック１００における次のサブブロック１０４のアドレスにセットした後（ＳＰ５６）、ステップＳＰ５１に戻り、この後同様の処理を繰り返す（ＳＰ５１〜ＳＰ５６−ＳＰ５１）。
【０１６３】
そしてプロセッサ５０は、やがてそのとき対象としている物理ブロック１００内の全てのサブブロック１０４について同様の処理を終えることによりステップＳＰ５５において肯定結果を得ると、その物理ブロック１００内の各サブブロック１０４の使用度の合計が０よりも大きく、かつ各サブブロック１０４の使用度の合計から重複度の合計を引いた値が所定の閾値よりも大きいか否かを判断する（ＳＰ５７）。
【０１６４】
プロセッサ５０は、この判断において否定結果を得るとステップＳＰ６２に進み、これに対して肯定結果を得ると、図１３について上述したリクラメーション処理のステップＳＰ２３〜ステップＳＰ２６と同様にして、その物理ブロック１００に格納されているデータを未使用の物理ブロック１００にコピーすると共に、これに応じてアドレス変換テーブル、ハッシュ値管理テーブル及び物理ブロック管理テーブルを更新する（ＳＰ５９〜ＳＰ６１）。
【０１６５】
この後、プロセッサ５０は、物理ブロック管理テーブルを参照して、物理ブロックポインタが、物理アドレスが最後の物理ブロックの物理アドレスを指し示しているか否かを判断する（ＳＰ６２）。
【０１６６】
プロセッサ５０は、かかる判断において否定結果を得ると、物理ブロック管理テーブルを参照して、物理アドレスポインタを、当該物理アドレスポインタがそのとき指し示していた物理アドレスの次の物理アドレスにセットする。ただし、この際、ステップＳＰ５２、ＳＰ５８においてコピー先して選択された物理ブロック１００の物理アドレスについては対象外とする（ＳＰ６３）。
【０１６７】
次いでプロセッサ５０は、ステップＳＰ５１に戻り、この後ステップＳＰ６２において肯定結果を得るまで、ステップＳＰ５１〜ステップＳＰ６３の処理を繰り返す。この結果、そのフラッシュメモリモジュール３Ａ〜３Ｐ内の物理ブロック１００及び当該物理ブロック１００内のサブブロック１０４のうちのステップＳＰ５７の条件を満たす物理ブロック１００及びステップＳＰ５１の条件を満たすサブブロック１０４に対するリクラメーション処理が順次行なわれることになる。
【０１６８】
そしてプロセッサ５０は、やがて該当する全ての物理ブロック１００及びサブブロック１０４に対するリクラメーションが終了することによりステップＳＰ６２において肯定結果を得ると、このリクラメーション処理を終了する。
【０１６９】
以上のように本実施の形態によれば、物理ブロックのブロックサイズより小さいデータサイズでデータ重複排除処理を行うため、第１〜第３の実施の形態に比して、より一段とデータ重複排除の効率を向上させることができる。
【０１７０】
（５）第５の実施の形態
まず、ＲＡＩＤ（Redundant Array of Inexpensive Disks）のストライピング（データ分割）動作について説明する。
【０１７１】
ＲＡＩＤでは、図１９に示すように、データがストライプ１１０Ａ，１１０Ｂ，……と呼ばれるデータ単位に分割され、このストライプ１１０Ａ，１１０Ｂ，……がさらにストライプユニット１１０Ａ１〜１１０Ａ３，１１０Ｂ１〜１１０Ｂ３，……と呼ばれるデータ単位に分割される。そして同じストライプ１１０Ａ，１１０Ｂ，……を構成する各ストライプユニット１１０Ａ１〜１１０Ａ３，１１０Ｂ１〜１１０Ｂ３，……は、それぞれＲＡＩグループ１１１を構成する複数の記憶媒体１１２Ａ〜１１２Ｄに分散してかつ同じタイミングで読み書きされる。なお、以下においては、かかる記憶媒体１１２Ａ〜１１２Ｄがフラッシュメモリモジュールであるものとして説明する。
【０１７２】
ところで、ＲＡＩＤには冗長化の方法やストライピングの大きさなどによって、ＲＡＩＤ０、ＲＡＩＤ１、ＲＡＩＤ１＋０など複数のレベルが定義されている。そして、例えばＲＡＩＤ５では、図１９に示すように、同じストライプ１１０Ａ，１１０Ｂ，……を構成するストライプユニット１１０Ａ１〜１１０Ａ３，１１０Ｂ１〜１１０Ｂ３，……から生成したパリティがＲＡＩＤグループ１１１を構成する各フラッシュメモリモジュール１１２Ａ〜１１２Ｄに分散して記憶される。この結果、例えばストライプ１１０Ａとストライプ１１０Ｂとが全く同じデータを有していたとしても、フラッシュメモリモジュール内では重複するデータが無いことになる。つまり、ストライプユニット１１０Ａ１〜１１０Ａ３，１１０Ｂ１〜１１０Ｂ３，……毎にデータが重複するような場合では、フラッシュメモリモジュール１１２Ａ〜１１２Ｄ毎にデータ重複排除処理を行っても効果が期待できない。
【０１７３】
一方、ＲＡＩＤグループ１１１全体で見た場合、重複データは複数のフラッシュメモリモジュール１１２Ａ〜１１２Ｄに跨がって存在する。この重複状態を排除するためには、ＲＡＩＤグループ１１１全体をアクセス可能なストレージコントローラがデータ重複排除処理を行う必要がある。
【０１７４】
そこで、本実施の形態では、ストレージ装置１のストレージコントローラ２（図１）が、ストライプユニットサイズ以上のデータ処理単位、かつ複数のフラッシュメモリモジュール３Ａ〜３Ｐ（図１）に跨がる範囲で、データ重複排除処理を実行するよう制御する。また本実施の形態では、フラッシュメモリモジュール３Ａ〜３Ｐにおいて、ストライプユニットサイズ以下のデータ処理単位でデータ重複排除処理を実行する。このように、階層的に異なるデータ処理単位でデータ重複排除処理を実行することにより、データが重複する可能性が高くなるので、データ重複排除効果が向上する。
【０１７５】
具体的には、ストレージコントローラ２が、ネットワーク１２Ａ又はネットワーク１２Ｂを介してフラッシュメモリモジュール３Ａ〜３Ｐに対し、フラッシュメモリモジュール３Ａ〜３Ｐ毎に実行するデータ重複排除処理のデータ処理単位又はストライプユニットサイズを必要に応じて指示する。これにより、ストレージコントローラ２とフラッシュメモリモジュール３Ａ〜３Ｐにおけるデータ重複排除の連携が可能となる。
【０１７６】
なおデータ重複排除の階層制御の他の例としては、ストレージコントローラ２が、フラッシュメモリモジュール３Ａ〜３Ｐ毎にそのフラッシュメモリモジュール３Ａ〜３Ｐ内に存在する各物理ブロックの使用度や重複度の統計情報をネットワーク１２Ａ又はネットワーク１２Ｂを介してモニタし、データ重複排除の効果がないフラッシュメモリモジュール３Ａ〜３Ｐに対してはデータ重複排除処理を停止するように制御するようにしてもよい。
【０１７７】
また、ストレージコントローラ２がネットワーク１２Ａ，１２Ｂを介してフラッシュメモリモジュール３Ａ〜３Ｐ毎の重複度と未使用の物理ブロック数の統計情報を調査し、該重複度と未使用の物理ブロック数との積を計算して、フラッシュメモリモジュール３Ａ〜３Ｐ毎に今後格納可能な容量を予測しても良い。
【０１７８】
図２０は、上述のような本実施の形態によるデータ重複排除処理を行うためにストレージコントローラ２が保持し、管理するデータ重複排除管理テーブル１２０を示す。この図２０からも明らかなように、データ重複排除管理テーブル１２０は、「論理ユニット番号」欄１２０Ａ、「論理ブロックアドレス」欄１２０Ｂ、「上位制御」欄１２０Ｃ及び「下位制御」欄１２０Ｄから構成される。また「論理ブロックアドレス」欄１２０Ｂは、「開始論理ブロックアドレス」欄１２０ＢＡ及び「最終論理ブロックアドレス」欄１２０ＢＢから構成され、「上位制御」欄１２０Ｃは、「上位制御フラグ」欄１２０ＣＡ及び「上位制御サイズ」欄１２０ＣＢから構成される。また「下位制御」欄１２０Ｄは、「下位制御フラグ」欄１２０ＤＡ及び「下位制御サイズ」欄１２０ＤＢから構成される。
【０１７９】
そして「論理ユニット番号」欄１２０Ａには、そのストレージコントローラ２の配下に存在する各論理ユニットの論理ユニット番号が格納され、「開始論理ブロックアドレス」欄１２０ＢＡ及び「最終論理ブロックアドレス」欄１２０ＢＢには、その論理ユニットにおいてデータ重複排除処理を行う最初の論理ブロックの論理アドレス及び最後の論理ブロックの論理アドレスがそれぞれ格納される。これらデータ重複排除処理を行う最初の論理ブロックの論理アドレス及び最後の論理ブロックの論理アドレスは、保守端末１０（図１）を介してユーザが設定する。
【０１８０】
また「上位制御フラグ」欄１２０ＣＡには、その論理ユニットについてストレージコントローラ２がデータ重複排除処理を実行するか否かを表すフラグ（以下、これをデータ重複排除処理実行可否フラグと呼ぶ）が格納され、「上位制御サイズ」欄１２０ＣＢには、かかるデータ重複排除処理を実行する際のデータ処理単位（以下、これをデータ重複排除処理実行単位と呼ぶ）が格納される。これら「上位制御フラグ」欄１２０ＣＡ及び「上位制御サイズ」欄１２０ＣＢに格納するフラグやデータ処理単位も保守端末１０（図１）を介してユーザが設定する。
【０１８１】
さらに「下位制御フラグ」欄１２０ＤＡには、その論理ユニットが対応付けられた物理ユニットを有するフラッシュメモリモジュール３Ａ〜３Ｐにおいてデータ重複排除処理を実行するか否かを表すフラグが格納され、「上位制御サイズ」欄１２０ＤＢには、かかるフラッシュメモリモジュール３Ａ〜３Ｐにおいてデータ重複排除処理を実行する際のデータ処理単位が格納される。これら「上位制御フラグ」欄１２０ＤＡ及び「上位制御サイズ」欄１２０ＤＢに格納するフラグやデータ処理単位も保守端末１０（図１）を介してユーザが設定する。
【０１８２】
そしてストレージコントローラ２は、このデータ重複排除管理テーブル１２０に基づき、必要に応じて対応するフラッシュメモリモジュール３Ａ〜３Ｐを制御することにより、ストライプユニットサイズ以上のデータ処理単位、かつ複数のフラッシュメモリモジュール３Ａ〜３Ｐに跨がる範囲でデータ重複排除処理を実行する。
【０１８３】
なお、データ重複排除処理の実行可否の設定例としては、容量効率よりも冗長性が求められるデータに関しては、データ重複排除処理を実行しないように設定することがある。あるいは、容量効率よりも読み書きのスループットを重視する場合や、アクセスが集中するデータに対しては、重複排除処理を実行せずに複数の物理媒体に分散してデータが格納されるように制御してもよい。
【０１８４】
以上のように本実施の形態では、ストライプユニットサイズ以上のデータ処理単位、かつ複数のフラッシュメモリモジュール３Ａ〜３Ｐに跨がる範囲で、データ重複排除処理を実行するため、ストレージコントローラ２とフラッシュメモリモジュール３Ａ〜３Ｐにおけるデータ重複排除の連携を可能とすることができ、かくしてより一層とデータ重複排除処理の効果を向上させることができる。
【図面の簡単な説明】
【０１８５】
【図１】第１〜第５の実施の形態のストレージ装置の構成を示すブロック図である。
【図２】第１〜第５の実施の形態のチャネルアダプタの構成を示すブロック図である。
【図３】第１〜第５の実施の形態のストレージアダプタの構成を示すブロック図である。
【図４】第１〜第５の形態のフラッシュメモリモジュールの構成を示すブロック図である。
【図５】第１〜第５の実施の形態のフラッシュメモリモジュールのブロック構成の説明に供する概念図である。
【図６】物理ブロックにおける管理情報格納領域の説明に供する概念図である。
【図７】物理アドレス及び論理アドレスの対応の説明に供する概念図である。
【図８】物理アドレス及び論理アドレスの対応の説明に供する概念図である。
【図９】アドレス変換テーブルの説明に供する概念図である。
【図１０】ハッシュ値管理テーブルの説明に供する概念図である。
【図１１】物理ブロック管理テーブルの説明に供する概念図である。
【図１２】第１の実施の形態によるデータ書き込み処理の説明に供するフローチャートである。
【図１３】第１の実施の形態によるリクラメーション処理の説明に供するフローチャートである。
【図１４】第２の実施の形態によるデータ重複排除処理の説明に供するフローチャートである。
【図１５】第３の実施の形態によるデータ重複排除処理の説明に供するフローチャートである。
【図１６】第３の実施の形態によるデータ重複排除処理の説明に供する概念図である。
【図１７】第３の実施の形態による物理ブロックのデータ構造の説明に供する概念図である。
【図１８】第４の実施の形態のリクラメーション処理の説明するフローチャートである。
【図１９】ＲＡＩＤストライピング動作の説明に供する概念図である。
【図２０】第５の実施の形態によりデータ重複排除処理管理テーブルの説明に供する概念図である。
【符号の説明】
【０１８６】
１……ストレージ装置、２……ストレージコントローラ、３……フラッシュメモリモジュール、５Ａ，５Ｂ……ストレージアダプタ、１０……保守端末、５０……プロセッサ、５３……ＲＡＭ、５４……ＲＯＭ、５９，１００……物理ブロック、６０，１０１……ページ、６３，１０５，１０５Ａ〜１０５ｈ……管理情報格納領域、６６……論理アドレス格納領域、８０……アドレス変換テーブル、８２……ハッシュ値管理テーブル、８４……物理ブロック管理テーブル、１０４，１０４Ａ〜１０４ｈ……サブブロック、１２０……データ重複排除管理テーブル。
【図１】
0005026213.tif 000006
【図２】
0005026213.tif 000007
【図３】
0005026213.tif 000008
【図４】
0005026213.tif 000009
【図５】
0005026213.tif 000010
【図６】
0005026213.tif 000011
【図７】
0005026213.tif 000012
【図８】
0005026213.tif 000013
【図９】
0005026213.tif 000014
【図１０】
0005026213.tif 000015
【図１１】
0005026213.tif 000016
【図１２】
0005026213.tif 000017
【図１３】
0005026213.tif 000018
【図１４】
0005026213.tif 000019
【図１５】
0005026213.tif 000020
【図１６】
0005026213.tif 000021
【図１７】
0005026213.tif 000022
【図１８】
0005026213.tif 000023
【図１９】
0005026213.tif 000024
【図２０】
0005026213.tif 000025