(57)【特許請求の範囲】
【請求項１】
データ格納手段に格納されているデータをキャッシュするために用いられる第１のキャッシュ格納手段と前記第１のキャッシュ格納手段にキャッシュされているデータに対応付けて当該データの内容を要約して生成した識別子を保持する第１のキャッシュデータテーブルと前記データ格納手段に格納されているデータと他のデータとの間の配置関係を示すインデックス及び当該データの内容を要約して生成した識別子を対応付けて保持する第１のキャッシュインデックステーブルとを含む第１のデータ転送装置と、前記第１のデータ転送装置と接続されており、前記データ格納手段に格納されているデータと他のデータとの間の配置関係を示すインデックス及び当該データの内容を要約して生成した識別子を対応付けて保持する第２のキャッシュインデックステーブルを含む第２のデータ転送装置とを有するデータ転送システムに適用されるデータ転送方法であって、
前記データ格納手段に格納されているデータの読み込みを要求するための、当該データと他のデータとの配置関係を示すインデックスを含むデータ読み込み要求を前記第１のデータ転送装置に入力するステップと、
前記入力されたデータ読み込み要求に含まれるインデックスに対応付けて前記第１のキャッシュインデックステーブルに識別子が保持されているかを前記第１のデータ転送装置が判定するステップと、
前記第１のキャッシュインデックステーブルに識別子が保持されていないと判定された場合、前記入力されたデータ読み込み要求に含まれるインデックスによって他のデータとの配置関係が示されるデータの内容を要約して生成した識別子の読み込みを要求するための当該インデックスを含む識別子読み込み要求を前記第１のデータ転送装置が前記第２のデータ転送装置に対して送信するステップと、
前記送信された識別子読み込み要求に含まれるインデックスに対応付けて前記第２のキャッシュインデックステーブルに保持されている識別子を、前記第２のデータ転送装置が前記第１のデータ転送装置に対して送信するステップと、
前記送信された識別子が前記第１のキャッシュデータテーブルに保持されているかを前記第１のデータ転送装置が判定するステップと、
前記送信された識別子が保持されていると判定された場合、前記第１のキャッシュデータテーブルによって当該識別子に対応付けられているデータを、前記第１のデータ転送装置が前記第１のキャッシュ格納手段から取得するステップと、
前記取得されたデータを、前記入力されたデータ読み込み要求の要求元に対して前記第１の転送装置が送信するステップと
を具備することを特徴とするデータ転送方法。
【請求項２】
ユーザによって指定されたデータと他のデータとの間の配置関係を示すインデックスを前記第１のデータ転送装置に入力するステップと、
前記入力されたインデックスによって他のデータとの間の配置関係が示されるデータの内容を要約して生成した識別子の読み込みを要求するための当該インデックスを含む識別子読み込み要求を前記第１のデータ転送装置が前記第２のデータ転送装置に対して送信するステップと、
前記送信された識別子読み込み要求に含まれるインデックスに対応付けて前記第２のキャッシュインデックステーブルに保持されている識別子を前記第２のデータ転送装置が前記第１のデータ転送装置に対して送信するステップと、
前記送信された識別子を、前記ユーザによって指定されたインデックスに対応付けて前記第１のキャッシュインデックステーブルに登録するステップと
を更に具備することを特徴とする請求項１記載のデータ転送方法。
【請求項３】
前記第２のデータ転送装置は、データ格納手段に格納されているデータをキャッシュするために用いられる第２のキャッシュ格納手段と当該第２のキャッシュ格納手段にキャッシュされているデータに対応付けて当該データの内容を要約して生成した識別子を保持する第２のキャッシュデータテーブルとを含み、
ユーザによって指定されたデータと他のデータとの間の配置関係を示すインデックスを前記第１のデータ転送装置に入力するステップと、
前記入力されたインデックスによって他のデータとの間の配置関係が示されるデータの読み込みを要求するための当該インデックスを含むデータ読み込み要求を前記第１のデータ転送装置が前記第２のデータ転送装置に対して送信するステップと、
前記送信されたデータ読み込み要求に含まれるインデックスに対応付けて前記第２のキャッシュインデックステーブルに識別子が保持されているかを前記第２のデータ転送装置が判定するステップと、
前記第２のキャッシュインデックステーブルに識別子が保持されている場合、当該識別子が前記第２のキャッシュデータテーブルに保持されているかを前記第２のデータ転送装置が判定するステップと、
前記第２のキャッシュインデックステーブルに保持されている識別子が前記第２のキャッシュデータテーブルに保持されていると判定された場合、当該第２のキャッシュデータテーブルによって当該識別子に対応付けられているデータを、前記第２のキャッシュ格納手段から前記第２のデータ転送装置が取得するステップと、
前記取得されたデータを前記第２の転送装置が前記第１のデータ転送装置に対して送信するステップと、
前記送信されたデータの内容を要約して識別子を前記第１のデータ転送装置が生成するステップと、
前記送信されたデータに対応付けて前記生成された識別子を前記キャッシュデータテーブルに前記第１のデータ転送装置が登録するステップと
を具備することを特徴とする請求項１記載のデータ転送方法。
【請求項４】
前記第１のキャッシュインデックステーブルは、前記インデックス及び識別子に対応付けて当該インデックスによって他のデータとの間の配置関係が示されるデータに対して書き込みが発生したか否かを示すフラグを保持し、
前記第２のデータ転送装置は、データ格納手段に格納されているデータをキャッシュするために用いられる第２のキャッシュ格納手段と当該第２のキャッシュ格納手段にキャッシュされているデータに対応付けて当該データの内容を要約して生成した識別子を保持する第２のキャッシュデータテーブルとを含み、
前記データ格納手段に対してデータの書き込みを要求するための、当該データ及び当該データと他のデータとの間の配置関係を示すインデックスを含むデータ書き込み要求を前記第１のデータ転送装置に入力するステップと、
前記入力された書き込み要求に含まれるデータの内容を要約して識別子を前記第１のデータ転送装置が生成するステップと、
前記生成された識別子を、前記書き込み要求に含まれるインデックスに対応付けて前記第１のデータ転送装置が前記第１のキャッシュインデックステーブルに登録するステップと、
前記書き込みが発生したことを示す第１のフラグを、前記書き込み要求に含まれるインデックスに対応付けて前記第１のデータ転送装置が前記第１のキャッシュインデックステーブルに登録するステップと、
前記第１のキャッシュデータテーブルに前記生成された識別子が保持されているかを判定するステップと、
前記生成された識別子が保持されていない場合、前記第１のデータ転送装置が前記入力された書き込み要求に含まれているデータを前記第１のキャッシュ格納手段にキャッシュするステップと、
前記第１のキャッシュ格納手段にキャッシュされたデータに対応付けて前記生成された識別子を、前記第１のデータ転送装置が前記第１のキャッシュデータテーブルに登録するステップと、
前記第１のフラグに対応付けて前記第１のキャッシュインデックステーブルに保持されているインデックス及び識別子を前記第１のデータ転送装置が前記第２のデータ転送装置に対して送信するステップと、
前記送信された識別子が前記第２のキャッシュデータテーブルに保持されているかを、前記第２のデータ転送装置が判定するステップと、
前記第１のデータ転送装置により送信された識別子が前記第２のキャッシュデータテーブルに保持されている場合には、当該第２のキャッシュデータテーブルによって当該識別子に対応付けられているデータを、前記第２のキャッシュ格納手段から前記第２のデータ転送装置が取得するステップと、
前記取得されたデータを、前記第２のデータ転送装置が前記データ格納手段に書き込むステップと、
前記第１のデータ転送装置により送信された識別子を前記第１のデータ転送装置により送信されたインデックスに対応付けて、前記第２のデータ転送装置が前記第２のキャッシュインデックステーブルに登録するステップと、
前記第１のキャッシュインデックステーブルに保持されている第１のフラグを、書き込みが発生していないことを示す第２のフラグに前記第１のデータ転送装置が書き換えるステップと
を更に具備することを特徴とする請求項１記載のデータ転送方法。
【請求項５】
データ格納手段に格納されているデータをキャッシュするために用いられる第１のキャッシュ格納手段と前記第１のキャッシュ格納手段にキャッシュされているデータに対応付けて当該データの内容を要約して生成した識別子を保持する第１のキャッシュデータテーブルと前記データ格納手段に格納されているデータと他のデータとの間の配置関係を示すインデックス及び当該データの内容を要約して生成した識別子を対応付けて保持する第１のキャッシュインデックステーブルとを含む第１のデータ転送装置と、前記第１のデータ転送装置と接続されており、前記データ格納手段に格納されているデータをキャッシュするために用いられる第２のキャッシュ格納手段と当該第２のキャッシュ格納手段にキャッシュされているデータに対応付けて当該データの内容を要約して生成した識別子を保持する第２のキャッシュデータテーブルと前記データ格納手段に格納されているデータと他のデータとの間の配置関係を示すインデックス及び当該データの内容を要約して生成した識別子を対応付けて保持する第２のキャッシュインデックステーブルとを含む第２のデータ転送装置とを有するデータ転送システムに適用されるデータ転送方法であって、
前記データ格納手段に格納されているデータの読み込みを要求するための、当該データと他のデータとの間の配置関係を示すインデックスを含むデータ読み込み要求を前記第１のデータ転送装置に入力するステップと、
前記入力されたデータ読み込み要求に含まれるインデックスに対応付けて前記第１のキャッシュインデックステーブルに識別子が保持されているかを前記第１のデータ転送装置が判定するステップと、
前記第１のキャッシュインデックステーブルに識別子が保持されていないと判定された場合、前記データ読み込み要求に含まれるインデックスによって他のデータとの間の配置関係が示されるデータの読み込み及び識別子の先読みを要求するための、当該インデックスを含む先読み要求を前記第１のデータ転送装置が前記第２のデータ転送装置に対して送信するステップと、
前記送信された先読み要求に含まれているインデックスに対応付けて前記第２のキャッシュインデックステーブルに識別子が保持されているかを前記第２のデータ転送装置が判定するステップと、
前記第２のキャッシュインデックステーブルに識別子が保持されていると判定された場合、当該識別子が前記第２のキャッシュデータテーブルに保持されているかを、前記第２のデータ転送装置が判定するステップと、
前記第２のキャッシュデータテーブルに識別子が保持されていると判定された場合、前記第２のキャッシュデータテーブルによって当該識別子に対応付けられているデータを、前記第２のキャッシュ格納手段から前記第２のデータ転送装置が取得するステップと、
前記取得されたデータを、前記第２のデータ転送装置が前記第１のデータ転送装置に対して送信するステップと、
前記送信されたデータを前記入力されたデータ読み込み要求の要求元に対して前記第１のデータ転送装置が送信するステップと、
前記送信された先読み要求に含まれるインデックスに応じて先読み先となるインデックスを、前記第２のデータ転送装置が決定するステップと、
前記決定された先読み先となるインデックスに対応付けて前記第２のキャッシュインデックステーブルに保持されている識別子を、前記第２のデータ転送装置が前記第１のデータ転送装置に対して送信するステップと、
前記先読み先となるインデックスに対応付けて前記送信された識別子を対応付けて前記第１のキャッシュインデックステーブルに登録するステップと
を具備することを特徴とするデータ転送方法。
【請求項６】
前記第２のデータ転送装置により送信されたデータの内容を要約して識別子を、前記第１のデータ転送装置が生成するステップと、
前記入力されたデータ読み込み要求に含まれるインデックスに対応付けて前記生成された識別子を、前記第１のデータ転送装置が前記第１のキャッシュインデックステーブルに登録するステップと
を更に具備することを特徴とする請求項５記載のデータ転送方法。
【請求項７】
前記先読み先となるインデックスを決定するステップにおいては、前記送信された先読み要求に含まれるインデックスの後続のインデックスを先読み先となるインデックスとして決定することを特徴とする請求項５記載のデータ転送方法。
【請求項８】
データ格納手段に格納されているデータをキャッシュするために用いられるキャッシュ格納手段を含む第１のデータ転送装置と、当該第１のデータ転送装置と接続された第２のデータ転送装置を有するデータ転送システムにおいて、
前記第１のデータ転送装置は、キャッシュデータテーブル、第１のキャッシュインデックステーブル、入力手段、識別子判定手段、要求送信手段、データ判定手段、取得手段及びデータ送信手段を含み、
前記第２のデータ転送装置は、第２のキャッシュインデックステーブル及び識別子送信手段を含み、
前記キャッシュデータテーブルは、前記キャッシュ格納手段にキャッシュされているデータに対応付けて当該データの内容を要約して生成した識別子を保持し、
前記第１のキャッシュインデックステーブルは、前記データ格納手段に格納されているデータと他のデータとの間の配置関係を示すインデックス及び当該データの内容を要約して生成した識別子を対応付けて保持し、
前記第２のキャッシュインデックステーブルは、前記データ格納手段に格納されているデータと他のデータとの間の配置関係を示すインデックス及び当該データの内容を要約して生成した識別子を対応付けて保持し、
前記入力手段は、前記データ格納手段に格納されているデータの読み込みを要求するための、当該データと他のデータとの間の配置関係を示すインデックスを含むデータ読み込み要求を入力し、
前記識別子判定手段は、前記入力されたデータ読み込み要求に含まれるインデックスに対応付けて前記第１のキャッシュインデックステーブルに識別子が保持されているかを判定し、
前記要求送信手段は、前記第１のキャッシュインデックステーブルに識別子が保持されていないと判定された場合、前記入力されたデータ読み込み要求に含まれるインデックスによって他のデータとの間の配置関係が示されるデータの内容を要約して生成した識別子の読み込みを要求するための当該インデックスを含む識別子読み込み要求を前記第２のデータ転送装置に対して送信し、
前記識別子送信手段は、前記送信された識別子読み込み要求に含まれるインデックスに対応付けて前記第２のキャッシュインデックステーブルに保持されている識別子を、前記第１のデータ転送装置に対して送信し、
前記データ判定手段は、前記送信された識別子が前記第１のキャッシュデータテーブルに保持されているかを判定し、
前記取得手段は、前記送信された識別子が保持されていると判定された場合、前記第１のキャッシュデータテーブルによって当該識別子に対応付けられているデータを、前記キャッシュ格納手段から取得し、
前記データ送信手段は、前記取得されたデータを前記入力されたデータ読み込み要求の要求元に対して送信する
ことを特徴とするデータ転送システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュを利用してデータ転送を高速化するデータ転送方法及びデータ転送システムに関する。
【背景技術】
【０００２】
近年、例えばインターネット（Internet）のような、ＬＡＮ（Local Area Network）と比較して帯域が細く遅延が大きい回線を用いた広域通信網（ＷＡＮ：Wide Area Network）を介して、遠隔地にあるストレージ装置にアクセスするためのＷＡＮ加速化装置（ＷＡＮ高速化装置）と呼ばれる装置が知られている。
【０００３】
このＷＡＮ加速化装置（以下、中継装置と表記）は、例えばクライアント装置及びストレージ装置間に接続され、当該クライアント装置及びストレージ装置間でデータの中継（転送）処理を実行する。また、中継装置は、例えばＴＣＰ／ＩＰのレイヤまたはＮＦＳ（Network File System）／ＣＩＦＳ（Common Internet File System）／ｉＳＣＳＩ（Internet Small Computer System Interface）等のアプリケーションレイヤで遅延制御・転送データ圧縮・キャッシュを行う。
【０００４】
ところで、中継装置におけるデータ転送においては、上記したように例えばＷＡＮを介するため、例えば転送されるデータ量（転送データ量）が大きい場合にはデータ転送速度が低下する場合がある。このため、例えばデータ転送速度を向上させるためには、転送データ量を小さくすることが考えられる。
【０００５】
そこで、例えばＷＡＮを介して転送されるデータ量を減らすための技術（以下、先行技術と表記）が開示されている（例えば、特許文献１を参照）。この先行技術によれば、例えば複数（例えば２つ）の中継装置が、ＷＡＮを挟むようにクライアント装置（ホスト）とストレージ装置との間に配置される。この複数の中継装置は、中継したデータから識別子を生成して、当該データと識別子とを対応付けてキャッシュに登録する。そして、双方の中継装置が、キャッシュに登録されているデータを中継する際には当該データ本体を転送するのではなく、識別子を転送する。これにより、転送データ量を削減することが可能となる。
【特許文献１】特開２００２−２６８９３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記した先行技術においては、識別子を利用した転送を実行するためには、複数の中継装置において相手側の中継装置がどのようなキャッシュを構成しているのかということを互いに認識しておく必要がある。具体的には、過去に中継したデータは互いの中継装置でキャッシュ上に登録されている、つまり、個々の中継装置が独立してキャッシュの制御（吐き出し等）を実行することなくキャッシュが同期（ミラー）状態にあることを前提としている。
【０００７】
このように、複数の中継装置間でキャッシュ状態の同期をとる必要がある場合には、個々の中継装置が独立してキャッシュ制御を行うことが困難となる。このため、上記した先行技術は、例えば複数の中継装置がＷＡＮを挟んで１対ｎで構成されているような環境に適用することは難しい。また、任意の中継装置において、例えばライトバックキャッシュを実現することも困難となる。
【０００８】
本発明の目的は、複数の中継装置間においてキャッシュ状態の同期をとることなく、転送データ量を小さくすることで転送速度を向上させるデータ転送方法及びデータ転送システムを提供することにある。
【課題を解決するための手段】
【０００９】
本発明の１つの態様によれば、データ格納手段に格納されているデータをキャッシュするために用いられる第１のキャッシュ格納手段と前記第１のキャッシュ格納手段にキャッシュされているデータに対応付けて当該データの内容を要約して生成した識別子を保持する第１のキャッシュデータテーブルと前記データ格納手段に格納されているデータと他のデータとの間の配置関係を示すインデックス及び当該データの内容を要約して生成した識別子を対応付けて保持する第１のキャッシュインデックステーブルとを含む第１のデータ転送装置と、前記第１のデータ転送装置と接続されており、前記データ格納手段に格納されているデータと他のデータとの間の配置関係を示すインデックス及び当該データの内容を要約して生成した識別子を対応付けて保持する第２のキャッシュインデックステーブルを含む第２のデータ転送装置とを有するデータ転送システムに適用されるデータ転送方法が提供される。このデータ転送方法は、前記データ格納手段に格納されているデータの読み込みを要求するための、当該データと他のデータとの配置関係を示すインデックスを含むデータ読み込み要求を前記第１のデータ転送装置に入力するステップと、前記入力されたデータ読み込み要求に含まれるインデックスに対応付けて前記第１のキャッシュインデックステーブルに識別子が保持されているかを前記第１のデータ転送装置が判定するステップと、前記第１のキャッシュインデックステーブルに識別子が保持されていないと判定された場合、前記入力されたデータ読み込み要求に含まれるインデックスによって他のデータとの配置関係が示されるデータの内容を要約して生成した識別子の読み込みを要求するための当該インデックスを含む識別子読み込み要求を前記第１のデータ転送装置が前記第２のデータ転送装置に対して送信するステップと、前記送信された識別子読み込み要求に含まれるインデックスに対応付けて前記第２のキャッシュインデックステーブルに保持されている識別子を、前記第２のデータ転送装置が前記第１のデータ転送装置に対して送信するステップと、前記送信された識別子が前記第１のキャッシュデータテーブルに保持されているかを前記第１のデータ転送装置が判定するステップと、前記送信された識別子が保持されていると判定された場合、前記第１のキャッシュデータテーブルによって当該識別子に対応付けられているデータを、前記第１のデータ転送装置が前記第１のキャッシュ格納手段から取得するステップと、前記取得されたデータを、前記入力されたデータ読み込み要求の要求元に対して前記第１の転送装置が送信するステップとを具備する。
【発明の効果】
【００１０】
本発明によれば、複数の中継装置間においてキャッシュ状態の同期を取ることなく、転送データ量を小さくし、転送速度を向上させることを可能とする。
【発明を実施するための最良の形態】
【００１１】
以下、図面を参照して、本発明の実施形態について説明する。
【００１２】
図１は、本実施形態に係るデータ転送システムが接続されるネットワークシステムについて説明するための図である。図１に示すように、データ転送システム１０は、クライアント装置２０及びストレージ装置３０に接続されている。ここで、データ転送システム１０及びクライアント装置２０は、例えばＬＡＮ（Local Area Network）を介して接続されている。また、データ転送システム１０及びクライアント装置２０間では、例えばｉＳＣＳＩ（Internet Small Computer System Interface）による通信が実行される。データ転送システム１０及びストレージ装置３０間についても、当該データ転送システム１０及びクライアント装置２０間と同様である。
【００１３】
クライアント装置２０は、例えばユーザによって操作され、ストレージ装置３０に対してアクセスする装置である。クライアント装置２０は、ｉＳＣＳＩ（ＳＣＳＩ）でのイニシエータ（Initiator）としての機能を有する。
【００１４】
ストレージ装置３０は、各種データを格納するディスクボリュームを備える。ストレージ装置３０は、当該ストレージ装置３０に備えられているディスクボリュームへのアクセスをクライアント装置２０に対して提供する。ストレージ装置３０は、ｉＳＣＳＩ（ＳＣＳＩ）でのターゲット（Target）としての機能を有する。
【００１５】
データ転送システム１０は、例えばクライアント装置２０及びストレージ装置３０の通信を中継する。データ転送システム１０は、例えばストレージ装置３０から送信されたデータ（ブロックボリュームのデータ）をクライアント装置２０に転送する。
【００１６】
データ転送システム１０は、中継装置（第１のデータ転送装置）１１０及び中継装置（第２のデータ転送装置）１２０を有する。
【００１７】
中継装置１１０は、例えばクライアント装置２０とＬＡＮを介して接続されている。一方、中継装置１２０は、例えばストレージ装置３０とＬＡＮを介して接続されている。また、中継装置１１０及び中継装置１２０は、例えばＬＡＮと比較して帯域が細く遅延が大きい回線を用いた広域通信網（ＷＡＮ：Wide Area Network）を介して接続されている。以下、中継装置１１０をクライアント装置側中継装置１１０、中継装置１２０をストレージ装置側中継装置１２０と称する。
【００１８】
例えばストレージ装置３０によって送信されたデータがクライアント装置２０に転送される際には、当該データ（転送データ）がストレージ装置側中継装置１２０及びクライアント装置側中継装置１１０の順に転送され、クライアント装置２０に転送される。この際、クライアント装置側中継装置１１０及びストレージ装置側中継装置１２０は、転送データをキャッシュする機能を有する。これにより、クライアント装置２０及びストレージ装置３０間のデータ転送効率を向上させる。
【００１９】
クライアント装置２０からは、クライアント装置側中継装置１１０のＬＡＮ側（クライアント装置２０側）のインタフェイスを指定してストレージ装置３０への接続を試み、それを受け付けたクライアント装置側中継装置１１０は、ＷＡＮ側のインタフェイスからストレージ装置側中継装置１２０のＷＡＮ側のインタフェイスに対して接続を行う。ストレージ装置側中継装置１２０は、ＷＡＮ側インタフェイスから受け取った接続要求をＬＡＮ側（ストレージ装置３０側）のインタフェイスに伝えることで、ストレージ装置３０に対して接続を行う。これにより、クライアント装置２０とストレージ装置３０間の接続が確立される。
【００２０】
なお、クライアント装置側中継装置１１０及びストレージ装置側中継装置１２０において、ＬＡＮ側／ＷＡＮ側のインタフェイスは物理的に１つのインタフェイスであってもよい。例えばｉＳＣＳＩであれば、ＴＣＰ／ＩＰのＩＰアドレスやポート番号等で別インタフェイスであることが識別可能であれば十分である。
【００２１】
また、図１では、便宜的に本実施形態に係るデータ転送システム１０が２つの中継装置を含むものとして説明したが、データ転送システム１０は、例えば図２に示すような大規模なネットワークシステムにおいて２つ以上の中継装置を含む構成であっても構わない。
【００２２】
図３は、図１に示すクライアント装置側中継装置１１０のハードウェア構成を示すブロック図である。図３に示すように、コンピュータ２００は、例えばハードディスクドライブ（ＨＤＤ）のような外部記憶装置３００と接続されている。この外部記憶装置３００は、コンピュータ２００によって実行されるプログラム３１０を格納する。コンピュータ２００及び外部記憶装置３００は、クライアント装置側中継装置１１０を構成する。
【００２３】
なお、図３では、クライアント装置側中継装置１１０について説明したが、ストレージ装置側中継装置１２０についても同様の構成である。以下、ストレージ装置側中継装置１２０のハードウェア構成についても、図３を用いて説明する。
【００２４】
図４は、図１に示すデータ転送システム１０に含まれるクライアント装置側中継装置１１０及びストレージ装置側中継装置１２０の主として機能構成を示すブロック図である。
【００２５】
クライアント装置側中継装置１１０は、中継部１１１、キャッシュ格納部１１２、キャッシュデータテーブル１１３、キャッシュインデックステーブル１１４、キャッシュ管理部１１５及び識別子生成部１１６を含む。
【００２６】
本実施形態において、中継部１１１、キャッシュ管理部１１５及び識別子生成部１１６は、図３に示されるコンピュータ２００が外部記憶装置３００に格納されているプログラム３１０を実行することにより実現されるものとする。また、キャッシュ格納部１１２、キャッシュデータテーブル１１３及びキャッシュインデックステーブル１１４は、外部記憶装置３００に格納される。
【００２７】
中継部１１１は、例えばクライアント装置２０及びストレージ装置３０（ストレージ装置側中継装置１２０）間でｉＳＣＳＩ−ＰＤＵを中継する。このｉＳＣＳＩ−ＰＤＵがデータ転送に関わるもの（ＲＥＡＤ＆ＳＣＳＩ  ＤＡＴＡＩＮ／ＷＲＩＴＥ＆ＤＡＴＡＯＵＴ）であれば、キャッシュ管理部１１５を通してキャッシュへのアクセスが実行される。一方、このｉＳＣＳＩ−ＰＤＵがデータ転送に関わるものでなければ、当該ＰＤＵはそのまま相手先に対して転送される。
【００２８】
ここで、例えばクライアント装置２０がストレージ装置３０からデータの読み込み（リード）を行う場合を想定する。この場合、クライアント装置２０は、ストレージ装置３０に格納されているデータの読み込みを要求するためのリード要求（データ読み込み要求）をクライアント装置側中継装置１１０に送信する。このリード要求には、例えば読み込み（リード）の対象となるデータを示すインデックスが含まれる。インデックスは、例えば読み込みの対象となるデータのファイル名または当該データが格納されているストレージ装置３０内のアドレス等を含む。本実施形態では論理ブロックアドレス（ＬＢＡ：Logical Block Address）によるアドレスを含む。中継部１１１は、クライアント装置２０によって送信されたリード要求を入力（受信）する。中継部１１１は、入力されたリード要求をストレージ装置側中継装置１２０に転送する。
【００２９】
また、中継部１１１は、転送されたリード要求に応じて読み出されたデータ（リード要求に含まれるインデックスによって示されるデータ）をストレージ装置側中継装置１２０から入力する。中継部１１１は、入力されたデータをクライアント装置２０に転送する。
【００３０】
一方、例えばクライアント装置２０がストレージ装置３０に対してデータの書き込み（ライト）を行う場合を想定する。この場合、クライアント装置２０は、ライト要求をクライアント側中継装置１１０に送信する。このライト要求には、例えば書き込み（ライト）の対象となるデータ（書き込みデータ）及び当該データを示すインデックスが含まれる。インデックスは、例えば書き込みの対象となるデータのファイル名または当該データの書き込み先であるストレージ装置３０内のアドレス等を含む。中継部１１１は、クライアント装置２０によって送信されたライト要求を入力する。中継部１１１は、入力されたライト要求をストレージ装置側中継装置１２０に転送する。
【００３１】
キャッシュ格納部（第１のキャッシュ格納部）１１２は、例えばストレージ装置３０（に備えられているディスクボリューム）に格納されているデータをキャッシュするために用いられる。
【００３２】
キャッシュデータテーブル（第１のキャッシュデータテーブル）１１３には、キャッシュ格納部１１２に格納されているデータ（キャッシュデータ）に対応付けて当該データの内容に対応する識別子が保持される。このデータの内容に対応する識別子としては、例えばハッシュ値が用いられる。
【００３３】
キャッシュインデックステーブル（第１のキャッシュインデックステーブル）１１４には、例えばストレージ装置３０に格納されているデータを示すインデックス（例えば当該データが格納されているストレージ装置３０内のアドレス等）及び当該データの内容に対応する識別子（ハッシュ値）が保持される。なお、以下の説明では、例えばデータが格納されているディスクボリュームのシリアル番号及び論理ブロックアドレス（ＬＢＡ）の組合せをインデックスとする。シリアル番号は、ストレージ装置３０内にあるディスクボリュームを識別するための番号であり、ストレージ装置３０に対して例えばＣＤＢ（Command Descriptor Block）を発行することで取得される。また、ｉＳＣＳＩの場合は、ｉＳＣＳＩ−ＩｎｉｔｉａｔｏｒＮａｍｅ及びＬＵＮ（Logical Unit Number）の組をシリアル番号として利用することも可能であり、様々な実現方法がある。
【００３４】
なお、キャッシュインデックステーブル１１４は、ストレージ装置３０上に存在する全てのディスクボリューム毎に用意されている。つまり、ストレージ装置３０内にあるディスクボリュームの各々に対応するキャッシュインデックステーブル１１４が存在する。また、例えばストレージ装置３０内に新たにディスクボリュームが作成された場合には、当該作成されたディスクボリュームに対応するキャッシュインデックステーブル１１４が作成される。
【００３５】
また、上記したキャッシュデータテーブル１１３及びキャッシュインデックステーブル１１４に保持されるハッシュ値は、例えば論理ブロックアドレスのａセクタ（ａは５１２バイトの倍数）単位のデータのハッシュ値である。以下では、キャッシュデータテーブル１１３及びキャッシュインデックステーブル１１４に保持されるハッシュ値は、便宜的に１セクタ（５１２バイト）単位のデータのハッシュ値であるものとして説明する。
【００３６】
また、本実施形態ではｉＳＣＳＩによるブロック型転送プロトコルを例として、例えばキャッシュデータテーブル１１３及びキャッシュインデックステーブル１１４の説明を行うが、ｉＳＣＳＩに限定されるわけではなく、例えばインデックスとしてパス名等を利用することで、ＮＦＳ（Network File System）またはＣＩＦＳ（Common Internet File System）等のファイル転送プロトコルにも適用可能である。
【００３７】
キャッシュ管理部１１５は、中継部１１１によって入力されたリード要求またはライト要求に応じて、例えばストレージ装置３０に対する読み込みの対象となるデータまたは書き込みの対象となるデータ（以下、対象データと表記）に対するキャッシュ制御を実行する。キャッシュ管理部１１５は、例えばキャッシュ格納部１１２に対象データを格納することによって、当該対象データをキャッシュする処理を実行する。
【００３８】
また、キャッシュ管理部１１５は、例えばクライアント装置２０によって送信されたリード要求が中継部１１１によって入力されると、当該リード要求に含まれるインデックスに応じてキャッシュヒットの判定を行う。
【００３９】
この場合、キャッシュ管理部１１５は、中継部１１１によって入力されたリード要求に含まれるインデックスに対応付けてキャッシュインデックステーブル１１４にハッシュ値（当該インデックスに対応するハッシュ値）が保持されているか否かを判定する。キャッシュ管理部１１５は、リード要求に含まれるインデックスに対応するハッシュ値が保持されていると判定された場合、当該ハッシュ値がキャッシュデータテーブル１１３に保持されているか否かを判定する。このハッシュ値がキャッシュデータテーブル１１３に保持されていると判定された場合には、キャッシュデータテーブル１１３によって当該識別子に対応付けられているデータがキャッシュ格納部１１２にキャッシュされている。このデータは、リード要求による読み込みの対象となるデータ（対象データ）である。このため、キャッシュ管理部１１５は、キャッシュヒットと判定する。この場合、キャッシュ管理部１１５は、キャッシュ格納部１１２に格納されている対象データをリード要求の要求元であるクライアント端末２０に対して送信する。
【００４０】
キャッシュ管理部１１５は、リード要求に含まれるインデックスに対応付けてキャッシュインデックステーブル１１４にハッシュ値が保持されていないと判定された場合、当該リード要求に含まれるインデックスによって示されるデータ（対象データ）の内容に対応するハッシュ値の読み込みを要求するためのハッシュ値読み込み要求（識別子読み込み要求）を、中継部１１１を介してストレージ装置側中継装置１２０に送信する。このハッシュ値読み込み要求には、対象データを示すインデックスが含まれる。キャッシュ管理部１１５は、このハッシュ値読み込み要求に応じて当該ストレージ装置側中継装置１２０によって送信されたハッシュ値を取得する。キャッシュ管理部１１５は、取得されたハッシュ値に基づいて、キャッシュヒット判定処理を実行する。
【００４１】
また、キャッシュ管理部１１５は、キャッシュデータテーブル１１３によってハッシュ値に対応付けられているデータが存在しないと判定された場合には、中継部１１１を介して、リード要求をストレージ装置側中継装置１２０に対して送信する。キャッシュ管理部１１５は、リード要求に応じてストレージ装置側中継装置１２０によって送信された対象データを取得する。この場合、キャッシュ管理部１１５は、取得されたデータをリード要求の応答としてクライアント装置２０に対して送信する。
【００４２】
また、キャッシュ管理部１１５は、必要に応じてキャッシュデータテーブル１１３及びキャッシュインデックステーブル１１４に対してハッシュ値の登録処理を実行する。
【００４３】
識別子生成部１１６は、キャッシュ管理部１１５から例えば対象データを受け取る。識別子生成部１１６は、受け取られた対象データの内容に対応する識別子としてハッシュ値を生成する。このとき、識別子生成部１１６は、例えばＭＤ５またはＳＨＡ１のような予め定められたハッシュ関数を用いてハッシュ値を生成する。識別子生成部１１６によって生成されたハッシュ値は、例えばキャッシュ管理部１１５によってキャッシュデータテーブル１１３及びキャッシュインデックステーブル１１４に登録される。
【００４４】
ストレージ装置側中継装置１２０は、中継部１２１、キャッシュ格納部１２２、キャッシュデータテーブル１２３、キャッシュインデックステーブル１２４、キャッシュ管理部１２５及び識別子生成部１２６を含む。
【００４５】
本実施形態において、中継部１２１、キャッシュ管理部１２５及び識別子生成部１２６は、図３に示されるコンピュータ２００が外部記憶装置３００に格納されているプログラム３１０を実行することにより実現されるものとする。また、キャッシュ格納部１２２、キャッシュデータテーブル１２３及びキャッシュインデックステーブル１２４は、外部記憶装置３００に格納される。
【００４６】
中継部１２１は、上記した中継部１１１と同様に、例えばクライアント装置２０（クライアント装置側中継装置１１０）及びストレージ装置３０間でｉＳＣＳＩ−ＰＤＵを中継する。このｉＳＣＳＩ−ＰＤＵがデータ転送に関わるものであれば、キャッシュ管理部１２５を通してキャッシュへのアクセスが実行される。一方、このｉＳＣＳＩ−ＰＤＵがデータ転送に関わるものでなければ、当該ＰＤＵはそのまま相手先に対して転送される。
【００４７】
中継部１２１は、例えばクライアント装置側中継装置１１０（の中継部１１１）によって送信されたリード要求を入力する。中継部１２１は、入力されたリード要求をストレージ装置３０に転送する。また、中継部１２１は、入力されたリード要求に応じて、ストレージ装置３０から対象データを読み出す。中継部１２１は、入力されたデータをクライアント装置側中継装置１１０に転送する。
【００４８】
中継部１２１は、例えばクライアント装置側中継装置１１０によって送信されたライト要求を入力する。中継部１２１は、入力されたライト要求をストレージ装置３０に転送する。
【００４９】
また、中継部１２１は、クライアント装置側中継装置１１０によって送信された識別子読み込み要求を入力する。中継部１２１は、入力された識別子読み込み要求をキャッシュ管理部１２５に渡す。
【００５０】
キャッシュ格納部（第２のキャッシュ格納部）１２２は、上記したクライアント装置側中継装置１１０に含まれるキャッシュ管理部１１２と同様に、例えばストレージ装置３０に格納されているデータをキャッシュするために用いられる。
【００５１】
キャッシュデータテーブル（第２のキャッシュデータテーブル）１２３の構成については、上記したクライアント装置側中継装置１１０に含まれるキャッシュデータテーブル１１３と同様であるため、その説明を省略する。
【００５２】
また、キャッシュインデックステーブル（第２のキャッシュインデックステーブル）１２４の構成については、上記したクライアント装置側中継装置１１０に含まれるキャッシュインデックステーブル１１４と同様であるため、その説明を省略する。
【００５３】
キャッシュ管理部１２５は、中継部１２１によって入力されたリード要求またはライト要求に応じて、対象データに対するキャッシュ制御を実行する。キャッシュ管理部１２５は、例えばキャッシュ格納部１２２に対象データを格納することによって、当該対象データをキャッシュする処理を実行する。
【００５４】
キャッシュ管理部１２５は、例えばクライアント装置側中継装置１１０によって送信されたリード要求が中継部１２１によって入力されると、当該リード要求に含まれるインデックスに応じてキャッシュヒットの判定を行う。
【００５５】
この場合、キャッシュ管理部１２５は、上記したクライアント装置側中継装置１１０に含まれるキャッシュ管理部１１５と同様に、中継部１２１によって入力されたリード要求に含まれるインデックスに対応付けてキャッシュインデックステーブル１２４にハッシュ値が保持されているか否かを判定する。キャッシュ管理部１２５は、ハッシュ値が保持されていると判定された場合、当該ハッシュ値がキャッシュデータテーブル１２３に保持されているか否かを判定する。このハッシュ値がキャッシュデータテーブル１２３に保持されていると判定された場合には、キャッシュデータテーブル１２３によって当該識別子に対応付けられているデータがキャッシュ格納部１２２にキャッシュされている。このデータは、リード要求による読み込みの対象となるデータ（対象データ）である。このため、キャッシュ管理部１２５は、キャッシュヒットと判定する。この場合、キャッシュ管理部１２５は、キャッシュ格納部１２２に格納されている対象データをクライアント装置側中継装置１１０に対して送信する。
【００５６】
キャッシュ管理部１２５は、リード要求に含まれるインデックスに対応付けてキャッシュインデックステーブル１２４にハッシュ値が保持されていないと判定された場合、中継部１２１を介して、当該リード要求をストレージ装置３０に送信する。これにより、キャッシュ管理部１２５は、ストレージ装置３０から対象データを取得する（読み込む）。同様に、ハッシュ値がキャッシュデータテーブル１１３に保持されていないと判定された場合には、中継部１２１を介してリード要求がストレージ装置３０に送信される。
【００５７】
キャッシュ管理部１２５は、ストレージ装置３０から読み込まれた対象データを、中継部１２１を介してクライアント装置側中継装置１１０に送信する。
【００５８】
キャッシュ管理部１２５は、例えばクライアント装置側中継装置１１０によって送信された識別子読み込み要求が中継部１２１から渡されると、当該識別子読み込み要求に含まれるインデックスに対応付けてキャッシュインデックステーブル１２４に保持されているハッシュ値をクライアント装置側中継装置１１０に送信する。
【００５９】
また、キャッシュ管理部１２５は、必要に応じてキャッシュデータテーブル１２３及びキャッシュインデックステーブル１２４に対してハッシュ値の登録処理を実行する。
【００６０】
識別子生成部１２６は、上記したクライアント装置側中継装置１１０に含まれる識別子生成部１１６と同様に、例えば対象データの内容に対応する識別子としてハッシュ値を生成する。このとき、識別子生成部１２６は、例えばＭＤ５またはＳＨＡ１のような予め定められたハッシュ関数を用いてハッシュ値を生成する。この識別子生成部１２６によって生成されたハッシュ値は、例えばキャッシュ管理部１２５によってキャッシュデータテーブル１２３及びキャッシュインデックステーブル１２４に登録される。
【００６１】
図５は、クライアント装置側中継装置１１０に含まれるキャッシュデータテーブル１１３のデータ構造の一例を示す。なお、ここではキャッシュデータテーブル１１３について説明するが、ストレージ装置側中継装置１２０に含まれるキャッシュデータテーブル１２３についても同様である。
【００６２】
図５に示すように、キャッシュデータテーブル１１３には、キャッシュデータ（格納先のアドレス）及び識別子が対応付けて保持されている。ここでは、キャッシュデータのアドレスは、当該キャッシュデータがキャッシュ格納部１１２に格納されているアドレスであり、例えば８バイトで表される。また、識別子は、対応付けられているデータの内容から、予め定められたハッシュ関数（例えば、ＳＨＡ１）を用いて生成されたハッシュ値である。また、このハッシュ値は、例えば２０バイトで表される。
【００６３】
図５に示す例では、キャッシュデータのアドレス「０ｘ１５Ａ０００１００００２００００（８バイト）」に対応付けてハッシュ値「０ｘ５Ｃ３ＥＢ８００６６４２０００２ＢＣ３ＤＣＣ７ＣＡ４ＡＢ６ＥＦＡＤ７ＥＤ４ＡＥ５（２０バイト）」が保持されている。データのアドレス「０ｘ１５Ａ０００１００００２０２００」に対応付けてハッシュ値「０ｘＦ２８Ｅ８ＢＤＢ１Ｆ９５０３３Ｄ３１Ｄ３３２ＡＤ１Ｃ１９２Ｅ５２６３６８７Ｆ２７」が保持されている。また、データのアドレス「０ｘ１５Ａ０００１００００２０４００」に対応付けてハッシュ値「０ｘＢ３７６８８５ＡＣ８４５２Ｂ６ＣＢＦ９ＣＥＤ８１Ｂ１０８０ＢＦＤ５７０Ｄ９Ｂ９１」が保持されている。
【００６４】
図６は、クライアント装置側中継装置１１０に含まれるキャッシュインデックステーブル１１４のデータ構造の一例を示す。なお、ここではキャッシュインデックステーブル１１４について説明するが、ストレージ装置側中継装置１２０に含まれるキャッシュインデックステーブル１２４についても同様である。
【００６５】
図６に示すように、キャッシュインデックステーブル１１４には、ディスクボリュームシリアル番号、論理ブロックアドレス（ＬＢＡ）及び識別子が保持されている。キャッシュインデックステーブル１１４では、ディスクボリュームのシリアル番号及び論理ブロックアドレスの組み合わせをインデックスとしている。また、キャッシュインデックステーブル１１４は、ディスクボリューム（ディスクボリュームのシリアル番号）毎に存在する。
【００６６】
また、図６に示すように、キャッシュインデックステーブル１１４にはシリアル番号によって識別されるディスクボリューム内の論理ブロックアドレス毎に対応付けて識別子が保持されている。
【００６７】
ここでは、ディスクボリュームのシリアル番号は、例えば１０バイトで表される。また、論理ブロックアドレスは、４バイトで表される。識別子は、ディスクボリュームのシリアル番号及び論理ブロックアドレスによって示される（論理ブロックアドレスに格納されている）データの内容から、予め定められたハッシュ関数（例えば、ＳＨＡ１）を用いて生成されたハッシュ値である。このハッシュ値は、例えば２０バイトで表される。
【００６８】
図６には、シリアル番号が「０ｘＦ４ＢＡＡＣＤＤＤ８ＦＡ４ＡＣＢＦ８３４」によって識別されるディスクボリュームに対応するキャッシュインデックステーブル１１４が示されている。
【００６９】
図６に示す例では、論理ブロックアドレス「０ｘ００００００００（４バイト）」に対応付けてハッシュ値「０ｘ５Ｃ３ＥＢ８００６６４２０００２ＢＣ３ＤＣＣ７ＣＡ４ＡＢ６ＥＦＡＤ７ＥＤ４ＡＥ５（２０バイト）」が保持されている。論理ブロックアドレス「０ｘ０００００００１」に対応付けてハッシュ値「０ｘＦ２８Ｅ８ＢＤＢ１Ｆ９５０３３Ｄ３１Ｄ３３２ＡＤ１Ｃ１９２Ｅ５２６３６８７Ｆ２７」が保持されている。論理ブロックアドレス「０ｘ０００００００３」に対応付けてハッシュ値「０ｘＢ３７６８８５ＡＣ８４５２Ｂ６ＣＢＦ９ＣＥＤ８１Ｂ１０８０ＢＦＤ５７０Ｄ９Ｂ９１」が保持されている。論理ブロックアドレス「０ｘ０００００００７」に対応付けてハッシュ値「０ｘ５Ｃ３ＥＢ８００６６４２０００２ＢＣ３ＤＣＣ７ＣＡ４ＡＢ６ＥＦＡＤ７ＥＤ４ＡＥ５」が保持されている。
【００７０】
次に、図７を参照して、キャッシュデータテーブル１１３及びキャッシュインデックステーブル１１４の関係について説明する。なお、図７においては、上記した図５及び図６とは異なり、キャッシュデータテーブル１１３及びキャッシュインデックステーブル１１４に保持されているディスクボリュームのシリアル番号、論理ブロックアドレス、識別子（ハッシュ値）及びデータのアドレスについては、便宜的に簡略化して記載されている。
【００７１】
なお、ここではキャッシュデータテーブル１１３及びキャッシュインデックステーブル１１４の関係について説明するが、キャッシュデータテーブル１２３及びキャッシュインデックステーブル１２４の関係についても同様である。
【００７２】
図７では、ディスクボリュームのシリアル番号「１」によって識別されるストレージ装置３０内のディスクボリュームに対応するキャッシュインデックステーブル１１４について説明する。
【００７３】
このキャッシュインデックステーブル１１４には、論理ブロックアドレス「１」に対応付けて識別子「ハッシュ値１」が保持されている。また、論理ブロックアドレス「２」に対応付けて識別子「ハッシュ値２」、論理ブロックアドレス「３」に対応付けて識別子「ハッシュ値３」、論理ブロックアドレス「４」に対応付けて識別子「ハッシュ値１」が保持されている。つまり、論理ブロックアドレス「１」に格納されているデータ及び論理ブロックアドレス「４」に格納されているデータは同一データである。換言すれば、論理ブロックアドレス「１」及び論理ブロックアドレス「４」は、同一データをポイントしている状態である。
【００７４】
一方、キャッシュデータテーブル１１３には、識別子「ハッシュ値１」に対応付けてキャッシュデータのアドレスとして「アドレス１」が保持されている。また、識別子「ハッシュ値２」に対応付けてキャッシュデータのアドレスとして「アドレス２」、識別子「ハッシュ値３」に対応付けてキャッシュデータのアドレスとして「アドレス３」が保持されている。
【００７５】
また、キャッシュ格納１１２の「アドレス１」にはデータＡが格納されている。キャッシュ格納部１１２の「アドレス２」にはデータＢが格納されている。また、キャッシュ格納１１２の「アドレス３」にはデータＣが格納されている。
【００７６】
なお、データＡは、キャッシュ格納部１１２の「アドレス１」にキャッシュされているデータであり、ストレージ装置３０のディスクボリュームシリアル番号「１」の論理ブロックアドレス「１」及び論理ブロックアドレス「４」に格納されているデータ（と同一）である。
【００７７】
データＢは、キャッシュ格納部１１２の「アドレス２」にキャッシュされているデータであり、ストレージ装置３０のディスクボリュームシリアル番号「１」の論理ブロックアドレス「２」に格納されているデータ（と同一）である。
【００７８】
また、データＣは、キャッシュ格納部１１２の「アドレス３」にキャッシュされているデータであり、ストレージ装置３０のディスクボリュームシリアル番号「１」の論理ブロックアドレス「３」に格納されているデータ（と同一）である。
【００７９】
上記したように、キャッシュデータテーブル１１３及びキャッシュインデックステーブル１１４は、識別子（ハッシュ値）により関連付けられている。これにより、例えばクライアント装置２０からストレージ装置３０に対してリード要求があった場合には、例えばクライアント装置側中継装置１１０（ストレージ装置側中継装置１２０）は、当該リード要求に含まれるインデックス（ディスクボリュームシリアル番号及び論理ブロックアドレス）からキャッシュ格納部１１２（キャッシュ格納部１２２）に格納されているキャッシュデータを特定することができる。
【００８０】
次に、図８のフローチャートを参照して、クライアント装置２０からストレージ装置３０に対してリード要求が送信された場合における本実施形態に係るデータ転送システム１０の処理手順について説明する。
【００８１】
クライアント装置２０から送信されるリード要求には、当該リード要求によって指定される（読み込みの対象となる）データ（対象データ）を示すインデックスが含まれる。このインデックスには、対象データが格納されているストレージ装置３０内のディスクボリュームを識別するディスクボリュームシリアル番号及び当該ディスクボリューム内の論理ブロックアドレスが含まれる。以下、リード要求に含まれるインデックスを対象インデックスと称する。
【００８２】
まず、クライアント装置側中継装置１１０の中継部１１１は、クライアント装置２０から送信されたリード要求を受信（入力）する（ステップＳ１）。リード要求が入力されると、クライアント装置側中継装置１１０においてキャッシュヒット判定処理が実行される。
【００８３】
キャッシュ管理部１１５は、中継部１１１によって入力されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１１４にハッシュ値が保持されているか否かを判定する（ステップＳ２）。具体的には、キャッシュ管理部１１５は、対象インデックスに含まれるディスクボリュームのシリアル番号によって識別されるディスクボリュームに対応するキャッシュインデックステーブル１１４を特定する。キャッシュ管理部１１５は、特定されたキャッシュインデックステーブル１１４において、対象インデックスに含まれる論理ブロックアドレスに対応付けてハッシュ値が保持されているか否かを判定する。
【００８４】
対象インデックスに対応付けてキャッシュインデックステーブル１１４にハッシュ値が保持されていないと判定された場合（ステップＳ２のＮＯ）、キャッシュ管理部１１５は、対象データの内容に対応するハッシュ値の読み込みを要求するためのハッシュ値読み込み要求を、中継部１１１を介してストレージ装置側中継装置１２０に送信する（ステップＳ３）。このハッシュ値読み込み要求には、対象インデックスが含まれる。
【００８５】
ストレージ装置側中継装置１２０の中継部１２１は、クライアント装置側中継装置１１０によって送信されたハッシュ値読み込み要求を入力する。
【００８６】
キャッシュ管理部１２５は、中継部１２１によって入力されたハッシュ値読み込み要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１２４にハッシュ値が保持されているか否かを判定する（ステップＳ４）。
【００８７】
キャッシュインデックステーブル１２４にハッシュ値が保持されていないと判定された場合（ステップＳ４のＮＯ）、キャッシュ管理部１２５は、対象データの読み込みを要求するためのリード要求を、中継部１２１を介してストレージ装置３０に対して送信する。これにより、キャッシュ管理部１２５は、中継部１２１を介して、対象データをストレージ装置３０から読み込む（ステップＳ５）。
【００８８】
識別子生成部１２６は、キャッシュ管理部１２５によって読み込まれた対象データの内容に対応する識別子としてハッシュ値を生成する（ステップＳ６）。識別子生成部１２６は、例えばＳＨＡ１のようなハッシュ関数を用いてハッシュ値を生成する。
【００８９】
キャッシュ管理部１２５は、読み込まれた対象データをキャッシュ格納部１２２にキャッシュ（格納）する。また、キャッシュ管理部１２５は、識別子生成部１２６によって生成されたハッシュ値を、キャッシュデータテーブル１２３及びキャッシュインデックステーブル１２４に登録する（ステップＳ７）。
【００９０】
具体的には、キャッシュ管理部１２５は、識別子生成部１２６によって生成されたハッシュ値を、対象インデックスに対応付けてキャッシュインデックステーブル１２４に登録する。また、キャッシュ管理部１２５は、キャッシュされた対象データに対応付けて識別子生成部１２６によって生成されたハッシュ値をキャッシュデータテーブル１２３に登録する。
【００９１】
キャッシュ管理部１２５は、識別子生成部１２６によって生成されたハッシュ値を、中継部１２１を介してクライアント装置側中継装置１１０に対して送信する（ステップＳ８）。
【００９２】
クライアント装置側中継装置１１０の中継部１１１は、ストレージ装置側中継装置１２０によって送信されたハッシュ値を入力する。このとき、キャッシュ管理部１１５は、入力されたハッシュ値を対象インデックスに対応付けてキャッシュインデックステーブル１１４に登録する。
【００９３】
キャッシュ管理部１１５は、中継部１１１によって入力されたハッシュ値がキャッシュデータテーブル１１３に保持されているか否かを判定する（ステップＳ９）。
【００９４】
中継部１１１によって入力されたハッシュ値がキャッシュデータテーブル１１３に保持されていないと判定された場合（ステップＳ９のＮＯ）、キャッシュ管理部１１５は、対象データの読み込みを要求するリード要求を、中継部１１１を介してストレージ装置側中継装置１２０に対して送信する（ステップＳ１０）。このリード要求には、対象データを示す対象インデックス（ディスクボリュームシリアル番号及び論理ブロックアドレス）が含まれる。
【００９５】
ストレージ装置側中継装置１２０の中継部１２１は、クライアント装置側中継装置１１０によって送信されたリード要求を入力する。
【００９６】
キャッシュ管理部１２５は、中継部１２１によって入力されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１２４にハッシュ値が保持されているか否かを判定する（ステップＳ１１）。
【００９７】
キャッシュインデックステーブル１２４にハッシュ値が保持されていると判定された場合（ステップＳ１１のＹＥＳ）、キャッシュ管理部１２５は、当該ハッシュ値がキャッシュデータテーブル１２３に保持されているか否かを判定する（ステップＳ１２）。
【００９８】
ハッシュ値がキャッシュデータテーブル１２３に保持されていないと判定された場合（ステップＳ１２のＮＯ）、上記したステップＳ５〜ステップＳ７の処理に相当するステップＳ１３〜ステップＳ１５の処理が実行される。
【００９９】
次に、キャッシュ管理部１２５は、ステップＳ１３において読み込まれた対象データを、中継部１２１を介してクライアント装置側中継装置１１０に対して送信する（ステップＳ１６）。
【０１００】
クライアント装置側中継装置１１０の中継部１１１は、ストレージ装置側中継装置１２０によって送信された対象データを入力する。
【０１０１】
キャッシュ管理部１１５は、中継部１１１によって入力された対象データをキャッシュ格納部１１２に登録（キャッシュ）する（ステップＳ１７）。このとき、キャッシュ管理部１１５は、対象データに対応付けてハッシュ値をキャッシュデータテーブル１１３に登録する。
【０１０２】
キャッシュ管理部１１５は、ステップＳ１において入力されたリード要求の要求元であるクライアント端末２０に対して、当該リード要求の応答として対象データを送信する（ステップＳ１８）。このとき、キャッシュ管理部１１５は、中継部１１１を介して対象データを送信する。
【０１０３】
一方、ステップＳ２において対象インデックスに対応付けてキャッシュインデックステーブル１１４にハッシュ値が保持されていると判定された場合、ステップＳ９の処理が実行される。
【０１０４】
また、ステップＳ４においてキャッシュインデックステーブル１２４にハッシュ値が保持されていると判定された場合、ステップＳ８の処理が実行される。
【０１０５】
また、ステップＳ９において中継部１１１によって入力されたハッシュ値がキャッシュデータテーブル１１３に保持されていると判定された場合には、キャッシュデータテーブル１１３において当該ハッシュ値に対応付けられているデータ（対象データ）がキャッシュ格納部１１２から取得される。具体的には、キャッシュ管理部１１５は、中継部１１１によって入力されたハッシュ値がキャッシュデータテーブル１１３において対応付けられているキャッシュデータのアドレスを特定し、キャッシュ格納部１１２の当該特定されたアドレスに格納されているキャッシュデータ（対象データ）を取得する。このようにして、対象データが取得されると、ステップＳ１８の処理が実行される。
【０１０６】
また、ステップＳ１１においてキャッシュインデックステーブル１２４にハッシュ値が保持されていないと判定された場合、ステップＳ１３の処理が実行される。
【０１０７】
また、ステップＳ１２においてハッシュ値が保持されていると判定された場合には、キャッシュデータテーブル１２３において当該ハッシュ値に対応付けられているデータ（対象データ）がキャッシュ格納部１２２から取得され、ステップＳ１６の処理が実行される。
【０１０８】
また、ここでは便宜的にリード要求にはインデックスとして１つの論理ブロックアドレスのみが含まれているものとして説明したが、複数の論理ブロックアドレスが含まれている構成であってもよい。この場合、リード要求には、ディスクボリュームシリアル番号及び論理ブロックアドレスに加えて、データ長が含まれる。この場合には、リード要求に含まれる論理ブロックアドレスから当該リード要求に含まれるデータ長の間に含まれる複数の論理ブロックアドレスの全てに対して上記したような処理が実行される。
【０１０９】
次に、図９を参照して、本実施形態に係るデータ転送システム１０の動作の第１の具体例について説明する。なお、図中に表記されるＮＵＬＬは、各種データが保持されていない（埋まっていない）旨を表す。以下の各図についても同様である。
【０１１０】
図９に示すストレージ装置３０内には１つのディスクボリュームが備えられているものとする。このディスクボリュームは、論理ブロックアドレス１〜４から構成されている。図９に示すように、論理ブロックアドレス１にはデータａが格納されている。また、論理ブロックアドレス２にはデータｂ、論理ブロックアドレス３にはデータｃ、論理ブロックアドレス４にはデータａが格納されている。つまり、論理ブロックアドレス１及び論理ブロックアドレス４には同一のデータａが格納されている。
【０１１１】
クライアント装置側中継装置１１０に含まれるキャッシュデータテーブル１１３には、データａに対応付けて識別子（ハッシュ値）Ａが保持されている。つまり、クライアント装置側中継装置１１０に含まれるキャッシュ格納部１１２（図示せず）には、データａがキャッシュされている。
【０１１２】
また、クライアント装置側中継装置１１０に含まれるキャッシュインデックステーブル１１４には、論理ブロックアドレス１に対応付けてハッシュ値Ａが保持されている。なお、キャッシュインデックステーブル１１４には、他の論理ブロックアドレス（論理ブロックアドレス２〜４）に対応付けてＮＵＬＬが表記されている。これは、キャッシュインデックステーブル１１４には、論理ブロックアドレス２〜４に対応付けてハッシュ値は保持されていないことを示す。
【０１１３】
一方、ストレージ装置側中継装置１２０に含まれるキャッシュデータテーブル１２３には、データａに対応付けてハッシュ値Ａが保持されている。また、データｂに対応付けてハッシュ値Ｂが保持されている。つまり、ストレージ装置側中継装置１２０に含まれるキャッシュ格納部１２２（図示せず）には、データａ及びデータｂがキャッシュされている。
【０１１４】
また、ストレージ装置側中継装置１２０に含まれるキャッシュインデックステーブル１２４には、論理ブロックアドレス１に対応付けてハッシュ値Ａが保持されている。また、キャッシュインデックステーブル１２４には、論理ブロックアドレス２に対応付けてハッシュ値Ｂ、論理ブロックアドレス４に対応付けてハッシュ値Ａが保持されている。なお、キャッシュインデックステーブル１２４には、論理ブロックアドレス３に対応付けてハッシュ値は保持されていない。
【０１１５】
ここで、例えばクライアント装置２０からストレージ装置３０に対して、対象インデックスとして論理ブロックアドレス４を含むリード要求が送信されたものとする（ステップＳ１０１）。このリード要求は、図９においてＲｅａｄ（ＬＢＡ＝４）と表記されている。なお、上記したようにストレージ装置３０内には１つのディスクボリュームしか備えられていないので、ここでは、対象インデックスに含まれるディスクボリュームシリアル番号については省略する。
【０１１６】
クライアント装置側中継装置１１０は、クライアント装置２０によって送信されたリード要求を入力する。クライアント装置側中継装置１１０は、リード要求が入力されるとキャッシュヒット判定処理を実行する。
【０１１７】
まず、クライアント装置側中継装置１１０は、入力されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１１４にハッシュ値が保持されているか否かを判定する。この場合、クライアント装置側中継装置１１０に含まれるキャッシュインデックステーブル１１４には論理ブロックアドレス４に対応付けてハッシュ値が保持されていない。このため、クライアント装置側中継装置１１０は、インデックスとして論理ブロックアドレス４（対象インデックス）を含むハッシュ値読み込み要求をストレージ装置側中継装置１２０に対して送信する（ステップＳ１０２）。このハッシュ値読み込み要求は、図９においてＲｅａｄＨａｓｈ（ＬＢＡ＝４）と表記されている。
【０１１８】
ストレージ装置側中継装置１２０は、クライアント装置側中継装置１１０によって送信されたハッシュ値読み込み要求を入力する。
【０１１９】
ストレージ装置側中継装置１２０は、入力されたハッシュ値読み込み要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１２４にハッシュ値が保持されているか否かを判定する。この場合、ストレージ装置側中継装置１２０に含まれるキャッシュインデックステーブル１２４には、論理ブロックアドレス４に対応付けてハッシュ値Ａが保持されている。したがって、ストレージ装置側中継装置１２０は、ハッシュ値読み込み要求に対する応答としてハッシュ値Ａをクライアント装置側中継装置１１０に送信する（ステップＳ１０３）。
【０１２０】
クライアント装置側中継装置１１０は、ストレージ装置側中継装置１２０によって送信されたハッシュ値Ａを入力する。
【０１２１】
クライアント装置側中継装置１１０は、入力されたハッシュ値Ａを論理ブロックアドレス４に対応付けてキャッシュインデックステーブル１１４に登録する。
【０１２２】
次に、クライアント装置側中継装置１１０は、入力されたハッシュ値Ａが伽主データテーブル１１３に保持されているか否かを判定する。この場合、キャッシュデータテーブル１１３には、ハッシュ値Ａが保持されている。このため、クライアント装置側中継装置１１０は、キャッシュデータテーブル１１３においてハッシュ値Ａに対応付けられているデータａをキャッシュ格納部１１２から取得する。クライアント装置側中継装置１１０は、取得されたデータａを、リード要求に対する応答としてクライアント装置２０に対して送信する（ステップＳ１０４）。
【０１２３】
次に、図１０を参照して、本実施形態に係るデータ転送システム１０の動作の第２の具体例について説明する。
【０１２４】
図１０に示すストレージ装置３０内には１つのディスクボリュームが備えられているものとする。このディスクボリュームは、論理ブロックアドレス１〜４から構成されている。図１０に示すように、論理ブロックアドレス１にはデータａが格納されている。また、論理ブロックアドレス２にはデータｂ、論理ブロックアドレス３にはデータｃ、論理ブロックアドレス４にはデータａが格納されている。
【０１２５】
クライアント装置側中継装置１１０に含まれるキャッシュデータテーブル１１３には、データａに対応付けて識別子（ハッシュ値）Ａが保持されている。また、クライアント装置側中継装置１１０に含まれるキャッシュインデックステーブル１１４には、論理ブロックアドレス１及び論理ブロックアドレス４に対応付けてハッシュ値Ａが保持されている。
【０１２６】
一方、ストレージ装置側中継装置１２０に含まれるキャッシュデータテーブル１２３には、データａに対応付けてハッシュ値Ａが保持されている。また、キャッシュデータテーブル１２３には、データｂに対応付けてハッシュ値Ｂが保持されている。ストレージ装置側中継装置１２０に含まれるキャッシュインデックステーブル１２４には、論理ブロックアドレス１に対応付けてハッシュ値Ａが保持されている。また、キャッシュインデックステーブル１２４には、論理ブロックアドレス２に対応付けてハッシュ値Ｂ、論理ブロックアドレス４に対応付けてハッシュ値Ａが保持されている。
【０１２７】
ここで、例えばクライアント装置２０からストレージ装置３０に対して、対象インデックスとして論理ブロックアドレス２を含むリード要求が送信されたものとする（ステップＳ１１１）。このリード要求は、図１０においてはＲｅａｄ（ＬＢＡ＝２）と表記されている。
【０１２８】
クライアント装置側中継装置１１０は、クライアント装置２０によって送信されたリード要求を入力する。クライアント装置側中継装置１１０は、リード要求が入力されるとキャッシュヒット判定処理を実行する。
【０１２９】
まず、クライアント装置側中継装置１１０は、入力されてリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１１４にハッシュ値が保持されているか否かを判定する。この場合、クライアント装置側中継装置１１０に含まれるキャッシュインデックステーブル１１４には論理ブロックアドレス２に対応付けてハッシュ値が保持されていない。このため、クライアント装置側中継装置１１０は、論理ブロックアドレス２（対象インデックス）を含むハッシュ値読み込み要求をストレージ装置側中継装置１２０に対して送信する（ステップＳ１１２）。このハッシュ値読み込み要求は、図１０においてはＲｅａｄＨａｓｈ（ＬＢＡ＝２）と表記されている。
【０１３０】
ストレージ装置側中継装置１２０は、クライアント装置側中継装置１１０によって送信されたハッシュ値読み込み要求を入力する。
【０１３１】
ストレージ装置側中継装置１２０は、入力されたハッシュ値読み込み要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１２４にハッシュ値が保持されているか否かを判定する。このとき、ストレージ装置側中継装置１２０に含まれるキャッシュインデックステーブル１２４には論理ブロックアドレス２に対応付けてハッシュ値Ｂが保持されている。したがって、ストレージ装置側中継装置１２０は、ハッシュ値読み込み要求に対する応答としてハッシュ値Ｂをクライアント装置側中継装置１１０に送信する（ステップＳ１１３）。
【０１３２】
クライアント装置側中継装置１１０は、ストレージ装置側中継装置１２０によって送信されたハッシュ値Ｂを入力する。
【０１３３】
クライアント装置側中継装置１１０は、入力されたハッシュ値Ｂを論理ブロックアドレス２に対応付けてキャッシュインデックステーブル１１４に登録する。
【０１３４】
次に、クライアント装置側中継装置１１０は、入力されたハッシュ値Ｂがキャッシュデータテーブル１１３に保持されているか否かを判定する。この場合、キャッシュデータテーブル１１３にはハッシュ値Ｂは保持されていないため、クライアント装置側中継装置１１０において、対象データはキャッシュされていない。このため、クライアント装置側中継装置１１０は、論理ブロックアドレス２（対象インデックス）を含むリード要求をストレージ装置側中継装置１２０に対して送信する（ステップＳ１１４）。
【０１３５】
ストレージ装置側中継装置１２０は、クライアント装置側中継装置１１０によって送信されたリード要求を入力する。
【０１３６】
ストレージ装置側中継装置１２０は、入力されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１２４にハッシュ値が保持されているか否かを判定する。この場合、キャッシュインデックステーブル１２４には論理ブロックアドレス２に対応付けてハッシュ値Ｂが保持されている。
【０１３７】
次に、ストレージ装置側中継装置１２０は、ハッシュ値Ｂがキャッシュデータテーブル１２３に保持されているか否かを判定する。この場合、キャッシュデータテーブル１２３にはハッシュ値Ｂが保持されている。ストレージ装置側中継装置１２０は、キャッシュデータテーブル１２３においてハッシュ値Ｂに対応付けられているデータｂをキャッシュ格納部１２２から取得する。ストレージ装置側中継装置１２０は、取得されたデータｂを、リード要求の応答としてクライアント装置側中継装置１１０に対して送信する（ステップＳ１１５）。
【０１３８】
クライアント装置側中継装置１１０は、ストレージ装置が中継装置１２０によって送信されたデータｂを入力する。
【０１３９】
クライアント装置側中継装置１１０は、入力されたデータｂをキャッシュ格納部１１２にキャッシュする。また、クライアント装置側中継装置１１０は、入力されたデータｂに対応付けてハッシュ値Ｂをキャッシュデータテーブル１１３に登録する。
【０１４０】
クライアント装置側中継装置１１０は、入力されたデータｂをリード要求に対する応答としてクライアント装置２０に対して送信する（ステップＳ１１６）。
【０１４１】
次に、クライアント装置２０からストレージ装置３０に対してライト要求が送信された場合の本実施形態に係るデータ転送システム１０の動作について説明する。
【０１４２】
まず、クライアント装置側中継装置１１０は、クライアント装置２０から送信されたライト要求を入力する。このライト要求には、例えばディスクボリュームシリアル番号及び論理ブロックアドレスを含むインデックス（対象インデックス）及びストレージ装置３０に対して書き込まれるデータ（書き込みデータ）が含まれる。
【０１４３】
ここで、ライト要求に応じてストレージ装置３０に対して書き込み処理が行われる際には、各中継装置（クライアント装置側中継装置１１０及びストレージ装置側中継装置１２０）内のキャッシュとストレージ装置３０内のデータとの一貫性を保持するための動作が必要となる。
【０１４４】
そこで、例えばクライアント装置側中継装置１１０によってライト要求が受信された際には、当該クライアント装置側中継装置１１０では、キャッシュの一貫性を保持するために例えば第１の動作または第２の動作が実行される。
【０１４５】
まず、第１の動作について説明する。この第１の動作においては、クライアント装置側中継装置１１０は、受信されたライト要求をそのままストレージ装置側中継装置１２０に対して送信する。
【０１４６】
その際、クライアント装置側中継装置１１０に含まれる識別子生成部１１６は、ライト要求に含まれる書き込みデータの内容に対応する識別子（ハッシュ値）を生成する。そして、キャッシュ管理部１１５は、キャッシュインデックステーブル１１４においてライト要求に含まれる対象インデックスに対応付けられているハッシュ値を、識別子生成部１１６によって生成されたハッシュ値に書き換える。また、キャッシュ管理部１１５は、書き込みデータをキャッシュ格納部１１２にキャッシュする。キャッシュ管理部１１５は、書き込みデータに対応付けて識別子生成部１１６によって生成されたハッシュ値をキャッシュデータテーブル１１３に登録する。つまり、第１の動作においては、キャッシュの更新によってキャッシュの一貫性が保障される。
【０１４７】
次に、第２の動作について説明する。この第２の動作においても、クライアント装置側中継装置１１０は、受信されたライト要求をそのままストレージ装置側中継装置１２０に対して送信する。
【０１４８】
その際、クライアント装置側中継装置１１０に含まれるキャッシュ管理部１１５は、ライト要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１１４に保持されているハッシュ値を破棄（または、無効にマーク）する。つまり、第２の動作においては、キャッシュの破棄によってキャッシュの一貫性が保障される。
【０１４９】
なお、上記した第１及び第２の動作はクライアント装置側中継装置１１０によって実行されるものとして説明したが、ストレージ装置側中継装置１２０によっても実行される。つまり、ストレージ装置側中継装置１２０では、クライアント装置側中継装置１１０によって送信されたライト要求に対して上記した動作と同様の動作が実行される。
【０１５０】
これにより、ストレージ装置３０内のデータと各中継装置内のキャッシュデータとの一貫性を保持することができる。
【０１５１】
上記したように本実施形態においては、例えばクライアント装置２０から送信されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１１４にハッシュ値が保持されていない場合、当該対象インデックスを含むハッシュ値読み込み要求がクライアント装置側中継装置１１０からストレージ装置側中継装置１２０に対して送信される。これにより、ハッシュ値読み込み要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１２４にハッシュ値が保持されている場合には、当該ハッシュ値がストレージ装置側中継装置１２０からクライアント装置側中継装置１１０に対して送信される。この場合に、例えばストレージ装置側中継装置１２０によって送信されたハッシュ値がキャッシュデータテーブル１１３に保持されている場合には、キャッシュデータテーブル１１３において当該ハッシュ値に対応付けられているデータ（対象データ）をキャッシュ格納部１１２から取得することで、リード要求の応答として対象データをクライアント装置２０に対して送信することが可能となる。
【０１５２】
よって、本実施形態においては、クライアント装置側中継装置１１０及びストレージ装置側中継装置１２０が例えば帯域が細く遅延が大きい回線を用いた広域通信網（ＷＡＮ）を介して接続されている場合において、当該クライアント装置側中継装置１１０及びストレージ装置側中継装置１２０間ではデータ自体は転送されることなく、当該データの内容に対応する識別子のみが転送されるので、当該クライアント装置側中継装置１１０及びストレージ装置側中継装置１２０間での転送データ量を削減する（小さくする）ことが可能となる。このように、クライアント装置側中継装置１１０及びストレージ装置側中継装置１２０間での転送データ量を小さくすることで転送速度を向上させることが可能となる。
【０１５３】
［第１の変形例］
次に、図１１〜図１４を参照して、本実施形態の第１の変形例について説明する。なお、本変形例に係るデータ転送システムの構成は、前述した本実施形態に係るデータ転送システム１０の構成と同様であるため、図１及び図４を用いて説明する。以下の各変形例についても同様にして図１及び図４を用いて説明する。
【０１５４】
前述した本実施形態に係るデータ転送システム１０においては、例えばクライアント装置２０がストレージ装置３０からデータ（対象データ）を読み込むためのリード要求が送信されると、クライアント装置側中継装置１１０がストレージ装置側中継装置１２０から当該対象データの内容に対応するハッシュ値を取得し、キャッシュデータテーブル１１３に当該ハッシュ値が保持されていない場合には、対象データ本体を当該ストレージ装置側中継装置１２０から取得する。このため、例えば取得されたハッシュ値がキャッシュデータテーブル１１３に保持されていればクライアント装置側中継装置１１０及びストレージ装置側中継装置１２０間において対象データ本体を転送する必要がないので、転送データ量を削減できる。
【０１５５】
しかしながら、前述した本実施形態においては、クライアント側中継装置１１０がストレージ装置側中継装置１２０からハッシュ値を取得した後、当該ハッシュ値がキャッシュデータテーブル１１３に保持されていない（つまり、キャッシュミスヒットと判定された）場合には、対象データ本体がストレージ装置側中継装置１２０からクライアント装置側中継装置１１０に転送される。したがって、結果的にクライアント装置側中継装置１１０及びストレージ装置側中継装置１２０間でハッシュ値及び対象データ本体が別々に転送されることになる（つまり、二度手間となる）ため、そのペナルティは大きい。
【０１５６】
本変形例に係るデータ転送システム１０の特徴は、上記した二度手間を省くために、例えばクライアント装置２０がストレージ装置３０から対象データを読み込むためのリード要求が送信されると、当該リード要求の後にクライアント装置２０が読み込みを要求するインデックスを予想して、当該インデックスに対応付けられているハッシュ値を予めクライアント装置側中継装置１２０において先読みしておく点にある。つまり、本変形例に係るデータ転送システム１０においては、上記したような本実施形態において生じる二度手間を省くことを目的としている。
【０１５７】
図１１のフローチャートを参照して、クライアント装置２０からストレージ装置３０に対してリード要求が送信された場合における本変形例に係るデータ転送システム１０の処理手順について説明する。
【０１５８】
クライアント装置２０から送信されるリード要求には、当該リード要求によって指定される（読み込みの対象となる）データ（対象データ）を示すインデックス（対象インデックス）が含まれる。この対象インデックスには、対象データが格納されているストレージ装置３０内のディスクボリュームを識別するディスクボリュームシリアル番号及び当該ディスクボリューム内の論理ブロックアドレスが含まれる。
【０１５９】
まず、クライアント装置側中継装置１１０は、前述した図８に示すステップＳ１及びステップＳ２の処理に相当するステップＳ２１及びステップＳ２２の処理を実行する。
【０１６０】
ステップＳ２２において対象インデックスに対応付けてキャッシュインデックステーブル１１４にハッシュ値が保持されていないと判定された場合、クライアント装置側中継装置１１０に含まれるキャッシュ管理部１１５は、対象インデックスによって示されるデータ（対象データ）の読み込み及びハッシュ値の先読みを要求するための先読み要求（先読みつき読み込み命令）を、中継部１１１を介してストレージ装置側中継装置１２０に送信する（ステップＳ２３）。この先読み要求には、対象インデックスが含まれる。
【０１６１】
一方、ステップＳ２２において対象インデックスに対応付けてキャッシュインデックステーブル１１４にハッシュ値が保持されていると判定された場合、キャッシュ管理部１１５は、当該ハッシュ値がキャッシュデータテーブル１１３に保持されているか否かを判定する（ステップＳ２４）。
【０１６２】
ハッシュ値がキャッシュデータテーブル１１３に保持されていないと判定された場合（ステップＳ２４のＮＯ）、キャッシュ管理部１１５は、上記した先読み要求を、中継部１１１を介してストレージ装置側中継装置１２０に送信する（ステップＳ２５）。
【０１６３】
ステップＳ２３またはステップＳ２５においてクライアント装置側中継装置１１０から先読み要求が送信されると、ストレージ装置側中継装置１２０に含まれる中継装置１２１は、当該先読み要求を入力する。
【０１６４】
キャッシュ管理部１２５は、中継装置１２１によって入力された先読み要求に応じて、対象データの取得（読み込み）処理を実行する（ステップＳ２６）。この対象データの取得処理においては、例えば前述した図８に示すステップＳ１１〜ステップＳ１５の処理に相当する処理が実行される。これにより、キャッシュ管理部１２５は、対象データを取得する。
【０１６５】
また、キャッシュ管理部１２５は、中継装置１２１によって入力された先読み要求に応じて、ハッシュ値の先読み処理を実行する（ステップＳ２７）。このハッシュ値の先読み処理では、まず、例えば先読み要求に含まれる対象インデックスに応じて先読みの対象となるインデックス（先読み先のインデックス）が決定（選択）される。
【０１６６】
ここで、先読み先のインデックスを決定する方法として、例えばクライアント装置２０から送信されたリード要求がシーケンシャルリードであるものと想定して、当該リード要求に含まれる対象インデックスに後続するインデックスを先読み先のインデックスと決定する方法がある。ここで、この方法によれば、例えばＬＵＮ０のディスクボリュームの論理ブロックアドレス１から論理ブロックアドレス１０までのデータの読み込みを要求するリード要求（つまり、対象インデックスがＬＢＡ１〜１０）がクライアント装置２０から送信された場合には、先読み先のインデックスとして当該ＬＵＮ０のディスクボリュームの論理ブロックアドレス１１が決定される。
【０１６７】
以下、本変形例においては、上記した方法によって先読み先のインデックスが決定されるものとする。
【０１６８】
なお、先読み先のインデックスを決定する方法としては、上記した方法以外に、例えば過去のクライアント装置２０からのストレージ装置３０に対するアクセスの統計情報をもとに決定する方法等、様々な方法が考えられる。
【０１６９】
キャッシュ管理部１２５は、例えば先読み要求に含まれる対象インデックスに後続するインデックスが先読み先のインデックスとして決定されると、当該先読み先のインデックスに基づいて例えば前述した図８のステップＳ４〜ステップＳ７の処理に相当する処理を実行する。これにより、先読み先のインデックスに対応するハッシュ値（以下、後続のハッシュ値と表記）が取得され、ハッシュ値の先読み処理は終了される。
【０１７０】
次に、キャッシュ管理部１２５は、ステップＳ２６において取得された対象データ及びステップＳ２７において取得された後続のハッシュ値を、中継部１２１を介してクライアント装置側中継装置１１０に対して送信する（ステップＳ２８）。このとき、キャッシュ管理部１２５は、先読み先のインデックスをクライアント装置側中継装置１１０に対して通知する。
【０１７１】
クライアント装置側中継装置１１０の中継部１１１は、ストレージ装置側中継装置１２０によって送信された対象データ及び後続のハッシュ値を入力する。
【０１７２】
キャッシュ管理部１１５は、中継部１１１によって入力された対象データを識別子生成部１１６に渡す。
【０１７３】
識別子生成部１１６は、キャッシュ管理部１１５から渡された対象データの内容に対応する識別子としてハッシュ値を生成する（ステップＳ２９）。識別子生成部１１６は、例えばＳＨＡ１のようなハッシュ関数を用いてハッシュ値を生成する。
【０１７４】
次に、キャッシュ管理部１１５は、中継部１１１によって入力された対象データをキャッシュ格納部１１２にキャッシュする。また、キャッシュ管理部１１５は、識別子生成部１１６によって生成されたハッシュ値を、キャッシュデータテーブル１１３及びキャッシュインデックステーブル１１４に登録する（ステップＳ３０）。
【０１７５】
具体的には、キャッシュ管理部１１５は、識別子生成部１１６によって生成されたハッシュ値を、対象インデックスに対応付けてキャッシュインデックステーブル１１４に登録する。また、キャッシュ管理部１１５は、キャッシュされた対象データに対応付けて識別子生成部１１６によって生成されたハッシュ値をキャッシュデータテーブル１１３に登録する。
【０１７６】
また、キャッシュ管理部１１５は、中継部１１１によって入力された後続のハッシュ値を、ストレージ装置側中継装置１２０から通知された先読み先のインデックスに対応付けてキャッシュインデックステーブル１１４に登録する（ステップＳ３１）。
【０１７７】
キャッシュ管理部１１５は、ステップＳ２１において入力されたリード要求の要求元であるクライアント端末２０に対して、当該リード要求の応答として対象データを送信する（ステップＳ３２）。このとき、キャッシュ管理部１１５は、中継部１１１を介して対象データを送信する。
【０１７８】
一方、ステップＳ２４においてハッシュ値がキャッシュデータテーブル１１３に保持されていると判定された場合には、キャッシュデータテーブル１１３において当該ハッシュ値に対応付けられているデータ（対象データ）がキャッシュ格納部１１２から取得され、ステップＳ３２の処理が実行される。
【０１７９】
次に、図１２を参照して、本変形例に係るデータ転送システム１０の動作の第１の具体例について説明する。ここでは、本変形例においてハッシュ値の先読み処理が効果的である場合の動作例について示す。
【０１８０】
図１２に示すストレージ装置３０内には１つのディスクボリュームが備えられているものとする。このディスクボリュームは、論理ブロックアドレス１〜４から構成されている。図１２に示すように、論理ブロックアドレス１にはデータａが格納されている。また、論理ブロックアドレス２にはデータｂ、論理ブロックアドレス３にはデータｃ、論理ブロックアドレス４にはデータａが格納されている。つまり、論理ブロックアドレス１及び論理ブロックアドレス４には同一のデータａが格納されている。
【０１８１】
クライアント装置側中継装置１１０に含まれるキャッシュデータテーブル１１３には、データａに対応付けてハッシュ値Ａが保持されている。つまり、クライアント装置側中継装置１１０に含まれるキャッシュ格納部１１２（図示せず）には、データａがキャッシュされている。
【０１８２】
また、クライアント装置側中継装置１１０に含まれるキャッシュインデックステーブル１１４には、論理ブロックアドレス１に対応付けてハッシュ値Ａが保持されている。なお、キャッシュインデックステーブル１１４には、他の論理ブロックアドレス（論理ブロックアドレス２〜４）に対応付けてハッシュ値は保持されていない。
【０１８３】
一方、ストレージ装置側中継装置１２０に含まれるキャッシュデータテーブル１２３には、データａに対応付けてハッシュ値Ａが保持されている。また、キャッシュデータテーブル１２３には、データｃに対応付けてハッシュ値Ｃが保持されている。つまり、ストレージ装置側中継装置１２０に含まれるキャッシュ格納部１２２（図示せず）には、データａ及びデータｃがキャッシュされている。
【０１８４】
また、ストレージ装置側中継装置１２０に含まれるキャッシュインデックステーブル１２４には、論理ブロックアドレス１に対応付けてハッシュ値Ａが保持されている。また、キャッシュインデックステーブル１２４には、論理ブロックアドレス３に対応付けてハッシュ値Ｃ、論理ブロックアドレス４に対応付けてハッシュ値Ａが保持されている。なお、論理ブロックアドレス２に対応付けてハッシュ値は保持されていない。
【０１８５】
ここで、例えばクライアント装置２０からストレージ装置３０に対して、対象インデックスとして論理ブロックアドレス３を含むリード要求が送信されたものとする（ステップＳ１２１）。このリード要求は、図１２においてはＲｅａｄ（ＬＢＡ＝３）と表記されている。なお、上記したようにストレージ装置３０内には１つのディスクボリュームしか備えられていないので、ここでは、インデックスに含まれるディスクボリュームシリアル番号については省略する。
【０１８６】
クライアント装置側中継装置１１０は、クライアント装置２０によって送信されたリード要求を入力する。クライアント装置側中継装置１１０は、リード要求が入力されるとキャッシュヒット判定処理を実行する。
【０１８７】
まず、クライアント装置側中継装置１１０は、入力されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１１４にハッシュ値が保持されているか否かを判定する。この場合、クライアント装置側中継装置１１０に含まれるキャッシュインデックステーブル１１４には論理ブロックアドレス３に対応付けてハッシュ値が保持されていない。このため、クライアント装置側中継装置１１０は、論理ブロックアドレス３（対象インデックス）を含む先読み要求をストレージ装置側中継装置１２０に対して送信する（ステップＳ１２２）。この先読み要求は、図１２においてはＲｅａｄＥｘ（ＬＢＡ＝３）と表記されている。
【０１８８】
ストレージ装置側中継装置１２０は、クライアント装置側中継装置１１０によって送信された先読み要求を入力する。
【０１８９】
ストレージ装置側中継装置１２０は、入力された先読み要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１２４にハッシュ値が保持されているか否かを判定する。この場合、ストレージ装置側中継装置１２０に含まれるキャッシュインデックステーブル１２４には、論理ブロックアドレス３に対応付けてハッシュ値Ｃが保持されている。
【０１９０】
次に、ストレージ装置側中継装置１２０は、ハッシュ値Ｃがキャッシュデータテーブル１２３に保持されているか否かを判定する。ストレージ装置側中継装置１２０に含まれるキャッシュデータテーブル１２３には、ハッシュ値Ｃが保持されている。この場合、ストレージ装置側中継装置１２０は、キャッシュデータテーブル１２３においてハッシュ値Ｃに対応付けられているデータｃ（対象データ）を、キャッシュ格納部１２２から取得する。
【０１９１】
また、ストレージ装置側中継装置１２０は、例えば対象インデックスである論理ブロックアドレス３の後続である論理ブロックアドレス４を先読み先のインデックスとして決定する。この場合、ストレージ装置側中継装置１２０は、先読み先のインデックスに対応付けてキャッシュインデックステーブル１２４にハッシュ値が保持されているか否かを判定する。キャッシュインデックステーブル１２４には、先読み先のインデックスである論理ブロックアドレス４に対応付けてハッシュ値Ａが保持されている。このため、ストレージ装置が中継装置１２０は、後続のハッシュ値としてハッシュ値Ａを取得する。
【０１９２】
上記したように対象データ（ここでは、データｃ）及び後続のハッシュ値（ここでは、ハッシュ値Ａ）が取得されると、ストレージ装置側中継装置１２０は、先読み要求に対する応答として、取得されたデータｃ及びハッシュ値Ａをクライアント側中継装置１１０に対して送信する（ステップＳ１２３）。
【０１９３】
クライアント装置側中継装置１１０は、ストレージ装置側中継装置１２０によって送信されたデータｃ及びハッシュ値Ａを入力する。
【０１９４】
クライアント装置側中継装置１１０は、入力されたデータｃをキャッシュ格納部１１２にキャッシュする。
【０１９５】
また、クライアント装置側中継装置１１０では、入力されたデータｃの内容に対応する識別子としてハッシュ値が生成される。このとき生成されたハッシュ値は、ハッシュ値Ｃであるものとする。
【０１９６】
この場合、クライアント装置側中継装置１１０は、生成されたハッシュ値Ｃをデータｃに対応付けてキャッシュデータテーブル１１３に登録する。また、クライアント装置側中継装置１１０は、生成されたハッシュ値Ｃを論理ブロックアドレス３（対象インデックス）に対応付けてキャッシュインデックステーブル１１４に登録する。
【０１９７】
また、クライアント装置側中継装置１１０は、入力されたハッシュ値Ａを論理ブロックアドレス４（先読み先のインデックス）に対応付けてキャッシュインデックステーブル１１４に登録する。
【０１９８】
また、クライアント装置側中継装置１１０は、リード要求に対する応答として、データｃを当該クライアント端末２０に送信する（ステップＳ１２４）。
【０１９９】
ここで、例えばクライアント装置２０からストレージ装置３０に対して、対象インデックスとして論理ブロックアドレス４を含むリード要求が送信されたものとする（ステップＳ１２５）。このリード要求は、図１２においてＲｅａｄ（ＬＢＡ＝４）と表記されている。
【０２００】
クライアント装置側中継装置１１０は、クライアント装置２０によって送信されたリード要求を入力する。クライアント装置側中継装置１１０は、リード要求が入力されるとキャッシュヒット判定処理を実行する。
【０２０１】
クライアント装置側中継装置１１０は、入力されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１１４にハッシュ値が保持されているか否かを判定する。上記したように先読み要求に応じて、既に論理ブロックアドレス４（先読み先のインデックス）に対応付けられているハッシュ値（後続のハッシュ値）は、ストレージ装置側中継装置１２０から先読みされている。したがって、キャッシュインデックステーブル１１４には、論理ブロックアドレスに対応付けてハッシュ値Ａが保持されている。
【０２０２】
次に、クライアント装置側中継装置１１０は、ハッシュ値Ａがキャッシュデータテーブル１１３に保持されているか否かを判定する。クライアント装置側中継装置１１０に含まれるキャッシュデータテーブル１１３には、ハッシュ値Ａが保持されている。このため、クライアント装置側中継装置１１０は、キャッシュデータテーブル１１３においてハッシュ値Ａに対応付けられているデータａをキャッシュ格納部１１２から取得する。クライアント装置側中継装置１１０は、取得されたデータａを、リード要求に対する応答としてクライアント装置２０に対して送信する（ステップＳ１２６）。
【０２０３】
上記したように、予め後続のハッシュ値（ここでは、ハッシュ値Ａ）を先読みしておくことで、クライアント装置側中継装置１１０及びストレージ装置側中継装置１２０間における転送処理を省略することが可能となる。
【０２０４】
次に、図１３を参照して、本変形例に係るデータ転送システム１０の動作の第２の具体例について説明する。ここでは、ストレージ装置側中継装置１２０におけるキャッシュミスヒット時の動作例について説明する。
【０２０５】
図１３に示すストレージ装置３０内には１つのディスクボリュームが備えられているものとする。このディスクボリュームは、論理ブロックアドレス１〜４から構成されている。図１３に示すように、論理ブロックアドレス１にはデータａが格納されている。また、論理ブロックアドレス２にはデータｂ、論理ブロックアドレス３にはデータｃ、論理ブロックアドレス４にはデータａが格納されている。
【０２０６】
クライアント装置側中継装置１１０に含まれるキャッシュデータテーブル１１３には、データａに対応付けて識別子（ハッシュ値）Ａが保持されている。また、クライアント装置側中継装置１１０に含まれるキャッシュインデックステーブル１１４には、論理ブロックアドレス１に対応付けてハッシュ値Ａが保持されている。
【０２０７】
一方、ストレージ装置側中継装置１２０に含まれるキャッシュデータテーブル１２３には、データａに対応付けてハッシュ値Ａが保持されている。また、キャッシュデータテーブル１２３には、データｃに対応付けてハッシュ値Ｃが保持されている。ストレージ装置側中継装置１２０に含まれるキャッシュインデックステーブル１２４には、論理ブロックアドレス１に対応付けてハッシュ値Ａが保持されている。また、キャッシュインデックステーブル１２４には、論理ブロックアドレス３に対応付けてハッシュ値Ｃが保持されている。
【０２０８】
ここで、例えばクライアント装置２０からストレージ装置３０に対して、対象インデックスとして論理ブロックアドレス３を含むリード要求が送信されたものとする（ステップＳ１３１）。このリード要求は、図１３においてはＲｅａｄ（ＬＢＡ＝３）と表記されている。
【０２０９】
クライアント装置側中継装置１１０は、クライアント装置２０によって送信されたリード要求を入力する。クライアント装置側中継装置１１０は、リード要求が入力されるとキャッシュヒット判定処理を実行する。
【０２１０】
まず、クライアント装置側中継装置１１０は、入力されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１１４にハッシュ値が保持されているか否かを判定する。この場合、クライアント装置側中継装置１１０に含まれるキャッシュインデックステーブル１１４には論理ブロックアドレス３に対応付けてハッシュ値が保持されていない。このため、クライアント装置側中継装置１１０は、論理ブロックアドレス３（対象インデックス）を含む先読み要求をストレージ装置側中継装置１２０に対して送信する（ステップＳ１３２）。この先読み要求は、図１３においてはＲｅａｄＥｘ（ＬＢＡ＝３）と表記されている。
【０２１１】
ストレージ装置側中継装置１２０は、クライアント装置側中継装置１１０によって送信された先読み要求を入力する。
【０２１２】
ストレージ装置側中継装置１２０は、入力された先読み要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１２４にハッシュ値が保持されているか否かを判定する。この場合、ストレージ装置側中継装置１２０に含まれるキャッシュインデックステーブル１２４には、論理ブロックアドレス３に対応付けてハッシュ値Ｃが保持されている。
【０２１３】
次に、ストレージ装置側中継装置１２０は、ハッシュ値Ｃがキャッシュデータテーブル１２３に保持されているか否かを判定する。ストレージ装置側中継装置１２０に含まれるキャッシュデータテーブル１２３には、ハッシュ値Ｃが保持されている。この場合、ストレージ装置側中継装置１２０は、キャッシュデータテーブル１２３においてハッシュ値Ｃに対応付けられているデータｃ（対象データ）を、キャッシュ格納部１２２から取得する。
【０２１４】
また、ストレージ装置側中継装置１２０は、例えば対象インデックスである論理ブロックアドレス３の後続である論理ブロックアドレス４を先読み先のインデックスとして決定する。この場合、ストレージ装置側中継装置１２０は、先読み先のインデックスに対応付けてキャッシュインデックステーブル１２４にハッシュ値が保持されているか否かを判定する。キャッシュインデックステーブル１２４には、先読み先のインデックスである論理ブロックアドレス４に対応付けてハッシュ値（後続のハッシュ値）は保持されていない。
【０２１５】
この場合、ストレージ装置側中継装置１２０は、論理ブロックアドレス４を含むリード要求をストレージ装置３０に対して送信する（ステップＳ１３３）。このリード要求は、図１３においてはＲｅａｄ（ＬＢＡ＝４）と表記されている。これにより、ストレージ装置が中継装置１２０は、論理ブロックアドレス４に格納されているデータａをストレージ装置３０から読み込む（ステップＳ１３４）。
【０２１６】
ストレージ装置側中継装置１２０では、読み込まれたデータＡの内容に対応する識別子としてハッシュ値が生成される。ここで生成されたハッシュ値は、ハッシュ値Ａであるものとする。この場合、ストレージ装置側中継装置１２０は、生成されたハッシュ値Ａを、論理ブロックアドレス４に対応付けてキャッシュインデックステーブル１２４に登録する。つまり、このハッシュ値Ａが後続のハッシュ値となる。
【０２１７】
なお、図１３に示す例では、キャッシュデータテーブル１２３にハッシュ値Ａが保持されている（つまり、データａがキャッシュされている）が、当該データａがキャッシュされていない場合には、当該データａのキャッシュ処理及びキャッシュデータテーブル１２３へのハッシュ値Ａの登録処理が行われる。
【０２１８】
ストレージ装置側中継装置１２０は、キャッシュ格納部１２２から取得されたデータｃ（対象データ）及び生成されたハッシュ値Ａ（後続のハッシュ値）をクライアント装置側中継装置１１０に対して送信する（ステップＳ１３５）。
【０２１９】
クライアント装置側中継装置１１０は、ストレージ装置側中継装置１２０によって送信されたデータｃ及びハッシュ値Ａを入力する。
【０２２０】
クライアント装置側中継装置１１０は、入力されたデータｃをキャッシュ格納部１１２にキャッシュする。
【０２２１】
また、クライアント装置側中継装置１１０では、入力されたデータｃの内容に対応する識別子としてハッシュ値が生成される。このとき生成されたハッシュ値は、ハッシュ値Ｃであるものとする。
【０２２２】
この場合、クライアント装置側中継装置１１０は、生成されたハッシュ値Ｃをデータｃに対応付けてキャッシュデータテーブル１１３に登録する。また、クライアント装置側中継装置１１０は、生成されたハッシュ値Ｃを論理ブロックアドレス３に対応付けてキャッシュインデックステーブル１１４に登録する。
【０２２３】
また、クライアント装置側中継装置１１０は、入力されたハッシュ値Ａを論理ブロックアドレス４（先読み先のインデックス）に対応付けてキャッシュインデックステーブル１１４に登録する。
【０２２４】
また、クライアント装置側中継装置１１０は、リード要求に対する応答として、データｃを当該クライアント端末２０に送信する（ステップＳ１２４）。
【０２２５】
次に、図１４を参照して、本変形例に係るデータ転送システム１０の動作の第３の具体例について説明する。ここでは、対象データの転送及びハッシュ値の先読み処理を非同期で行う場合の動作例について説明する。
【０２２６】
なお、図１４において、クライアント装置２０からリード要求が送信される前のストレージ装置３０にキャッシュされているデータと、クライアント装置側中継装置１１０に含まれるキャッシュデータテーブル１１３、キャッシュインデックステーブル１１４、ストレージ装置側中継装置１２０に含まれるキャッシュデータテーブル１２３及びキャッシュインデックステーブル１２４に保持されているデータについては、上記した図１３と同様であるため、その説明は省略する。
【０２２７】
ここで、例えばクライアント装置２０からストレージ装置３０に対して、対象インデックスとして論理ブロックアドレス３を含むリード要求が送信されたものとする（ステップＳ１４１）。このリード要求は、図１４においてはＲｅａｄ（ＬＢＡ＝３）と表記されている。
【０２２８】
クライアント装置側中継装置１１０は、クライアント装置２０によって送信されたリード要求を入力する。クライアント装置側中継装置１１０は、リード要求が入力されるとキャッシュヒット判定処理を実行する。
【０２２９】
まず、クライアント装置側中継装置１１０は、入力されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１１４にハッシュ値が保持されているか否かを判定する。この場合、クライアント装置側中継装置１１０に含まれるキャッシュインデックステーブル１１４には論理ブロックアドレス３に対応付けてハッシュ値が保持されていない。このため、クライアント装置側中継装置１１０は、対象インデックスとして論理ブロックアドレス３を含む先読み要求をストレージ装置側中継装置１２０に対して送信する（ステップＳ１４２）。なお、この先読み要求は、上記した図１３において説明した先読み要求とは異なり、例えば対象データの取得処理及びハッシュ値の先読み処理を非同期で行う旨の通知が含まれる。これにより、ストレージ装置側中継装置１２０においては、対象データの取得処理及びハッシュ値の先読み処理が非同期で実行される。この先読み要求は、図１４においてはＲｅａｄＥｘＡｓｙｎｃ（ＬＢＡ＝３）と表記されている。
【０２３０】
ストレージ装置側中継装置１２０は、クライアント装置側中継装置１１０によって送信された先読み要求を入力する。
【０２３１】
ストレージ装置側中継装置１２０は、入力された先読み要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１２４にハッシュ値が保持されているか否かを判定する。この場合、ストレージ装置側中継装置１２０に含まれるキャッシュインデックステーブル１２４には、論理ブロックアドレス３に対応付けてハッシュ値Ｃが保持されている。
【０２３２】
次に、ストレージ装置側中継装置１２０は、ハッシュ値Ｃがキャッシュデータテーブル１２３に保持されているか否かを判定する。ストレージ装置側中継装置１２０に含まれるキャッシュデータテーブル１２３には、ハッシュ値Ｃが保持されている。この場合、ストレージ装置側中継装置１２０は、キャッシュデータテーブル１２３においてハッシュ値Ｃに対応付けられているデータｃを、キャッシュ格納部１２２から取得する。
【０２３３】
図１４に示す例では対象データの取得処理及びハッシュ値の先読み処理は非同期で実行されるため、当該ハッシュ値の先読み処理を待たず、ストレージ装置側中継装置１２０は、キャッシュ格納部１２２から取得されたデータｃ（対象データ）をクライアント装置側中継装置１１０に対して送信する（ステップＳ１４３）。
【０２３４】
クライアント装置側中継装置１１０は、ストレージ装置側中継装置１２０によって送信されたデータｃを入力し、キャッシュ格納部１１２にキャッシュする。
【０２３５】
また、クライアント装置側中継装置１１０では、入力されたデータｃの内容に対応する識別子としてハッシュ値が生成される。このとき生成されたハッシュ値は、ハッシュ値Ｃであるものとする。この場合、クライアント装置側中継装置１１０は、生成されたハッシュ値Ｃをデータｃに対応付けてキャッシュデータテーブル１１３に登録する。また、クライアント装置側中継装置１１０は、生成されたハッシュ値Ｃを論理ブロックアドレス３（対象インデックス）に対応付けてキャッシュインデックステーブル１１４に登録する。
【０２３６】
クライアント装置側中継装置１１０は、リード要求に対する応答として、データｃを当該クライアント端末２０に送信する（ステップＳ１４４）。
【０２３７】
一方、上記した対象データ（ここでは、データｃ）の取得処理とは非同期で、ハッシュ値の先読み処理が実行される。ストレージ装置側中継装置１２０は、例えば対象インデックスである論理ブロックアドレス３の後続である論理ブロックアドレス４を先読み先のインデックスとして決定する。この場合、ストレージ装置側中継装置１２０は、先読み先のインデックスに対応付けてキャッシュインデックステーブル１２４にハッシュ値が保持されているか否かを判定する。キャッシュインデックステーブル１２４には、先読み先のインデックスである論理ブロックアドレス４に対応付けてハッシュ値（後続のハッシュ値）は保持されていない。
【０２３８】
この場合、ストレージ装置側中継装置１２０は、論理ブロックアドレス４を含むリード要求をストレージ装置３０に対して送信する（ステップＳ１４５）。このリード要求は、図１４においてはＲｅａｄ（ＬＢＡ＝４）と表記されている。これにより、ストレージ装置側中継装置１２０は、論理ブロックアドレス４に格納されているデータａ（対象データ）をストレージ装置３０から読み込む（ステップＳ１４６）。
【０２３９】
ストレージ装置側中継装置１２０では、読み込まれたデータＡの内容に対応する識別子としてハッシュ値が生成される。ここで生成されたハッシュ値は、ハッシュ値Ａであるものとする。この場合、ストレージ装置側中継装置１２０は、生成されたハッシュ値Ａを、論理ブロックアドレス４に対応付けてキャッシュインデックステーブル１２４に登録する。つまり、このハッシュ値Ａが後続のハッシュ値となる。
【０２４０】
ストレージ装置側中継装置１２０は、生成されたハッシュ値Ａ（後続のハッシュ値）をクライアント装置側中継装置１１０に対して送信する（ステップＳ１４７）。
【０２４１】
クライアント装置側中継装置１１０は、ストレージ装置側中継装置１２０によって送信されたハッシュ値Ａを入力する。クライアント装置側中継装置１１０は、入力されたハッシュ値Ａを論理ブロックアドレス４（先読み先のインデックス）に対応付けてキャッシュインデックステーブル１１４に登録する。
【０２４２】
なお、例えばクライアント装置２０からストレージ装置３０に対してライト要求が送信された場合における本変形例に係るデータ転送システム１０の動作は、前述した本実施形態と同様であるため、その説明は省略する。
【０２４３】
上記したように本変形例においては、例えばクライアント装置２０から送信されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１１４にハッシュ値が保持されていない場合、対象データと共に例えば当該対象インデックスの後続のインデックスに対応するハッシュ値（後続のハッシュ値）がストレージ装置側中継装置１２０からクライアント装置側中継装置１１０に対して転送される。本変形例においては、このように例えば後続のインデックスに対応するハッシュ値を先読みすることで、例えば上記したようなクライアント装置側中継装置１１０及びストレージ装置側中継装置１２０間でハッシュ値及び対象データ本体が別々に転送されることによる二度手間を解消（省略）し、かつ、後にリード要求が送信された場合のキャッシュヒット率を向上させることによりクライアント装置側中継装置１１０及びストレージ装置側中継装置１２０間における転送処理を省略することが可能となる。
【０２４４】
また、例えば上記した図１４で説明したように、ストレージ装置が中継装置１２０において対象データの転送及びハッシュ値の先読みを非同期とすることで、例えば当該先読み処理によってクライアント装置２０へのリード要求に対する応答が遅延することを回避することができる。
【０２４５】
なお、本変形例においては、先読み先のインデックスがストレージ装置側中継装置１２０において決定されるものとして説明したが、例えばクライアント装置側中継装置１１０において当該先読み先のインデックスの決定処理を行い、当該決定された先読み先のインデックスをストレージ装置側中継装置１２０に対して明示的に指定する構成であってもよい。
【０２４６】
［第２の変形例］
次に、図１５を参照して、本実施形態の第２の変形例について説明する。本変形例の特徴は、例えばクライアント装置２０からストレージ装置３０に対して送信されるリード要求またはライト要求とは独立して、クライアント装置側中継装置１１０及びストレージ装置側中継装置１２０間で例えばストレージ装置側中継装置１２０に含まれているキャッシュインデックステーブル１２４（に保持されているハッシュ値）の一部または全部の転送を行う点にある。
【０２４７】
図１５のフローチャートを参照して、本変形例に係るデータ転送システム１０の処理手順について説明する。
【０２４８】
クライアント装置側中継装置１１０は、例えばユーザによって指定されたデータを示すインデックスを入力する。このインデックスには、例えばストレージ装置３０内のディスクボリュームを識別するディスクボリュームシリアル番号及び当該ディスクボリューム内の論理ブロックアドレスが含まれる。
【０２４９】
クライアント装置側中継装置１１０の中継部１１１は、入力されたインデックスによって示されるデータの内容に対応するハッシュ値（識別子）の読み込みを要求するための、当該インデックスを含む要求（ハッシュ値読み込み要求）をストレージ装置側中継装置に対して送信する（ステップＳ４１）。
【０２５０】
ストレージ装置側中継装置１２０の中継部１２１は、クライアント装置側中継装置１１０から送信されたハッシュ値読み込み要求を入力する。
【０２５１】
ストレージ装置側中継装置１２０のキャッシュ管理部１２５は、中継部１２１によって入力されたハッシュ値読み込み要求に含まれるインデックスに対応するハッシュ値の取得処理を実行する（ステップＳ４２）。ここでは、キャッシュ管理部１２５は、ハッシュ値読み込み要求に含まれるインデックスに対応付けられてキャッシュインデックステーブル１２４に保持されているハッシュ値を取得する。
【０２５２】
なお、キャッシュインデックステーブル１２４にハッシュ値読み込み要求に含まれるインデックスに対応するハッシュ値が保持されていない場合には、キャッシュ管理部１２５は、当該インデックスによって示されるデータ（論理ブロックアドレスに格納されているデータ）をストレージ装置３０から読み込む。その後、データの内容に対応するハッシュ値が識別子生成部１２６によって生成されることにより、ハッシュ値読み込み要求に含まれるインデックスによって示されるデータの内容に対応するハッシュ値が取得される。
【０２５３】
この取得されたハッシュ値は、例えばキャッシュデータテーブル１２３及びキャッシュインデックステーブル１２４に対して登録される。
【０２５４】
キャッシュ管理部１２５は、取得されたハッシュ値を、中継部１２１を介してクライアント装置側中継装置１１０に送信する（ステップＳ４３）。
【０２５５】
クライアント装置側中継装置１１０の中継部１１１は、ストレージ装置側中継装置１２０によって送信されたハッシュ値を入力する。
【０２５６】
キャッシュ管理部１１５は、中継部１１１によって入力されたハッシュ値を、ユーザによって指定されたインデックスに対応付けてキャッシュインデックステーブル１１４に登録する（ステップＳ４４）。
【０２５７】
なお、本変形例におけるストレージ装置側中継装置１２０に含まれるキャッシュインデックステーブル１２４に保持されているハッシュ値（の一部または全部）の転送処理は、例えば夜中のようにクライアント装置側中継装置１１０及びストレージ装置側中継装置１２０間の回線が空いている時間帯等のように、例えばユーザによって指定された時間帯に行われる。
【０２５８】
また、例えば前述した図３に示すように複数の中継装置がネットワークシステムに存在する、つまり、データ転送システムに例えば２つ以上の中継装置が含まれる場合には、本変形例におけるハッシュ値の転送処理中には、他の中継装置からの例えばキャッシュインデックステーブルに対する書き込みは抑止（ブロック）される。
【０２５９】
上記したように本変形例においては、ストレージ装置側中継装置１２０に含まれるキャッシュインデックステーブル１２４に保持されているハッシュ値の一部または全部を、例えばユーザによって指定された時間帯（上記したようにクライアント装置側中継装置１１０及びストレージ装置側中継装置１２０間の回線が空いている時間帯等）にクライアント装置側中継装置１１０に転送することによって、当該クライアント装置側中継装置１１０のキャッシュの準備または最適化を行うことが可能となる。
【０２６０】
なお、本変形例においては、ストレージ装置側中継装置１２０に含まれるキャッシュインデックステーブル１２４の一部または全部が転送されるものとして説明したが、キャッシュ格納部１２２にキャッシュされているデータ及びキャッシュインデックステーブル１２３において当該データに対応付けられているハッシュ値の一部または全部が転送される構成とすることも可能である。
【０２６１】
［第３の変形例］
次に、図１６〜図２１を参照して、本実施形態の第３の変形例について説明する。本変形例の特徴は、例えばクライアント装置２０からストレージ装置３０に対してライト要求が送信された場合に、例えばクライアント装置側中継装置１１０内においてキャッシュデータテーブル１１３及びキャッシュインデックステーブル１１４を用いてライトバックキャッシュを構成し、クライアント装置側中継装置１１０及びストレージ装置側中継装置１２０間でハッシュ値を利用してデータ転送を行う点にある。
【０２６２】
本変形例においては、例えばクライアント装置２０からストレージ装置３０に対してライト要求が送信された場合、一旦、当該ライト要求に含まれる書き込みデータをクライアント装置側中継装置１１０にキャッシュしておき、その後当該書き込みデータをストレージ装置３０に対して書き込む処理（以下、ストレージ装置３０への書き戻し処理と表記）が実行される。
【０２６３】
本変形例においては、クライアント装置側中継装置１１０に含まれるキャッシュデータテーブル１１３には、インデックス及びハッシュ値に対応付けて、当該インデックスによって示されるデータに対して書き込みが発生したか否か、つまり、ストレージ装置３０への書き戻し処理が必要であるか否か（書き戻し処理が完了しているか否か）を示すフラグが保持されている。また、キャッシュインデックステーブル１１４にも同様に、データ及びハッシュ値に対応付けてフラグが保持されている。
【０２６４】
本変形例において、クライアント装置側中継装置１１０では、大きく２つの処理が実行される。この２つの処理には、ライトバックキャッシュへの書き込み処理及びストレージ装置３０への書き戻し処理である。これらの処理の詳細については後述する。
【０２６５】
図１６は、キャッシュデータテーブル１１３のデータ構造の一例を示す。図１６に示すようにキャッシュデータテーブル１１３には、キャッシュデータ（格納先のアドレス）及びハッシュ値（識別子）に対応付けてフラグが保持されている。このフラグは、対応付けられているデータに対してストレージ装置３０への書き戻し処理が必要であるか否かを示す。
【０２６６】
図１６に示す例では、キャッシュデータのアドレス「０ｘ１５Ａ０００１００００２００００」及びハッシュ値「０ｘ５Ｃ３ＥＢ８００６６４２０００２ＢＣ３ＤＣＣ７ＣＡ４ＡＢ６ＥＦＡＤ７ＥＤ４ＡＥ５」に対応付けてフラグ「要」が保持されている。このフラグ「要」は、ストレージ装置３０への書き戻し処理が必要であることを示す。
【０２６７】
また、データのアドレス「０ｘ１５Ａ０００１００００２０２００」及びハッシュ値「０ｘＦ２８Ｅ８ＢＤＢ１Ｆ９５０３３Ｄ３１Ｄ３３２ＡＤ１Ｃ１９２Ｅ５２６３６８７Ｆ２７」に対応付けてフラグ「不要」が保持されている。このフラグ「不要」は、ストレージ装置３０への書き戻し処理が必要でない（つまり、不要）であることを示す。また、データのアドレス「０ｘ１５Ａ０００１００００２０４００」及びハッシュ値「０ｘＢ３７６８８５ＡＣ８４５２Ｂ６ＣＢＦ９ＣＥＤ８１Ｂ１０８０ＢＦＤ５７０Ｄ９Ｂ９１」に対応付けてフラグ「要」が保持されている。
【０２６８】
図１７は、キャッシュインデックステーブル１１４のデータ構造の一例を示す。図１７に示すように、キャッシュインデックステーブル１１４には、インデックス（ディスクボリュームシリアル番号及び論理ブロックアドレス）及びハッシュ値（識別子）に対応付けてフラグが保持されている。
【０２６９】
図１７には、シリアル番号が「０ｘＦ４ＢＡＡＣＤＤＤ８ＦＡ４ＡＣＢＦ８３４」によって識別されるディスクボリュームに対応するキャッシュインデックステーブル１１４が示されている。
【０２７０】
図１７に示す例では、論理ブロックアドレス「０ｘ００００００００」及びハッシュ値「０ｘ５Ｃ３ＥＢ８００６６４２０００２ＢＣ３ＤＣＣ７ＣＡ４ＡＢ６ＥＦＡＤ７ＥＤ４ＡＥ５」に対応付けてフラグ「要」が保持されている。論理ブロックアドレス「０ｘ０００００００１」及びハッシュ値「０ｘＦ２８Ｅ８ＢＤＢ１Ｆ９５０３３Ｄ３１Ｄ３３２ＡＤ１Ｃ１９２Ｅ５２６３６８７Ｆ２７」に対応付けてフラグ「不要」が保持されている。論理ブロックアドレス「０ｘ０００００００３」及びハッシュ値「０ｘＢ３７６８８５ＡＣ８４５２Ｂ６ＣＢＦ９ＣＥＤ８１Ｂ１０８０ＢＦＤ５７０Ｄ９Ｂ９１」に対応付けてフラグ「要」が保持されている。論理ブロックアドレス「０ｘ０００００００７」及びハッシュ値「０ｘ５Ｃ３ＥＢ８００６６４２０００２ＢＣ３ＤＣＣ７ＣＡ４ＡＢ６ＥＦＡＤ７ＥＤ４ＡＥ５」に対応付けてフラグ「要」が保持されている。
【０２７１】
なお、前述した図７で説明したように、キャッシュデータテーブル１１３及びキャッシュインデックステーブル１１４は、ハッシュ値により関連付けられている。このため、キャッシュデータテーブル１１３及びキャッシュインデックステーブル１１４において同一のハッシュ値には同一のフラグが対応付けて保持されている。
【０２７２】
次に、図１８のフローチャートを参照して、クライアント装置２０からストレージ装置３０に対してライト要求が送信された場合における前述したライトバックキャッシュへの書き込み処理の処理手順について説明する。
【０２７３】
クライアント装置２０から送信されるライト要求には、当該ライト要求によって指定されるデータ（書き込みデータ）及び当該データを示すインデックスが含まれる。このインデックスには、例えば書き込みデータが書き込まれるストレージ装置３０内のディスクボリュームを識別するディスクボリュームシリアル番号及び当該ディスクボリュームの論理ブロックアドレスが含まれる。以下、ライト要求に含まれるインデックスを対象インデックスと称する。
【０２７４】
まず、クライアント装置側中継装置１１０の中継部１１１は、クライアント装置２０から送信されたライト要求を受信（入力）する（ステップＳ５１）。ライト要求が入力されると、クライアント装置側中継装置１１０においてライトバックキャッシュへの書き込み処理が実行される。
【０２７５】
次に、キャッシュ管理部１１５は、中継部１１１によって入力されたライト要求に含まれる書き込みデータを識別子生成部１１６に渡す。
【０２７６】
識別子生成部１１６は、キャッシュ管理部１１５により渡された書き込みデータの内容に対応する識別子としてハッシュ値を生成する。識別子生成部１２６は、例えばＳＨＡ１のようなハッシュ関数を用いてハッシュ値を生成する（ステップＳ５２）。
【０２７７】
キャッシュ管理部１１５は、中継部１１１によって入力されたライト要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル１１４に識別子生成部１１６によって生成されたハッシュ値を登録する（ステップＳ５３）。
【０２７８】
また、キャッシュ管理部１１５は、対象インデックスに対応付けてキャッシュインデックステーブル１１４に保持されているフラグを、ストレージ装置３０への書き戻し処理が必要であることを示すフラグに書き換える（ステップＳ５４）。つまり、キャッシュ管理部１１５は、ストレージ装置３０への書き戻し処理が必要であることを示すフラグをキャッシュインデックステーブル１１４に登録する。
【０２７９】
次に、キャッシュ管理部１１５は、識別子生成部１１６によって生成されたハッシュ値がキャッシュデータテーブル１１３に保持されているか否かを判定する（ステップＳ５５）。
【０２８０】
識別子生成部１１６によって生成されたハッシュ値がキャッシュデータテーブル１１３に保持されていないと判定された場合（ステップＳ５５のＮＯ）、キャッシュ管理部１１５は、書き込みデータをキャッシュ格納部１１２にキャッシュする（ステップＳ５６）。
【０２８１】
キャッシュ管理部１１５は、書き込みデータに対応付けてキャッシュデータテーブル１１３に、識別子生成部１１６によって生成されたハッシュ値を登録する（ステップＳ５７）。
【０２８２】
また、キャッシュ管理部１１５は、書き込みデータに対応付けてキャッシュデータテーブル１１３に保持されているフラグを、ストレージ装置３０への書き戻し処理が必要であることを示すフラグに書き換える（ステップＳ５８）。
【０２８３】
キャッシュ管理部１１５は、中継部１１１によって入力されたライト要求に対する応答として、書き込みが完了した旨を示す書き込み完了応答をクライアント装置２０に対して送信（送信）する（ステップＳ５９）。
【０２８４】
このように、ライト要求をストレージ装置３０（ストレージ装置側中継装置１２０）に伝える（送信する）ことなく、書き込み完了応答がクライアント装置２０に対して通知される。
【０２８５】
一方、ステップＳ５５において識別子生成部１１６によって生成されたハッシュ値がキャッシュデータテーブル１１３に保持されていると判定された場合には、当該ハッシュ値に対応付けられているデータ（つまり、書き込みデータ）がキャッシュ格納部１２２に既にキャッシュされているため、ステップＳ５９の処理が実行される。
【０２８６】
なお、上記した書き込みデータがストレージ装置３０に書き込まれる、つまり、書き戻し処理が完了するまでは、キャッシュデータテーブル１１３によって書き戻し処理が必要であることを示すフラグに対応付けられているデータについては、キャッシュからの吐き出し（キャッシュあふれ）が発生しないように管理される。
【０２８７】
次に、図１９を参照して、上記したライトバックキャッシュへの書き込み処理の処理手順について具体的に説明する。
【０２８８】
図１９に示すストレージ装置３０内には１つのディスクボリュームが備えられているものとする。このディスクボリュームは、論理ブロックアドレス１〜４から構成されている。図１９に示すように、論理ブロックアドレス１にはデータａが格納されている。また、論理ブロックアドレス２にはデータｂ、論理ブロックアドレス３にはデータｃ、論理ブロックアドレス４にはデータａが格納されている。つまり、論理ブロックアドレス１及び論理ブロックアドレス４には同一のデータａが格納されている。
【０２８９】
クライアント装置側中継装置１１０に含まれるキャッシュデータテーブル１１３には、データａに対応付けてハッシュ値Ａ及びフラグ０が保持されている。
【０２９０】
なお、図１９においては、ストレージ装置３０への書き戻し処理が必要なことを示すフラグをフラグ１、必要でないことを示すフラグをフラグ０と表記する。
【０２９１】
また、クライアント装置側中継装置１１０に含まれるキャッシュインデックステーブル１１４には、論理ブロックアドレス１に対応付けてハッシュ値Ａ及びフラグ０が保持されている。なお、キャッシュインデックステーブル１１４には、他の論理ブロックアドレス（論理ブロックアドレス２〜４）に対応付けてハッシュ値は保持されていない。また、キャッシュインデックステーブル１１４には、ハッシュ値が保持されていない論理ブロックアドレス２〜４対応付けてフラグ０が保持されている。
【０２９２】
一方、ストレージ装置側中継装置１２０に含まれるキャッシュデータテーブル１２３には、データａに対応付けてハッシュ値Ａが保持されている。また、キャッシュデータテーブル１２３には、データｂに対応付けてハッシュ値Ｂ、データｃに対応付けてハッシュ値Ｃ及びが保持されている。
【０２９３】
また、ストレージ装置側中継装置１２０に含まれるキャッシュインデックステーブル１２４には、論理ブロックアドレス１に対応付けてハッシュ値Ａが保持されている。また、キャッシュインデックステーブル１２４には、論理ブロックアドレス２に対応付けてハッシュ値Ｂ、論理ブロックアドレス３に対応付けてハッシュ値Ｃが保持されている。なお、論理ブロックアドレス４に対応付けてハッシュ値は保持されていない。
【０２９４】
ここで、例えばクライアント装置２０からストレージ装置３０に対して、書き込みデータとしてデータｄ及び対象インデックスとして論理ブロックアドレス３を含むライト要求が送信されたものとする（ステップＳ１５１）。このライト要求は、図１９においてはＷｒｉｔｅ（ＬＢＡ＝３）←ｄと表記されている。なお、上記したようにストレージ装置３０内には１つのディスクボリュームしか備えられていないので、ここでは、インデックスに含まれるディスクボリュームシリアル番号については省略する。
【０２９５】
クライアント装置側中継装置１１０は、クライアント装置２０によって送信されたライト要求を入力する。クライアント装置側中継装置１１０は、ライト要求が入力されると、ライトバックキャッシュへの書き込み処理を実行する。
【０２９６】
まず、クライアント装置側中継装置１１０では、入力されたライト要求に含まれるデータｄの内容に対応する識別子としてハッシュ値が生成される。ここで生成されたハッシュ値は、ハッシュ値Ｄであるものとする。クライアント装置側中継装置１１０は、生成されたハッシュ値Ｄを、ライト要求に含まれる論理ブロックアドレス３に対応付けてキャッシュインデックステーブル１１３に登録する。このとき、クライアント装置側中継装置１１０は、キャッシュインデックステーブル１１４において論理ブロックアドレス３（及びハッシュ値Ｄ）に対応付けられているフラグ０を、ストレージ装置３０への書き戻し処理が必要であること示すフラグ１に書き換える。
【０２９７】
次に、クライアント装置側中継装置１１０は、生成されたハッシュ値Ｄがキャッシュデータテーブル１１３に保持されているか否かを判定する。この場合、キャッシュデータテーブル１１３にはハッシュ値Ｄは保持されていないため、クライアント装置側中継装置１１０は、ライト要求に含まれるデータｄをキャッシュ格納部１１２にキャッシュし、生成されたハッシュ値Ｄを当該データｄに対応付けてキャッシュデータテーブル１１３に登録する。このとき、クライアント装置側中継装置１１０は、キャッシュデータテーブル１１３においてデータｄ（及びハッシュ値Ｄ）に対応付けられているフラグ０を、ストレージ装置３０への書き戻し処理が必要であること示すフラグ１に書き換える。
【０２９８】
上記したような処理が実行されると、クライアント装置側中継装置１１０は、書き込み完了応答（図１９においてはＯＫと表記）をクライアント装置２０に送信する（ステップＳ１５２）。
【０２９９】
一方、例えばクライアント装置２０からストレージ装置３０に対して、書き込みデータとしてデータｃ及び対象インデックスとして論理ブロックアドレス２を含むライト要求が送信されたものとする（ステップＳ１５３）。このライト要求は、図１９においてはＷｒｉｔｅ（ＬＢＡ＝２）←ｃと表記されている。
【０３００】
クライアント装置側中継装置１１０は、クライアント装置２０によって送信されたライト要求を入力する。クライアント装置側中継装置１１０は、ライト要求が入力されると、ライトバックキャッシュへの書き込み処理を実行する。
【０３０１】
まず、クライアント装置側中継装置１１０では、入力されたライト要求に含まれるデータｃの内容に対応する識別子としてハッシュ値が生成される。ここで生成されたハッシュ値は、ハッシュ値Ｃであるものとする。クライアント装置側中継装置１１０は、生成されたハッシュ値Ｃを、ライト要求に含まれる論理ブロックアドレス２に対応付けてキャッシュインデックステーブル１１３に登録する。このとき、クライアント装置側中継装置１１０は、キャッシュインデックステーブル１１４において論理ブロックアドレス２（及びハッシュ値Ｃ）に対応付けられているフラグ０を、ストレージ装置３０への書き戻し処理が必要であることを示すフラグ１に書き換える。
【０３０２】
次に、クライアント装置側中継装置１１０は、生成されたハッシュ値Ｃがキャッシュデータテーブル１１３に保持されているか否かを判定する。この場合、キャッシュデータテーブル１１３にはハッシュ値Ｃは保持されていないため、クライアント装置側中継装置１１０は、ライト要求に含まれるデータｃをキャッシュ格納部１１２にキャッシュし、生成されたハッシュ値Ｄを当該データｃに対応付けてキャッシュデータテーブル１１３に登録する。このとき、クライアント装置側中継装置１１０は、キャッシュデータテーブル１１３においてデータｃ（及びハッシュ値Ｃ）に対応付けられているフラグ０を、ストレージ装置３０への書き戻し処理が必要であること示すフラグ１に書き換える。
【０３０３】
上記したような処理が実行されると、クライアント装置側中継装置１１０は、書き込み完了応答（図１９においてはＯＫと表記）をクライアント装置２０に送信する（ステップＳ１５４）。
【０３０４】
上記したように例えばクライアント装置２０からストレージ装置３０に対してライト要求が送信された場合には、当該ライト要求はストレージ装置３０（ストレージ装置側中継装置１２０）に伝えられることなく書き込み完了応答がクライアント装置２０に送信される。また、書き込みデータがストレージ装置３０に書き込まれる（書き戻しされる）まで、当該書き込みデータは、例えばキャッシュデータテーブル１１３に保持されているフラグに基づいて、キャッシュからの吐き出しが発生しないように管理される。つまり、キャッシュデータテーブル１１３においてフラグ１に対応付けられているデータは、ストレージ装置３０への書き戻し処理が必要である（つまり、書き戻し処理が完了していない）ため、キャッシュからの吐き出しは行われない。
【０３０５】
次に、図２０のフローチャートを参照して、本変形例に係るデータ転送システム１０のストレージ装置３０への書き戻し処理の処理手順について説明する。
【０３０６】
なお、ストレージ装置３０への書き戻し処理は、例えばユーザによって指定された任意のタイミングで実行される。この任意のタイミングとは、例えばユーザによって指定された一定時間毎または夜中のような回線が空いている時間帯等を含む。
【０３０７】
ここで、例えばユーザによって指定された任意のタイミングにより、ライトバックキャッシュからの書き戻し処理が実行されたものとする。
【０３０８】
この場合、クライアント装置側中継装置１１０のキャッシュ管理部１１５は、キャッシュインデックステーブル１１４を参照して、ストレージ装置３０への書き戻し処理が必要であることを示すフラグ（フラグ「要」）に対応付けられているインデックス及びハッシュ値をストレージ装置側中継装置１２０に対して送信する（ステップＳ６１）。キャッシュ管理部１１５は、中継部１１１を介して、インデックス及びハッシュ値を送信する。ここで、送信されたインデックス及びハッシュ値を対象インデックス及び対象ハッシュ値と称する。
【０３０９】
次に、ストレージ装置側中継装置１２０の中継部１２１は、クライアント装置側中継装置１１０によって送信された対象インデックス及び対象ハッシュ値を入力する。
【０３１０】
キャッシュ管理部１２５は、中継部１２１によって入力された対象ハッシュ値がキャッシュデータテーブル１２３に保持されているか否かを判定する（ステップＳ６２）。
【０３１１】
対象ハッシュ値がキャッシュデータテーブル１２３に保持されていないと判定された場合（ステップＳ６２のＮＯ）、キャッシュ管理部１２５は、その旨をクライアント装置側中継装置１１０に通知する（ステップＳ６３）。
【０３１２】
クライアント装置側中継装置１１０のキャッシュ管理部１１５は、ストレージ装置側中継装置１２０からの通知を受け取ると、キャッシュデータテーブル１１３において対象ハッシュ値に対応付けられているデータをキャッシュ格納部１１２から取得する。キャッシュ管理部１１５は、取得されたデータを中継部１１１を介してストレージ装置側中継装置１２０に送信する（ステップＳ６４）。
【０３１３】
ストレージ装置側中継装置１２０の中継部１２１は、クライアント装置側中継装置１１０によって送信されたデータを入力する。
【０３１４】
中継部１２１は、入力されたデータを含むライト要求をストレージ装置３０に送信することによって、当該データをストレージ装置３０に書き込む（ステップＳ６５）。
【０３１５】
キャッシュ管理部１２５は、中継部１２１によって入力されたデータ（つまり、ストレージ装置３０に書き込まれたデータ）をキャッシュ格納部１２２にキャッシュする。
【０３１６】
次に、キャッシュ管理部１２５は、対象ハッシュ値をキャッシュデータステーブル１２３及びキャッシュインデックステーブル１２４に登録する（ステップＳ６６）。この場合、キャッシュ管理部１２５は、対象ハッシュ値を対象インデックスに対応付けてキャッシュインデックステーブル１２４に登録する。また、キャッシュ管理部１２５は、対象ハッシュ値を、キャッシュ格納部１２２にキャッシュされたデータに対応付けてキャッシュデータテーブル１２３に登録する。
【０３１７】
上記したステップＳ６６の処理が実行されると、ストレージ装置側中継装置１２０からクライアント装置側中継装置１１０に対して、ストレージ装置３０への書き戻し処理が完了した旨が通知される。
【０３１８】
クライアント装置側中継装置１１０のキャッシュ管理部１１５は、キャッシュデータテーブル１１３及びキャッシュインデックステーブル１１４において対象ハッシュ値に対応付けられているフラグ（フラグ「要」）を、ストレージ装置３０への書き戻し処理が必要でない（つまり、書き戻し処理が完了している）ことを示すフラグ（フラグ「不要」）に書き換える（ステップＳ６７）。
【０３１９】
一方、ステップＳ６２において対象ハッシュ値がキャッシュデータテーブル１２３に保持されていると判定された場合、キャッシュデータテーブル１２３において当該対象ハッシュ値に対応付けられているデータがキャッシュ格納部１２２から取得され、ステップＳ６５の処理が実行される。
【０３２０】
なお、ステップＳ６２において対象ハッシュ値がキャッシュデータテーブル１２３に保持されていると判定された場合には、当該対象ハッシュ値は既にキャッシュデータテーブル１２３に保持されているため、キャッシュ格納部１２２に対するキャッシュ登録処理及びキャッシュデータテーブル１２３に対してハッシュ値の登録処理は実行されない。
【０３２１】
また、上記説明したストレージ装置３０への書き戻し処理は、例えばキャッシュインデックステーブル１１３に保持されている全ての書き戻し処理が必要であることを示すフラグに対応付けられている対象インデックス（及び対象ハッシュ値）に対して実行される。また、キャッシュインデックステーブル１１３に対象インデックスが複数存在する場合には、例えば当該対象インデックス及び対象ハッシュ値を一括してストレージ装置側中継装置１２０に送信することで、一括して処理が実行される構成であってもよい。
【０３２２】
次に、図２１を参照して、上記したストレージ装置３０への書き戻し処理の処理手順について具体的に説明する。
【０３２３】
図２１に示すストレージ装置３０内には１つのディスクボリュームが備えられているものとする。このディスクボリュームは、論理ブロックアドレス１〜４から構成されている。図２１に示すように、論理ブロックアドレス１にはデータａが格納されている。また、論理ブロックアドレス２にはデータｂ、論理ブロックアドレス３にはデータｃ、論理ブロックアドレス４にはデータａが格納されている。つまり、論理ブロックアドレス１及び論理ブロックアドレス４には同一のデータａが格納されている。
【０３２４】
クライアント装置側中継装置１１０に含まれるキャッシュデータテーブル１１３には、データａに対応付けてハッシュ値Ａ及びフラグ０が保持されている。また、キャッシュデータテーブル１１３には、データｄに対応付けてハッシュ値Ｄ及びフラグ１、データｃに対応付けてハッシュ値Ｃ及びフラグ１が保持されている。
【０３２５】
なお、図２１においては、上記した図１９と同様に、ストレージ装置３０への書き戻し処理が必要なことを示すフラグをフラグ１、必要でないことを示すフラグをフラグ０と表記する。
【０３２６】
クライアント装置側中継装置１１０に含まれるキャッシュインデックステーブル１１４には、論理ブロックアドレス１に対応付けてハッシュ値Ａ及びフラグ０が保持されている。また、キャッシュインデックステーブル１１４には、論理ブロックアドレス２に対応付けてハッシュ値Ｃ及びフラグ１、論理ブロックアドレス３に対応付けてハッシュ値Ｄ及びフラグ１が保持されている。なお、論理ブロックアドレス４に対応付けてハッシュ値は保持されていない。また、キャッシュインデックステーブル１１４には、ハッシュ値が保持されていない論理ブロックアドレス４対応付けてフラグ０が保持されている。
【０３２７】
一方、ストレージ装置側中継装置１２０に含まれるキャッシュデータテーブル１２３には、データａに対応付けてハッシュ値Ａが保持されている。また、キャッシュデータテーブル１２３には、データｂに対応付けてハッシュ値Ｂ、データｃに対応付けてハッシュ値Ｃが保持されている。
【０３２８】
また、ストレージ装置側中継装置１２０に含まれるキャッシュインデックステーブル１２４には、論理ブロックアドレス１に対応付けてハッシュ値Ａが保持されている。また、キャッシュインデックステーブル１２４には、論理ブロックアドレス２に対応付けてハッシュ値Ｂ、論理ブロックアドレス３に対応付けてハッシュ値Ｃが保持されている。なお、論理ブロックアドレス４に対応付けてハッシュ値は保持されていない。
【０３２９】
ここで、例えばユーザによって指定された任意のタイミングによりストレージ装置３０への書き戻し処理が実行された場合を想定する。
【０３３０】
この場合、まず、クライアント装置側中継装置１１０は、ストレージ装置３０への書き戻し処理が必要であることを示すフラグ１に対応付けられている論理ブロックアドレス２及びハッシュ値Ｃをストレージ装置側中継装置１２０に対して送信する（ステップＳ１６１）。この論理ブロックアドレス２及びハッシュ値Ｃは、図２１においてはＷｒｉｔｅＥｘ（２，Ｃ）と表記されている。
【０３３１】
ストレージ装置側中継装置１２０は、クライアント装置側中継装置１１０によって送信されたハッシュ値Ｃがキャッシュデータテーブル１２３に保持されているか否かを判定する。この場合、キャッシュデータテーブル１２３には、ハッシュ値Ｃが保持されている。このため、ストレージ装置側中継装置１２０は、キャッシュデータテーブル１２３においてハッシュ値Ｃに対応付けられているデータｃをキャッシュ格納部１２２から取得する。
【０３３２】
ストレージ装置側中継装置１２０は、取得されたデータｃ及び論理ブロックアドレス２（対象インデックス）を含むライト要求をストレージ装置３０に対して送信する（ステップＳ１６２）。このライト要求は、図２１においてはＷｒｉｔｅ（２，ｃ）と表記されている。これにより、データｃが、ストレージ装置３０の論理ブロックアドレス２に書き込まれる。
【０３３３】
ストレージ装置３０は、データｃが書き込まれると、ストレージ装置側中継装置１２０によって送信されたライト要求の応答として書き込みが完了した旨を通知するための書き込み完了応答（図２１においてはＯＫと表記）をストレージ装置側中継装置１２０に対して送信する（ステップＳ１６４）。
【０３３４】
次に、ストレージ装置側中継装置１２０は、ハッシュ値Ｃを論理ブロックアドレス２に対応付けてキャッシュインデックステーブル１２４に登録する。
【０３３５】
キャッシュインデックステーブル１２４にハッシュ値Ｃが登録されると、ストレージ装置側中継装置１２０は、フラグ１に対応付けられていた論理ブロックアドレス２の書き戻し処理が完了した旨（図２１においてはＯＫと表記）をクライアント装置側中継装置１１０に対して通知する（ステップＳ１６５）。
【０３３６】
クライアント装置側中継装置１１０は、書き戻し処理が完了した旨の通知を受けると、キャッシュインデックステーブル１１４において論理ブロックアドレス２（対象インデックス）に対応付けられているフラグ１を書き戻し処理が完了した（書き戻し処理が必要でない）ことを示すフラグ０に書き換える。また、キャッシュインデックステーブル１１４において、フラグ１に対応付けられているハッシュ値Ｃが存在しない場合には、キャッシュデータテーブル１１３において当該ハッシュ値Ｃに対応付けられているフラグ１をフラグ０に書き換える。
【０３３７】
次に、クライアント装置側中継装置１１０は、フラグ１に対応付けられている論理ブロックアドレス３及びハッシュ値Ｄをストレージ装置側中継装置１２０に対して送信する（ステップＳ１６６）。この論理ブロックアドレス３及びハッシュ値Ｄは、図２１においてはＷｒｉｔｅＥｘ（３，Ｄ）と表記されている。
【０３３８】
ストレージ装置側中継装置１２０は、クライアント装置側中継装置１１０によって送信されたハッシュ値Ｄがキャッシュデータテーブル１２３に保持されているか否かを判定する。この場合、キャッシュデータテーブル１２３にはハッシュ値Ｄは保持されていないため、ストレージ装置側中継装置１２０は、その旨（図２１においてはｎｏｔ  ｆｏｕｎｄと表記）をクライアント装置側中継装置１１０に対して通知する（ステップＳ１６７）。
【０３３９】
クライアント装置側中継装置１１０は、ストレージ装置側中継装置１２０からの通知を受けると、当該クライアント装置側中継装置１１０に含まれるキャッシュデータテーブル１１３においてハッシュ値Ｄに対応付けられているデータｄをキャッシュ格納部１１２から取得する。クライアント装置側中継装置１１０は、取得されたデータｄをストレージ装置側中継装置１２０に対して送信する（ステップＳ１６８）。
【０３４０】
ストレージ装置側中継装置１２０は、クライアント装置側中継装置１１０によって送信されたデータｄ及び論理ブロックアドレス３を含むライト要求をストレージ装置３０に対して送信する（ステップＳ１６９）。このライト要求は、図２１においてはＷｒｉｔｅ（３，ｄ）と表記されている。これにより、データｄが、ストレージ装置３０の論理ブロックアドレス３に書き込まれる。
【０３４１】
ストレージ装置３０は、データｄが書き込まれると、ストレージ装置側中継装置１２０によって送信されたライト要求の応答として書き込みが完了した旨を通知するための書き込み完了応答（図２１においてはＯＫと表記）をストレージ装置側中継装置１２０に対して送信する（ステップＳ１７０）。
【０３４２】
次に、ストレージ装置側中継装置１２０は、データｄをキャッシュ格納部１２２にキャッシュする。
【０３４３】
ストレージ装置側中継装置１２０は、ハッシュ値Ｄをデータｄに対応付けてキャッシュデータテーブル１２３に登録する。また、ストレージ装置側中継装置１２０は、ハッシュ値Ｄを論理ブロックアドレス３に対応付けてキャッシュインデックステーブル１２４に登録する。
【０３４４】
ストレージ装置中継装置１２０は、フラグ１に対応付けられていた論理ブロックアドレス３の書き戻し処理が完了した旨（図２１においてはＯＫと表記）をクライアント装置側中継装置１１０に対して通知する（ステップＳ１７１）。
【０３４５】
クライアント装置側中継装置１１０は、書き戻し処理が完了した旨の通知を受けると、キャッシュインデックステーブル１１４において論理ブロックアドレス３（対象インデックス）に対応付けられているフラグ１をフラグ０に書き換える。また、キャッシュインデックステーブル１１４において、フラグ１に対応付けられているハッシュ値Ｃが存在しない場合には、キャッシュデータテーブル１１３において当該ハッシュ値Ｃに対応付けられているフラグ１をフラグ０に書き換える。
【０３４６】
これにより、図２１に示す例では、クライアント装置側中継装置１１０に含まれるキャッシュインデックステーブル１１４に保持されていたフラグ１（に対応付けられている論理ブロックアドレス）については全て処理が実行されたため、書き戻し処理は終了される。
【０３４７】
上記したように本変形例においては、例えばクライアント装置側中継装置１１０内においてライトバックキャッシュを構成した場合に、書き戻しが必要であることを示すフラグ（フラグ１）に対応付けられているハッシュ値がストレージ装置側中継装置１２０に含まれるキャッシュデータテーブル１２３に保持されている場合には、クライアント装置側中継装置１１０及びストレージ装置側中継装置１２０間においてデータ自体を転送することなくハッシュ値のみを転送することで書き戻し処理を完了することができる。本変形例においては、このように転送データ量を小さくすることでクライアント装置側中継装置１１０及びストレージ装置側中継装置１２０間において転送速度を向上させることが可能となる。
【０３４８】
なお、本変形例において、ライトバックキャッシュへの書き込み処理及びストレージ装置３０への書き戻し処理が同時に実行される構成とすれば、ライトバックキャッシュではなくライトスルーキャッシュでの処理とすることができる。この場合であっても、上記したライトバックキャッシュと同様に、転送データ量を削減することが可能となる。したがって、クライアント装置側中継装置１１０及びストレージ装置側中継装置１２０間において転送速度を向上させることが可能となる。
【０３４９】
また、本変形例においてはクライアント装置側中継装置１１０内においてライトバックキャッシュを構成するものとして説明したが、例えばストレージ装置側中継装置１２０内においてライトバックキャッシュを構成してもよい。
【０３５０】
また、本願発明は、上記実施形態またはその各変形例そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態またはその各変形例に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、実施形態またはその各変形例に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態またはその各変形例に亘る構成要素を適宜組合せてもよい。
【図面の簡単な説明】
【０３５１】
【図１】本発明の実施形態に係るデータ転送システムが接続されるネットワークシステムについて説明するための図。
【図２】２つ以上の中継装置を含むデータ転送システムが接続される大規模なネットワークシステムの一例を示す図。
【図３】図１に示すクライアント装置側中継装置１１０のハードウェア構成を示すブロック図。
【図４】図１に示すデータ転送システム１０に含まれるクライアント装置側中継装置１１０及びストレージ装置側中継装置１２０の主として機能構成を示すブロック図。
【図５】クライアント装置側中継装置１１０に含まれるキャッシュデータテーブル１１３のデータ構造の一例を示す図。
【図６】クライアント装置側中継装置１１０に含まれるキャッシュインデックステーブル１１４のデータ構造の一例を示す図。
【図７】キャッシュデータテーブル１１３及びキャッシュインデックステーブル１１４の関係について説明するための図。
【図８】本実施形態に係るデータ転送システム１０の処理手順を示すフローチャート。
【図９】本実施形態に係るデータ転送システム１０の動作の第１の具体例について説明するための図。
【図１０】本実施形態に係るデータ転送システム１０の動作の第２の具体例について説明するための図。
【図１１】本実施形態の第１の変形例に係るデータ転送システム１０の処理手順を示すフローチャート。
【図１２】本変形例に係るデータ転送システム１０の動作の第１の具体例について説明するための図。
【図１３】本変形例に係るデータ転送システム１０の動作の第２の具体例について説明するための図。
【図１４】本変形例に係るデータ転送システム１０の動作の第３の具体例について説明するための図。
【図１５】本実施形態の第２の変形例に係るデータ転送システム１０の処理手順を示すフローチャート。
【図１６】本実施形態の第３の変形例に係るデータ転送システム１１０のクライアント装置側中継装置１１０に含まれるキャッシュデータテーブル１１３のデータ構造の一例を示す図。
【図１７】クライアント装置側中継装置１１０に含まれるキャッシュインデックステーブル１１４のデータ構造の一例を示す図。
【図１８】ライトバックキャッシュへの書き込み処理の処理手順を示すフローチャート。
【図１９】ライトバックキャッシュへの書き込み処理の処理手順について具体的に説明するための図。
【図２０】ストレージ装置３０への書き戻し処理の処理手順を示すフローチャート。
【図２１】ストレージ装置３０への書き戻し処理の処理手順について具体的に説明するための図。
【符号の説明】
【０３５２】
１０…データ転送システム、２０…クライアント装置、３０…ストレージ装置、１１０…中継装置（第１のデータ転送装置）、１１１…中継部、１１２…キャッシュ格納部（第１のキャッシュ格納手段）、１１３…キャッシュデータテーブル（第１のキャッシュデータテーブル）、１１４…キャッシュインデックステーブル（第１のキャッシュインデックステーブル）、１１５…キャッシュ管理部、１１６…識別子生成部、１２０…中継装置（第２のデータ転送装置）、１２１…中継部、１２２…キャッシュ格納部（第２のキャッシュ格納手段）、１２３…キャッシュデータテーブル（第２のキャッシュデータテーブル）、１２４…キャッシュインデックステーブル（第２のキャッシュインデックステーブル）、１２５…キャッシュ管理部、１２６…識別子生成部、２００…コンピュータ、３００…外部記憶装置。
【図１】
0004607936.tif 000002
【図２】
0004607936.tif 000003
【図３】
0004607936.tif 000004
【図４】
0004607936.tif 000005
【図５】
0004607936.tif 000006
【図６】
0004607936.tif 000007
【図７】
0004607936.tif 000008
【図８】
0004607936.tif 000009
【図９】
0004607936.tif 000010
【図１０】
0004607936.tif 000011
【図１１】
0004607936.tif 000012
【図１２】
0004607936.tif 000013
【図１３】
0004607936.tif 000014
【図１４】
0004607936.tif 000015
【図１５】
0004607936.tif 000016
【図１６】
0004607936.tif 000017
【図１７】
0004607936.tif 000018
【図１８】
0004607936.tif 000019
【図１９】
0004607936.tif 000020
【図２０】
0004607936.tif 000021
【図２１】
0004607936.tif 000022