(57)【特許請求の範囲】
【請求項１】
上位装置から転送される情報を受信する第１のインターフェースと、
前記情報を一時記憶するキャッシュメモリと、
前記情報を格納するための記憶領域を有する記憶デバイスと、
前記情報を前記記憶デバイスに送信する第２のインターフェースと、
前記情報に対する制御処理を実行する制御装置と
を備えるストレージ装置であって、
前記制御装置は、
前記情報から、既に前記記憶領域に存在する重複部分を除き、残りの部分を圧縮して当該記憶領域に格納する場合、
前記情報を複数のセグメントに分けて処理する第１の処理と、
前記複数のセグメントのそれぞれが有する複数のデータの組み合わせが、規則性を持った第１のパターンであるか否かを判定する第２の処理と、
前記第１のパターンからなるセグメントの検出のみで前記重複を判定するか、或いは、前記第１のパターンからなるセグメントと前記記憶領域に記憶されているセグメントとの間で前記重複があるか否かを判定する第３の処理と、
前記第３の処理が肯定されたセグメントが、前記キャッシュメモリに占める領域を開放する第４の処理と、
前記複数のセグメントのうち、前記第３の処理が肯定されたもの以外を、複数のデータの組み合わせがランダムである第２のパターンを持ったセグメントであると判定する第５の処理と、
前記第２のパターンを持ったセグメントを前記キャッシュメモリから読み出す第６の処理と、
前記第２のパターンを持ったセグメントについて、前記第２のパターンの異同を区別するためのハッシュ値を演算する第７の処理と、
前記記憶領域に格納されている複数のセグメントそれぞれの前記ハッシュ値を登録したハッシュテーブルを参照し、前記第７の処理で得られたハッシュ値と同等のハッシュ値が前記ハッシュテーブルに存在するか否かを判定する第８の処理と、
前記第８の処理が肯定されたセグメントが、前記キャッシュメモリに占める領域を開放する第９の処理と、
前記第８処理が肯定されたセグメント以外のセグメントが前記キャッシュメモリに占める領域に記憶された情報を圧縮する第１０の処理と、
前記圧縮された情報を備え、前記キャッシュメモリから前記記憶領域へ情報を格納する際の単位であるデステージブロックを一つ又は複数生成する第１１の処理と、
前記デステージブロックを前記記憶領域に格納する第１２の処理とを実行する
ストレージ装置。
【請求項２】
前記制御装置は、
前記圧縮の処理を前記記憶デバイスに格納された前記情報を対象に行い、
前記上位装置からのアクセス頻度によって、前記圧縮処理の対象とする前記記憶デバイスの領域を選択する
請求項１記載のストレージ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージ装置に関するものである。
【背景技術】
【０００２】
従来、ストレージ装置は上位装置（ホスト）から転送された転送情報を、キャッシュメモリへ一時的に保持した後、ハードディスクなどの記憶デバイスに格納していた。近年、ストレージ装置が、転送情報とストレージ装置に既に格納されている情報との間で重複を検出し、重複していると判定した転送情報を記憶デバイスに格納しないようにする技術が提案されている。ストレージ装置が、この種の“重複情報”を記憶デバイスに格納しないことによって、物理的な記録容量を効率的に活用することができる。これにより、ストレージ装置がホストに対して見せる、見かけ上の記憶容量を増加することができる。
【０００３】
ここでの重複を検出する一つの例が、米国特許公報第6,928,526に記載されている。ストレージ装置が、転送情報をセグメント単位に処理し、セグメントに含まれるデータに対して代表値・特徴値（ハッシュ値）を計算する。次いで、ストレージ装置は、転送情報のハッシュ値と、記憶デバイスに格納されている格納情報に対するハッシュ値とを比較することによって、記憶デバイスに同一の内容の情報を書き込まないようにしている。
【０００４】
一方、ストレージの記録容量を効率的に利用できる別の方法として、データ圧縮技術が挙げられる。ストレージ装置には可逆圧縮が可能なアルゴリズムが適用される。代表的なアルゴリズムの一例として、LZ符号化が挙げられる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許公報第6,928,526号
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ストレージ装置が情報の重複を判定する際には、転送情報に含まれるデータをセグメント毎に分けて、重複を判定する。セグメントは、ストレージ装置が記憶デバイスへアクセスする際の単位であるブロック（例512バイト）の複数から構成される。１セグメントのデータ量が、数キロバイトから、数十メガバイトと小単位とされることによって、重複の検出の確率が高くなるようにすることが望ましい。
しかしながら、セグメントが増えれば、ハッシュ値の管理テーブルの容量は膨大となって、転送情報と格納情報との重複を検証するために要する時間が嵩む。また、セグメント数が多くなると、ハッシュ値を得るための演算には、より一意性の高いアルゴリズム（例えばSHA：Secure Hash Algorithm）を適用し、ハッシュ値の衝突を回避しなければならない。そのようなアルゴリズムでは演算量が多く、処理レーテンシーが増加する。
【０００７】
また、さらに、上位装置からストレージ装置への転送データは、近年特に増加傾向が著しい。これに対処するために、ストレージ装置の記憶容量も、テラバイト、ペタバイトレベルになっている。したがって、重複を検証するための演算量も増加の一途をたどっている。
【０００８】
以上のことから、ストレージ装置において、重複を高精度に判定しようとすると、そのための処理時間が増大し、ストレージ装置の上位計算機に対するI/O性能が低下するという課題があった。また、ストレージ装置が膨大な転送情報の全てを圧縮して記憶デバイスに格納しようとすると結局のところ記憶容量を効率よく利用することができないばかりか、情報の圧縮、圧縮した情報の伸長に対する処理に時間を費やすことにもなる。
【０００９】
そこで、本発明は、この課題を解決するために、ストレージ装置が、記憶デバイスの記憶容量を効率的に利用しならが、転送情報の圧縮、伸長に要する処理時間が増えないようにすることを目的とするものである。
【００１０】
さらに、本発明のその他の目的は、ストレージ装置が上位装置から転送された転送情報と記憶デバイスに格納された格納情報との間の重複の判定を高精度に行いながらも、そのための演算効率を向上することによって、重複判定のための処理時間が増えないようすることを目的とするものである。
【課題を解決するための手段】
【００１１】
前記目的を達成するために、本発明は、ストレージ装置またはそのデータ処理方法において、転送情報から、既に記憶デバイスに存在する重複部分を除き、残りの情報を圧縮して記憶デバイスに格納することによって、記憶デバイスの記憶容量を有効に活用することを特徴とするものである。
さらに、前記目的を達成する他の発明は、ストレージ装置が、転送情報を構成するデータの組み合わせのパターンに着目し、転送情報のうち、パターンが特定である情報部分を除き、残りの情報部分に対して、重複判定のための演算を実行することを特徴とするものである。
【００１２】
この発明の有用な形態は、ストレージ装置が、転送情報から、データの組み合わせが規則的なパターンで構成される固定情報を除き、データの組み合わせがランダムなパターンで構成されるランダム情報に対して、重複判定のための演算を実行することにより、重複判定をすべき対象となる情報を低減させることによって、重複判定のための処理を効率良く実行することを特徴とするものである。
【発明の効果】
【００１３】
本発明によれば、ストレージ装置が、記憶デバイスの記憶容量を効率的に利用しながら、転送情報の圧縮、伸長に要する処理時間が増えないようにすることができる。さらに、ストレージ装置が、上位装置から転送された転送情報と記憶デバイスに格納された格納情報との間の重複の判定を高精度に行いながらも、そのための演算効率を向上することによって、重複判定のための処理時間が増えないようにすることができる。
【図面の簡単な説明】
【００１４】
【図１】本発明が適用されるストレージ装置の構成図。
【図２】転送データに対する重複排除、データ圧縮処理の説明図。
【図４】ストレージ装置に適用される重複排除、データ圧縮処理の説明図。
【図３】固定データの構成例の説明図。
【図５】圧縮ブロックの生成方法を示す説明図。
【図６】圧縮ブロックの別の生成方法を示す説明図。
【図７】圧縮ブロックの生成方法を説明するフローチャート。
【図８】圧縮ブロックの別の生成方法を説明するフローチャート。
【図９】転送ブロック、圧縮ブロックの構成例を示す説明図。
【図１０】ハッシュテーブルの構成例の説明図。
【図１１】セグメントテーブルの構成例の説明図。
【図１２】重複排除、データ圧縮処理の連携方法を説明するフローチャート。
【図１３】重複排除、データ圧縮処理実施の判定方法を説明するフローチャート。
【図１４】デステージデータに対する処理の実施方法を説明するフローチャート。
【図１５】上位装置からの転送要求に対する装置動作説明するフローチャート。
【発明を実施するための最良の形態】
【００１５】
次に、本発明の実施形態を図面に基づいて説明する。なお、本発明は、以下に説明する実施形態に限定されるものではない。
【００１６】
図１は、本発明に係わるストレージ装置１００のブロック構成を示したものである。図１において、ストレージ装置100の構成例を示すブロック図である。ストレージ装置は、二重化された、第１のコントローラ（ＣＴＬ０：１ａ）と第２のコントローラ（ＣＴＬ１：１ｂ）とを備えている。二つのコントローラの間は、Ｄｕａl  Ｉ／Oによって接続されている。
【００１７】
各コントローラにはキャッシュメモリ（Cache0：４ａ、または、Cache1：４ｂ）、ホストインターフェイス（Host I/F0：２ａ、または、Host I/F1：２ｂ）、ドライブインターフェイス（Drv I/F0：３ａ、または、Drv I/F1：３ｂ）、そして、マイクロプロセッサ（MP0：５ａ、または、MP1：5ｂ）などのデバイスが接続されている。各コントローラは、複数のデバイス間で、I/O（情報・データ転送経路）を介した情報・データの転送を制御している。
【００１８】
ホストインターフェイス2a、2bは、上位装置（ホスト）と間で、通信プロトコルに従い、パケット単位での情報の転送を制御するインターフェースである。ドライブインターフェース3a、3bは、記憶デバイス（HDD、ＳＳＤ等）との間で、通信プロトコルに従い、ブロック単位（記憶デバイスのアクセス単位）で情報の転送を制御するインターフェースである。
【００１９】
キャッシュメモリ4a、4bは、ホストインターフェイス2a、2b及びドライブインターフェイス3a、3bからの転送データを一時的に蓄積するデバイスである。ストレージ装置は、キャッシュメモリ4a、4bの存在により、ホストからのアクセスと記憶デバイスへの書き込み（デステージ）を分けることができ、ホストからのアクセスに対する装置応答を高速化し、キャッシュヒットによるリード性能を向上することができる。
【００２０】
ドライブインターフェイス3a、3bには、記憶デバイスが接続され、ホストから見たアクセス空間である論理ボリューム7a、7b（LU0、LU1, LU: Logical Unit）が割り当てられ、論理ボリュームはマイクロプロセッサ（5a、5b）（MP0、MP1）により管理される。
【００２１】
マイクロプロセッサ5a、5bは、各コントローラ1a、1b、ホストインターフェイス2a、2b、ドライブインターフェイス3a、3bの制御部あるいは制御手段を成す。各マイクロプロセッサが実行する制御に必要な情報は、ローカルメモリ（LM0：７ａ、または、LM1：7ｂ）に格納されている。なお、キャッシュメモリ4をコントローラ1に接続されているとして説明したが、キャッシュメモリをマイクロプロセッサ5に接続されているローカルメモリ6と統合させるものであってもよい。
【００２２】
次に、ストレージ装置100が実現する、既述の“情報の重複”を排除・除外等する動作、“情報の圧縮”を実行する動作、それぞれの原理について説明する。図２は、これを説明するブロック図である。“情報の重複”を排除する動作に続いて“情報の圧縮”の動作が実行される。
図２の（a）は、上位装置からストレージ装置に転送された情報（転送情報）を示す。（ａ）は、上位装置から見えるストレージ装置の記憶領域のアクセス空間（ボリューム空間）の一部分でもある。
図２の（b）は、転送情報に重複が有るか無いかの検査・判定、そして、重複した情報を記憶領域に格納しないという、情報の排除が、セグメントに基づいて行われることを示している。ストレージ装置は、重複情報に関する処理を、転送情報を複数のセグメント毎に分割、あるいはセグメント毎に処理することによって達成する。ストレージ装置は、一つのセグメントに含めるデータ量を、例えばブロック（例512バイト）の整数倍として、記憶デバイスへの格納単位（デステージブロック）と整合させるようにしている。
【００２３】
転送情報には、転送情報を構成する複数のデータの組み合わせの形態が規則的なものである“固定パターン”と、これがランダムである“ランダムパターン”とがある。前者の例としては、複数のデータが同一であるもの、あるいは、複数のデータが規則的あるいは周期的に同じように繰り返すものがある。これを図３に基づいて説明する。
【００２４】
図３の（a）は一つのブロック（ＢＬＫ）に含まれる全てのデータが”ゼロ”であるパターンであることを示している。セグメント（ＳＥＧ）はｎ個のブロックから構成されている。ストレージ装置は、（ａ）に該当するセグメントを“固定パターン”であると判定する。
これに対して（ｂ）は、一つのブロックが同一の値のデータの複数から構成され、複数のブロックが“繰り返しサイズ”を構成し、複数の繰り返しサイズより繰り返し周期を構成することを示している。この繰り返し周期の間で、繰り返しサイズ毎にデータの値が連続的に変化する。ストレージ装置は、（ｂ）についても、固定パターンと判定する。
【００２５】
転送情報に含まれる複数のデータが全て同一あるいは複数のデータの組み合わせ・変化に規則性がある場合には、ストレージ装置は、転送情報を固定パターンと判定する。ストレージ装置のマイクロプロセッサはローカルメモリの管理プログラムに基づいて、転送情報・セグメントのパターンを固定パターンと判定する。
【００２６】
各セグメントは、固定パターン、ランダムパターン、又は両者が混在するパターンから構成される。なお、ストレージ装置は両者が混在するパターンを、通常、ランダムパターンとして扱う。
【００２７】
図２に戻り説明を続ける。セグメントを単位としての重複の排除は、まず、固定パターンを対象に行う（図2の（ｂ）→（c））。ストレージ装置は、各セグメントに対し、例えば、図３の（ａ），（ｂ）のような規則性を持ったパターンを有しているか、そして、情報が格納されている記憶領域に同じ規則性から成るパターンを持つセグメントが存在するかを検証する。ストレージ装置は、この両方を肯定する、或いは規則性を持ったパターンを有することのみが肯定された場合に転送情報のうち固定パターンの判定の対象となったセグメントを“重複セグメント”（図２の（ｃ））として、これを、記憶デバイスへ格納する対象から除外する。すなわち、重複セグメントは、記憶デバイスに格納される対象とはならない。互いに比較される複数のセグメント同士が規則的なパターンを有するか否かの判定については、パターン値によって直接判定すればよく既述のハッシュ値を求める演算までは必須ではない。ブロック内、セグメント内に含まれるデータが同一、或いは周期性がある場合、同一であるデータ値、規則性があるデータ値がパターン値に相当する。
【００２８】
次に、ストレージ装置は、転送情報を構成する複数のセグメントから、固定パターンを有する重複セグメントを除いた残りのセグメントに対し、記憶領域に格納されたセグメントと、ランダムパターンが一致するか否かの判定を行い、同じパターンを有するセグメントを“重複セグメント”と判定する。ランダムパターンが一致するか否かは、互いに比較すべき複数のセグメントに対して、それぞれのハッシュ値が一致するか否かの判定結果によって決せされる。ハッシュ値が一致したセグメントは重複セグメント（図２の（ｄ））として以後の処理対象から除外される。
【００２９】
次に、ストレージ装置は、図２（ｃ）および（ｄ）で特定された重複セグメントが除かれた転送情報に対して、データ圧縮処理を行う（図２（ｅ））。データ圧縮の単位は、セグメントに拘束されず、複数セグメント、或いは、セグメントを構成する複数ブロック毎に行うことができる。
データ圧縮処理によって転送情報の情報量が減少する。各圧縮データの単位において、データ量は基本的にそれぞれ異なる。最後に、ストレージ装置は、圧縮データに基づいて、記憶デバイスへ格納される情報の単位であるデステージブロックを生成し、これを記憶デバイスへ格納する（図２（ｆ））。
【００３０】
図２に示す一連の処理において、固定パターンに着目して重複セグメントを判定することをランダムパターンに着目して重複セグメントを判定することに先行させる理由は、固定パターンに係わる重複セグメントを転送情報から予め除いて、ハッシュ値の演算対象となるセグメント数を減少させるためである。ランダムパターンの一致・不一致を高精度に行おうとすると、ハッシュ値の演算が重くなるためである。固定パターンを持つセグメントを極力ハッシュ値の演算対象を減少させることによって、転送情報を記憶デバイスに格納させるための処理のレーテンシーを最小に抑えることができる。
【００３１】
また、重複排除のための処理では、セグメントそのものを排除しているため、データ圧縮に比べ、重複して情報を記憶デバイスに格納することを削減する効果が高い。そこで、重複セグメントを除外する処理を、情報の圧縮処理に先行して行う。特に、データ圧縮対象を、重複セグメントを排除した残りのセグメントに限定するので、圧縮処理におけるレーテンシーを最小に抑えながら、データ圧縮により記憶容量の効率的な利用を図ることができる。
【００３２】
次に、図２の処理を実現する、ストレージ装置のより詳しい構成について説明する。図４はストレージ装置の機能ブロック図である。ストレージ装置100は、コントローラ、キャッシュメモリ、そして、マイクロプロセッサを連携させて重複排除処理（図２（ａ）−（ｄ））、データ圧縮処理（図２（ｅ）、（ｆ））を実現する。なお、図４は、二重化されたコントローラのうち、代表して一方のコントローラに関する動作及び構成を示している。コントローラ１ａは、ホストインターフェイス2ａとキャッシュ4ａ間及び、Dual I/Oを介したもう一方のコントローラ１ｂとの間でのデータ転送を制御するHDMA8を有する。
さらに、コントローラ１ａは、固定パターンを持った情報（セグメント）に対して、パターン値を検出する固定データ検出手段（検出部あるいは検出回路）９と、キャッシュ４ａに格納された情報、セグメントに対してハッシュ値を演算するランダムデータ検出手段１０とを備える。
【００３３】
コントローラ１ａはさらに、キャッシュ４ａに格納されたデータに対して圧縮処理を行うデータ圧縮手段１１と、キャッシュ４ａ上のデータとドライブインターフェイス間でのデータ転送を制御するDDMA12とを備えている。
【００３４】
次に、マイクロプロセッサ５ａの動作について説明する。マイクロプロセッサ５ａは図４に示すそれぞれの処理を行う処理部または処理手段を備える。すなわち、マイクロプロセッサは、パターン値、及び、ハッシュ値に基づくセグメントの重複判定、重複を判定した際に、その対象となったセグメントがキャッシュ領域に有する領域を開放する、すなわち、開放領域に他の転送情報が書き込まれることを可とするため排除指示、圧縮の対象となるキャッシュ領域を指定し、データ圧縮手段11の起動を制御する圧縮指示、DDMA12を起動し、キャッシュに存在する圧縮データをその格納領域からドライブインターフェース３ａへ転送することを制御するデステージ指示と、を実現する。
【００３５】
マイクロプロセッサ５ａは、転送情報をキャッシュメモリに格納する時に、ブロック単位でアドレス（Logical Address LA1）を付加する。上位装置は論理アドレスを頼りに、記憶デバイスに格納された情報にアクセスすることができる。しかしながら、既述の重複排除や、データ圧縮によって、上位装置から見えるアクセス空間におけるブロックアドレスと、それに相当するデステージブロックのアドレスとの対応が取れなくなってしまう。そこで、マイクロプロセッサはその対応を管理する目的でアクセス空間の領域管理を行う。
【００３６】
マイクロプロセッサがデータ圧縮を行うとデータ量が減少するため、圧縮の対象となったブロックと、その圧縮データより生成したデステージブロックとの対応が一致しなくなる。従って、マイクロプロセッサは圧縮データから生成されたデステージブロックに新たにアドレス（LA2）を付加し、ホストからストレージ装置に情報を転送した時のブロックとデステージブロックと間の対応を図っている。
【００３７】
マイクロプロセッサによるローカルメモリの利用について説明する。ローカルメモリには、ランダムパターンに対する重複検査に用いるものであり、記憶デバイスに格納済みのセグメント情報（例えば、アドレス）と、そのセグメントのハッシュ値との対応を管理するハッシュテーブルを備えている。転送情報から求めたハッシュ値と、ハッシュテーブルに登録されたハッシュ値との一致・不一致の検証を行うことによって、ランダムパターンについて、重複セグメントの有無を判定する。さらに、ローカルメモリ６ａは、上位装置から見える、アクセス空間（論理ボリューム）のアドレスと、デステージブロックのアドレスとの対応を管理するセグメントテーブルを備える。これらテーブルの詳細については、後述する。
【００３８】
次に、圧縮処理（圧縮データを含むデステージブロック（圧縮ブロック）生成例、ブロック構成例、圧縮ブロックの生成方法）について具体的に説明する。図５、図６に圧縮ブロックの生成例を示す。データ圧縮単位は、転送情報を成す複数のブロックから構成される。図５、図６では４ブロックでデータ圧縮単位を構成する例を示している。データ圧縮はこのデータ圧縮単位に対して行われる。データ圧縮単位には、転送ブロックに付加され、転送時のアドレス（LA1）等のヘッダも含まれる。ヘッダを除く転送情報のみを圧縮対象としても構わない。
【００３９】
図５は、データ圧縮処理を行った結果、データ圧縮単位に含まれるデータ量（100%）が70%のデータ量に圧縮された、圧縮ブロックの生成を説明している。転送情報のデータ量に対して、70%となった圧縮データを、デステージブロック単位（１ブロックデータ量の割合は、100÷4ブロック=25%）に分割する。25%、25%、20%の割合で3つのデステージブロックに分割されることになる。圧縮後のデータの割り当て量が20%のブロックは5%分の無効データを含む圧縮ブロックとなる。
【００４０】
コントローラあるいはマイクロプロセッサが、この圧縮ブロックを生成する際には、キャッシュメモリ上の圧縮データを格納する領域に対し、ブロックデータ量分のキャッシュアドレス範囲を指定し、その単位でキャッシュからデータを読み出すことによって、圧縮ブロックを生成する。ブロックデータ量を満たさない場合であっても、ブロックデータ量分をキャッシュメモリから読み出すことで、無効データを含んだ圧縮ブロックの転送が実現される。或いは、無効データとしてマイクロプロセッサは特別なパターンをキャッシュメモリの該当領域に書込み、ブロックデータ量を満たすことも考えられる。マイクロプロセッサは、さらに、圧縮ブロックヘッダを付加して圧縮ブロックを生成する。
【００４１】
図５の場合、圧縮単位（4ブロック）に対するデータを圧縮した結果、圧縮ブロックが3ブロックになったことから、圧縮効果がある。圧縮ブロックを生成した結果、圧縮前のブロック数と圧縮後のブロック数と同数の場合もありうる。この場、マイクロプロセッサは圧縮の効果が無いものとして、圧縮データを破棄する。
【００４２】
図５に示す圧縮ブロックの生成を、マイクロプロセッサ５ａ又はコントローラ１ａの動作を示すフローチャートを用いて説明する。図７は、データ圧縮単位が一つである場合における、圧縮ブロックの生成方法を説明するものである。
【００４３】
マイクロプロセッサは、データ圧縮単位から得られる圧縮データ量を把握する（S141）。圧縮データ量の把握は、キャッシュメモリにある圧縮データの格納範囲から求めることができる。S142において、圧縮データ量と、圧縮ブロックに割り当てるデータ量との間の除算を行うことにより、圧縮データ量に対する分割数と、剰余バイト数を計算する。
【００４４】
S143にて、マイクロプロセッサは、剰余分を含む圧縮データ格納に必要なブロック数（分割数＋１）と閾値との比較を行う。マイクロプロセッサは、例えばデータ圧縮単位に含まれるブロック数４に対し、圧縮効果が得られるブロック数３以下を閾値として与える。
【００４５】
S143において、マイクロプロセッサは、閾値以下の場合、余剰バイトに続くキャッシュ領域に無効データを付加し（S144）、更に、圧縮ブロックヘッダを付加する。S144では、マイクロプロセッサはブロックデータ量分をキャッシュメモリから読み出すことによって無効データの付加を行わない場合もある。最後に、マイクロプロセッサは、圧縮ブロックヘッダと、割り当てるデータ量分の圧縮データをキャッシュより読出し、圧縮ブロックとして、記憶デバイスへ格納し、セグメントテーブルを更新する。セグメントテーブルの更新については、図１０で説明する。S143にて、閾値を超えた場合、キャッシュ上の圧縮データ格納領域は開放され、そして、圧縮データは破棄され（S146）、圧縮前の転送ブロックのまま記憶デバイスへ格納される。
【００４６】
図６は、複数の圧縮データに対する圧縮ブロックの生成を示している。複数の圧縮データを対象とするため、圧縮効果が得られなかった圧縮データは除外される。３つの圧縮データの総データ量に対してブロック分割が行われる。従って、圧縮データ同士の境界を跨ぐブロック分割が行われ、ブロックデータ量に満たない分は、無効データを含むブロックに分割される。ブロック分割後、同様に圧縮ブロックヘッダの付加で圧縮ブロックを構成する。ブロック分割、圧縮ブロックの生成は、図５と同様、キャッシュ上の圧縮データ格納領域に対する指定、アクセスによって行われる。
【００４７】
図６に示される圧縮ブロックの生成方法を説明する。図８は、複数のデータ圧縮単位を対象とした圧縮ブロックの生成方法を説明するフローチャートである。マイクロプロセッサは、各データ圧縮単位から得られる圧縮データ量を把握し、圧縮効果のない圧縮データを破棄する（該当するキャッシュ領域開放、S151）。圧縮データ量の把握は、キャッシュメモリ上の圧縮データ格納範囲から求めることができる。
S152において、マイクロプロセッサは、キャッシュメモリ上に残った圧縮データに対する総データ量を算出する。S153からS156の処理は、総データ量を基に、図７のS142からS145の処理に相当する。
S154において、図６の場合、マイクロプロセッサは、複数の圧縮データに対する転送ブロック数12に対し、圧縮効果が得られるブロック数１１以下を閾値として与える。閾値は常に一定ではなく、処理の対象となる複数の圧縮データ数に対する転送ブロック数により可変としてもよい。
【００４８】
S154において、マイクロプロセッサは、剰余分を含むブロック数（分割数＋１）が、閾値を超えた場合、ブロック分割の対象とする圧縮データ数を判定する（S157）。Ｓ157において、マイクロプロセッサが単独の圧縮データであると判定すると、圧縮データを破棄し、それに対する転送ブロックを、非圧縮のまま記憶デバイスに格納する。もしくは、マイクロプロセッサは、図５で説明の単一の圧縮データに対する処理を行う。
【００４９】
マイクロプロセッサがS157を不成立と判定すると、複数の圧縮データに対し、例えばそのデータ量が最大の圧縮データを破棄し（S158）、S152以降で、残りの圧縮データに対する処理を行う。S158において、マイクロプロセッサは、破棄された圧縮データに対する転送ブロックを非圧縮のまま記憶デバイスに格納する。以上説明した処理は、S151で排除される圧縮データの間に含まれる複数の圧縮データ単位を対象とするが、常に一定の圧縮データ数に対する処理が行われるわけではない。
【００５０】
以上、圧縮ブロック生成の際にブロック分割を複数の圧縮データに対して行うことで、分割後のブロック内に含まれる無効データ量を抑制することが可能となり、単独の圧縮データを処理対象とする図５、図７の方法に対し、圧縮ブロック数を抑えることができる。
【００５１】
図９は転送データブロックの構成例（a）、圧縮データを格納する圧縮ブロックの構成例（b）である。転送データブロックは、上位装置からのアクセスに用いられるブロックアドレス（LA1）と、補償コードとリザーブビットにより構成されるブロックヘッダと、転送データより構成される。圧縮データブロックは、圧縮データとそれに対するブロックヘッダより構成される。
【００５２】
圧縮データは、ブロックヘッダを含む転送データブロック複数から成る圧縮単位に対するものである。ブロックヘッダは、圧縮データを対象とした記憶デバイスへの格納、アクセスを行うため、新たに付加される圧縮ブロックアドレス（LA2）と、補償コードからなる。更に構成例（ａ）のリザーブビットに、例えば、無効データの有無を識別するパディングフラグ、無効データを除く圧縮データ量を示す有効バイト数、複数の圧縮データに対するブロック分割の結果、異なる圧縮データが含まれるブロックであることを識別するリンクフラグ、データ圧縮処理に適用された符号化アルゴリズム識別情報（符号化方法）を含める。
【００５３】
リンクフラグは、記憶デバイスに格納の圧縮ブロックをキャッシュへ格納する場合、このフラグによって、ブロック分割前の圧縮データすべてが揃ったことを識別するものである。符号化方法は、圧縮データに対する復号時に、適用する復号アルゴリズムを識別するものである。更に圧縮データを含む圧縮ブロックを識別するものである。パディングフラグにより、圧縮単位に対する複数の圧縮ブロックの中で最後の圧縮ブロックであることが識別できる。
【００５４】
圧縮ブロックの構成例（ｂ）に含まれる補償コードの生成は、例えばキャッシュ上の圧縮データを読み出し、記憶デバイスへ格納する際に、圧縮データ読み出しと同時に補償コードを計算、圧縮ブロックヘッダとして付加する。
【００５５】
図４に示す、ストレージ装置の機能ブロックに基づいて、図2で説明した、重複排除、データ圧縮、そして、デステージ動作のそれぞれを説明する。図2（b）のセグメント化は、コントローラ１ａが、転送情報を格納する、キャッシュメモリの領域を、セグメント単位で管理することで実現される。キャッシュメモリの領域に対する開放の指示などのアクセスは、マイクロプロセッサの管理によって、コントローラ１ａがセグメント単位で行う。ＨDMA８は、転送情報をキャッシュメモリへ転送すると同時に、Dual I/Oを経由して、他系のコントローラ１ｂと、キャッシュメモリ４ｂに転送し（マルチキャスト）、二重に転送情報を保持するようにしている。
【００５６】
図2（c）に示す、固定パターンに対する重複排除は、HDMAが転送情報をキャッシュメモリ４ａに格納すると同時に、転送情報を受領した固定データ検出手段９が、例えばブロック、或いはセグメント単位のデータ量毎にデータパターンを検証し、パターン値をマイクロプロセッサ５ａに転送することにより行われる。マイクロプロセッサ５ａは、得られたパターン値からセグメント単位で固定パターン（例えば、図３）があるか否かを検出する。
【００５７】
パターン値については固定データ検出手段がHDMAからキャッシュメモリへ逐次格納される転送データに対し、バイト単位で検証を行った結果得られるものである。例えばブロック単位の転送データ量範囲で、全てのバイトデータが同一であることを判定し、更に連続する複数のブロック（セグメント）単位で、パターン値の同一或いは、周期性の判定結果に相当する。
【００５８】
マイクロプロセッサ５ａは、固定パターンを検出した際に、重複を判定し、マイクロプロセッサ５ａは、“排除指示”を生成し、コントローラ１ａを介してこの指示をキャッシュメモリ４ａに送る。キャッシュメモリ４ａは、固定パターンを持ったセグメントが格納されている領域を開放する。開放された領域は、新たなキャッシュアクセスに対する書込みが許可され、管理上は空き領域として管理される。更にもう他系のキャッシュメモリに二重に保持されている転送データに対しても、開放が適用される。すなわち、第１の系のキャッシュメモリ４ａと、第２の系のキャッシュメモリ４ｂとの利用状況を同等とする。
【００５９】
図2（d）で説明する、ランダムパターンを持つセグメントに対する重複排除のための処理は、固定パターンのセグメントが除かれた後のセグメントを対象に行われる。マイクロプロセッサ５ａは、残セグメントを格納している、キャッシュメモリ４ａの領域へアクセスする。ランダムパターン検出手段１０の起動を制御する。同手段１０はランダムパターンからなるセグメントを検出、当該セグメント毎にハッシュ値を算出し、マイクロプロセッサ5aにハッシュ値を転送する。
【００６０】
マイクロプロセッサ５ａは求めたハッシュ値とハッシュテーブルに格納済みセグメントに対するハッシュ値との一致・不一致を検証する（重複判定）。一致を判定した場合、固定パターンを持ったセグメントと同様に、ランダムパターンを持ったセグメントが占める、キャッシュメモリの領域を開放する。
図2（e）のデータ圧縮は、重複セグメントを除いた後の、キャッシュメモリ上のデータに対して行われる。マイクロプロセッサ５ａは、データ圧縮手段１１がキャッシュメモリ上の残セグメントにアクセスする領域を指定する。データ圧縮手段１１は、データ圧縮単位（各セグメントの構成単位であるブロック或いは、複数ブロック単位）で圧縮処理を行う。マイクロプロセッサ５ａは、圧縮されたデータを、キャッシュメモリ上に確保した別領域に格納する。圧縮データの格納に利用されるキャッシュ領域は、例えばデータ圧縮単位に含まれるデータ量と同等のサイズ分確保される。確保した領域へ圧縮データの格納が行われ、確保領域を超えた書き込みが行われた、或いは、データ圧縮単位に対し、圧縮データ量がほぼ同等で、圧縮効果が得られない場合がある。この場合、マイクロプロセッサ５ａは、格納した圧縮データを破棄する（領域開放）。
【００６１】
図２（ｆ）に説明した、デステージブロック生成は、圧縮データに対して行われる。データ圧縮手段１１は、キャッシュ上に格納された圧縮データを、ブロック単位のデータ量毎にオリジナルのアドレス（ＬＡ１）に新たにアドレス（ＬＡ２）、圧縮データに対する補償コード（CRC）を含むブロックヘッダを付加して成るデステージブロックを生成する。図７、図８によってデータ圧縮効果が得られなかったブロックについては、圧縮前のブロックがデステージブロックとなる。
【００６２】
マイクロプロセッサ５ａは、ＤＤＭＡを起動し、キャッシュメモリ上に格納された圧縮データの読出しと同時に、上記説明に従い圧縮ブロックに対するヘッダを付加によってデステージブロックを生成、ドライブインターフェイス３ａを介して、記憶デバイスにデステージブロックを格納する。格納後、キャッシュメモリのデステージブロック領域を開放する。もう一方のキャッシュに対しても同様に該当領域を開放する。
【００６３】
なお、図３では、パターン値、ハッシュ値の検出、データ圧縮、そして、デステージブロックの生成はコントローラ１ａ内で行い、キャッシュメモリ４ａがコントローラ１ａと接続される構成を一例として説明したが、キャュシュメモリ４ａがマイクロプロセッサ５ａに接続される構成であってもよい。
更に、コントローラ1aの固定パターン検出、ランダムパターン検出、そして、データ圧縮の各処理はマイクロプロセッサ５ａが行うことでもよい。この場合、マイクロプロセッサが転送情報をキャッシュメモリに格納すると同時には固定パターンの検出ができないことも考えられる。その場合は、ランダムパターンの検出と同様に、キャッシュメモリに転送情報を格納し後、キャッシュメモリの転送情報に対して固定パターンの検出を行うことでもよい。
【００６４】
本発明は、ハッシュ値によるパターン検出を、固定パターンの検出にも適用することを必ずしも妨げるものではない。固定パターンの種類は限定されたものであることから、複雑な計算アルゴリズムを用いなくとも、ハッシュ値の衝突を回避できる。従って、固定パターン検出時には、ランダムパターンに適用のアルゴリズムの短縮（繰返し演算回数の制限）や、処理ステップ数が少ないアルゴリズムを適用して、処理レーテンシーを抑制することができる。ハッシュテーブルもランダムデータとは別のテーブルを備えればよい。マイクロプロセッサで、固定パターンを検出しょうとする場合には、ランダムパターンを検出するための実行アルゴリズムとは変更したものを使用すればよい。
【００６５】
なお、キャッシュメモリと各デバイスとの間のデータ転送は、コントローラに備えるDMA（HDMA、DDMA）を介したものに限定されず、マイクロプロセッサに備えるDMA或いはホスト、ドライブI/F内に備えるDMAを介することもできる。この場合コントローラは、HDMA、DDMAを含まず、ホストインターフェイス、ドライブインターフェイスとマイクロプロセッサを接続し、転送データの分配を制御する機能のみを備えた手段となることも考えられる。
【００６６】
更に固定データ検出手段、ランダムデータ検出手段、データ圧縮手段も、コントローラ内に備えることに限定されない。コントローラとは別の手段、例えば専用ハードウエアをマイクロプロセッサに直結する場合や、固定パターンの検査、ハッシュ値の算出、データ圧縮処理をマイクロプロセッサによる演算処理で実現することも考えられる。
【００６７】
次に、ローカルメモリ（６ａ，６ｂ）に存在するハッシュテーブルについて説明する。図１０はハッシュテーブルの一例を示すものであり、テーブルの構成は、上位装置から見えるボリューム空間に与えられる転送ブロックアドレス（Block LA）と、重複排除を行う処理の単位であるSegmentの番号（アドレス）と、デステージフラグ（Ｎｏ又はＹｅｓ）と、ハッシュ値(Hash mean)と、デステージブロックアドレス(De-stage LA)とが対応されて登録されたもの構成される。マイクロプロセッサは、ハッシュテーブルを図２に示す処理を行う過程で作成する。ボリューム空間が複数存在する場合には、このテーブルもボリューム毎に存在する。
【００６８】
図１０は、セグメントが全て同一のブロック数で構成される場合を示している。ストレージ装置が、セグメント長を変更できる場合や、ボリューム空間毎にセグメント長を変更する場合、そのセグメントに含まれるブロックアドレス範囲を変更する。図１０は１セグメント＝８ブロックであることを説明している。
【００６９】
デステージフラグは、セグメント毎の重複排除の実施（No）、または記憶デバイスへの格納(Yes)をマイクロプロセッサが識別できるようにするためのものである。重複排除が実施された場合、デステージブロックアドレスに、重複セグメントと同一パターンデータが格納されたセグメントに対するアドレスが登録される。これによって、マイクロプロセッサおよびコントローラは、重複セグメントに同一データパターンが格納された記憶領域へアクセスすることができる。排除の対象となったセグメントに対しては、デステージブロックアドレスの代わりに、記憶領域に格納されている同一のデータパターンを有するセグメントの番号を登録するものであってもよい。
【００７０】
マイクロプロセッサは、転送情報のセグメントのデータを記憶デバイスへ格納する場合、当該セグメントに対するハッシュ値をハッシュテーブルに登録する。マイクロプロセッサは、重複セグメントがあるか否かの判定に際、転送情報のセグメントについてハッシュ値を計算し、計算したハッシュ値に同等なハッシュ値がハッシュテーブルに存在するか否かを検証する。
【００７１】
マイクロプロセッサは、ハッシュテーブルにより、上位装置から見えるボリューム空間に対するブロックアドレスと、デステージブロックアドレスとの対応、つまりボリューム空間と、記憶デバイスのアクセス空間との対応を管理する。したがって、転送情報を送信する要求の対象となったアクセスブロックから、対応するデステージブロックへのアクセスが容易になる。
【００７２】
次にセグメントテーブル（図１１）について説明する。テーブルの構成は、図１０と同様に、転送ブロックアドレス、重複排除の単位であるセグメント番号（アドレス）、デステージブロックアドレス、更に重複排除、データ圧縮の識別フラグから構成される。ボリューム空間が複数存在する場合には、このテーブルもボリューム毎に存在する。
【００７３】
セグメント番号は図１０と同様であり説明は省略するが、セグメントに含まれるデータブロック数は一定としている。固定パターン、ランダムパターンを持ったセグメントの重複を排除する毎にセグメントの大きさを変更することも可能である。重複排除に対する識別フラグ（重複フラグ）は、行われた重複排除の種類（固定データ：Fixing、ランダムデータ：Random）と、排除の発生が無いことを識別する(No)ことができるものである。
【００７４】
データ圧縮に対する識別フラグ（圧縮フラグ）は、圧縮処理の有無を識別できるものである。重複排除されたセグメント（重複フラグ＝Fixing or Random）、データ圧縮を行わないブロック（転送アドレス0x00１0〜13）については、圧縮フラグとして「No」が登録されている。更に圧縮効果が得られないブロック（転送アドレス0x00１C〜1F）については圧縮フラグとして「オーバーフロー」が登録されている。データ圧縮単位は、重複排除単位（セグメント）に一致させなくてもよい。図９では一例として２ブロックをデータ圧縮のための単位としている。
【００７５】
ここで、セグメントテーブル内のデステージブロックアドレスに注目して欲しい。セグメント0x0000、0x0001については固定パターン、又は、ランダムパターンを持ったセグメントに対する重複排除の処理が行われ、重複するデステージブロックアドレス、或いは、これに代えて、同一パターンを持ち、記憶デバイスに記憶されているセグメントの番号が登録される。
【００７６】
固定パターンには上位装置で利用されないデータパターン（例えば記憶デバイスに対するフォーマットパターン）も存在する。このようなパターンを含むセグメントが排除された場合には、ストレージ装置は、デステージブロックアドレスを管理する必要がない。或いはそれらのパターン全てを排除の対象とし、すなわち、重複セグメントとして記憶デバイスへ格納しない場合もある。  
【００７７】
図１１において、ブロックアドレス0x0010〜13、0x001C〜1Fの範囲は圧縮が行われなかったか、或いは圧縮効果の無かったデータブロックであり、このブロックそのもののサイズを単位としてデステージアドレスが登録される。マイクロプロセッサは、ブロックアドレス0x0014〜17、0x0018〜1Bで示されるデータ圧縮単位に対し、圧縮データに対するデステージブロックアドレスをブロックアドレスに割り当てている。図１１の例では、２ブロックをデータ圧縮単位としており、効果の得られる１ブロックに圧縮された場合のデステージブロックアドレスを割り付けている。データ圧縮によって、データ圧縮単位のデータ量を減少できるため、マイクロプロセッサ及びコントローラは、図５或いは,図６で説明した方法を用いて、圧縮ブロック（デステージブロック）を生成する。
【００７８】
以上によって、マイクロプロセッサは、セグメントテーブルに基づいて、上位装置から見えるボリューム空間に対するブロックアドレスと、デステージブロックアドレスとの対応を確認することができる。マイクロプロセッサ及びコントローラは、上位装置から転送要求のあったアクセスブロックに対応するデステージブロックへのアクセス、圧縮データに対する伸長処理の実施を行うことができる。
なお、セグメントテーブルは、既述の構成に限定されるものではなく、上位装置から見えるボリューム空間に対するブロックアドレスと、デステージブロックアドレスとの対応が取れるものであればいかなる形態を持つこともできる。圧縮データの判定は、圧縮ブロックにおける圧縮ブロックヘッダの分析（例えば符号化方法を示すフラグ）でも行うことができる。
【００７９】
また、セグメントテーブルを重複セグメントの排除、データ圧縮、未処理ブロックの各テーブルに分けて管理しても構わない。上位装置から要求された転送アドレスを、例えば重複排除テーブルまたは、未処理ブロックテーブル、圧縮テーブルの順にテーブルを選択する。テーブルの参照順について、特にデータ圧縮は、長時間アクセスの無かったボリュームや、その中の領域を対象に行われ、上位装置からのアクセス確率は低いと考えられる。従って、テーブルのアクセス順も最後とする。更に、参照したテーブルで管理されるデステージブロックと、テーブルの種類に従って、上位装置への転送データを処理（圧縮データに対する伸長処理等）する。以上、テーブルは様々な構成が考えられるが、その内容は、図１０及び図１１において説明したものと同様である。
【００８０】
次に、改めて、図２及び、図３で説明した、転送情報の重複の排除、データ圧縮処理の流れをフローチャート(図１２)を用いて説明する。ストレージ装置は、通常、転送情報を受信した後、これらの処理を順次処理（オンライン処理）で進める。オンラインとは、上位装置からのアクセス（データ書込みまたは、読出し）命令がコントローラに対し連続的に発行され、コントローラが記憶デバイスへ連続的にアクセス（格納、読出し）している状態である。
【００８１】
一方、コントローラが上位装置からのアクセス命令に対するレスポンスを重視する場合や、ストレージ装置の装置構成の如何によっては、ストレージ装置は、複数の処理をオフライン或いはニアランで進める。オフライン、或いはニアラインとは、上位装置からのアクセス要求が無い或いは、頻度が少ない状態である。
【００８２】
コントローラ１ａのＨＤＭＡ８は、上位装置から転送情報を受信し、さらに、キャッシュメモリ４ａに転送情報を格納する（S701）。マイクロプロセッサ５ａは、重複排除１（固定パターンの排除）の要否を判定する（S702）。この判定の際、マイクロプロセッサ５ａは、固定データ検出手段より得られる転送情報のパターン値に基づいて、固定パターンが含まれるセグメントを判定する。マイクロプロセッサがこのセグメントの排除が要と判定すると、セグメント単位で固定データの重複を排除する（S703）。
【００８３】
S702の判定が、重複するセグメントの排除（S703）をスキップする場合、マイクロプロセッサ５ａ又はコントローラ１ａは、Ｓ704、又はS706への移行や、重複排除、データ圧縮全てをスキップしてS709へ移行する。特に、S709へスキップすることは、ストレージ装置がホストからのアクセス命令に対するレスポンスを重視する場合に選択され、重複排除、圧縮処理はデステージ後のオフライン（ニアライン）状態で行われる。
【００８４】
処理がS704へスキップする場合、固定パターンをランダムパターンの一つとして扱い、固定パターンを持ったデータについての重複排除を、ランダムパターンを持ったデータの重複排除で纏めて扱う場合が考えられる。
【００８５】
S704で、マイクロプロセッサ及びコントローラは重複排除２（重複したランダムパターンの除外）の要否を判定する。重複したセグメントを除外することを肯定すると判定する場合、S705において、キャッシュメモリに格納されたデータに対しセグメント単位での重複を除外する処理を行う。S704の判定が、この除外を否定する場合は、マイクロプロセッサ及びコントローラは、重複排除２の処理（S705）をスキップし、Ｓ706へ移行するか、あるいはデータ圧縮をスキップしてS709へ移行する。S709へスキップするのは、たとえば、前処理（固定パターン重複排除）の結果、未排除のセグメント数がゼロとなった場合である。
【００８６】
以上説明した中で、特に、圧縮処理がスキップされて、処理がS709へ移行する場合、データ圧縮の対象とするデータの条件が限定されることがある。非圧縮のデータのままデステージされた後、上位装置からのアクセスが長時間発生していないボリューム空間であること或いは、ボリューム空間の一部でそのような領域であることをマイクロプロセッサが判定する。マイクロプロセッサは、該当するデータ領域に対してデータ圧縮を行う。一方、頻繁にアクセスが発生する領域は非圧縮とする。これによって、マイクロプロセッサは伸長時間を費やすことを避け、転送命令に対する装置レスポンスを最優先とする。データ圧縮は、ストレージ装置がオフライン（ニアライン）状態で実施される。
【００８７】
S706では、マイクロプロセッサは、データ圧縮処理の要否を判定する。肯定判定する場合、図５、６で説明した内容に従い、圧縮ブロックを生成し（S707、S708）、デステージ処理を行う（S709）。
マイクロプロセッサが、S702、S704、S706において種々の判定を行う場合、キャッシュメモリ内の残セグメント数に注目することが考えられる。図１３に示すように、マイクロプロセッサはキャッシュメモリ内のセグメント数を把握する（S801）。セグメント数は、マイクロプロセッサがコントローラを介してキャッシュメモリからデータ量を求め、セグメント当たりのデータ量で除算することにより得られる。マイクロプロセッサは、セグメント数と閾値Ｍ（Ｍは正の整数でＭ≧１）を比較する（S802）。（セグメント）≧Mの条件で、マイクロプロセッサはS709を実行し、ブロックデータのデステージを行う。（残セグメント）＜Mの条件で、マイクロプロセッサは、更にセグメントの有無を判定する（S803）。（残セグメント数）＝0の場合、処理の対象となるセグメント或いは、デステージデータが存在しないので、処理は終了となる。S803で（残セグメント数）≠０の場合、各処理が引き続き実行される。図１３の処理を、S702の判定に適用する場合、S703或いはS704、S706、S704の判定に適用する場合、S705或いはS706、S706判定に適用する場合、S707から処理が行われる。  
【００８８】
S802の判定からS709への分岐は、処理対象のデータ量が閾値M以上の場合、つまり、ストレージ装置が、上位装置に対してオンラインで状態であって、ストレージ装置から上位装置へのレスポンスを優先させる場合に実現される。
【００８９】
マイクロプロセッサは装置負荷（ニアライン、オフライン）により、Ｍを変化させてもよい。マイクロプロセッサは、装置負荷が軽い状態ではMを増加し、重複排除の処理、及び、圧縮処理が行われるデータ量を増やす。
【００９０】
装置負荷の判定は、マイクロプロセッサが行い、１セグメントに対する重複排除に要する時間、或いは、データ圧縮単位に対するデータ圧縮に要する処理時間と、単位時間あたりにストレージ装置に対するアクセス命令が発生する頻度から決められる。
【００９１】
既述の実施形態にかかわる、情報処理方法は、上装置からストレージ装置への転送情報に含まれるデータのパターンの相違に注目して、ストレージ装置が、重複する情報を段階的に、記憶する対象から除外をするようにし、さらに、除外された情報以外の残りの情報に対して圧縮処理を行うようにしたので、情報の受信から記憶デバイスへの格納までに要する時間を短縮し、そして、ストレージ装置が上位装置に記録容量を効率的に利用させることができる。
【００９２】
なお、既述の実施形態では、重複したセグメントのデータをキャッシュメモリから開放されたが、開放しないか、あるいは、転送情報が２重にキャッシュメモリに記録されているかぎり、第１の系のキャッシュメモリについは開放を行い、第２の系のキャッシュメモリについては開放しないようにしてもよい。このようにすることによって、キャッシュメモリやコントローラ内部に発生した障害によって、転送データが消失されることを回避できる。
【００９３】
次に、記憶デバイスに格納された転送情報に対して、重複を排除する処理、データ圧縮の処理について説明する。これらの処理は、例えば、図１２の各判定（S702、S704、S706）において、処理がスキップされる場合で、ストレージ装置がオフライン又はニアラインの状態で行われる。各処理が実施されたか否かの判定は、マイクロプロセッサがセグメントテーブルを分析することで可能となる。図１４はこのことを示すフローチャートである。
【００９４】
マイクロプロセッサは、まずローカルメモリ上のセグメントテーブルを分析し、重複排除処理、圧縮処理が実施されていないデステージブロックを特定する（S901）。図１１のセグメントテーブルにおいて、圧縮フラグ、重複フラグより、非圧縮ブロック（オーバーフローフラグ無し）と、重複排除の対象とならなかったセグメントを特定する（S902、S903）。更に、装置状態がオフライン（ニアライン）であることを判定する（S904）。
【００９５】
上位装置からのアクセス命令発生の場合はその処理を優先して実施する（S905）。マイクロプロセッサが、オフライン（ニアライン）を認定した場合は、S902、S903で特定したセグメント、非圧縮ブロックに対する処理を順に行う（S906、S907）。S906では図2と同様、固定パターンに対する重複排除を先に実施する。
【００９６】
図１１のセグメントテーブルの場合、重複排除の対象となるセグメントとして0x0002、0x0003、0x0004がある。圧縮フラグより、セグメントに含まれるブロックが全て非圧縮であるセグメントは0x0004のみである。従って、S902の判定によって重複排除の対象はセグメント0x0004となる。
非圧縮ブロックは、圧縮フラグにより特定される。圧縮効果の得られないオーバーフローブロック、圧縮ブロック以外のブロックが相当する。マイクロプロセッサは、非圧縮ブロックに対し圧縮後、図５,６で説明した方法によって、圧縮ブロックを生成する。
【００９７】
次に、ストレージ装置が、既述のデータ圧縮、重複排除処理を経て記憶デバイスに格納されたブロックデータを上位装置へ転送（再生）する方法について説明する。
【００９８】
図１５は、その方法を実現するための、ストレージ装置の動作を説明するフローチャートである。ストレージ装置は、上位装置からのアクセス命令に対し、ボリューム空間におけるアクセス領域（ブロックアドレス）を検出する（S101）。マイクロプロセッサは、セグメントテーブルを参照し、アクセスブロックアドレスに対するデステージブロックアドレスを求め、記憶デバイスからブロックアドレスに対応するブロックデータをリードし、ブロックデータをキャッシュメモリに格納する（S102）。
【００９９】
S103において、マイクロプロセッサは、キャッシュメモリに格納されたブロックのヘッダからアドレス情報を得、さらに、セグメントテーブルを参照して求めたデステージブロックアドレスとの一致・不一致を判定する。マイクロプロセッサは、不一致を判定した場合は、フローチャートをエラー終了する。この判定によって、ストレージ装置は所望のデステージブロックがキャッシュメモリに格納されたことを補償する。
【０１００】
S104で、マイクロプロセッサはキャッシュメモリに格納された情報を判別する。判別はキャッシュメモリに格納したブロックに対する圧縮フラグを用いて行われる。S104において、マイクロプロセッサが、成立（格納された情報は圧縮されたもの）を肯定判定すると、圧縮情報に対する伸張を行い、キャッシュメモリの別領域に伸張後の情報（転送ブロックデータ）を格納する（S105）。更に、マイクロプロセッサは、伸長により得られた転送ブロックを構成し、上位装置からのデータ転送時に付加されたブロックアドレス（LA1）と、アクセス命令に対するブロックアドレスとの一致・不一致（S106）を判定する。不一致を判定すると、一連の処理をエラー終了させる。一致を判定すると、キャッシュメモリのブロック情報を上位装置に転送する（S107）。以上のように、ストレージ装置は、デステージデータの格納時、圧縮データを伸長した後、上位装置への転送前に、ブロックアドレスの検証を段階的に行う。
【０１０１】
S104において、不成立が判定されると、S108にて、キャッシュメモリに格納された情報が、重複排除処理の対象となったセグメントに含まれているか否かを判定する。S108の判定が不成立であった場合、キャッシュメモリに格納された情報は非圧縮のもので、排除の対象とならなかった情報であると判断され、S106に移行する。S108の判定が成立であると、排除の対象となった情報と判断される。この場合アクセス要求アドレスと、キャッシュメモリに格納されたブロックアドレスは一致せず、そのままS107を実行する。以上の条件判定、処理の起動制御などは、マイクロプロセッサにより行われる。
【産業上の利用可能性】
【０１０２】
本発明は、転送情報に含まれるデータのパターンに注目し、最適なパターン検出、重複排除処理を段階的に実施する。更に、重複排除後のデータを対象にデータ圧縮処理を実施する。更に、段階的に行われる重複排除、圧縮処理の実施判定を、各処理段階の残データ量や、装置負荷により判断する。したがって、本発明は、キャッシュメモリやホスト、記憶デバイス、及び、コントローラやプロセッサを備えて構成されるストレージ装置に広く適用される。
【符号の説明】
【０１０３】
1  コントローラ
2  ホストインターフェイス
3  ドライブインターフェイス
4  キャッシュメモリ
5  マイクロプロセッサ
6  ローカルメモリ
7  記憶デバイス
8  HDMA
9  固定データ検出手段
10  ランダムデータ検出手段
11  データ圧縮手段
12  DDMA
【図１】
0005216915.tif 000002
【図２】
0005216915.tif 000003
【図３】
0005216915.tif 000004
【図４】
0005216915.tif 000005
【図５】
0005216915.tif 000006
【図６】
0005216915.tif 000007
【図７】
0005216915.tif 000008
【図８】
0005216915.tif 000009
【図９】
0005216915.tif 000010
【図１０】
0005216915.tif 000011
【図１１】
0005216915.tif 000012
【図１２】
0005216915.tif 000013
【図１３】
0005216915.tif 000014
【図１４】
0005216915.tif 000015
【図１５】
0005216915.tif 000016