(57)【要約】      （修正有）【課題】データの読み出しおよび書き込みに関する性能が向上したストレージアレイ装置を提供する。【解決手段】物理ディスクに記憶されたデータをキャッシュ記憶部に格納するＳ１０１。キャッシュ記憶部に記憶されたデータのうち、論理ディスクにおいて隣り合い、かつ物理ディスクにおいて隣り合っていない、データの組を特定しＳ１０２、特定されたデータの組を含むグループを設定するＳ１０３。グループに属するデータのうちキャッシュされているデータ全てがキャッシュ記憶部から削除される対象となったことを契機としてＳ１０４、物理ディスクにおいてグループに属するデータ全てが連続的に配置されるように、物理ディスクにおける、削除される対象となったデータを格納する範囲を決定するＳ１０５。決定された範囲に、削除される対象となったデータを書き込むＳ１０６。【選択図】図２１
2019113890.tif 000002
【特許請求の範囲】
【請求項１】
物理ディスクに記憶されたデータをキャッシュ記憶部に格納するキャッシュ処理を行うキャッシュ手段と、
前記キャッシュ記憶部に記憶されたデータのうち、論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合っていない、データの組を特定し、特定されたデータの組を含むグループを設定する設定手段と、
前記グループに属するデータのうちキャッシュされているデータ全てが前記キャッシュ記憶部から削除される対象となったことを契機として、前記物理ディスクにおいて前記グループに属するデータ全てが連続的に配置されるように、前記物理ディスクにおける、前記削除される対象となったデータを格納する範囲を決定する決定手段と、
前記決定された範囲に、前記削除される対象となったデータを書き込む書き込み手段と、
を備えるストレージコントローラ。
【請求項２】
前記データの各々は、個別に圧縮されることが可能な単位のデータであり、
前記書き込み手段は、前記削除される対象となったデータの各々を個別に圧縮し、圧縮された各々のデータを前記決定された範囲に格納する、
請求項１に記載のストレージコントローラ。
【請求項３】
前記キャッシュ手段は、前記ストレージコントローラが前記グループに属するデータの一部のデータを読み出すリード要求を受信した場合に、前記グループに属する、前記リード要求の対象でないデータも前記キャッシュ記憶部に格納する、
請求項１または２に記載のストレージコントローラ。
【請求項４】
前記設定手段は、前記ストレージコントローラがいずれの前記グループにも属さないデータを読み出すリード要求を受信した場合、前記キャッシュ記憶部に記憶された、当該リード要求の対象のデータと前記論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合う、データを特定し、特定されたデータと当該リード要求の対象のデータとを含むグループを設定する、
請求項１から３のいずれか一項に記載のストレージコントローラ。
【請求項５】
前記キャッシュ手段は、前記ストレージコントローラが前記グループに属するデータの一部のデータを更新するライト要求を受信した場合に、
前記ライト要求の対象のデータを更新した後のデータのサイズと、当該ライト要求の対象のデータの更新前のデータのサイズと、の比較に基づいて、前記グループに含まれるデータからキャッシュするデータを決定し、決定されたデータをキャッシュする、
請求項１から４のいずれか一項に記載のストレージコントローラ。
【請求項６】
請求項１から５のいずれか一項に記載のストレージコントローラと、
前記キャッシュ記憶部と、
前記物理ディスクを含み、前記論理ディスクが構築されたディスクドライブと、
を含むストレージアレイ装置。
【請求項７】
物理ディスクに記憶されたデータをキャッシュ記憶部に格納するキャッシュ処理を行い、
前記キャッシュ記憶部に記憶されたデータのうち、論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合っていない、データの組を特定し、特定されたデータの組を含むグループを設定し、
前記グループに属するデータのうちキャッシュされているデータ全てが前記キャッシュ記憶部から削除される対象となったことを契機として、前記物理ディスクにおいて前記グループに属するデータ全てが連続的に配置されるように、前記物理ディスクにおける、前記削除される対象となったデータを格納する範囲を決定し、
前記決定された範囲に、前記削除される対象となったデータを書き込む、
データ格納方法。
【請求項８】
前記グループに属するデータの一部のデータを読み出すリード要求を受信した場合に、前記グループに属する、当該リード要求の対象でないデータも前記キャッシュ記憶部に格納する、
請求項７に記載のデータ格納方法。
【請求項９】
物理ディスクに記憶されたデータをキャッシュ記憶部に格納するキャッシュ処理を行うキャッシュ処理と、
前記キャッシュ記憶部に記憶されたデータのうち、論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合っていない、データの組を特定し、特定されたデータの組を含むグループを設定する設定処理と、
前記グループに属するデータのうちキャッシュされているデータ全てが前記キャッシュ記憶部から削除される対象となったことを契機として、前記物理ディスクにおいて前記グループに属するデータ全てが連続的に配置されるように、前記物理ディスクにおける、前記削除される対象となったデータを格納する範囲を決定する決定処理と、
前記決定された範囲に、前記削除される対象となったデータを書き込む書き込み処理と、
をコンピュータに実行させるプログラム。
【請求項１０】
前記キャッシュ処理は、前記コンピュータが前記グループに属するデータの一部のデータを読み出すリード要求を受信した場合に、前記グループに属する、当該リード要求の対象でないデータも前記キャッシュ記憶部に格納する、
請求項９に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、記憶領域に対するデータの読み出しおよび書き込みの技術に関する。
【背景技術】
【０００２】
様々な種類のデータを利用する技術の発展に伴い、扱われるデータの量は急速に増加している。大容量のデータを扱う場合、データを圧縮する技術が有用である。データを圧縮後にディスク等の記憶装置に保存する技術において、データが格納される領域を仮想化し、上位装置は仮想的なディスクである論理ディスクを対象にデータの操作を行う技術がある。
【０００３】
ライトバック等によりデータが実在の物理ディスクへ格納される際、論理ディスク上では連続するデータが、物理ディスク上では離散して格納される場合がある。頻繁に更新が行われるほど、離散の度合いは強くなる。離散の度合いが強いと、物理ディスクからのデータの読み出しにかかる時間は増加し、その結果、アクセスの速さが低下する。
【０００４】
アクセスの速さが離散的な配置によって低下することを抑制する技術は、いくつか知られている。特許文献１の技術では、格納される圧縮データがディスク上の特定の割り当て領域に収まらない場合、その割り当て領域の近傍の未使用部分を探し、近傍の物理ブロックを確保する。近傍でない物理ブロックには圧縮データを極力割り当てないようにすることで、シーク動作の回数を抑える。しかし、特許文献１の技術は、一度離散して格納されたデータをディスク上で連続させる技術ではない。
【０００５】
データの離散的な配置を少なくする方法としては、デフラグメンテーションと呼ばれる、データが連続になるように並べ替えを行う方法が一般に知られているが、一般的なデフラグメンテーションは、実行に時間を要する。特に頻繁にアクセスされるデータに対してデフラグメンテーションを行うと、デフラグメンテーション中におけるそのデータへのアクセスが制限されるため、総合的にはアクセスの速さが低下する場合がある。
【０００６】
他に、データの離散的な配置を少なくする技術を開示する文献として、特許文献２および３がある。
【０００７】
特許文献２の技術では、固定のサイズを有する複数の圧縮グループが定義される。圧縮グループ内の圧縮データを論理アドレスの昇順に再配列するステップや、圧縮グループにデータ領域を割り当てるステップが、記載されている。更新により元のデータ領域を超えるサイズになった圧縮データに対しては、例外領域が割り当てられる。特許文献２には、データが例外領域に書き込まれることによるデータの断片化を修正する処理も記載されるが、この処理は定期的に行われる処理であり、デフラグメンテーションと同様の処理である。
【０００８】
特許文献３の技術では、データはセグメントという、圧縮できる単位で管理される。特許文献３のディスク制御装置は、ホストコンピュータから見える論理的なアドレスと物理アドレスとの間の順序性ができるだけ保たれるようなアルゴリズムにより、圧縮したデータの物理アドレスを決定する。
【０００９】
以下は、本願発明に部分的に関連する発明を記載する文献である。
【００１０】
特許文献４は、圧縮データを複数集めて固定長の圧縮グループを作る技術を開示している。この技術では、ディスク制御装置が、ある一定の論理セクタサイズを持つサイズの論理グループが生成されるように、論理グループを構成する圧縮データを選び取ることで、ディスク使用率が高まる。
【００１１】
特許文献５は、データのコピーをコピー先のストレージ装置に送信する際に、ストレージ装置がコピーをディスクに記録する際におけるディスクの磁気ヘッドの移動時間が短縮されるように、データを並べ替えてから、データをストレージ装置に送信する、という技術を開示している。
【００１２】
特許文献６は、将来処理対象となる可能性のある圧縮データの先読みを行うという技術を開示している。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特許第３４１９５３８号公報
【特許文献２】特開平０８−３２８７４９号公報
【特許文献３】特開平０７−１２９４７０号公報
【特許文献４】特許第３４２６３８５号公報
【特許文献５】特開２０１３−０７３３８８号公報
【特許文献６】特開２０１３−２４６６４６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
特許文献２および４における「圧縮グループ」、特許文献３における「セグメント」は、構成するデータの長さの合計または範囲が予め固定的に決められた、グループである。しかし、グループが異なっているが関連性が高い（例えば、同時に使用される可能性が高い）ようなデータが存在し得る。上記の技術では、そのような、関連性が高いデータが、必ずしも、物理ディスク上で連続して格納されるとは限らない。
【００１５】
本発明は、データの読み出しおよび書き込みに関する性能が向上したストレージアレイ装置を提供することを目的の１つとする。
【課題を解決するための手段】
【００１６】
本発明の一態様に係るストレージコントローラは、物理ディスクに記憶されたデータをキャッシュ記憶部に格納するキャッシュ処理を行うキャッシュ手段と、前記キャッシュ記憶部に記憶されたデータのうち、論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合っていない、データの組を特定し、特定されたデータの組を含むグループを設定する設定手段と、前記グループに属するデータのうちキャッシュされているデータ全てが前記キャッシュ記憶部から削除される対象となったことを契機として、前記物理ディスクにおいて前記グループに属するデータ全てが連続的に配置されるように、前記物理ディスクにおける、前記削除される対象となったデータを格納する範囲を決定する決定手段と、前記決定された範囲に、前記削除される対象となったデータを書き込む書き込み手段と、を備える。
【００１７】
本発明の一態様に係るデータ格納方法は、物理ディスクに記憶されたデータをキャッシュ記憶部に格納するキャッシュ処理を行い、前記キャッシュ記憶部に記憶されたデータのうち、論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合っていない、データの組を特定し、特定されたデータの組を含むグループを設定し、前記グループに属するデータのうちキャッシュされているデータ全てが前記キャッシュ記憶部から削除される対象となったことを契機として、前記物理ディスクにおいて前記グループに属するデータ全てが連続的に配置されるように、前記物理ディスクにおける、前記削除される対象となったデータを格納する範囲を決定し、前記決定された範囲に、前記削除される対象となったデータを書き込む。
【００１８】
本発明の一態様に係るプログラムは、物理ディスクに記憶されたデータをキャッシュ記憶部に格納するキャッシュ処理を行うキャッシュ処理と、前記キャッシュ記憶部に記憶されたデータのうち、論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合っていない、データの組を特定し、特定されたデータの組を含むグループを設定する設定処理と、前記グループに属するデータのうちキャッシュされているデータ全てが前記キャッシュ記憶部から削除される対象となったことを契機として、前記物理ディスクにおいて前記グループに属するデータ全てが連続的に配置されるように、前記物理ディスクにおける、前記削除される対象となったデータを格納する範囲を決定する決定処理と、前記決定された範囲に、前記削除される対象となったデータを書き込む書き込み処理と、をコンピュータに実行させる。
【発明の効果】
【００１９】
本発明によれば、ストレージアレイ装置の、データの読み出しおよび書き込みに関する性能が向上する。
【図面の簡単な説明】
【００２０】
【図１】本発明の第１の実施形態に係るストレージアレイ装置の構成を示すブロック図である。
【図２】第１の実施形態のストレージアレイ装置の処理の流れの概要を示すフローチャートである。
【図３】キャッシュテーブルの一部の例を示す図である。
【図４】アドレス変換テーブルの例を示す図である。
【図５】破棄対象管理テーブルの例を示す図である。
【図６】隣接グループ管理テーブルの例を示す図である。
【図７】隣接グループリンクの例を示す図である。
【図８】物理ディスクにおけるデータの配置の例を示す図である。
【図９】第１のケースの処理の流れを示すフローチャートである。
【図１０】第２のケースの処理の流れを示すフローチャートである。
【図１１】第２のケースの処理における、書き戻し処理の詳細を示すフローチャートである。
【図１２】第３のケースの処理の流れを示すフローチャートである。
【図１３】第４のケースの処理の流れを示すフローチャートである。
【図１４】第５のケースの処理の流れを示すフローチャートである。
【図１５】キャッシュテーブルの一部の別の例を示す図である。
【図１６】アドレス変換テーブルの別の例を示す図である。
【図１７】隣接グループ管理テーブルの別の例を示す図である。
【図１８】隣接グループリンクの別の例を示す図である。
【図１９】物理ディスクにおけるデータの配置の別の例を示す図である。
【図２０】本発明の一実施形態に係るストレージアレイ装置の機能構成を示すブロック図である。
【図２１】本発明の一実施形態に係るストレージアレイ装置の動作の流れを示すフローチャートである。
【図２２】本発明の各実施形態の各部を構成するハードウェアの例を示すブロック図である。
【発明を実施するための形態】
【００２１】
以下、図面を参照しながら、本発明の実施形態を詳細に説明する。
【００２２】
＜＜第１の実施形態＞＞
まず、本発明の第１の実施形態について説明する。
【００２３】
＜構成＞
図１は、第１の実施形態に係るストレージアレイ装置３００の構成を示すブロック図である。
【００２４】
ストレージアレイ装置３００は、ホスト計算機１００との間で、有線または無線の通信により、相互に信号のやりとりが可能であるように構成される。
【００２５】
ストレージアレイ装置３００は、ストレージコントローラ３１０と、ディスクドライブ３２０と、を含む。ディスクドライブ３２０は、ホスト計算機１００が扱うデータを記憶する。ストレージコントローラ３１０は、ディスクドライブ３２０におけるデータの読み出しおよび書き込みを行う。
【００２６】
ディスクドライブ３２０は、データを記憶する実体である物理ディスク８００を備える。物理ディスク８００は、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）である。物理ディスク８００は、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等、他の記憶装置でもよい。
【００２７】
図１において、物理ディスク８００におけるデータの配置の例が、実線の吹き出しの中に示されている。図１で示される例において、１つのセルは４ＫＢ（キロバイト）分の領域を表している。例えば、「データＣ」は、物理アドレスにおける番号１６から３１までの領域に格納されている。
【００２８】
また、ディスクドライブ３２０においては、ホスト計算機１００による、データに対する操作（読み出し（リード）および書き込み（ライト））を行う対象である、論理ディスク３２１が構築されている。論理ディスク３２１におけるデータの配置の例が、図１において破線の吹き出しの中に示されている。例えば、「データＣ」は、論理ディスクにおいては論理アドレスの番号が６４から９５までの範囲を占めるデータである。
【００２９】
ストレージコントローラ３１０は、キャッシュ管理部３１１と、圧縮伸長制御部３１２と、書き戻し部３１３とを備える。
【００３０】
圧縮伸長制御部３１２は、データの圧縮、および圧縮されたデータの伸長（すなわち復元）を行う。圧縮伸長制御部３１２は、データを、ディスクドライブ３２０に格納する際には圧縮する。圧縮伸長制御部３１２は、データをキャッシュする際、すなわち、データをディスクドライブ３２０から読み出してキャッシュ管理部３１１のキャッシュ記憶部４００（後述）へ格納する際には、読み出したデータを伸長する。
【００３１】
書き戻し部３１３は、ディスクへのデータの書き戻し処理、すなわち、キャッシュ記憶部４００に記憶されたデータをディスクドライブ３２０へ格納する処理を、行う。
【００３２】
キャッシュ管理部３１１は、キャッシュデータを管理する。キャッシュ管理部３１１は、キャッシュ記憶部４００と制御情報記憶部５００とに大別される。
【００３３】
キャッシュ記憶部４００は、キャッシュデータを記憶する。キャッシュ記憶部４００は、キャッシュテーブル４１０を用いてキャッシュデータを管理する。キャッシュテーブル４１０は、例えば、キャッシュデータと、キャッシュデータを識別するＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）であるページＩＤと、キャッシュデータの論理アドレスの情報と、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）ビットと、を記憶する。ＬＲＵビットは、数字が小さいほど、ＬＲＵビットが付与されたキャッシュデータが、最後に使用されてからの経過時間が長いデータであることを示す、情報である。
【００３４】
制御情報記憶部５００は、データのキャッシングとディスクドライブへのデータの格納に関する処理の制御を行うための情報を記憶する。制御情報記憶部５００は、アドレス変換テーブル５１０と、破棄対象管理テーブル５２０と、隣接グループ管理テーブル５３０と、隣接グループリンク５４０と、を保持している。本実施形態ではこれらのテーブルは別々のものとして説明されるが、１つのテーブルが複数のテーブルの役割を担っていてもよい。
【００３５】
アドレス変換テーブル５１０は、論理アドレスと物理アドレスとの対応関係を表す情報を記憶するテーブルである。後の説明で参照される図４のテーブル５１０ａおよびテーブル５１０ｂが、アドレス変換テーブル５１０の例である。
【００３６】
破棄対象管理テーブル５２０は、キャッシュデータの破棄（すなわち、キャッシュ記憶部４００からの削除）についての情報を管理するテーブルである。具体的には、破棄対象管理テーブル５２０は、キャッシュデータの各々について、そのキャッシュデータが破棄の対象であるかを示す「破棄対象フラグ」が関連づけられた情報を記憶する。本開示の説明では、例えば、破棄対象フラグの値が「１」であるときは、そのキャッシュデータが破棄の対象であることを意味するとする。後の説明で参照される図５のテーブル５２０ａ、テーブル５２０ｂおよびテーブル５２０ｃが、破棄対象管理テーブル５２０の例である。
【００３７】
隣接グループ管理テーブル５３０は、隣接グループの情報を記憶する。
【００３８】
隣接グループとは、ストレージコントローラ３１０により設定される、データのグループである。隣接グループの構成員は、圧縮データ、または、１つの圧縮データに圧縮され得るひとまとまりのデータ（以下、「圧縮単位データ」と表記する）である。以下では、隣接グループを構成するデータを、「隣接グループに属するデータ」とも表記する。なお、隣接グループは概念上のものであるので、隣接グループについて言及する場合において、隣接グループに属するデータが圧縮されている状態であるか伸長されている状態であるかは、不問である。
【００３９】
隣接グループ管理テーブル５３０は、図６のテーブル５３０ａおよびテーブル５３０ｂのように、設定された隣接グループごとに、隣接グループを識別する番号である隣接グループ番号と、物理アドレスにおける開始位置である先頭物理アドレスと、物理ディスク８００における格納範囲の長さを示すブロック長と、論理アドレスにおける開始位置である先頭論理アドレスと、論理ディスクにおける長さである論理範囲と、を示す情報を、記憶する。
【００４０】
隣接グループリンク５４０は、隣接グループとキャッシュデータとの関係を表す情報を記憶する。後の説明で参照される図７のテーブル５４０ａおよびテーブル５４０ｂが、隣接グループリンク５４０の例である。隣接グループリンク５４０において、キャッシュされているデータのページＩＤが、そのデータが属する隣接グループの隣接グループ番号に関連づけられる。なお、以下、隣接グループリンク５４０においてデータが隣接グループ番号に関連づけられることを、特に「データが隣接グループに紐付けられる」と称する。
【００４１】
また、隣接グループリンク５４０は、隣接グループごとに格納フラグの値を記憶する。格納フラグは、二値の変数であり、例えば「０」または「１」の値をとる。本開示の説明では、格納フラグが「１」であることは、その格納フラグが付与された隣接グループに紐付けられているデータが、キャッシュ記憶部４００から破棄される場合に物理ディスクへ格納される、ということを意味する。
【００４２】
＜動作＞
以下、ストレージアレイ装置３００の動作を説明する。
【００４３】
図２は、ホスト計算機１００がストレージアレイ装置３００にリード要求またはライト要求を発信した場合に開始される、ストレージアレイ装置３００の動作の流れを示すフローチャートである。
【００４４】
ストレージアレイ装置３００は、ホスト計算機１００から要求を受信すると（ステップＳ１）、受信した要求がリード要求であるかライト要求であるかによって異なる処理を行う。なお、リード要求は、データを読み出す要求であり、ライト要求は、データを書き込む（すなわち、対象の範囲のデータを更新する）要求である。
【００４５】
受信した要求がリード要求である場合（ステップＳ２において「リード要求」）、ストレージアレイ装置３００は、キャッシュヒットが起こるかを調べる（ステップＳ３）。キャッシュヒットとは、リード要求の対象となるデータがキャッシュ記憶部４００から見つけ出されることである。キャッシュヒットが起こった場合（ステップＳ３においてＹＥＳ）、ストレージコントローラ３１０は、キャッシュ記憶部４００からリード要求の対象となるデータに対応するキャッシュデータを読み出し、そのキャッシュデータをホスト計算機１００に送信すればよい（ステップＳ９１）。この場合は、ストレージアレイ装置３００は、要求に対する処理を、ステップＳ９１の処理をもって終了する。
【００４６】
キャッシュヒットが起こらなかった場合（ステップＳ３においてＮＯ）、ストレージコントローラ３１０は、リード要求の対象となるデータを含む圧縮単位データ（以下、「リードデータ」）に対して隣接グループが設定されているか（言い換えれば、リードデータがいずれかの隣接グループに属するか）を調べる。具体的には、ストレージコントローラ３１０は、隣接グループ管理テーブル５３０を参照し、リードデータの論理アドレスの範囲が既存の隣接グループの範囲のいずれかに含まれるかを調べればよい。リードデータに対して隣接グループが設定されていない場合（ステップＳ４においてＮＯ）、ストレージコントローラ３１０は、第１のケースの処理（ステップＳ１０）を行う。リードデータに対して隣接グループが設定されている場合（ステップＳ４においてＹＥＳ）、ストレージコントローラ３１０は、第４のケースの処理（ステップＳ４０）を行う。
【００４７】
第１のケースの処理または第４のケースの処理を行う場合は、ストレージコントローラ３１０は、ホスト計算機１００からの要求に対する応答として、リード要求の対象となるデータをホスト計算機１００に送信する（ステップＳ５）。なお、ストレージコントローラ３１０は、このステップＳ５の処理を、第１のケースの処理または第４のケースの処理の途中で行ってもよい。
【００４８】
受信した要求がライト要求である場合（ステップＳ２において「ライト要求」）、ストレージコントローラ３１０は、ライト要求の対象の範囲のデータを、ライト要求に従って更新する（ステップＳ６）。ライト要求の対象の範囲のデータがキャッシュデータとして既にキャッシュ記憶部４００にある場合は、ストレージコントローラ３１０は、そのキャッシュデータを更新すればよい。ライト要求の対象の範囲のデータがキャッシュ記憶部４００に無い場合において、ライト要求の対象が、物理ディスク８００に記憶されている圧縮データの一部の範囲であるときは、ストレージコントローラ３１０は、物理ディスク８００からその圧縮データをキャッシュしてから、キャッシュされたデータにおけるライト要求の対象の範囲を更新する。ライト要求の対象が、物理ディスク８００に記憶されている圧縮データの全部であるときは、ストレージコントローラ３１０は、物理ディスク８００から圧縮データをキャッシュせず、ライト要求が書き込みを要求しているデータをキャッシュ記憶部４００に記録するだけでもよい。
【００４９】
以下、ライトデータによって更新された範囲を含む圧縮単位データを、「ライトデータ」と表記する。
【００５０】
次に、ストレージコントローラ３１０は、ライトデータに対して隣接グループが設定されているかを調べる（ステップＳ７）。ライトデータに対して隣接グループが設定されていない場合（ステップＳ７においてＮＯ）、ストレージコントローラ３１０は、第３のケースの処理（ステップＳ３０）を行う。ライトデータに対して隣接グループが設定されている場合（ステップＳ７においてＹＥＳ）、ストレージコントローラ３１０は、第５のケースの処理（ステップＳ５０）を行う。
【００５１】
以下、第１のケースの処理から第５のケースの処理について、詳細に説明する。なお、第２のケースの処理は、キャッシュの破棄の必要が生じたケースにおける処理である。
【００５２】
［［第１のケースの処理］］
第１のケースは、いずれの隣接グループにも属さないデータの一部または全部に対するリード要求を、ストレージアレイ装置３００が受信するケースである。
【００５３】
以下の説明において、キャッシュテーブル４１０、アドレス変換テーブル５１０、破棄対象管理テーブル５２０、隣接グループ管理テーブル５３０、隣接グループリンク５４０、および、物理ディスク８００におけるデータの配置を、それぞれ図３から図８に示す。
【００５４】
第１のケースが起こる直前の状況の例（以下、「第１の状況例」とも称す）として、以下の状況を想定する。物理ディスク８００には、圧縮データ「Ａ」、「Ｂ」および「Ｃ」が格納されている（図８の配置例８００ａ）。圧縮データ「Ａ」、「Ｂ」および「Ｃ」は、それぞれ、１つの圧縮データに圧縮され得るひとまとまりのデータである圧縮単位データ「Ａ」、「Ｂ」および「Ｃ」のそれぞれが圧縮された状態のデータである。以下の説明では、圧縮データ「Ａ」と圧縮単位データ「Ａ」とを、区別せずにデータ「Ａ」と呼ぶ。データ「Ｂ」およびデータ「Ｃ」も同様である。データ「Ａ」、「Ｂ」および「Ｃ」は、物理ディスク８００においては、圧縮率５０％で圧縮された状態で格納されている。データに付された記号「Ａ」、「Ｂ」および「Ｃ」は、説明のために付された記号である。ストレージアレイ装置３００は、圧縮されたひとまとまりのデータの各々の範囲を認識できていればよく、必ずしもデータを名前によって識別しなくてもよい。
【００５５】
物理ディスク８００においては、図８の配置例８００ａの通り、データ「Ａ」とデータ「Ｂ」とは、互いに離れた位置にある。一方、論理ディスク３２１においては、データ「Ａ」のアドレスの範囲は０〜３１、データ「Ｂ」のアドレスの範囲は３２〜６３、データ「Ｃ」のアドレスの範囲は６４〜９５であるとする。アドレス変換テーブル５１０には、データ「Ａ」、「Ｂ」、および「Ｃ」の論理アドレスの範囲と物理アドレスの範囲とに関する情報が記憶されている（図４のテーブル５１０ａ）。ただし、「データ名」は、本実施形態の説明の便宜のために示されているが、実際にアドレス変換テーブル５１０が「データ名」の情報を有している必要はない。また、アドレス変換テーブル５１０における「格納ブロック個数」とは、物理ディスク８００においてデータが格納されている範囲の長さを、４ＫＢを単位として表した情報である。
【００５６】
キャッシュ記憶部４００のキャッシュテーブル４１０には、圧縮伸長制御部３１２により伸長されたデータ「Ａ」が、ページＩＤが「０」であるキャッシュデータとして、既に格納されているとする（図３のテーブル４１０ａ）。
【００５７】
第１の状況例では、隣接グループは、まだ１つも設定されていないとする。隣接グループ管理テーブル５３０および隣接グループリンク５４０は初期状態（すなわち、隣接グループが１つも設定されていない状態）を表す（図６のテーブル５３０ａおよび図７のテーブル５４０ａ）。また、破棄対象管理テーブル５２０における各ページＩＤの破棄対象フラグの値は、「０」（初期値）である（図５のテーブル５２０ａ）。
【００５８】
以上説明された第１の状況例において、ストレージアレイ装置３００はホスト計算機１００からデータ「Ｂ」のリード要求を受信したとする。そのような場合、データ「Ｂ」には隣接グループが設定されていないので、ストレージコントローラ３１０は、第１のケースの処理（ステップＳ１０）を行う。以下、第１のケースの処理の流れを、上記の第１の状況例に沿って説明する。図９は、第１のケースの処理の流れを示すフローチャートである。
【００５９】
まず、ストレージコントローラ３１０は、リードデータをキャッシュする（ステップＳ１１）。具体的には、ストレージコントローラ３１０は、リードデータを、物理ディスク８００から読み出し、圧縮伸長制御部３１２により伸長する。そして、ストレージコントローラ３１０は、伸長された後のデータをキャッシュ記憶部４００に格納する。キャッシュ記憶部４００は、キャッシュテーブル４１０を、リードデータ「Ｂ」が例えばページＩＤが「１」であるデータとしてキャッシュされていることを示す状態に、更新する（図３のテーブル４１０ｂ）。ストレージコントローラ３１０は、このステップＳ１１の処理の後に、リード要求に対する応答としてデータ「Ｂ」をホスト計算機１００に送信してもよい（図２のステップＳ５）。
【００６０】
次に、ストレージコントローラ３１０は、論理ディスクにおいて、リードデータに隣接するキャッシュデータがあるかを調べる（ステップＳ１２）。すなわち、ストレージコントローラ３１０は、リードデータの論理アドレスの範囲の直前または直後に位置するデータを特定し、特定されたデータがキャッシュ記憶部４００に記憶されているかを調べる。アドレス変換テーブル５１０（図４のテーブル５１０ａ）によれば、リードデータ「Ｂ」の直前にはデータ「Ａ」があり、直後にはデータ「Ｃ」がある。そして、キャッシュテーブル４１０によれば、データ「Ａ」は、キャッシュ記憶部４００に記憶されており、データ「Ｃ」は、キャッシュ記憶部４００に記憶されていない。よって、このような状況例では、ストレージコントローラ３１０は、論理ディスクにおいてリードデータに隣接するキャッシュデータとして、データ「Ａ」が存在することを検出する（ステップＳ１２においてＹＥＳ）。この場合、処理はステップＳ１３に移る。以下、ステップＳ１２で検出されるデータを「隣接データ」と呼ぶ。
【００６１】
なお、隣接データが無かった場合（ステップＳ１２においてＮＯ）は、ストレージコントローラ３１０は、ステップＳ１３以降の処理を行わずに処理を終了する。
【００６２】
ステップＳ１３では、ストレージコントローラ３１０は、リードデータと隣接データとが、物理ディスク８００において隣接しているかを調べる。
【００６３】
図８の配置例８００ａ、および、アドレス変換テーブル５１０（図４のテーブル５１０ａ）で示される通り、リードデータ「Ｂ」の物理アドレスの範囲と隣接データ「Ａ」の物理アドレスの範囲とは、連続しない。すなわち、リードデータ「Ｂ」と隣接データ「Ａ」とは、物理ディスク８００において隣接していない（ステップＳ１３においてＮＯ）。この場合、処理はステップＳ１４に移る。
【００６４】
なお、リードデータと隣接データとが物理ディスク８００において隣接している場合（ステップＳ１３においてＮＯ）は、ストレージコントローラ３１０は、ステップＳ１４以降の処理を行わずに処理を終了してもよい。
【００６５】
ステップＳ１４において、ストレージコントローラ３１０は、隣接データに隣接グループが設定されているかを調べる。第１の状況例では、隣接データ「Ａ」にはいずれの隣接グループも設定されていないため（ステップＳ１４においてＮＯ）、処理はステップＳ１５に移る。
【００６６】
ステップＳ１５において、ストレージコントローラ３１０は、リードデータと隣接データとを含む新たな隣接グループを設定する。具体的には、ストレージコントローラ３１０は、未使用の隣接グループ番号（たとえば番号「０」）を、リードデータと隣接データとが属する新たな隣接グループの隣接グループ番号として選択する。そして、ストレージコントローラ３１０は、隣接グループリンク５４０において、選択された隣接グループ番号にリードデータのページＩＤと隣接データのページＩＤとを紐付ける（図７のテーブル５４０ｂ）。また、ストレージコントローラ３１０は、隣接グループ管理テーブル５３０の選択された隣接グループ番号の欄において、先頭論理アドレス（その隣接グループを構成するデータのうち先頭のデータの、先頭論理アドレス）と、論理範囲（先頭論理アドレスから、その隣接グループを構成するデータのうち最後尾のデータの、論理アドレスの最後尾までの、長さ）を書き込んでもよい。
【００６７】
なお、隣接データが隣接グループに属している場合（ステップＳ１４においてＹＥＳ）は、処理はステップＳ１６に移る。ステップＳ１６では、ストレージコントローラ３１０は、隣接データが属する隣接グループにリードデータを追加する。すなわち、ストレージコントローラ３１０は、隣接グループリンク５４０において、隣接データが属する隣接グループの隣接グループ番号に、リードデータのページＩＤを紐付ける。また、隣接データが属する隣接グループのデータのうちキャッシュされていないデータがあれば、そのデータをキャッシュする（ステップＳ１７）。
【００６８】
ステップＳ１５またはステップＳ１７の処理の後、ストレージコントローラ３１０は、隣接グループリンク５４０において、リードデータが属することとなった隣接グループの格納フラグの値を「１」に設定する（ステップＳ１８）。
【００６９】
以上をもって、ストレージコントローラ３１０は、第１のケースの処理を終了する。
【００７０】
［補足］
ステップＳ１２の処理で２つの隣接データが検出される場合があり得る。この場合、ストレージコントローラ３１０は、検出された２つの隣接データのうちいずれか１つを、ステップＳ１３以降の処理で扱う隣接データとして選択してもよい。
【００７１】
あるいは、ストレージコントローラ３１０は、２つの隣接データに隣接グループが設定されていない場合、２つの隣接データとリードデータとを含む新たな隣接グループを設定してもよい。また、ストレージコントローラ３１０は、２つの隣接データのうち一方に隣接グループが設定されている場合、その隣接グループにリードデータともう一方の隣接データとを追加してもよい。また、ストレージコントローラ３１０は、２つの隣接データの両方に隣接グループが設定されている場合、２つの隣接グループを統合して、元の隣接グループに属するデータと、リードデータとで構成される、１つの隣接グループを設定してもよい。
【００７２】
あるいは、ストレージコントローラ３１０は、２つの隣接データそれぞれに対し、別々の隣接グループを設定してもよい。なお、この場合、リードデータを含む隣接グループが２つ設定されることとなる。
【００７３】
あるいは、ストレージコントローラ３１０は、２つの隣接データとリードデータとのみで構成される新たな隣接グループを設定してもよい。なお、この場合、２つの隣接データは、それぞれ、２つの隣接グループ（すなわち、元の隣接グループと、新たな隣接グループ）に属することがあり得る。
【００７４】
［変形例１］
ストレージコントローラ３１０は、ステップＳ１２において、直前または直後のどちらかの隣接データのみを検出するように構成されてもよい。
【００７５】
［変形例２］
ステップＳ１３の分岐はなくてもよい。すなわち、ストレージコントローラ３１０は、リードデータと隣接データとが物理ディスク８００において隣接しているか否かを問わず、ステップＳ１４以降の処理を行うよう、構成されていてもよい。ただし、リードデータと隣接データとが物理ディスク８００において隣接している場合は、ステップＳ１８の処理が省略されてもよい。
【００７６】
［［第２のケースの処理］］
キャッシュの破棄の必要が生じたケースを第２のケースとして、第２のケースにおけるストレージアレイ装置３００の動作の流れを、図１０のフローチャートを参照しながら説明する。具体的な状況の例（以下、「第２の状況例」とも称す）として、上記第１のケースの説明で例示された一連の処理が終わった後の状況を想定する。
【００７７】
キャッシュの破棄の必要が生じた場合とは、例えば、新たなキャッシュデータをキャッシュ記憶部４００に記憶させるための領域が不足する場合である。この場合、ストレージコントローラ３１０は、まず、破棄対象フラグの値が「０」であるキャッシュデータの中から、削除対象を決定する（ステップＳ２１）。
【００７８】
ストレージコントローラ３１０は、例えば、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）方式に則り、削除対象を決定する。すなわち、ストレージコントローラ３１０は、最後に使用されて（例えば、読み出されることと更新されることとを含む）からの経過時間が最も長いキャッシュデータを、削除対象として決定する。
【００７９】
削除対象を決定した後、ストレージコントローラ３１０は、削除対象に隣接グループが設定されているかを調べる（ステップＳ２２）。例えば、隣接グループリンク５４０（図７のテーブル５４０ｂ）において、削除対象のページＩＤが、いずれかの隣接グループ番号に紐付けられていたら、削除対象に隣接グループが設定されていることがわかる。
【００８０】
削除対象に隣接グループが設定されていなければ（ステップＳ２２においてＮＯ）、ストレージコントローラ３１０は、削除対象をキャッシュ記憶部４００から削除し（ステップＳ９２）、処理を終了してよい。
【００８１】
削除対象に隣接グループが設定されている場合は（ステップＳ２２においてＹＥＳ）、ストレージコントローラ３１０は、破棄対象管理テーブル５２０における、その削除対象の破棄対象フラグの値を「１」に設定する（ステップＳ２３）。ストレージコントローラ３１０は、隣接グループリンク５４０において隣接グループに紐付くキャッシュデータ全ての破棄対象フラグの値が「１」になるまで、その隣接グループを構成するキャッシュデータの削除を行わない。
【００８２】
破棄対象フラグの値が「１」に設定された削除対象が属する隣接グループに紐付くキャッシュデータのいずれかの破棄対象フラグの値が「０」である場合、その隣接グループに紐付くキャッシュデータはまだ削除されない。このような場合は、ストレージコントローラ３１０はステップＳ２１の処理を再び行い、新たな削除対象を決定してもよい（ステップＳ２４においてＮＯ）。
【００８３】
なお、破棄対象フラグの値が「１」であるキャッシュデータをリードの対象とするリード要求が新たにホスト計算機１００によりなされた場合、ストレージコントローラ３１０は、破棄対象フラグの値を「０」に設定してもよい。
【００８４】
図５のテーブル５２０ｂは、ページＩＤが「０」であるキャッシュデータと、ページＩＤが「１」であるキャッシュデータとが、削除対象になった場合の、破棄対象管理テーブル５２０の例を示す。上記２つのページＩＤに関連づけられる破棄対象フラグの値が「１」になっている。
【００８５】
図５のテーブル５４０ｂのように、隣接グループリンク５４０において或る隣接グループに紐付くキャッシュデータ全ての破棄対象フラグの値が「１」になった場合（ステップＳ２４においてＹＥＳ）、ストレージコントローラ３１０は、隣接グループリンク５４０においてその隣接グループの格納フラグが「１」であるかを調べる（ステップＳ２５）。
【００８６】
隣接グループの格納フラグが「１」であれば（ステップＳ２５においてＹＥＳ）、ストレージコントローラ３１０は、その隣接グループに紐付くキャッシュデータを対象とする、書き戻し処理を行う（ステップＳ２６）。この書き戻し処理については後で詳述する。隣接グループの格納フラグが「１」でなければ（ステップＳ２５においてＮＯ）、ストレージコントローラ３１０は、ステップＳ２６の処理を行わなくてよい。
【００８７】
ステップＳ２６の処理の後、またはステップＳ２５の判定の結果が「ＮＯ」であった場合は、ストレージコントローラ３１０は、キャッシュ記憶部４００から、書き戻し処理が行われたキャッシュデータを削除する（ステップＳ２７）（図３のテーブル４１０ｃ）。
【００８８】
そして、ストレージコントローラ３１０は、破棄対象管理テーブル５２０、および隣接グループリンク５４０から、削除したキャッシュデータの情報を消去する（ステップＳ２８）。つまり、ストレージコントローラ３１０は、破棄対象管理テーブル５２０において、削除したキャッシュデータのページＩＤの破棄対象フラグの値を初期値の「０」にする（図５のテーブル５２０ｃ）。また、ストレージコントローラ３１０は、隣接グループリンク５４０を、対象の隣接グループの格納フラグの値が初期値の「０」である状態、および、対象の隣接グループにはどのデータも紐付けられていない状態にする（図７のテーブル５４０ａ）。
【００８９】
以上をもって、ストレージコントローラ３１０は、第２のケースの処理を終了する。
【００９０】
［書き戻し処理の詳細］
ステップＳ２６の、対象のキャッシュデータをディスクドライブ３２０へ格納する書き戻し処理について、図１１のフローチャートを参照しながら詳述する。
【００９１】
まず、ストレージコントローラ３１０内の書き戻し部３１３は、書き戻し処理の対象のキャッシュデータを論理アドレス順に並べる（ステップＳ２６１）。隣接グループ番号「０」に紐付くデータであるデータ「Ａ」およびデータ「Ｂ」が書き戻し処理の対象である場合、書き戻し部３１３は、アドレス変換テーブル５１０（図４のテーブル５１０ａ）の先頭論理アドレスの情報に基づき、２つのデータを、データ「Ａ」、データ「Ｂ」の順に並べる。
【００９２】
次に、書き戻し部３１３は、対象のキャッシュデータが属する隣接グループの格納範囲が設定されているかを調べる（ステップＳ２６２）。すなわち、書き戻し部３１３は、隣接グループ管理テーブル５３０において、対象のキャッシュデータが属する隣接グループ（以下、「対象隣接グループ」とも表記する）の先頭ブロックアドレスとブロック長が設定されているかを調べる。本実施形態では、先頭ブロックアドレスとブロック長との情報は、後述するステップＳ２６５の処理で初めて入力される情報であるから、対象隣接グループの先頭ブロックアドレスとブロック長とが設定されている場合とは、すなわち、対象隣接グループに属する少なくとも一部のキャッシュデータが以前に対象隣接グループに属している状態で書き戻し処理を受けている場合に相当する。対象隣接グループの先頭ブロックアドレスとブロック長とが設定されていない場合とは、すなわち、対象隣接グループに属する全てのキャッシュデータが、対象隣接グループに属してからは一度も書き戻し処理を受けていない場合に相当する。第２の状況例では、隣接グループ管理テーブル５３０は図６のテーブル５３０ａの状態であり、格納範囲は設定されていないので、ステップＳ２６２の判定の結果は「ＮＯ」となる。
【００９３】
ステップＳ２６２の判定の結果が「ＮＯ」である場合、書き戻し部３１３はステップＳ２６４の処理（後述）を行う。
【００９４】
なお、ステップＳ２６２の判定の結果が「ＹＥＳ」である場合、書き戻し部３１３は、書き戻し処理の対象となったキャッシュデータの圧縮後のデータ（以下、「圧縮後書き戻しデータ」と表記する）が、元の圧縮データの格納範囲に収まるかを判定する（ステップＳ２６３）。
【００９５】
元の圧縮データとは、ディスクドライブ３２０に格納されている、対象のキャッシュデータのキャッシュ前のデータに相当する圧縮データのことである。元の圧縮データの格納範囲は、アドレス変換テーブル５１０の「先頭物理アドレス」および「格納ブロック個数」によって示されている。例えば、図４のテーブル５１０ａを参照すると、元の圧縮データ「Ａ」の格納範囲は、番号「１１２」から４ブロック分（１６ＫＢ分）の範囲である。
【００９６】
圧縮後書き戻しデータのサイズは、対象のキャッシュデータが元の圧縮データから更新されていない場合は、元の圧縮データのサイズと同じである。対象のキャッシュデータが元の圧縮データから更新されている場合は、ストレージコントローラ３１０は、圧縮伸長制御部３１２により対象のキャッシュデータを圧縮し、その圧縮後のデータのサイズを特定すればよい。圧縮後のデータのサイズを特定する処理を行うタイミングは問わない。
【００９７】
一例として、圧縮後書き戻しデータが、或る隣接グループを構成するキャッシュデータの全部に相当する場合、書き戻し部３１３は、隣接グループ管理テーブル５３０において示されたその隣接グループのブロック長と、圧縮後書き戻しデータのサイズとを比較すればよい。
【００９８】
ステップＳ２６３の判定の結果が「ＮＯ」である場合、書き戻し部３１３は、ステップＳ２６４の処理を行う。
【００９９】
ステップＳ２６４では、書き戻し部３１３は、圧縮後書き戻しデータの新たな格納範囲を決定する。書き戻し部３１３は、例えば、物理ディスクにおける、圧縮後書き戻しデータが収まる空の領域を任意に特定し、その領域を新たな格納範囲として決定してもよい。圧縮後書き戻しデータの元の圧縮データの格納範囲の直前および直後の少なくともいずれかが空であり、圧縮後書き戻しデータが収まる長さまでその格納範囲を拡張することが可能である場合は、書き戻し部３１３は、その格納範囲を拡張した範囲を新たな格納範囲として決定してもよい。
【０１００】
ステップＳ２６４の処理により新たな格納範囲が決定されたら、ストレージコントローラ３１０は、隣接グループ管理テーブル５３０を更新する（ステップＳ２６５）。具体的には、ストレージコントローラ３１０は、隣接グループ管理テーブル５３０における、対象のキャッシュデータが属する隣接グループの、先頭物理アドレスの情報と、ブロック長の情報とを、決定された新たな格納範囲に基づいて書き込む。対象の隣接グループを構成する全てのデータが圧縮後書き戻しデータである場合は、ストレージコントローラ３１０は、例えば、先頭物理アドレスとして、決定された格納範囲の先頭アドレスを書き込み、ブロック長として、決定された格納範囲の長さを書き込む。ブロック長は、他のデータの格納範囲に重ならない範囲であれば、決定された格納範囲の長さを超える長さでもよい。なお、既に、先頭物理アドレスの情報と、ブロック長の情報とが書き込まれている場合は、ストレージコントローラ３１０は、圧縮後書き戻しデータの格納範囲が元の格納範囲から変化することによって変化する情報のみを、更新すればよい。
【０１０１】
また、ストレージコントローラ３１０は、先頭論理アドレス（対象隣接グループを構成するデータのうち先頭のデータの、先頭論理アドレス）と、論理範囲（対象隣接グループを構成するデータの各々の、論理ディスク上で占める範囲の合計）を書き込み、または更新する。
【０１０２】
なお、ステップＳ２６３の判定の結果が「ＹＥＳ」である場合は、書き戻し部３１３は、元の圧縮データの格納範囲を、圧縮後書き戻しデータの格納範囲として決定する（ステップＳ２６６）。この場合、書き戻し部３１３は、ステップＳ２６４およびステップＳ２６５の処理を行わなくてよい。
【０１０３】
格納範囲が決定されたら、書き戻し部３１３は、物理ディスク８００における、元の圧縮データが格納されている領域を解放する（ステップＳ２６７）。すなわち、書き戻し部３１３は、元の圧縮データを物理ディスク８００から消去する。言い換えれば、書き戻し部３１３は、元の圧縮データが格納されている領域に、無効データを書き込む。
【０１０４】
圧縮伸長制御部３１２が対象のキャッシュデータを圧縮する（ステップＳ２６８）。そして、書き戻し部３１３は、圧縮後のデータである圧縮後書き戻しデータを、ステップＳ２６４またはステップＳ２６６にて決定された格納範囲に格納する（ステップＳ２６９）。例として、物理ディスク８００におけるデータの配置は、図８の配置例８００ｂのようになる。
【０１０５】
また、ストレージコントローラ３１０は、圧縮後書き戻しデータの格納範囲に従って、アドレス変換テーブル５１０を更新する（ステップＳ２７０）。第２の状況例では、データ「Ａ」とデータ「Ｂ」との格納範囲が変化したので、ストレージコントローラ３１０は、アドレス変換テーブル５１０におけるデータ「Ａ」およびデータ「Ｂ」の「先頭物理アドレス」の値を、それぞれのデータの新たな開始位置の番号に更新する（図４のテーブル５１０ｂ）。
【０１０６】
以上が、ステップＳ２６の書き戻し処理の詳細例である。
【０１０７】
［［第３のケースの処理］］
第３のケースは、隣接グループを構成しないデータの一部または全部に対するライト要求を、ストレージアレイ装置３００が受信するケースである。例えば、上記第１のケースの初期状態において、データ「Ｂ」の一部または全部に対するライト要求をストレージアレイ装置３００が受信するケースが、この第３のケースに相当する。
【０１０８】
第３のケースの処理（ステップＳ３０）の流れを、図１２のフローチャートを参照しながら説明する。第３のケースの処理の流れは、第１のケースの処理に類似する。
【０１０９】
ストレージコントローラ３１０は、ライト要求に従って対象のデータを更新した後（図２のステップＳ６）、論理ディスクにおいて、更新後のデータに隣接するキャッシュデータがあるかを調べる（ステップＳ３１）。以下、ステップＳ３１で検出されるデータを「隣接データ」と呼ぶ。
【０１１０】
隣接データが無かった場合（ステップＳ３１においてＮＯ）は、ストレージコントローラ３１０は、ステップＳ３２以降の処理を行わずに処理を終了する。
【０１１１】
隣接データがあった場合（ステップＳ３１においてＹＥＳ）は、ストレージコントローラ３１０は、更新後のデータと隣接データとが、物理ディスク８００において隣接しているかを調べる（ステップＳ３２）。
【０１１２】
更新後のデータと隣接データとが、物理ディスク８００において隣接している場合（ステップＳ３２においてＹＥＳ）は、ストレージコントローラ３１０は、ステップＳ３３以降の処理を行わずに処理を終了する。
【０１１３】
更新後のデータと隣接データとが、物理ディスク８００において隣接していない場合（ステップＳ３２においてＮＯ）、次にストレージコントローラ３１０は、隣接データに隣接グループが設定されているかを調べる（ステップＳ３３）。
【０１１４】
隣接データ「Ａ」に隣接グループが設定されていない場合（ステップＳ３３においてＮＯ）、ストレージコントローラ３１０は、ライトデータと隣接データとを含む新たな隣接グループを設定する（ステップＳ３４）。
【０１１５】
隣接データ「Ａ」に隣接グループが設定されている場合（ステップＳ３３においてＹＥＳ）、ストレージコントローラ３１０は、隣接データが属する隣接グループにライトデータを追加する（ステップＳ３５）。すなわち、ストレージコントローラ３１０は、隣接グループリンク５４０において、隣接データが属する隣接グループの隣接グループ番号に、ライトデータのページＩＤを紐付ける。また、ストレージコントローラ３１０は、隣接データが属する隣接グループに属するデータのうち、キャッシュされていないデータをキャッシュする（ステップＳ３６）
ステップＳ３５またはステップＳ３６の処理の後、ストレージコントローラ３１０は、隣接グループリンク５４０において、ライトデータが属することとなった隣接グループの格納フラグの値を「１」に設定する（ステップＳ３７）。
【０１１６】
以上をもって、ストレージコントローラ３１０は第３のケースの処理を完了する。
【０１１７】
［［第４のケースの処理］］
第４のケースは、隣接グループを構成するデータの一部または全部に対するリード要求を、ストレージアレイ装置３００が受信するケースである。
【０１１８】
第４のケースが発生する直前の状況の例（以下、「第４の状況例」とも称す）として、上記第２のケースで例示された一連の処理が終わった後の状況を想定する。すなわち、データ「Ａ」およびデータ「Ｂ」は、隣接グループ番号が「０」である隣接グループに属し、物理ディスク８００上で並んで格納されているとする。
【０１１９】
キャッシュテーブル４１０は図３のテーブル４１０ｃの状態であり、アドレス変換テーブル５１０は図４のテーブル５１０ｂの状態であり、破棄対象管理テーブル５２０は図５のテーブル５２０ｃの状態であり、隣接グループ管理テーブル５３０は図６のテーブル５３０ｂの状態であり、隣接グループリンク５４０は図７のテーブル５４０ａの状態であり、物理ディスク８００におけるデータの配置は図８の配置例８００ｂの状態であるとする。
【０１２０】
上記のような第４の状況例で、ホスト計算機１００から、データ「Ｂ」を読み出す要求を含むリード要求が発信されたとする。図４のテーブル５１０ｂおよび図６のテーブル５２０ｂに示されるように、データ「Ｂ」は、隣接グループ番号が「０」である隣接グループの格納範囲に含まれるので、ストレージコントローラ３１０は、第４のケースの処理（ステップＳ４０）を行う。以下、図１３のフローチャートを参照しながら第４のケースの処理の流れを説明する。
【０１２１】
まず、ストレージコントローラ３１０は、リードデータが属する隣接グループに属するデータをキャッシュする（ステップＳ４１）。ストレージコントローラ３１０は、隣接グループ管理テーブル５３０において「先頭アドレス」の情報と「ブロック長」の情報とによって示される範囲を、物理ディスク８００から読み出せばよい。第４の状況例では、これにより、リードデータ「Ｂ」と同一の隣接グループに属するデータであるデータ「Ａ」が、キャッシュ記憶部４００に記憶される。
【０１２２】
ストレージコントローラ３１０は、このステップＳ４１の処理の後に、リード要求に対する応答としてデータ「Ｂ」をホスト計算機１００に送信してもよい（図２のステップＳ５）。
【０１２３】
そして、ストレージコントローラ３１０は、隣接グループリンク５４０を更新する（ステップＳ４２）。具体的には、ストレージコントローラ３１０は、隣接グループリンク５４０における、リードデータが属する隣接グループの隣接グループ番号に、その隣接グループを構成するデータ（読み出されたデータ）を紐付ける。
【０１２４】
なお、格納フラグの値は「０」のままでよい。
【０１２５】
また、ストレージコントローラ３１０は、ステップＳ４２の処理でキャッシュされた、リードデータ以外のデータに対しては、破棄対象フラグの値を「１」に設定してもよい。
【０１２６】
以上をもって、第４のケースにおけるストレージアレイ装置３００の処理は完了する。
【０１２７】
［補足１］  リードデータが複数のグループに属している場合
あるデータが複数のグループに属することがあり得る実施形態では、ステップＳ４１においてリードデータが属する隣接グループが複数検出される場合があり得る。そのような場合、例えば、ストレージコントローラ３１０は、検出された隣接グループのうちいずれか１つを、第４のケースの処理の対象となる隣接グループとして選択すればよい。
【０１２８】
隣接グループの選択にあたっては、優先順位を決定する任意のアルゴリズムに基づいて選択すればよい。上記のアルゴリズムは、例えば、構成するデータの使用頻度の平均が高いグループほど優先度を高く評価するアルゴリズム、構成するデータのうち最後に使用されたデータが最後に使用されてからの経過時間が短いほど優先度を高く評価するアルゴリズム、データ長が短いほど（または長いほど）優先度を高く評価するアルゴリズム、またはそれらのアルゴリズムの組み合わせでもよい。
【０１２９】
［補足２］  読み出すデータの長さ
隣り合うデータを際限なくグループ化すると、ステップＳ４２の処理においてキャッシングの対象となるデータが長すぎる場合があり得る。
【０１３０】
そこで、ストレージコントローラ３１０は、ステップＳ４２の処理において、読み出す範囲を絞ってもよい。例えば、ストレージコントローラ３１０は、隣接グループを構成する圧縮データのうち所定の長さの範囲以内の、連続する圧縮データの組を、読み出してもよい。
【０１３１】
例えば、ストレージコントローラ３１０は、リードデータとリードデータより前のデータとを含む、所定の長さの範囲のデータを読み出してもよい。あるいは、リードデータの格納範囲と、リードデータより前の所定の長さの範囲のデータを、読み出してもよい。
【０１３２】
［［第５のケースの処理］］
第５のケースは、隣接グループを構成するデータの一部または全部に対するライト要求を、ストレージアレイ装置３００が受信するケースである。第５のケースの処理（ステップＳ５０）の流れを、図１４のフローチャートを参照しながら説明する。
【０１３３】
ストレージコントローラ３１０は、ライト要求の対象のデータ（以下、「ライトデータ」と呼ぶ）をライト要求に従って更新した（図２のステップＳ６）後、ライトデータの更新後のデータを圧縮した場合のデータのサイズを特定する（ステップＳ５１）。ストレージコントローラ３１０は、圧縮伸長制御部３１２により更新後のデータを圧縮し、圧縮後のデータのサイズを特定すればよい。ストレージコントローラ３１０は、圧縮後のデータをキャッシュ記憶部４００に一時的に格納してもよい。
【０１３４】
次に、ストレージコントローラ３１０は、更新後のデータの圧縮後のデータが元の圧縮データのサイズを超えるかを調べる（ステップＳ５２）。
【０１３５】
更新後のデータの圧縮後のデータが元の圧縮データのサイズを超えないならば、更新後のデータは、元の圧縮データの格納範囲に収まるはずである。そのような場合（ステップＳ５２においてＮＯ）、隣接グループ管理テーブル５３０の内容は変更されなくてよい。また、ストレージコントローラ３１０は、ライトデータが属する隣接グループを構成するデータを、並べ直す必要はない。したがって、処理は後述のステップＳ５７に移る。
【０１３６】
更新後のデータの圧縮後のデータが元の圧縮データのサイズを超える場合（ステップＳ５２においてＹＥＳ）は、ライトデータが属する隣接グループの少なくとも一部のデータの格納範囲が変更される必要がある。この場合、ストレージコントローラ３１０は、更新後のデータの圧縮後のデータが元の圧縮データのサイズを超える分（以下、「超過分」）の空き領域が、元の圧縮データの格納範囲の直前または直後にあるかを調べる（ステップＳ５３）。
【０１３７】
超過分の空き領域が元の圧縮データの領域の直後にある場合（ステップＳ５３において「直後にある」）、ストレージコントローラ３１０は、圧縮データの格納範囲を、後ろに拡張すればよい。この場合、ライトデータよりも物理ディスク上で先（前、早い方）にあるデータを移動させる必要はない。ストレージコントローラ３１０は、ライトデータと同一の隣接グループに属するデータのうち、論理ディスク上で更新後のデータより後ろにある、キャッシュされていないデータをキャッシュする（ステップＳ５４）。
【０１３８】
超過分の空き領域が元の圧縮データの領域の直前にある場合（ステップＳ５３において「直前にある」）、ストレージコントローラ３１０は、圧縮データの格納範囲を、前側に拡張すればよい。この場合、ライトデータよりも物理ディスク上で後ろにあるデータを移動させる必要はない。ストレージコントローラ３１０は、ライトデータと同一の隣接グループに属するデータのうち、論理ディスク上で更新後のデータより先（前、早い方）にある、キャッシュされていないデータをキャッシュする（ステップＳ５５）。
【０１３９】
超過分の空き領域が元の圧縮データの領域の直前にも直後にもない場合（ステップＳ５３において「ない」）、ライトデータが属する隣接グループに属するデータ全体を移動させる必要がある。ストレージコントローラ３１０は、ライトデータと同一の隣接グループに属する、キャッシュされていないデータをキャッシュする（ステップＳ５６）。
【０１４０】
ステップＳ５４、ステップＳ５５またはステップＳ５６の処理の後は、処理はステップＳ５７に移る。
【０１４１】
ステップＳ５７では、ストレージコントローラ３１０は、隣接グループリンク５４０における、ライトデータが属する隣接グループの隣接グループ番号に、ライトデータと、ステップＳ５４〜ステップＳ５６の処理でキャッシュされたデータ（ある場合）とを、紐付ける。
【０１４２】
そして、ストレージコントローラ３１０は、隣接グループリンク５４０における、ライトデータが属する隣接グループの格納フラグの値を「１」に設定する（ステップＳ５８）。
【０１４３】
以上をもって、第５のケースにおけるストレージアレイ装置３００の処理は完了する。
【０１４４】
［具体例］
第５のケースが発生する状況の例として、上記第２のケースで例示された一連の処理が終わった後の状況を想定する。すなわち、データ「Ａ」およびデータ「Ｂ」は、隣接グループ番号が「０」である隣接グループに属し、物理ディスク８００上で並んで格納されているとする。
【０１４５】
キャッシュテーブル４１０は図１５のテーブル４１０ｃ、アドレス変換テーブル５１０は図１６のテーブル５１０ｃ、隣接グループ管理テーブル５３０は図１７のテーブル５３０ｃ、隣接グループリンク５４０は図１８のテーブル５４０ｃ、物理ディスク８００におけるデータの配置は図１９の配置例８００ｃ、の状態であるとする。
【０１４６】
上記のような状況で、ホスト計算機１００から、データ「Ｂ」を更新する要求を含むライト要求が発信されたとする。この場合のストレージアレイ装置３００の処理の流れを説明する。
【０１４７】
ストレージアレイ装置３００がライト要求を受信する（ステップＳ１）と、ストレージコントローラ３１０は、データ「Ｂ」をキャッシュし、キャッシュされているデータ「Ｂ」を更新する（ステップＳ６）。隣接グループ管理テーブル５３０によれば、データ「Ｂ」に対して、隣接グループ番号が「０」である隣接グループが設定されているので（ステップＳ７においてＹＥＳ）、ストレージコントローラ３１０は、更新後のデータ「Ｂ」を圧縮した場合のデータのサイズを特定する（ステップＳ５１）。例として、ストレージコントローラ３１０は、圧縮伸長制御部３１２により更新後のデータを圧縮し、圧縮後のデータ「Ｂ’」を、キャッシュテーブル４１０に、ページＩＤが「１」のデータとして格納する（図１５のテーブル４１０ｄ）。そして、ストレージコントローラ３１０は、圧縮データ「Ｂ’」のサイズを特定する。圧縮データ「Ｂ’」のサイズは、２４ＫＢであるとする。
【０１４８】
更新後のデータの圧縮後のデータが元の圧縮データのサイズを超えるので（ステップＳ５２においてＹＥＳ）、ストレージコントローラ３１０は、超過分、すなわち、データ「Ｂ’」と元の圧縮データ「Ｂ」との差（８ＫＢ）の分の空き領域が、元の圧縮データの格納範囲の直前または直後にあるかを調べる（ステップＳ５３）。
【０１４９】
８ＫＢの空き領域が元の圧縮データの領域の直後にあるとする（ステップＳ５３において「直後にある」）。この場合、処理はステップＳ５４に移るが、データ「Ｂ」は隣接グループの最後尾のデータであるので、キャッシュすべきデータはない。
【０１５０】
そして、ストレージコントローラ３１０は、データ「Ｂ」のページＩＤを、隣接グループ番号「０」に紐付ける（ステップＳ５７）。また、ストレージコントローラ３１０は、隣接グループ番号が「０」である隣接グループの格納フラグの値を「１」に設定する（ステップＳ５８）。隣接グループリンク５４０は、図１８のテーブル５４０ｄの状態になる。
【０１５１】
この後、データ「Ａ」がキャッシュされることなく、データ「Ｂ」の破棄対象フラグが「１」になった場合、ステップＳ２６の書き戻し処理により、データ「Ｂ」は圧縮され、物理ディスク８００へ格納される。ストレージコントローラ３１０は、ステップＳ２６４の処理により、例えば物理アドレス番号「１４４」から「１６７」までの範囲を、データ「Ｂ」の新たな格納範囲として決定する。ステップＳ２６５の処理により、隣接グループ管理テーブル５３０は、例えば図１７のテーブル５３０ｄの状態に更新される。ステップＳ２６９の処理により、圧縮されたデータ「Ｂ」が、図１９の配置例８００ｄで示されるように物理ディスク８００へ格納される。また、ステップＳ２７０の処理により、アドレス変換テーブル５１０は、図１６のテーブル５１０ｄの状態になる。
【０１５２】
［別の具体例］
上記具体例において、ステップＳ５３の判定の結果が「ない」であった場合の処理の流れを説明する。この場合、処理はステップＳ５６に移り、ストレージコントローラ３１０は、データ「Ａ」をキャッシュする。
【０１５３】
そして、ストレージコントローラ３１０は、データ「Ｂ」のページＩＤと、データ「Ａ」のページＩＤとを、隣接グループ番号「０」に紐付ける（ステップＳ５７）。また、ストレージコントローラ３１０は、隣接グループ番号が「０」である隣接グループの格納フラグの値を「１」に設定する（ステップＳ５８）。
【０１５４】
この後、データ「Ａ」およびデータ「Ｂ」の破棄対象フラグがいずれも「１」になった場合、ステップＳ２６の書き戻し処理により、データ「Ａ」およびデータ「Ｂ」は圧縮され、物理ディスク８００へ格納される。ステップＳ２６４の処理により、例えば物理アドレス番号「１０５６」から「１０７１」の範囲がデータ「Ａ」の新たな格納範囲として決定され、「１０７２」から「１０９５」までの範囲がデータ「Ｂ」の新たな格納範囲として決定される。
【０１５５】
＜効果＞
第１の実施形態のストレージアレイ装置３００によれば、書き戻し処理により、キャッシュされているデータのうち、論理アドレスが隣り合うデータ同士が、物理アドレスにおいても隣り合うようになる。これにより、データの読み出しに係る性能が向上する。その理由は、論理アドレスが隣り合う（いわば、同時にリード要求の対象となる可能性が高い）複数のデータを、一度に（すなわち、一回のシークで連続的に）読み出すことができるようになるからである。
【０１５６】
書き戻し処理は、ＬＲＵ方式に基づいて、対象のデータのいずれも破棄対象となったタイミングで行われるので、この書き戻し処理は、上位装置であるホスト計算機１００からの要求とは競合しない。すなわち、要求に対する応答の性能の低下を伴うことなくデータの並べ替えは行われる。
【０１５７】
なお、第１のケースで説明されたように、ストレージコントローラ３１０は、リード要求のみがなされたデータに対しても書き戻し処理を行うので、ダーティデータに対してのみライトバックを行う場合と比べ、論理アドレスと物理アドレスとのいずれでも隣り合うデータはより多くなると考えられる。
【０１５８】
第４のケースにおける処理によれば、リードデータと隣り合うデータが、リードデータと隣り合うデータに対する操作の要求が発せられる前に、キャッシュされる。これにより、論理アドレス上で隣り合うデータは関連性が高い可能性が高いので、キャッシュヒット率が向上する。
【０１５９】
特に、シンクライアントのような、頻繁に使用されるデータ群がある場合において、ホスト計算機１００に対する応答の性能の向上は顕著となる。頻繁に使用されるデータ群に隣接グループが設定されることで、そのデータ群を構成するデータは物理ディスクにおいて連続的に配置されるようになり、そのデータ群を構成する複数のデータを一度に読み出す場合にかかる時間が、短くなる。そして、第４のケースの処理により、そのデータ群を構成するデータが、リード要求を受ける前に予め読み出されれば、要求に対する応答がさらに早くなる。
【０１６０】
＜＜第２の実施形態＞＞
本発明の一実施形態に係るストレージコントローラ３１について説明する。ストレージコントローラ３１は、論理ディスクが構築されたストレージからのデータの読み出し、および該ストレージへのデータの書き込みを行うモジュールである。図２０は、ストレージコントローラ３１の構成を示すブロック図である。ストレージコントローラ３１は、キャッシュ処理部３２と、設定部３３と、決定部３４と、書き込み部３５と、を備える。
【０１６１】
キャッシュ処理部３２は、物理ディスクに記憶されたデータをキャッシュ記憶部に格納するキャッシュ処理を行う。物理ディスクはストレージにおいてデータを記憶している実体である。キャッシュ記憶部は、データをキャッシュとして記憶する記憶領域である。第１の実施形態における圧縮伸長制御部３１２は、キャッシュ処理部３２の一例である。
【０１６２】
設定部３３は、キャッシュ記憶部に記憶されたデータのうち、論理ディスクにおいて隣り合い、かつ物理ディスクにおいて隣り合っていない、データの組を特定する。そして、設定部３３は、特定されたデータの組を含むグループを設定する。
【０１６３】
論理ディスクにおいて２つのデータが隣り合うとは、２つのデータのそれぞれに設定されている論理アドレスの範囲が連続することである。
【０１６４】
物理ディスクにおいて２つのデータが隣り合うとは、２つのデータのそれぞれが格納される場所として設定されているブロックの範囲が、連続することである。
【０１６５】
第１の実施形態における第１のケースの処理は、設定部３３による上記の処理の一例である。
【０１６６】
決定部３４は、グループに属するデータのうちキャッシュされているデータ全てがキャッシュ記憶部から削除される対象となったことを契機として、決定処理を行う。決定処理では、決定部３４は、物理ディスクにおいて該グループに属するデータ全てが連続的に配置されるように、物理ディスクにおける、削除される対象となったデータを格納する範囲を決定する。第１の実施形態における「書き戻し処理」のステップＳ２６１からステップＳ２６６の処理は、上記決定処理の一例である。
【０１６７】
書き込み部３５は、決定部３４により決定された範囲に、削除される対象となったデータを書き込む。第１の実施形態における「書き戻し処理」のステップＳ２６８およびステップＳ２６９の処理は、書き込み部３５による処理の一例である。
【０１６８】
ストレージコントローラ３１による処理の流れを、図２１のフローチャートを参照しながら説明する。
【０１６９】
まず、キャッシュ処理部３２が、物理ディスクに記憶されたデータをキャッシュ記憶部に格納するキャッシュ処理を行う（ステップＳ１０１）。キャッシュ処理を行う契機は、例えば、ホスト計算機等の上位装置からリード要求またはライト要求を受けることである。
【０１７０】
次に、設定部３３が、キャッシュ記憶部に記憶されたデータのうち、論理ディスクにおいて隣り合い、かつ物理ディスクにおいて隣り合っていない、データの組を特定する（ステップＳ１０２）。そして、設定部３３は、特定されたデータの組を含むグループを設定する（ステップＳ１０３）。
【０１７１】
次に、グループに属するデータのうちキャッシュされているデータ全てがキャッシュ記憶部から削除される対象となったことを契機として（ステップＳ１０４においてＹＥＳ）、決定部３４が、物理ディスクにおいて該グループに属するデータ全てが連続的に配置されるように、物理ディスクにおける、削除される対象となったデータを格納する範囲を決定する。
【０１７２】
そして、書き込み部３５が、決定部３４により決定された範囲に、削除される対象となったデータを書き込む（ステップＳ１０５）。
【０１７３】
＜実施形態の各部を実現するハードウェアの構成＞
以上で説明された本発明の各実施形態において、各装置の各構成要素を示すブロックは、機能単位で示されている。しかし、構成要素を示すブロックは、各構成要素が別個のモジュールにより構成されることを必ずしも意味していない。
【０１７４】
各構成要素の処理は、たとえば、コンピュータシステムが、コンピュータ読み取り可能な記憶媒体により記憶された、その処理をコンピュータシステムに実行させるプログラムを、読み出し、実行することによって、実現されてもよい。「コンピュータ読み取り可能な記憶媒体」は、たとえば、光ディスク、磁気ディスク、光磁気ディスク、および不揮発性半導体メモリ等の可搬媒体、ならびに、コンピュータシステムに内蔵されるＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）およびハードディスク等の記憶装置である。「コンピュータ読み取り可能な記憶媒体」は、コンピュータシステム内部の揮発性メモリのようにプログラムを一時的に保持可能なもの、および、ネットワークや電話回線等の通信回線のように、プログラムを伝送するものも含む。また、上記プログラムは、前述した機能の一部を実現するためのものであってもよく、更に前述した機能をコンピュータシステムにすでに記憶されているプログラムとの組み合わせで実現できるものであってもよい。
【０１７５】
「コンピュータシステム」とは、一例として、図２２に示されるようなコンピュータ９００を含むシステムである。コンピュータ９００は、以下のような構成を含む。
・１つまたは複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９０１
・ＲＯＭ９０２
・ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９０３
・ＲＡＭ９０３へロードされるプログラム９０４Ａおよび記憶情報９０４Ｂ
・プログラム９０４Ａおよび記憶情報９０４Ｂを格納する記憶装置９０５
・記憶媒体９０６の読み書きを行うドライブ装置９０７
・通信ネットワーク９０９と接続する通信インタフェース９０８
・データの入出力を行う入出力インタフェース９１０
・各構成要素を接続するバス９１１
たとえば、各実施形態における各装置の各構成要素は、その構成要素の機能を実現するプログラム９０４ＡをＣＰＵ９０１がＲＡＭ９０３にロードして実行することで実現される。各装置の各構成要素の機能を実現するプログラム９０４Ａは、例えば、予め、記憶装置９０５やＲＯＭ９０２に格納される。そして、必要に応じてＣＰＵ９０１がプログラム９０４Ａを読み出す。記憶装置９０５は、たとえば、ハードディスクである。プログラム９０４Ａは、通信ネットワーク９０９を介してＣＰＵ９０１に供給されてもよいし、予め記憶媒体９０６に格納されており、ドライブ装置９０７に読み出され、ＣＰＵ９０１に供給されてもよい。なお、記憶媒体９０６は、たとえば、光ディスク、磁気ディスク、光磁気ディスク、および不揮発性半導体メモリ等の、可搬媒体である。
【０１７６】
各装置の実現方法には、様々な変形例がある。例えば、各装置は、構成要素毎にそれぞれ別個のコンピュータ９００とプログラムとの可能な組み合わせにより実現されてもよい。また、各装置が備える複数の構成要素が、一つのコンピュータ９００とプログラムとの可能な組み合わせにより実現されてもよい。
【０１７７】
また、各装置の各構成要素の一部または全部は、その他の汎用または専用の回路、コンピュータ等やこれらの組み合わせによって実現されてもよい。これらは、単一のチップによって構成されてもよいし、バスを介して接続される複数のチップによって構成されてもよい。
【０１７８】
各装置の各構成要素の一部または全部が複数のコンピュータや回路等により実現される場合には、複数のコンピュータや回路等は、集中配置されてもよいし、分散配置されてもよい。例えば、コンピュータや回路等は、クライアントアンドサーバシステム、クラウドコンピューティングシステム等、各々が通信ネットワークを介して接続される形態として実現されてもよい。
【０１７９】
上記実施形態の一部または全部は以下の付記のようにも記載され得るが、以下には限られない。
【０１８０】
＜＜付記＞＞
［付記１］
物理ディスクに記憶されたデータをキャッシュ記憶部に格納するキャッシュ処理を行うキャッシュ手段と、
前記キャッシュ記憶部に記憶されたデータのうち、論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合っていない、データの組を特定し、特定されたデータの組を含むグループを設定する設定手段と、
前記グループに属するデータのうちキャッシュされているデータ全てが前記キャッシュ記憶部から削除される対象となったことを契機として、前記物理ディスクにおいて前記グループに属するデータ全てが連続的に配置されるように、前記物理ディスクにおける、前記削除される対象となったデータを格納する範囲を決定する決定手段と、
前記決定された範囲に、前記削除される対象となったデータを書き込む書き込み手段と、
を備えるストレージコントローラ。
［付記２］
前記データの各々は、個別に圧縮されることが可能な単位のデータであり、
前記書き込み手段は、前記削除される対象となったデータの各々を個別に圧縮し、圧縮された各々のデータを前記決定された範囲に格納する、
付記１に記載のストレージコントローラ。
［付記３］
前記キャッシュ手段は、前記ストレージコントローラが前記グループに属するデータの一部のデータを読み出すリード要求を受信した場合に、前記グループに属する、当該リード要求の対象でないデータも前記キャッシュ記憶部に格納する、
付記１または２に記載のストレージコントローラ。
［付記４］
前記設定手段は、前記ストレージコントローラがいずれの前記グループにも属さないデータを読み出すリード要求を受信した場合、前記キャッシュ記憶部に記憶された、当該リード要求の対象のデータと前記論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合う、データを特定し、特定されたデータと当該リード要求の対象のデータとを含むグループを設定する、
付記１から３のいずれか一つに記載のストレージコントローラ。
［付記５］
前記キャッシュ手段は、前記ストレージコントローラが前記グループに属するデータの一部のデータを更新するライト要求を受信した場合に、
前記ライト要求の対象のデータを更新した後のデータのサイズと、当該ライト要求の対象のデータの更新前のデータのサイズと、の比較に基づいて、前記グループに含まれるデータからキャッシュするデータを決定し、決定されたデータをキャッシュする、
付記１から４のいずれか一つに記載のストレージコントローラ。
［付記６］
付記１から５のいずれか一つに記載のストレージコントローラと、
前記キャッシュ記憶部と、
前記物理ディスクを含み、前記論理ディスクが構築されたディスクドライブと、
を含むストレージアレイ装置。
［付記７］
物理ディスクに記憶されたデータをキャッシュ記憶部に格納するキャッシュ処理を行い、
前記キャッシュ記憶部に記憶されたデータのうち、論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合っていない、データの組を特定し、特定されたデータの組を含むグループを設定し、
前記グループに属するデータのうちキャッシュされているデータ全てが前記キャッシュ記憶部から削除される対象となったことを契機として、前記物理ディスクにおいて前記グループに属するデータ全てが連続的に配置されるように、前記物理ディスクにおける、前記削除される対象となったデータを格納する範囲を決定し、
前記決定された範囲に、前記削除される対象となったデータを書き込む、
データ格納方法。
［付記８］
前記データの各々は、個別に圧縮および伸長されることが可能な単位のデータであり、
前記データ格納方法は、前記削除される対象となったデータの各々を個別に圧縮し、圧縮された各々のデータを前記決定された範囲に格納する、
付記７に記載のデータ格納方法。
［付記９］
前記グループに属するデータの一部のデータを読み出すリード要求を受信した場合に、前記グループに属する、当該リード要求の対象でないデータも前記キャッシュ記憶部に格納する、
付記７または８に記載のデータ格納方法。
［付記１０］
いずれの前記グループにも属さないデータを読み出すリード要求を受信した場合、前記キャッシュ記憶部に記憶された、当該リード要求の対象のデータと前記論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合う、データを特定し、特定されたデータと当該リード要求の対象のデータとを含むグループを設定する、
付記７から９のいずれか一つに記載のデータ格納方法。
［付記１１］
前記グループに属するデータの一部のデータを更新するライト要求を受信した場合に、
前記ライト要求の対象のデータを更新した後のデータのサイズと、当該ライト要求の対象のデータの更新前のデータのサイズと、の比較に基づいて、前記グループに含まれるデータからキャッシュするデータを決定し、決定されたデータをキャッシュする、
付記７から１０のいずれか一つに記載のデータ格納方法。
［付記１２］
物理ディスクに記憶されたデータをキャッシュ記憶部に格納するキャッシュ処理を行うキャッシュ処理と、
前記キャッシュ記憶部に記憶されたデータのうち、論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合っていない、データの組を特定し、特定されたデータの組を含むグループを設定する設定処理と、
前記グループに属するデータのうちキャッシュされているデータ全てが前記キャッシュ記憶部から削除される対象となったことを契機として、前記物理ディスクにおいて前記グループに属するデータ全てが連続的に配置されるように、前記物理ディスクにおける、前記削除される対象となったデータを格納する範囲を決定する決定処理と、
前記決定された範囲に、前記削除される対象となったデータを書き込む書き込み処理と、
をコンピュータに実行させるプログラム。
［付記１３］
前記データの各々は、個別に圧縮および伸長されることが可能な単位のデータであり、
前記書き込み処理は、前記削除される対象となったデータの各々を個別に圧縮し、圧縮された各々のデータを前記決定された範囲に格納する、
付記１２に記載のプログラム。
［付記１４］
前記キャッシュ処理は、前記コンピュータが前記グループに属するデータの一部のデータを読み出すリード要求を受信した場合に、前記グループに属する、当該リード要求の対象でないデータも前記キャッシュ記憶部に格納する、
付記１２または１３に記載のプログラム。
［付記１５］
前記設定処理は、前記コンピュータがいずれの前記グループにも属さないデータを読み出すリード要求を受信した場合、前記キャッシュ記憶部に記憶された、当該リード要求の対象のデータと前記論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合う、データを特定し、特定されたデータと当該リード要求の対象のデータとを含むグループを設定する、
付記１２から１４のいずれか一つに記載のプログラム。
［付記１６］
前記キャッシュ処理は、前記コンピュータが前記グループに属するデータの一部のデータを更新するライト要求を受信した場合に、
前記ライト要求の対象のデータを更新した後のデータのサイズと、当該ライト要求の対象のデータの更新前のデータのサイズと、の比較に基づいて、前記グループに含まれるデータからキャッシュするデータを決定し、決定されたデータをキャッシュする、
付記１２から１５のいずれか一つに記載のプログラム。
【０１８１】
本願発明は以上に説明された実施形態に限定されるものではない。以上に説明された実施形態の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【０１８２】
３１    ストレージコントローラ
３２    キャッシュ処理部
３３    設定部
３４    決定部
３５    書き込み部
１００    ホスト計算機
３００    ストレージアレイ装置
３１０    ストレージコントローラ
３１１    キャッシュ管理部
３１２    圧縮伸長制御部
３１３    書き戻し部
３２０    ディスクドライブ
３２１    論理ディスク
４００    キャッシュ記憶部
４１０    キャッシュテーブル
５００    制御情報記憶部
５１０    アドレス変換テーブル
５２０    破棄対象管理テーブル
５３０    隣接グループ管理テーブル
５４０    隣接グループリンク
８００    物理ディスク
９００    コンピュータ
９０１    ＣＰＵ
９０２    ＲＯＭ
９０３    ＲＡＭ
９０４Ａ    プログラム
９０４Ｂ    記憶情報
９０５    記憶装置
９０６    記憶媒体
９０７    ドライブ装置
９０８    通信インタフェース
９０９    通信ネットワーク
９１０    入出力インタフェース
９１１    バス
【図１】
2019113890.tif 000003
【図２】
2019113890.tif 000004
【図３】
2019113890.tif 000005
【図４】
2019113890.tif 000006
【図５】
2019113890.tif 000007
【図６】
2019113890.tif 000008
【図７】
2019113890.tif 000009
【図８】
2019113890.tif 000010
【図９】
2019113890.tif 000011
【図１０】
2019113890.tif 000012
【図１１】
2019113890.tif 000013
【図１２】
2019113890.tif 000014
【図１３】
2019113890.tif 000015
【図１４】
2019113890.tif 000016
【図１５】
2019113890.tif 000017
【図１６】
2019113890.tif 000018
【図１７】
2019113890.tif 000019
【図１８】
2019113890.tif 000020
【図１９】
2019113890.tif 000021
【図２０】
2019113890.tif 000022
【図２１】
2019113890.tif 000023
【図２２】
2019113890.tif 000024