(57)【要約】【課題】データの圧縮率の向上と圧縮データに対するアクセス性能低下の軽減とを両立させる。【解決手段】データの書込アクセスの時刻をデータごとに管理情報３１４に記録する記録部３４と、書込アクセスに係るデータを記憶するメモリ３２からデータを記憶装置４に書き出す際に、前記管理情報３１４に基づいて、書込アクセスの時刻の差分が閾値以下である複数のデータを一括圧縮のグループに決定する決定部３５２と、前記決定したグループに対応する複数のデータを一括圧縮し、前記一括圧縮して得られた圧縮データを前記記憶装置４に書き込む圧縮処理部３６と、をそなえる。【選択図】図５
2018073261.tif 000002
【特許請求の範囲】
【請求項１】
データの書込アクセスの時刻をデータごとに管理情報に記録する記録部と、
書込アクセスに係るデータを記憶するメモリからデータを記憶装置に書き出す際に、前記管理情報に基づいて、書込アクセスの時刻の差分が閾値以下である複数のデータを一括圧縮のグループに決定する決定部と、
前記決定したグループに対応する複数のデータを一括圧縮し、前記一括圧縮して得られた圧縮データを前記記憶装置に書き込む圧縮処理部と、をそなえる
ことを特徴とする、情報処理装置。
【請求項２】
前記決定部は、前記メモリから前記記憶装置に書き出すデータを順に選択し、選択したデータの書込アクセスの時刻と、当該選択したデータの直前の書込アクセスの時刻との差分を算出し、算出した差分が前記閾値以下である場合に、前記選択したデータを前記直前の書込アクセスに係るデータが属する一括圧縮のグループに含める、
ことを特徴とする、請求項１記載の情報処理装置。
【請求項３】
前記記憶装置に格納された圧縮データに対する読出アクセスに基づいて、前記閾値の値を変更する制御を行なう閾値変更部をそなえる
ことを特徴とする、請求項１又は請求項２記載の情報処理装置。
【請求項４】
前記決定部は、前記一括圧縮のグループに含めるデータ数の上限に基づき、前記決定を行なう、
ことを特徴とする、請求項１〜３のいずれか１項記載の情報処理装置。
【請求項５】
第１のデータを第１のアドレスに書き込む第１の書込アクセスの時刻が前記管理情報に記録された状態で、前記第１のデータと同一の第２のデータを第２のアドレスに書き込む第２の書込アクセスを受け付けた場合に、前記第２のアドレスを前記第１のデータに関連付けるとともに、前記メモリへの前記第２のデータの格納を抑止する抑止部をそなえ、
前記決定部は、前記一括圧縮のグループに含めるデータの候補から前記第１のデータを除外する、
ことを特徴とする、請求項１〜４のいずれか１項記載の情報処理装置。
【請求項６】
コンピュータに、
データの書込アクセスの時刻をデータごとに管理情報に記録し、
書込アクセスに係るデータを記憶するメモリからデータを記憶装置に書き出す際に、前記管理情報に基づいて、書込アクセスの時刻の差分が閾値以下である複数のデータを一括圧縮のグループに決定し、
前記決定したグループに対応する複数のデータを一括圧縮し、前記一括圧縮して得られた圧縮データを前記記憶装置に書き込む
処理を実行させることを特徴とする、情報処理プログラム。
【請求項７】
データの書込アクセスの時刻をデータごとに管理情報に記録し、
書込アクセスに係るデータを記憶するメモリからデータを記憶装置に書き出す際に、前記管理情報に基づいて、書込アクセスの時刻の差分が閾値以下である複数のデータを一括圧縮のグループに決定し、
前記決定したグループに対応する複数のデータを一括圧縮し、前記一括圧縮して得られた圧縮データを前記記憶装置に書き込む
ことを特徴とする、情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理プログラム、及び情報処理方法に関する。
【背景技術】
【０００２】
記憶装置を有するストレージ装置等の情報処理システムでは、データを圧縮した上で記憶装置に格納する技術が知られている。これにより、記憶装置に格納されるデータ量を削減でき、記憶装置の利用効率を高めることができる。
【０００３】
データの圧縮アルゴリズムとしては、例えば辞書式圧縮アルゴリズムが挙げられる。辞書式圧縮アルゴリズムは、一度現れたユニークなデータ列に対して符号を割り当て、以後に出現した同じデータ列に対しては符号及び一致長を記録する圧縮アルゴリズムである。
【０００４】
ところで、記憶装置に対するデータの入出力をブロック単位で制御するストレージ装置、例えばブロックストレージが知られている。ブロックストレージでは、データが例えば入出力の単位（ブロック単位）で圧縮される。
【０００５】
上述のように、辞書式圧縮アルゴリズムは圧縮対象のデータ内に複数回出現するデータ列があることを前提としている。このため、ブロックごとに個別に圧縮処理が行なわれる場合、１ブロックあたりのサイズが小さくなるほど、ブロック内に同一のデータ列が出現する頻度は低くなり、高い圧縮率を期待できない場合がある。
【０００６】
そこで、複数のブロックを一括して圧縮することにより、圧縮率を向上させる技術が知られている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特表２０１６−５２４８２１号公報
【特許文献２】特開２０１１−４８６７９号公報
【非特許文献】
【０００８】
【非特許文献１】EMC Corporation、“EMC XtremIOストレージアレイ（Ver. 4.0）の概要  詳細レビュー”、ホワイトペーパー、［online］、平成２７年５月、［平成２８年１０月１４日検索］、インターネット<URL: //japan.emc.com/collateral/white-papers/h11752-intro-to-XtremIO-array-wp.pdf>
【発明の概要】
【発明が解決しようとする課題】
【０００９】
データを圧縮して格納するストレージ装置は、ホスト装置から記憶装置への読込アクセスが発生すると、圧縮データのうち、当該圧縮データの先頭から読出対象のデータ末尾までの部分を展開し、展開して得られた読出対象のデータをホストに応答する。圧縮データの先頭から展開処理を行なう理由は、展開処理が圧縮データ内の処理部分より前のデータに依存するため、圧縮データの途中から展開処理を開始できないからである。
【００１０】
このため、複数のブロックを一括して圧縮した場合、圧縮データ内の先頭ブロック以外の部分（ブロック）に対する読み出し（以下、「部分読み出し」と表記する。）が発生した際には、ブロック単位で圧縮した場合よりも展開処理に時間がかかることがある。
【００１１】
上述のように、圧縮率を高めるためには一括して圧縮するブロック数を多くすることが有効であるが、一括して圧縮したブロック数が多いほど部分読み出しが発生する頻度は高まるため、読込アクセス性能が低下する可能性は高くなる。
【００１２】
１つの側面では、本発明は、データの圧縮率の向上と圧縮データに対するアクセス性能低下の軽減とを両立させることを目的の１つとする。
【００１３】
なお、前記目的に限らず、後述する発明を実施するための形態に示す各構成により導かれる作用効果であって、従来の技術によっては得られない作用効果を奏することも本発明の他の目的の１つとして位置付けることができる。
【課題を解決するための手段】
【００１４】
１つの側面では、情報処理装置は、記録部と、決定部と、圧縮処理部とをそなえてよい。前記記録部は、データの書込アクセスの時刻をデータごとに管理情報に記録してよい。前記決定部は、書込アクセスに係るデータを記憶するメモリからデータを記憶装置に書き出す際に、前記管理情報に基づいて、書込アクセスの時刻の差分が閾値以下である複数のデータを一括圧縮のグループに決定してよい。前記圧縮処理部は、前記決定したグループに対応する複数のデータを一括圧縮し、前記一括圧縮して得られた圧縮データを前記記憶装置に書き込んでよい。
【発明の効果】
【００１５】
１つの側面では、データの圧縮率の向上と圧縮データに対するアクセス性能低下の軽減とを両立させることができる。
【図面の簡単な説明】
【００１６】
【図１】ブロック個別圧縮及び一括圧縮の圧縮率の一例について説明する図である。
【図２】一括圧縮データからの部分読み出しの一例について説明する図である。
【図３】一括圧縮データからの部分読み出しの一例について説明する図である。
【図４】一実施形態に係るシステムの構成例を示すブロック図である。
【図５】図４に示すストレージ装置の機能構成例を示すブロック図である。
【図６】論理アドレステーブルの一例を示す図である。
【図７】ページテーブルの一例を示す図である。
【図８】圧縮データ展開情報の一例を示す図である。
【図９】読込キャッシュリストの一例を示す図である。
【図１０】書込Ｉ／Ｏ（Input / Output）処理の一例を示すフローチャートである。
【図１１】データ書出処理の一例を示すフローチャートである。
【図１２】閾値変更処理の一例を説明するフローチャートである。
【図１３】閾値変更処理の一例を説明するフローチャートである。
【図１４】読込フラグ更新処理の一例を説明するフローチャートである。
【図１５】グループ化数変更処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【００１７】
以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。例えば、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
【００１８】
〔１〕一実施形態
〔１−１〕データの圧縮について
上述のように、ブロックストレージでは、記憶装置等のデバイスに書き込むデータをブロック（例えば８ＫＢ（バイト））単位で個別に圧縮するよりも、複数のブロックを一括して圧縮することで、データの圧縮率を向上させることができる（図１参照）。
【００１９】
一方、図２に例示するように、書込データを圧縮処理により一括圧縮した場合、圧縮データ（例えば複数ブロックを圧縮した２０ＫＢのデータ）から一部のデータを読み出すためには、読出対象の部分まで全ての圧縮データを展開することになる。例えば、最終ブロックを読み出すためには、当該圧縮データ全体の展開処理が行なわれる。なお、読出対象の部分まで全てを展開した後、読出対象のデータがピックアップされる。
【００２０】
より具体的に、例えば、図３に示すように、ＬＢＡ（Logical Block Address）０〜３にデータが書き込まれた後（書込１）、時間を置いて別の書き込みがＬＢＡ４〜７に発生し（書込２）、ＬＢＡ０〜７のデータを一括圧縮した場合を想定する。
【００２１】
この場合において、ＬＢＡ４〜７のデータに読出要求（読込Ｉ／Ｏ；Input / Output）が発生すると、圧縮されたデータの全体が展開された上で、ＬＢＡ４〜７のデータが読込データとしてピックアップされる。このとき、ＬＢＡ０〜３の部分のデータは読み込まれないため、読込Ｉ／Ｏ及び展開処理が無駄になる。
【００２２】
このように、複数のブロックを一括で圧縮する場合、圧縮率は向上する可能性があるが、圧縮データのうちの先頭ブロック以外の部分（例えば中間又は最終ブロック）に対する部分読み出しのアクセス性能に悪影響を与える可能性がある。
【００２３】
一実施形態では、以下に説明する手法により、圧縮データの部分読み出しが発生する可能性を低減させることで、データの圧縮率の向上とアクセス性能低下の軽減とを両立させる。
【００２４】
〔１−２〕一実施形態の構成例
以下、図４〜図９を参照して、一実施形態の構成例について説明する。
【００２５】
〔１−２−１〕システムの構成例
図４は、一実施形態に係るシステム１の構成例を示すブロック図である。図４に示すように、システム１は、例示的に、１以上（図４の例では複数）のストレージ装置２、及び、ホスト装置５をそなえてよい。
【００２６】
ストレージ装置２は、情報処理システムの一例である。ストレージ装置２は、例示的に、１以上のＣＭ（Controller Module）３、及び、１以上（図４の例では複数）の記憶装置４をそなえてよく、ホスト装置５に対して記憶装置４の記憶領域を提供してよい。例えば、ストレージ装置２は、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）を用いて複数の記憶装置４にデータを分散又は冗長化した状態で保存してもよい。
【００２７】
ＣＭ３は、ホスト装置５から複数の記憶装置４に対する種々のＩ／Ｏを制御する情報処理装置（コンピュータ）又は制御装置の一例である。
【００２８】
記憶装置４は、種々のデータやプログラム等を格納するハードウェアの一例である。記憶装置４としては、例えば、ＳＳＤ（Solid State Drive）等の半導体ドライブ装置、不揮発性メモリ、ＨＤＤ（Hard Disk Drive）等の磁気ディスク装置等が挙げられる。不揮発性メモリとしては、例えば、フラッシュメモリ、ＳＣＭ（Storage Class Memory）、ＲＯＭ（Read Only Memory）等が挙げられる。
【００２９】
なお、ストレージ装置２は、ＣＭ３を格納する制御筐体としてのＣＥ（Controller Enclosure）、及び、記憶装置４を搭載するＤＥ（Drive Enclosure）をそなえ、複数のストレージ装置２によってスケールアウト型のストレージシステムを構成してもよい。なお、この場合、ＣＥ及びＤＥの双方が記憶装置４を搭載してもよい。
【００３０】
ホスト装置５は、ネットワーク６を介して１以上のストレージ装置２に対して書込要求や読出要求等の種々のＩ／Ｏを発行する。Ｉ／Ｏのアクセス対象は、ホスト装置５が認識する論理アドレス、例えばＬＢＡによって指定されてよい。なお、以下の説明で、「Ｉ／Ｏ」とは、アクセス対象の論理アドレス、及び、書込対象のデータ（書込アクセスの場合）を少なくとも含むアクセス要求であるものとする。
【００３１】
ホスト装置５としては、例えば業務サーバや基幹サーバ、或いはクライアントマシン等のコンピュータが挙げられる。図４には１台のホスト装置５が示されているが、システム１には複数のホスト装置５が存在してもよい。
【００３２】
ネットワーク６は、例えば、ＳＡＮ（Storage Area Network）を含んでよく、図示しない１以上のスイッチ等のネットワーク機器を含んでもよい。また、ネットワーク６は、インターネット、又は、ＬＡＮ（Local Area Network）若しくはＷＡＮ（Wide Area Network）等を含んでもよい。ストレージ装置２とホスト装置５との間は、ネットワーク６を介して、例えばＦＣ（Fibre Channel）又はｉＳＣＳＩ（Internet Small Computer System Interface）等に準拠した光ケーブル又はイーサネット（登録商標）ケーブルによって接続されてよい。
【００３３】
〔１−２−２〕ＣＭのハードウェア構成例
次に、図４を参照して、ＣＭ３のハードウェア構成例について説明する。図４に示すように、ＣＭ３は、例示的に、プロセッサ３ａ、メモリ３ｂ、記憶部３ｃ、ＣＡ（Channel Adaptor）３ｄ−１、ＤＡ（Device Adaptor）３ｄ−２、入出力部３ｅ、及び、読取部３ｆをそなえてよい。
【００３４】
プロセッサ３ａは、種々の制御や演算を行なう演算処理装置の一例である。プロセッサ３ａは、各ブロック３ｂ〜３ｆとバスで相互に通信可能に接続されてよい。プロセッサ３ａとしては、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡ等の集積回路（ＩＣ）が用いられてもよい。なお、ＣＰＵはCentral Processing Unitの略称であり、ＭＰＵはMicro Processing Unitの略称であり、ＤＳＰはDigital Signal Processorの略称である。また、ＡＳＩＣはApplication Specific Integrated Circuitの略称であり、ＦＰＧＡはField Programmable Gate Arrayの略称である。
【００３５】
メモリ３ｂは、種々のデータやプログラムを格納するハードウェアの一例である。メモリ３ｂとしては、例えばＲＡＭ（Random Access Memory）等の揮発性メモリが挙げられる。なお、メモリ３ｂの一部の記憶領域は、記憶装置４に対するアクセス等に用いられるデータやプログラムを一時的に記憶するキャッシュメモリとして用いられてもよい。
【００３６】
記憶部３ｃは、種々のデータやプログラム等を格納するハードウェアの一例である。記憶部３ｃとしては、例えば、ＨＤＤ等の磁気ディスク装置、ＳＳＤ等の半導体ドライブ装置、不揮発性メモリ等の各種記憶装置が挙げられる。記憶部３ｃは、ＣＭ３の各種機能の全部若しくは一部を実現するプログラム３ｈを格納してもよい。プロセッサ３ａは、例えば、記憶部３ｃに格納されたプログラム３ｈをメモリ３ｂに展開して実行することにより、ＣＭ３の機能を実現できる。
【００３７】
ＣＡ３ｄ−１は、ホスト装置５との間の接続及び通信の制御等を行なう通信インタフェースの一例である。ＤＡ３ｄ−２は、記憶装置４との間の接続及び通信の制御等を行なう通信インタフェースの一例である。また、ＣＭ３は、作業者の作業端末との間の接続及び通信の制御等を行なう通信インタフェースをそなえてもよく、当該通信インタフェースを用いて、ネットワーク６又は図示しない他のネットワークからプログラム３ｈをダウンロードしてもよい。
【００３８】
入出力部３ｅは、マウス、キーボード、操作ボタン等の入力部、並びにディスプレイ又はプリンタ等の出力部の少なくとも一部を含んでよい。
【００３９】
読取部３ｆは、記録媒体３ｇに記録されたデータやプログラムを読み出すリーダの一例である。読取部３ｆは、記録媒体３ｇを接続又は挿入可能な接続端子又は装置を含んでもよい。読取部３ｆとしては、例えばＵＳＢ（Universal Serial Bus）等に準拠したアダプタ、記録ディスクへのアクセスを行なうドライブ装置、ＳＤカード等のフラッシュメモリへのアクセスを行なうカードリーダ等が挙げられる。なお、記録媒体３ｇにはプログラム３ｈが格納されてもよい。
【００４０】
記録媒体３ｇとしては、例示的に、磁気／光ディスクやフラッシュメモリ等の非一時的なコンピュータ読取可能な記録媒体が挙げられる。磁気／光ディスクとしては、例示的に、フレキシブルディスク、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）、ブルーレイディスク、ＨＶＤ（Holographic Versatile Disc）等が挙げられる。フラッシュメモリとしては、例示的に、ＵＳＢメモリやＳＤカード等が挙げられる。なお、ＣＤとしては、例示的に、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ等が挙げられる。また、ＤＶＤとしては、例示的に、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ＋Ｒ、ＤＶＤ＋ＲＷ等が挙げられる。
【００４１】
上述したＣＭ３のハードウェア構成は例示である。従って、ＣＭ３内でのハードウェアの増減（例えば任意のブロックの追加や削除）、分割、任意の組み合わせでの統合、バスの追加又は省略等は適宜行なわれてもよい。
【００４２】
〔１−２−３〕ストレージ装置の説明
次に、一実施形態に係るストレージ装置２の動作について簡単に説明する。一実施形態に係るストレージ装置２は、圧縮データの部分読み出しが発生する可能性を低減させるために、一括圧縮の対象となる複数のブロックを選択的に決定する。
【００４３】
例えば、近い時間差で（例えばほぼ同時に）書き込まれたデータは、読み出されるときも一緒に読み出される可能性が高いという傾向がある。このようなＩ／Ｏの一例としては、ホスト装置５からのＩ／Ｏリクエストのレベルでは分割されておりアクセス先のＬＢＡも大きく異なるが、ホスト装置５において一連の処理で発生する読み書きである場合が挙げられる。
【００４４】
従って、近い時間差で書き込まれたデータをまとめて圧縮しても、部分読み出しによるアクセス性能の低下が起きにくいことが期待できる。
【００４５】
例えば、ストレージ装置２のＣＭ３は、データの書込アクセスの時刻をデータごとに管理情報に記録してよい。また、ＣＭ３は、書込アクセスに係るデータを記憶するメモリからデータを記憶装置４に書き出す際に、管理情報に基づいて、複数の書込アクセスの時刻の差分が閾値以下である複数のデータを一括圧縮のグループに決定してよい。そして、ＣＭ３は、決定したグループに対応する複数のデータを一括圧縮し、一括圧縮で得られた圧縮データを記憶装置４に書き込んでよい。
【００４６】
このように、一実施形態に係るＣＭ３は、上述した書込アクセスの時間的局所性を利用して、一括圧縮を行なう複数のブロックを選択的に決定することで、部分読み出しが発生する可能性を低減させることできる。これにより、データの圧縮率の向上とアクセス性能低下の軽減とを両立させることができる。
【００４７】
〔１−２−４〕ＣＭの機能構成例
次に、ＣＭ３の機能構成例について説明する。図５に示すように、ＣＭ３は、例示的に、メモリ部３１、キャッシュメモリ３２、Ｉ／Ｏ制御部３３、重複除去部３４、制御部３５、及び、圧縮展開処理部３６をそなえてよい。
【００４８】
メモリ部３１は、ＣＭ３の制御やＩ／Ｏの管理に関する種々の情報を記憶する。一例として、メモリ部３１は、論理アドレステーブル３１２、ページテーブル３１４、圧縮データ展開情報３１６、及び、読込キャッシュリスト３１８の情報を記憶してよい。メモリ部３１は、例えば、図４に示すメモリ３ｂ又は記憶部３ｃの一部の記憶領域によって実現されてよい。
【００４９】
論理アドレステーブル３１２及びページテーブル３１４は、論理アドレスと物理アドレスとを対応付ける情報の一例である。
【００５０】
図６に論理アドレステーブル３１２の一例を示す。論理アドレステーブル３１２は、論理アドレスとキャッシュメモリ３２のキャッシュページとを対応付ける情報である。
【００５１】
論理アドレステーブル３１２には、例示的に、論理アドレス、及び、ページＩＤ（Identifier）が設定されてよい。論理アドレスは例えばＬＢＡであってよい。ページＩＤはキャッシュページを特定するＩＤである。論理アドレスが示すブロックのサイズとキャッシュページのサイズとは一致してよく、一例として８ＫＢである。
【００５２】
図７にページテーブル３１４の一例を示す。ページテーブル３１４は、キャッシュページごとに、圧縮データの記憶装置４上の物理アドレスや、重複除去処理及び圧縮処理に関する情報を管理する管理情報の一例である。
【００５３】
ページテーブル３１４は、例示的に、ページＩＤ、ブロックのハッシュ値、参照数、物理アドレス、圧縮データ内オフセット、タイムスタンプ［ｍｓ］、及び、ボリュームＩＤが設定されてよい。ページＩＤは、論理アドレステーブル３１２のページＩＤに対応するＩＤであり、ページテーブル３１４のエントリとなる。
【００５４】
ブロックのハッシュ値及び参照数は、重複除去処理に関する情報である。
【００５５】
重複除去処理は、同一のデータを有するブロック（以下、「同一ブロック」と表記する）をストレージ装置２内に複数存在させないための処理である。重複除去（排除）技術により、データ量を削減し容量効率を向上させることができる。これにより、コスト削減のほか、フラッシュメモリやＳＳＤ等の装置寿命の延長を実現できる。
【００５６】
重複除去処理では、ＣＭ３（例えば後述する重複除去部３４）は、ストレージ装置２に対して同一ブロックが書き込まれた場合に、２個目のブロック以降は記憶装置４への記録を行なわずに最初に書き込んだブロックの参照数をインクリメントする。これにより、１つの物理アドレスに対して複数の論理アドレスが対応付けられた状態になる。
【００５７】
このように、論理アドレスと物理アドレスとが１対１に対応しない場合があるため、ページテーブル３１４には論理アドレスの代わりにページＩＤを設定し、論理アドレステーブル３１２のページＩＤをキーにページテーブル３１４を参照できるようになっている。換言すれば、論理アドレステーブル３１２には、複数の論理アドレスに同一のページＩＤを設定することが許容される。
【００５８】
なお、重複除去処理における同一ブロックの判定では、例えば、ブロックのハッシュ値の算出及び比較が行なわれてよい。ハッシュ値（フィンガープリント）は、元となるブロックに対してハッシュ関数による所定の演算を行なうことで得られる固定長のデータである。
【００５９】
図７の説明に戻り、ブロックのハッシュ値には、重複除去処理で演算されたハッシュ値が設定されてよい。参照数には、重複が発生していないブロックに“１”（初期値）が設定され、重複排除が行なわれたブロックには、重複排除が行なわれるごとに１を加算した値が設定される。例えば、図７のページＩＤ“０”の参照数“２”は、重複排除が１回行なわれたことを示している。
【００６０】
物理アドレスには、当該ブロックを含む圧縮データの記憶装置４上の物理アドレスが設定されてよい。圧縮データ内オフセットには、当該圧縮データにおけるブロックのオフセット（位置）が設定されてよい。上述のように、一実施形態では複数のブロックが一括して圧縮されるため、圧縮データ内オフセットによって、圧縮データ内のどの位置にブロックが存在するのかを示している。
【００６１】
なお、圧縮データは単一のデータであるため、図７のページＩＤ“１”及び“２”の物理アドレス“0xbcde”のように、同一の圧縮データに含まれる複数のブロックには、同一の物理アドレスが設定されてよい。
【００６２】
物理アドレス及び圧縮データ内オフセットは、後述する制御部３５及び圧縮展開処理部３６により登録される情報であるため、キャッシュメモリ３２にデータが格納される段階ではこれらの情報は未登録でもよい。
【００６３】
タイムスタンプ［ｍｓ］には、ＣＭ３が書込Ｉ／Ｏを受け付けたときの時刻が設定されてよい。なお、図７の例では、便宜上、タイムスタンプを時間的な前後関係を表す数値（“１０”、“１００”、“１０１”等の値が大きいほど新しい時刻を示す値）としているが、実際には、日付及び時刻（例えばミリ秒単位まで）を含む情報が設定されてよい。
【００６４】
なお、重複排除が行なわれた場合、該当するページＩＤのタイムスタンプは更新されない。換言すれば、重複排除の有無に関わらず、ページＩＤには最初に書込アクセスのあった時刻が設定されてよい。
【００６５】
ボリュームＩＤは、Ｉ／Ｏの対象となるボリュームを識別する情報の一例である。例えば、ボリュームＩＤとしては、ブロックを書き込むＬＵＮ（Logical Unit Number）が挙げられる。タイムスタンプ及びボリュームＩＤは、後述する制御部３５による制御に用いられる。
【００６６】
図５の説明に戻り、キャッシュメモリ３２は、記憶装置４に対するアクセス等に用いられるデータやプログラムを一時的に記憶する。一例として、キャッシュメモリ３２は、書込Ｉ／Ｏに係る書込データや、読込Ｉ／Ｏに応じて記憶装置４から読み出された読出データ等を記憶してよい。
【００６７】
キャッシュメモリ３２に記憶されたデータは、ＣＭ３によるキャッシュページ置換アルゴリズムによって、所定のタイミングで記憶装置４に書き出されたり、キャッシュメモリ３２から解放されたりしてよい。キャッシュメモリ３２は、例えば、図４に示すメモリ３ｂの一部の記憶領域によって実現されてよい。
【００６８】
Ｉ／Ｏ制御部３３は、ホスト装置５に対するＩ／Ｏの受付及び応答等のＩ／Ｏに関する種々の制御を行なう。
【００６９】
例えば、Ｉ／Ｏ制御部３３は、書込Ｉ／Ｏを受け付けると、タイムスタンプを取得し、取得したタイムスタンプを、受け付けた書込Ｉ／Ｏとともに重複除去部３４に渡す。
【００７０】
また、Ｉ／Ｏ制御部３３は、読込Ｉ／Ｏを受け付けると、論理アドレステーブル３１２を参照して読出対象の論理アドレスのデータがキャッシュメモリ３２に存在するか否かを判定する。キャッシュヒットの場合、Ｉ／Ｏ制御部３３は、キャッシュメモリ３２からデータを読み出して読込Ｉ／Ｏに応答する。一方、キャッシュミスの場合、Ｉ／Ｏ制御部３３は、受け付けた読込Ｉ／Ｏを制御部３５に渡す。
【００７１】
重複除去部３４は、Ｉ／Ｏ制御部３３が受け付けた書込Ｉ／Ｏに対して、重複除去処理を行なう。
【００７２】
例えば、重複除去部３４は、書込対象のデータのハッシュ値を演算し、演算により得られたハッシュ値をキーにページテーブル３１４を検索して、得られたハッシュ値と同一のハッシュ値を持つキャッシュページの有無を判定する。
【００７３】
得られたハッシュ値と同一のハッシュ値を持つキャッシュページが存在する場合、書込対象のデータと同一のデータがキャッシュページ内に存在することを意味する。従って、重複除去部３４は、書込対象のデータを重複除去し（キャッシュメモリ３２には書き込まず）、同一のハッシュ値を持つキャッシュページの参照数をインクリメントする。また、重複除去部３４は、論理アドレステーブル３１２に書込先の論理アドレス（例えばＬＢＡ）のエントリを追加し、ページＩＤに同一のハッシュ値を持つキャッシュページのページＩＤを登録する。
【００７４】
一方、得られたハッシュ値と同一のハッシュ値を持つキャッシュページが存在しない場合、重複除去部３４は、論理アドレステーブル３１２に書込先の論理アドレスのエントリを追加し、新たなページＩＤを登録する。また、重複除去部３４は、ページテーブル３１４に対して、論理アドレステーブル３１２に登録したページＩＤのエントリを追加する。例えば、重複除去部３４は、ページテーブル３１４のエントリに対して、演算したハッシュ値、参照数“１”、Ｉ／Ｏ制御部３３から取得したタイムスタンプ、及び、書込対象のボリュームＩＤ等の情報を設定する。
【００７５】
以上のように、Ｉ／Ｏ制御部３３及び重複除去部３４は、データの書込アクセスの時刻をデータごとにページテーブル３１４に記録する記録部の一例である。
【００７６】
また、重複除去部３４は、以下の処理を行なう抑止部の一例である。この処理は、第１のデータを第１のアドレスに書き込む第１の書込アクセスの時刻がページテーブル３１４に記録された状態で、第１のデータと同一の第２のデータを第２のアドレスに書き込む第２の書込アクセスを受け付けた場合に行なわれる。この場合、抑止部としての重複除去部３４は、第２のアドレスを第１のデータに関連付けるとともに、キャッシュメモリ３２への第２のデータの格納を抑止する。
【００７７】
制御部３５は、キャッシュメモリ３２から記憶装置４へのデータの書き出し、記憶装置４からキャッシュメモリ３２へのデータの読み出し、及び、メモリ部３１が記憶する情報の更新等の種々の制御を行なう。制御部３５は、例示的に、書出制御部３５２及びパラメータ変更部３５４をそなえてよい。
【００７８】
書出制御部３５２は、一括圧縮のグループに関する制御を行なう。書出制御部３５２による制御は、例えば、キャッシュメモリ３２から記憶装置４に対するデータの書き出しの際に行なわれてよい。
【００７９】
例えば、書出制御部３５２は、書出対象のブロックを順に選択し、ページテーブル３１４を参照して、選択したブロックの書込Ｉ／Ｏのタイムスタンプとその直前の書込Ｉ／Ｏのタイムスタンプとの差分を算出する。そして、書出制御部３５２は、算出した差分が閾値（Ｔ）以下であれば、当該選択したブロックをその直前の書込Ｉ／Ｏに係るブロックが属する一括圧縮のグループ（以下、「圧縮グループ」と表記する場合がある）に含める。
【００８０】
閾値（Ｔ）［秒］は、ブロックをグループ化するか否かの判断に用いるタイムスタンプ差判断閾値である。閾値（Ｔ）の初期値は、例えば、ストレージ装置２に対して連続書き込みを行なった場合のアクセス間隔の実測値（Ｃ）［秒］（事前に計測した値でよい）の５倍程度の時間であってよい。閾値（Ｔ）は、パラメータ変更部３５４によって動的に変更されてよい。
【００８１】
なお、ページテーブル３１４には、書込順にエントリが作成されるため、書出制御部３５２は、選択したブロックのタイムスタンプと、１つ上のエントリ（キャッシュページ）のタイムスタンプとを比較して差分を算出すればよい。
【００８２】
また、書出制御部３５２は、グループの判定に、以下の（ａ）〜（ｃ）のうちの少なくとも１つの条件を考慮してもよい。以下の説明では、書出制御部３５２が、タイムスタンプ差の判定に加えて、（ａ）〜（ｃ）の全ての条件を満たす場合に、選択したブロックをその直前に書き込まれたブロックの圧縮グループに加えると判定するものとする。
【００８３】
（ａ）重複排除が行なわれていない（参照数が“１”である）。
書出制御部３５２は、重複除去が行なわれたデータ（ブロック）については、一括圧縮の対象から除外してよい。重複除去が行なわれたデータを一括圧縮のグループに含めないことで、圧縮グループに対する一連の読み出しとは異なるタイミングで圧縮グループの部分読み出しが発生する可能性を低減できる。
【００８４】
そこで、書出制御部３５２は、ページテーブル３１４を参照して、選択したブロックの参照数が“１”である場合、すなわち重複排除対象でない場合に、条件（ａ）を満たす（選択したブロックを一括圧縮のグループに加える）と判定してよい。一方、書出制御部３５２は、重複排除されたブロックを、一括圧縮のグループに含めるデータの候補から除外する。
【００８５】
（ｂ）同一のボリュームＩＤである。
ホスト装置５から近い時間に発生した複数の書込Ｉ／Ｏがいずれも同一のボリュームから書き込まれたＩ／Ｏである場合、これらの書込Ｉ／Ｏは一連の書込アクセスである可能性が高い。一方、複数の書込Ｉ／Ｏが近い時間に発生していてもこれらが異なるボリュームから書き込まれたＩ／Ｏであれば、これらの書込Ｉ／ＯはＩ／Ｏの発行時刻は近いものの互いに関連しない書込アクセスであると考えられる。
【００８６】
そこで、書出制御部３５２は、ページテーブル３１４を参照して、選択したブロックのボリュームＩＤと、その直前に書き込まれたブロックのボリュームＩＤとが一致する場合に、条件（ｂ）を満たすと判定してよい。換言すれば、書出制御部３５２は、同一のボリュームに属する複数のブロックを、一括圧縮グループに含めるデータの候補とする。
【００８７】
（ｃ）グループ内のブロック数がグループ化数（Ｎ）に達していない。
データの圧縮率を高めるためには圧縮グループに多くのブロックを含めることが有効であるが、圧縮グループ内のブロック数が多くなるほど、部分読み出しが発生する可能性も高くなる。
【００８８】
そこで、後述するパラメータ変更部３５４により、一括圧縮のグループに含めるブロック数の上限であるグループ化数（Ｎ）を動的に変更し、最適なグループ化数の上限を設定する。なお、グループ化数（Ｎ）の初期値としては、ブロックサイズやストレージ装置２の利用形態等により異なるが、例えば“８”等の数値が挙げられる。
【００８９】
書出制御部３５２は、圧縮グループ内のブロック数がグループ化数（Ｎ）に達していない場合に、条件（ｃ）を満たすと判定してよい。
【００９０】
書出制御部３５２は、書出対象の全てのブロックについて順に選択して上記の判定を行ない、選択したブロックが直前に書き込まれたブロックとは異なるグループであると判定されるまで、ブロックを圧縮グループに追加する。
【００９１】
なお、直前及び直後に書き込まれたブロックのいずれとも同じグループに属さないと判定されたブロック（例えば重複排除が行なわれたブロック）は、個別圧縮するグループに切り替えられ、単一のブロックとして圧縮されることになる。
【００９２】
書出制御部３５２によって所属するグループが判定されると、判定されたグループの１以上のブロックが圧縮展開処理部３６によって圧縮され、圧縮データが記憶装置４に書き込まれる。
【００９３】
以上のように、書出制御部３５２は、キャッシュメモリ３２からデータを記憶装置４に書き出す際に、ページテーブル３１４に基づいて、書込アクセスの時刻の差分が閾値以下である複数のデータを一括圧縮のグループに決定する決定部の一例である。
【００９４】
なお、書出制御部３５２又は圧縮展開処理部３６は、ページテーブル３１４に対して、圧縮グループを決定したとき、又は、圧縮データを記憶装置４に書き込んだときに、圧縮データ内オフセット及び物理アドレスを設定してよい。
【００９５】
パラメータ変更部３５４は、圧縮データに対する読込アクセスの状況に応じて、閾値（Ｔ）やグループ化数（Ｎ）等のパラメータを変更する。パラメータ変更部３５４による処理には、例えば、以下の（ｉ）〜（iii）の少なくとも１つの処理が含まれてよい。
【００９６】
（ｉ）閾値（Ｔ）の変更処理（減少制御）
パラメータ変更部３５４は、読込アクセスの際に、記憶装置４に格納された圧縮データのうちの先頭以外の領域のデータに対して読出アクセスが発生した場合、換言すれば部分読み出しが発生した場合、以下の処理を行なう。
【００９７】
例えば、パラメータ変更部３５４は、ページテーブル３１４を参照して、圧縮グループ内における、読込アクセスが発生したブロックのタイムスタンプと、その直前のブロックのタイムスタンプとの差分（Δｔ）を算出する。算出したΔｔがストレージ装置２に対する連続アクセスで発生するリクエスト間隔（Ｃ）（上述した実測値）よりも長い場合、パラメータ変更部３５４は、Δｔに近づくように閾値（Ｔ）を減少させる、又は、閾値（Ｔ）にΔｔの値をセットする。
【００９８】
圧縮データからの部分読み出しが発生する理由の１つとして、複数のブロックを圧縮グループに加える際の判断条件である閾値（Ｔ）が大きいことが挙げられる。そこで、パラメータ変更部３５４は、閾値（Ｔ）が連続アクセスで発生するリクエスト間隔（Ｃ）以下にならない範囲で閾値（Ｔ）をΔｔに近づけることで、閾値（Ｔ）をより小さい（制限した）値に調整するのである。
【００９９】
（ii）閾値（Ｔ）の変更処理（増加制御）
パラメータ変更部３５４は、読込アクセスの際に、記憶装置４に格納された圧縮データであって単一のデータを圧縮した圧縮データに対して読出アクセスが発生した場合（個別圧縮データを展開する場合）、以下の処理を行なう。
【０１００】
例えば、パラメータ変更部３５４は、ページテーブル３１４を参照して、個別圧縮されたブロックのタイムスタンプと、その直前に読み込まれたブロックの書き込みタイムスタンプとの差分（Δｔ）を算出する。Δｔが判定値（Ｌ）よりも小さい場合、パラメータ変更部３５４は、Δｔに近づくように閾値（Ｔ）を増加させる、又は、閾値（Ｔ）にΔｔの値をセットする。なお、判定値（Ｌ）は、２つの書込アクセスが互いに関連のないアクセスであると見做す上で十分な経過時間であり、例えば、“１秒”等の時間である。
【０１０１】
Δｔが判定値（Ｌ）よりも小さい場合、個別圧縮されたブロックと、その直前に書き込まれたブロックとは、必ずしも互いに関連のないアクセスによるデータであるとはいえない。換言すれば、これらのデータブロックは、タイムスタンプ差分が閾値（Ｔ）よりも大きいものの、一連の書込アクセスによるデータの可能性もある。そこで、パラメータ変更部３５４は、閾値（Ｔ）が判定値（Ｌ）以上にならない範囲で閾値（Ｔ）をΔｔに近づけることで、閾値（Ｔ）をより大きい値に調整するのである。
【０１０２】
（iii）グループ化数（Ｎ）の変更処理
パラメータ変更部３５４は、展開された圧縮データが読込キャッシュ（キャッシュメモリ３２）から追い出される際、又は、読込キャッシュに展開してから一定時間経過後に、以下の処理を行なう。
【０１０３】
例えば、パラメータ変更部３５４は、展開された圧縮データのうちの全体の領域（例えば圧縮グループに属する全ブロック）に対する実際に読込アクセスされた領域（例えばブロック）の割合を算出する。そして、パラメータ変更部３５４は、算出した割合が所定の範囲（例えば（ＵＬ）〜（ＵＨ）の範囲）に収まらない場合に、グループ化数の上限である（Ｎ）の値を変化させる。
【０１０４】
一例として、パラメータ変更部３５４は、算出した割合が（ＵＬ）よりも小さい場合には、グループ化数（Ｎ）を減少させてよい。なお、グループ化数（Ｎ）の下限（Ｎｍｉｎ）を設けてもよい。また、パラメータ変更部３５４は、算出された割合が（ＵＨ）よりも大きい場合には、グループ化数（Ｎ）を増加させてよい。なお、グループ化数（Ｎ）の上限（Ｎｍａｘ）を設けてもよい。
【０１０５】
なお、（ＵＬ）は、圧縮データ読み込み後の利用率の判断基準（第１基準値）であり、例えば“２０％”等の値である。（ＵＨ）は、圧縮データ読み込み後の利用率の判断基準（第２基準値）であり、例えば“８０％”等の値である。（Ｎｍｉｎ）は、（Ｎ）の取り得る最小値であり、１以上（Ｎｍａｘ）未満の整数である。（Ｎｍｉｎ）の一例として、“２”等の値が挙げられる。（Ｎｍａｘ）は、Ｎの取り得る最大値であり、（Ｎｍｉｎ）よりも大きい整数である。（Ｎｍａｘ）の一例として、“３２”等の値が挙げられる。
【０１０６】
パラメータ変更部３５４は、展開された圧縮データに係る利用率を算出するために、圧縮データ展開情報３１６及び読込キャッシュリスト３１８を用いてよい。
【０１０７】
図８に圧縮データ展開情報３１６の一例を示す。圧縮データ展開情報３１６は、圧縮データごとに、圧縮グループ内の各エントリ（例えば各ブロック）に対する読込状況を管理する情報である。圧縮データ展開情報３１６には、例示的に、物理アドレス、及び、読込フラグが設定されてよい。
【０１０８】
物理アドレスは、圧縮データを識別する情報の一例である。なお、圧縮データを識別できる値であれば、物理アドレス以外の情報が用いられてもよい。読込フラグは、圧縮グループ内のエントリ数により可変長のフラグであり、１ビットで１エントリ（ブロック）に対する読込アクセスの有無を示す情報である。
【０１０９】
図９に読込キャッシュリスト３１８の一例を示す。読込キャッシュリスト３１８は、キャッシュメモリ３２内のキャッシュページのアドレス等の情報と当該キャッシュページに記憶された圧縮データとを対応付けた情報である。
【０１１０】
読込キャッシュリスト３１８は、例えば、キャッシュ管理に用いられるＬＲＵ（Least Recently Used）のリストに対して、圧縮データを識別できる値を付加した情報であってもよい。このため、読込キャッシュリスト３１８におけるキャッシュページのアドレスや当該キャッシュページに読み込まれた圧縮データの物理アドレス（圧縮データが格納されている物理アドレス）は、制御部３５によるキャッシュ制御によって更新されてよい。
【０１１１】
例えば、パラメータ変更部３５４は、制御部３５及び圧縮展開処理部３６により読込Ｉ／Ｏに応じてキャッシュメモリ３２に展開された圧縮データ（展開データ）について、読込キャッシュリスト３１８を参照して当該圧縮データの物理アドレスを特定する。そして、パラメータ変更部３５４は、特定した物理アドレスをキーに圧縮データ展開情報３１６を検索し、圧縮グループの読込フラグに対して、読込対象のブロックに対応するビットに“１”を立てる。なお、読込フラグのビットは、例えばページテーブル３１４に設定された圧縮データ内オフセットに基づき特定できる。
【０１１２】
なお、パラメータ変更部３５４は、圧縮データ展開情報３１６に該当する物理アドレスのエントリが存在しない場合には、当該物理アドレスのエントリを作成し、圧縮グループ内のブロック数と同一ビット数のビット列の読込フラグを追加してよい。このとき追加される読込フラグは、読込対象のブロックに対応するビットに“１”が設定され、それ以外のビットには“０”が設定されたビット列となる。
【０１１３】
パラメータ変更部３５４は、圧縮データ展開情報３１６の圧縮データに対応する読込フラグについて、全ビット数に対する“１”が設定されたビット数の割合を算出することで、展開された圧縮データに係る利用率を算出できる。
【０１１４】
なお、上記（ｉ）〜（iii）において、閾値（Ｔ）やグループ化数（Ｎ）を減少又は増加させる際に、パラメータ変更部３５４は、閾値（Ｔ）やグループ化数（Ｎ）に対して、定数等の加算若しくは減算、又は、定数等の乗算若しくは除算等を行なってよい。
【０１１５】
以上のように、パラメータ変更部３５４は、記憶装置４に格納された圧縮データに対する読出アクセスに基づいて、閾値（Ｔ）の値を変更する制御を行なう閾値変更部の一例である。
【０１１６】
また、パラメータ変更部３５４は、展開された圧縮データに対する読出アクセスの状況を管理し、展開された圧縮データがキャッシュメモリ３２から解放される際に、読出アクセスの状況に基づいて、上限（Ｎ）を変更する上限変更部の一例である。
【０１１７】
図５の説明に戻り、圧縮展開処理部３６は、制御部３５の制御の下、キャッシュメモリ３２から読み出された少なくとも１つのブロックに対してデータ圧縮処理を行ない、圧縮データを記憶装置４に書き込む。例えば、圧縮展開処理部３６は、書出制御部３５２から一括圧縮グループの情報、例えば一括圧縮グループに属する複数のブロックのキャッシュページの情報（一例としてページＩＤ）を通知されることでデータ圧縮処理の対象ブロックを認識してよい。
【０１１８】
また、圧縮展開処理部３６は、制御部３５の制御の下、記憶装置４から読み出した圧縮データに対してデータ展開処理を行ない、展開した少なくとも１つのブロックをキャッシュメモリ３２に格納する。
【０１１９】
なお、データ圧縮処理はＺＩＰ等による圧縮と処理自体は同様である。データ圧縮処理の圧縮アルゴリズムは、特に限定しないが、一実施形態では、ＬＺ７７、ＬＺＳＳ、ＬＺ４等の辞書式圧縮アルゴリズムが用いられることを前提とする。データ展開処理は、データ圧縮処理に対応したアルゴリズムにより実施されてよい。
【０１２０】
以上のように、圧縮展開処理部３６は、書出制御部３５２が決定したグループに対応する複数のデータを一括圧縮し、一括圧縮して得られた圧縮データを記憶装置４に書き込む圧縮処理部の一例である。
【０１２１】
また、圧縮展開処理部３６は、記憶装置４から読み出した圧縮データをキャッシュメモリ３２に展開する展開処理部の一例である。
【０１２２】
上述したストレージ装置２によれば、複数のブロックを一括して圧縮するため、圧縮処理の際に、複数回現れるデータ列についてブロックを跨いで検出できる。従って、圧縮率の向上を図ることができる。特に、ブロックストレージにおいては、ブロックサイズが４ＫＢや８ＫＢ等の比較的小さいサイズであるため、複数のブロックを一括して圧縮することは、ブロックを個別に圧縮する場合と比べて、圧縮率の向上により効果的である。
【０１２３】
また、ストレージ装置２により、近い時間に書き込まれたブロック、すなわち同時にアクセスが発生する可能性が高いブロックをグループ化するため、部分読み出しが発生しにくい状況を作ることができ、アクセス性能の低下を軽減できる。
【０１２４】
さらに、ストレージ装置２により、部分読み出しが発生した際に、閾値（Ｔ）の調整が行なわれるため、以後に発生する書込アクセスに対して、アクセス特性に応じた適切なグループ化を行なうことができる。
【０１２５】
また、ストレージ装置２により、圧縮データの読込状況に応じて、グループ化を行なう上限数（Ｎ）を動的に変更できるため、アクセス性能低下を防止又は軽減できる。
【０１２６】
さらに、ストレージ装置２により、一括圧縮されたデータを読込キャッシュに展開する際に、将来読み込みが発生する可能性のあるデータ（例えば今回の読込対象とは異なるブロック）もまとめて展開される。従って、プリフェッチ（先読み）と同様の効果を奏することができる。
【０１２７】
また、ストレージ装置２により、複数の論理アドレスから参照されているブロック、すなわち重複排除されたブロックは他のブロックとグループ化されない。
【０１２８】
例えば、第１及び第２の論理アドレスから参照されている重複排除されたブロックを、第１の論理アドレスによる書込アクセスと同時に書き込まれたブロックとともに一括圧縮した場合を考える。この場合、圧縮データは、第１の論理アドレスに対する読込Ｉ／Ｏでは、他のブロックとともに例えばデータの先頭から読み出される可能性が高い。一方、第２の論理アドレスに対する読込Ｉ／Ｏでは、当該重複排除されたブロックが単独で部分読み出しされる可能性が高い。
【０１２９】
従って、重複排除されたブロックを他のブロックとグループ化しないことにより、アクセス性能の低下を防止又は軽減できる。
【０１３０】
〔１−３〕動作例
次に、図１０〜図１５を参照して、上述の如く構成されたストレージ装置２の動作例を説明する。
【０１３１】
〔１−３−１〕書込Ｉ／Ｏ処理
はじめに、図１０を参照して、ストレージ装置２がホスト装置５からデータの書込Ｉ／Ｏを受信する場合の動作例を説明する。
【０１３２】
Ｉ／Ｏ制御部３３は、書込Ｉ／Ｏを受信すると（ステップＳ１）、タイムスタンプを取得し（ステップＳ２）、書込Ｉ／Ｏ及びタイムスタンプを重複除去部３４に渡す。
【０１３３】
重複除去部３４は、書込Ｉ／Ｏに基づき重複除去処理を行なう（ステップＳ３）。例えば、重複除去部３４は、書込Ｉ／Ｏに含まれる書込データのハッシュ値を演算し、演算したハッシュ値とページテーブル３１４に登録されたハッシュ値とを比較して、書込データに一致するハッシュ値を持つキャッシュページが存在するか否かを判定する。
【０１３４】
重複除去が行なわれない場合（ステップＳ４、Ｓ４でＮｏ）、すなわち、書込データに一致するハッシュ値を持つキャッシュページが存在しない場合、重複除去部３４は、データをキャッシュメモリ３２に配置する（ステップＳ５）。
【０１３５】
また、重複除去部３４は、論理アドレステーブル３１２及びページテーブル３１４にそれぞれエントリを追加して、これらのテーブル３１２及び３１４を更新する（ステップＳ６）。このとき、重複除去部３４は、ページテーブル３１４のエントリにはＩ／Ｏ制御部３３から通知されたタイムスタンプを付加する。
【０１３６】
一方、ステップＳ３で重複除去が行なわれた場合（ステップＳ４でＹｅｓ）、すなわち、書込データに一致するハッシュ値を持つキャッシュページが存在する場合、重複除去部３４は、テーブル３１２及び３１４を更新する（ステップＳ８）。このとき、重複除去部３４は、論理アドレステーブル３１２にエントリを追加し、ページテーブル３１４の該当するキャッシュページの参照数をインクリメントする。
【０１３７】
ステップＳ６又はＳ７でテーブル３１２及び３１４を更新すると、Ｉ／Ｏ制御部３３は、ホスト装置５に対してデータの書込Ｉ／Ｏに対する完了応答を送信し（ステップＳ８）、処理が終了する。
【０１３８】
〔１−３−２〕データ書出処理
次に、図１１を参照して、キャッシュメモリ３２からデバイス（例えば記憶装置４）へのデータ書出処理の動作例について説明する。
【０１３９】
制御部３５の書出制御部３５２は、キャッシュページ置換アルゴリズムに従ったキャッシュメモリ３２のデータ書出タイミングを待ち受ける（ステップＳ１１、Ｓ１１でＮｏ）。データ書出タイミングになると（ステップＳ１１でＹｅｓ）、書出制御部３５２は、新しいグループを作成する（ステップＳ１２）。
【０１４０】
書出制御部３５２は、キャッシュメモリ３２にデバイスへ書き出すページが存在するか否かを判定する（ステップＳ１３）。書き出すページが存在する場合（ステップＳ１３でＹｅｓ）、書出制御部３５２は、デバイスに書き出すページを１つ選択する（ステップＳ１４）。
【０１４１】
そして、書出制御部３５２は、ページテーブル３１４を参照して、以下のステップＳ１５〜Ｓ１８の判定を行なう。なお、ステップＳ１５〜Ｓ１７の少なくとも１つの判定は省略されてもよい。
【０１４２】
書出制御部３５２は、選択したページの重複除去に係る参照数が“１”か否かを判定する（ステップＳ１５）。参照数が“１”の場合（ステップＳ１５でＹｅｓ）、書出制御部３５２は、選択したページのブロックがグループ内のブロックと同一のボリュームか否かを判定する（ステップＳ１６）。
【０１４３】
グループ内のブロックと同一のボリュームの場合（ステップＳ１６でＹｅｓ）、書出制御部３５２は、グループ内のブロック数がブロック化数（Ｎ）未満か否かを判定する（ステップＳ１７）。
【０１４４】
グループ内のブロック数がブロック化数（Ｎ）未満の場合（ステップＳ１７でＹｅｓ）、書出制御部３５２は、選択したページのブロックのタイムスタンプと、その直前に書き込まれたブロックのタイムスタンプとの差を演算する。そして、書出制御部３５２は、タイムスタンプ差が閾値（Ｔ）以下か否かを判定する（ステップＳ１８）。
【０１４５】
タイムスタンプ差が閾値（Ｔ）以下の場合（ステップＳ１８でＹｅｓ）、書出制御部３５２は、グループに選択したページのブロックを追加し（ステップＳ１９）、処理がステップＳ１３に移行する。
【０１４６】
一方、ステップＳ１５〜Ｓ１８のいずれかでＮｏの場合、書出制御部３５２は、グループにブロックが存在するか否かを判定する（ステップＳ２０）。
【０１４７】
グループにブロックが存在する場合（ステップＳ２０でＹｅｓ）、書出制御部３５２は、圧縮展開処理部３６に当該グループの圧縮を指示する。圧縮展開処理部３６は、指示されたグループを圧縮し（ステップＳ２１）、圧縮データをデバイスへ書き出す（ステップＳ２２）。なお、書出制御部３５２又は圧縮展開処理部３６は、圧縮データを書き込んだ物理アドレス、及び、圧縮データ内の各ブロックのオフセットの情報を登録することでページテーブル３１４を更新してよい（ステップＳ２３）。
【０１４８】
ステップＳ２１で圧縮した圧縮グループには、選択したページのブロックの直前（及びそれよりも前）に書き込まれたブロックが含まれているが、選択したページのブロックは含まれていない。そこで、書出制御部３５２は、新しいグループを作成し（ステップＳ２４）、当該グループにステップＳ１４で選択したページのブロックを追加し（ステップＳ２５）、処理がステップＳ１３に移行する。
【０１４９】
一方、ステップＳ２０でグループにブロックが存在しない場合（ステップＳ２０でＮｏ）、書出制御部３５２は、既存のグループにステップＳ１４で選択したページのブロックを追加し（ステップＳ２５）、処理がステップＳ１３に移行する。
【０１５０】
また、ステップＳ１３で書き出すページが存在しない場合（ステップＳ１３でＮｏ）、書出制御部３５２は、グループにブロックが存在するか否かを判定する（ステップＳ２６）。
【０１５１】
グループにブロックが存在する場合（ステップＳ２６でＹｅｓ）、書出制御部３５２は、圧縮展開処理部３６に当該グループの圧縮を指示する。圧縮展開処理部３６は、指示されたグループを圧縮し（ステップＳ２７）、圧縮データをデバイスへ書き出す（ステップＳ２８）。また、書出制御部３５２又は圧縮展開処理部３６は、圧縮データを書き込んだ物理アドレス、及び、圧縮データ内の各ブロックのオフセットの情報を登録することで、ページテーブル３１４を更新し（ステップＳ２９）、処理が終了する。
【０１５２】
一方、ステップＳ２６でグループにブロックが存在しない場合（ステップＳ２６でＮｏ）、処理が終了する。
【０１５３】
〔１−３−３〕閾値変更処理（減少制御）
次に、図１２を参照して、タイムスタンプ差判断閾値（Ｔ）の変更処理（減少制御）の動作例について説明する。
【０１５４】
記憶装置４からの圧縮データの部分読み出しが発生すると（ステップＳ３１）、制御部３５のパラメータ変更部３５４は以下の処理を行なう。なお、Ｉ／Ｏ制御部３３から読込Ｉ／Ｏを通知された制御部３５は、ページテーブル３１４を参照し、読み出し対象のブロックの圧縮データ内オフセットが“０”以外の場合に、読込Ｉ／Ｏが部分読み出しであると判断してよい。
【０１５５】
パラメータ変更部３５４は、ページテーブル３１４を参照し、部分読み出し対象のブロックと、同じ圧縮データ中の直前に書き込まれたブロックとのタイムスタンプ差分を算出する（ステップＳ３２）。そして、パラメータ変更部３５４は、タイムスタンプ差分がリクエスト間隔（実測値）（Ｃ）よりも大きいか否かを判定する（ステップＳ３３）。
【０１５６】
タイムスタンプ差分がリクエスト間隔（Ｃ）よりも大きい場合（ステップＳ３３でＹｅｓ）、パラメータ変更部３５４は、閾値（Ｔ）を減少させ（ステップＳ３４）、処理が終了する。一方、タイムスタンプ差分がリクエスト間隔（Ｃ）よりも大きくない場合（ステップＳ３３でＮｏ）、閾値（Ｔ）は変更されず（ステップＳ３５）、処理が終了する。
【０１５７】
なお、図１２の例において、制御部３５及び圧縮展開処理部３６による記憶装置４からの部分読み出しの処理は、ステップＳ３２〜Ｓ３５の処理の前後に又は並行して行なわれてよい。
【０１５８】
〔１−３−４〕閾値変更処理（増加制御）
次に、図１３を参照して、タイムスタンプ差判断閾値（Ｔ）の変更処理（増加制御）の動作例について説明する。
【０１５９】
記憶装置４からの個別ブロックの読み出しが発生すると（ステップＳ４１）、パラメータ変更部３５４は以下の処理を行なう。なお、Ｉ／Ｏ制御部３３から読込Ｉ／Ｏを通知された制御部３５は、ページテーブル３１４を参照し、読み出し対象のブロックの物理アドレスが前後に書き込まれたブロックのいずれとも異なる場合に、読込Ｉ／Ｏが個別ブロックの読み出しであると判断してよい。
【０１６０】
パラメータ変更部３５４は、ページテーブル３１４を参照し、読出対象のブロックと直前に書き込まれたブロックとのタイムスタンプ差分を算出する（ステップＳ４２）。そして、パラメータ変更部３５４は、タイムスタンプ差分が判定値（Ｌ）よりも小さいか否かを判定する（ステップＳ４３）。
【０１６１】
タイムスタンプ差分が判定値（Ｌ）よりも小さい場合（ステップＳ４３でＹｅｓ）、パラメータ変更部３５４は、閾値（Ｔ）を増加させ（ステップＳ４４）、処理が終了する。一方、タイムスタンプ差分が判定値（Ｌ）よりも小さくない場合（ステップＳ４３でＮｏ）、閾値（Ｔ）は変更されず（ステップＳ４５）、処理が終了する。
【０１６２】
なお、図１３の例において、制御部３５及び圧縮展開処理部３６による記憶装置４からの個別ブロックの読み出しの処理は、ステップＳ４２〜Ｓ４５の処理の前後に又は並行して行なわれてよい。
【０１６３】
〔１−３−５〕読込フラグ更新処理
次に、図１４を参照して、読込フラグの更新処理の動作例について説明する。
【０１６４】
記憶装置４からの圧縮データの読み出しが発生すると（ステップＳ５１）、パラメータ変更部３５４は、圧縮データ展開情報３１６の読込フラグを更新し（ステップＳ５２）、処理が終了する。例えば、パラメータ変更部３５４は、圧縮データ展開情報３１６における該当する圧縮グループの読込フラグに対して、読込対象のブロックに対応するビットに“１”を立てる。
【０１６５】
〔１−３−６〕グループ化数変更処理
次に、図１５を参照して、グループ化数（上限）（Ｎ）の変更処理の動作例について説明する。
【０１６６】
読込キャッシュの追い出しが発生する、又は、圧縮データを読込キャッシュに展開してから設定時間が経過すると（ステップＳ６１）、パラメータ変更部３５４は、以下の処理を行なう。なお、読込キャッシュの追い出しの発生や、圧縮データを読込キャッシュに展開してから設定時間が経過したことは、制御部３５によるキャッシュ制御によって判断されてよい。
【０１６７】
パラメータ変更部３５４は、圧縮データ展開情報３１６にエントリが存在するか否かを判定する（ステップＳ６２）。
【０１６８】
圧縮データ展開情報３１６にエントリが存在する場合（ステップＳ６２でＹｅｓ）、パラメータ変更部３５４は、圧縮データ展開情報３１６から１つの行（エントリ）を選択し、該当行を削除する（ステップＳ６３）。
【０１６９】
そして、パラメータ変更部３５４は、追出対象のブロックが属する圧縮グループにおいて読み出された領域の割合を算出する（ステップＳ６４）。一例として、パラメータ変更部３５４は、ステップＳ６３で削除した行の圧縮グループの読込フラグに“０１００１”が設定されている場合、２（“１”のビット数）／５（全ビット数）＝０．４（４０％）を得る。
【０１７０】
パラメータ変更部３５４は、算出した割合が（ＵＬ）よりも小さいか否かを判定する（ステップＳ６５）。算出した割合が（ＵＬ）よりも小さい場合（ステップＳ６５でＹｅｓ）、パラメータ変更部３５４は、（Ｎ）を減少（例えば“１”減少）させ（ステップＳ６６）、処理がステップＳ６２に移行する。
【０１７１】
一方、算出した割合が（ＵＬ）よりも小さくない場合（ステップＳ６５でＮｏ）、パラメータ変更部３５４は、算出した割合が（ＵＨ）よりも大きいか否かを判定する（ステップＳ６７）。
【０１７２】
算出した割合が（ＵＨ）よりも大きい場合（ステップＳ６７でＹｅｓ）、パラメータ変更部３５４は、（Ｎ）を増加（例えば“１”増加）させ（ステップＳ６８）、処理がステップＳ６２に移行する。
【０１７３】
算出した割合が（ＵＨ）よりも大きくない場合（ステップＳ６７でＮｏ）、（Ｎ）の値は変化せず（ステップＳ６９）、処理がステップＳ６２に移行する。
【０１７４】
また、ステップＳ６２において、圧縮データ展開情報３１６にエントリが存在しない場合（ステップＳ６２でＮｏ）、すなわち、読込キャッシュからの追い出しに係る全ての圧縮データについて、（Ｎ）の変更処理の判定が終わっている場合、処理が終了する。
【０１７５】
〔２〕その他
上述した一実施形態に係る技術は、以下のように変形、変更して実施することができる。
【０１７６】
例えば、図５に示すＣＭ３の各機能ブロックは、それぞれ任意の組み合わせで併合してもよく、分割してもよい。
【０１７７】
また、ＣＭ３の機能は、マルチプロセッサやマルチコアのプロセッサ３ａによって実現されてもよい。
【０１７８】
〔３〕付記
以上の実施形態に関し、さらに以下の付記を開示する。
【０１７９】
（付記１）
データの書込アクセスの時刻をデータごとに管理情報に記録する記録部と、
書込アクセスに係るデータを記憶するメモリからデータを記憶装置に書き出す際に、前記管理情報に基づいて、書込アクセスの時刻の差分が閾値以下である複数のデータを一括圧縮のグループに決定する決定部と、
前記決定したグループに対応する複数のデータを一括圧縮し、前記一括圧縮して得られた圧縮データを前記記憶装置に書き込む圧縮処理部と、をそなえる
ことを特徴とする、情報処理装置。
【０１８０】
（付記２）
前記決定部は、前記メモリから前記記憶装置に書き出すデータを順に選択し、選択したデータの書込アクセスの時刻と、当該選択したデータの直前の書込アクセスの時刻との差分を算出し、算出した差分が前記閾値以下である場合に、前記選択したデータを前記直前の書込アクセスに係るデータが属する一括圧縮のグループに含める、
ことを特徴とする、付記１記載の情報処理装置。
【０１８１】
（付記３）
前記記憶装置に格納された圧縮データに対する読出アクセスに基づいて、前記閾値の値を変更する制御を行なう閾値変更部をそなえる
ことを特徴とする、付記１又は付記２記載の情報処理装置。
【０１８２】
（付記４）
前記変更部は、記憶装置に格納された圧縮データのうちの先頭以外の領域のデータに対して読出アクセスが発生した場合に、前記閾値の値を減少させる制御を行なう、
ことを特徴とする、付記３記載の情報処理装置。
【０１８３】
（付記５）
前記変更部は、前記記憶装置に格納された圧縮データであって単一のデータを圧縮した圧縮データに対して読出アクセスが発生した場合に、前記閾値の値を増加させる制御を行なう、
ことを特徴とする、付記３又は付記４記載の情報処理装置。
【０１８４】
（付記６）
前記決定部は、前記一括圧縮のグループに含めるデータ数の上限に基づき、前記決定を行なう、
ことを特徴とする、付記１〜５のいずれか１項記載の情報処理装置。
【０１８５】
（付記７）
前記記憶装置から読み出した圧縮データを前記メモリに展開する展開処理部と、
前記展開された圧縮データに対する読出アクセスの状況を管理し、前記展開された圧縮データが前記メモリから解放される際に、前記読出アクセスの状況に基づいて、前記上限を変更する上限変更部と、をそなえる
ことを特徴とする、付記６記載の情報処理装置。
【０１８６】
（付記８）
第１のデータを第１のアドレスに書き込む第１の書込アクセスの時刻が前記管理情報に記録された状態で、前記第１のデータと同一の第２のデータを第２のアドレスに書き込む第２の書込アクセスを受け付けた場合に、前記第２のアドレスを前記第１のデータに関連付けるとともに、前記メモリへの前記第２のデータの格納を抑止する抑止部をそなえ、
前記決定部は、前記一括圧縮のグループに含めるデータの候補から前記第１のデータを除外する、
ことを特徴とする、付記１〜７のいずれか１項記載の情報処理装置。
【０１８７】
（付記９）
前記決定部は、同一のボリュームに属する複数のデータを、前記一括圧縮のグループに含めるデータの候補とする、
ことを特徴とする、付記１〜８のいずれか１項記載の情報処理装置。
【０１８８】
（付記１０）
データを記憶する記憶装置と、
前記記憶装置に対する制御を行なう情報処理装置と、をそなえ、
前記情報処理装置は、
データの書込アクセスの時刻をデータごとに管理情報に記録する記録部と、
書込アクセスに係るデータを記憶するメモリからデータを記憶装置に書き出す際に、前記管理情報に基づいて、書込アクセスの時刻の差分が閾値以下である複数のデータを一括圧縮のグループに決定する決定部と、
前記決定したグループに対応する複数のデータを一括圧縮し、前記一括圧縮して得られた圧縮データを前記記憶装置に書き込む圧縮処理部と、をそなえる
ことを特徴とする、情報処理システム。
【０１８９】
（付記１１）
コンピュータに、
データの書込アクセスの時刻をデータごとに管理情報に記録し、
書込アクセスに係るデータを記憶するメモリからデータを記憶装置に書き出す際に、前記管理情報に基づいて、書込アクセスの時刻の差分が閾値以下である複数のデータを一括圧縮のグループに決定し、
前記決定したグループに対応する複数のデータを一括圧縮し、前記一括圧縮して得られた圧縮データを前記記憶装置に書き込む
処理を実行させることを特徴とする、情報処理プログラム。
【０１９０】
（付記１２）
前記決定は、前記メモリから前記記憶装置に書き出すデータを順に選択し、選択したデータの書込アクセスの時刻と、当該選択したデータの直前の書込アクセスの時刻との差分を算出し、算出した差分が前記閾値以下である場合に、前記選択したデータを前記直前の書込アクセスに係るデータが属する一括圧縮のグループに含める、
ことを特徴とする、付記１１記載の情報処理プログラム。
【０１９１】
（付記１３）
前記コンピュータに、
前記記憶装置に格納された圧縮データに対する読出アクセスに基づいて、前記閾値の値を変更する制御を行なう、
処理を実行させることを特徴とする、付記１１又は付記１２記載の情報処理プログラム。
【０１９２】
（付記１４）
前記変更する制御は、記憶装置に格納された圧縮データのうちの先頭以外の領域のデータに対して読出アクセスが発生した場合に、前記閾値の値を減少させる制御を含む、
ことを特徴とする、付記１３記載の情報処理プログラム。
【０１９３】
（付記１５）
前記変更する制御は、前記記憶装置に格納された圧縮データであって単一のデータを圧縮した圧縮データに対して読出アクセスが発生した場合に、前記閾値の値を増加させる制御を含む、
ことを特徴とする、付記１３又は付記１４記載の情報処理プログラム。
【０１９４】
（付記１６）
前記決定は、前記一括圧縮のグループに含めるデータ数の上限に基づき、前記決定を行なうことを含む、
ことを特徴とする、付記１１〜１５のいずれか１項記載の情報処理プログラム。
【０１９５】
（付記１７）
前記コンピュータに、
前記記憶装置から読み出した圧縮データを前記メモリに展開し、
前記展開された圧縮データに対する読出アクセスの状況を管理し、前記展開された圧縮データが前記メモリから解放される際に、前記読出アクセスの状況に基づいて、前記上限を変更する、
処理を実行させることを特徴とする、付記１６記載の情報処理プログラム。
【０１９６】
（付記１８）
前記コンピュータに、
第１のデータを第１のアドレスに書き込む第１の書込アクセスの時刻が前記管理情報に記録された状態で、前記第１のデータと同一の第２のデータを第２のアドレスに書き込む第２の書込アクセスを受け付けた場合に、前記第２のアドレスを前記第１のデータに関連付けるとともに、前記メモリへの前記第２のデータの格納を抑止する、
処理を実行させ、
前記決定は、前記一括圧縮のグループに含めるデータの候補から前記第１のデータを除外することを含む、
ことを特徴とする、付記１１〜１７のいずれか１項記載の情報処理プログラム。
【０１９７】
（付記１９）
前記決定は、同一のボリュームに属する複数のデータを、前記一括圧縮のグループに含めるデータの候補とすること含む、
ことを特徴とする、付記１１〜１８のいずれか１項記載の情報処理プログラム。
【０１９８】
（付記２０）
データの書込アクセスの時刻をデータごとに管理情報に記録し、
書込アクセスに係るデータを記憶するメモリからデータを記憶装置に書き出す際に、前記管理情報に基づいて、書込アクセスの時刻の差分が閾値以下である複数のデータを一括圧縮のグループに決定し、
前記決定したグループに対応する複数のデータを一括圧縮し、前記一括圧縮して得られた圧縮データを前記記憶装置に書き込む
ことを特徴とする、情報処理方法。
【符号の説明】
【０１９９】
１    システム
２    ストレージ装置
３    ＣＭ
３１    メモリ部
３１２    論理アドレステーブル
３１４    ページテーブル
３１６    圧縮データ展開情報
３１８    読込キャッシュリスト
３２    キャッシュメモリ
３３    Ｉ／Ｏ制御部
３４    重複除去部
３５    制御部
３５２    書出制御部
３５４    パラメータ変更部
３６    圧縮展開処理部
４    記憶装置
５    ホスト装置
６    ネットワーク
【図１】
2018073261.tif 000003
【図２】
2018073261.tif 000004
【図３】
2018073261.tif 000005
【図４】
2018073261.tif 000006
【図５】
2018073261.tif 000007
【図６】
2018073261.tif 000008
【図７】
2018073261.tif 000009
【図８】
2018073261.tif 000010
【図９】
2018073261.tif 000011
【図１０】
2018073261.tif 000012
【図１１】
2018073261.tif 000013
【図１２】
2018073261.tif 000014
【図１３】
2018073261.tif 000015
【図１４】
2018073261.tif 000016
【図１５】
2018073261.tif 000017