以下、図面を参照して、本発明の実施形態について説明する。
図1は、本実施形態に係るデータ転送システムが接続されるネットワークシステムについて説明するための図である。図1に示すように、データ転送システム10は、クライアント装置20及びストレージ装置30に接続されている。ここで、データ転送システム10及びクライアント装置20は、例えばLAN(Local Area Network)を介して接続されている。また、データ転送システム10及びクライアント装置20間では、例えばiSCSI(Internet Small Computer System Interface)による通信が実行される。データ転送システム10及びストレージ装置30間についても、当該データ転送システム10及びクライアント装置20間と同様である。
クライアント装置20は、例えばユーザによって操作され、ストレージ装置30に対してアクセスする装置である。クライアント装置20は、iSCSI(SCSI)でのイニシエータ(Initiator)としての機能を有する。
ストレージ装置30は、各種データを格納するディスクボリュームを備える。ストレージ装置30は、当該ストレージ装置30に備えられているディスクボリュームへのアクセスをクライアント装置20に対して提供する。ストレージ装置30は、iSCSI(SCSI)でのターゲット(Target)としての機能を有する。
データ転送システム10は、例えばクライアント装置20及びストレージ装置30の通信を中継する。データ転送システム10は、例えばストレージ装置30から送信されたデータ(ブロックボリュームのデータ)をクライアント装置20に転送する。
データ転送システム10は、中継装置(第1のデータ転送装置)110及び中継装置(第2のデータ転送装置)120を有する。
中継装置110は、例えばクライアント装置20とLANを介して接続されている。一方、中継装置120は、例えばストレージ装置30とLANを介して接続されている。また、中継装置110及び中継装置120は、例えばLANと比較して帯域が細く遅延が大きい回線を用いた広域通信網(WAN:Wide Area Network)を介して接続されている。以下、中継装置110をクライアント装置側中継装置110、中継装置120をストレージ装置側中継装置120と称する。
例えばストレージ装置30によって送信されたデータがクライアント装置20に転送される際には、当該データ(転送データ)がストレージ装置側中継装置120及びクライアント装置側中継装置110の順に転送され、クライアント装置20に転送される。この際、クライアント装置側中継装置110及びストレージ装置側中継装置120は、転送データをキャッシュする機能を有する。これにより、クライアント装置20及びストレージ装置30間のデータ転送効率を向上させる。
クライアント装置20からは、クライアント装置側中継装置110のLAN側(クライアント装置20側)のインタフェイスを指定してストレージ装置30への接続を試み、それを受け付けたクライアント装置側中継装置110は、WAN側のインタフェイスからストレージ装置側中継装置120のWAN側のインタフェイスに対して接続を行う。ストレージ装置側中継装置120は、WAN側インタフェイスから受け取った接続要求をLAN側(ストレージ装置30側)のインタフェイスに伝えることで、ストレージ装置30に対して接続を行う。これにより、クライアント装置20とストレージ装置30間の接続が確立される。
なお、クライアント装置側中継装置110及びストレージ装置側中継装置120において、LAN側/WAN側のインタフェイスは物理的に1つのインタフェイスであってもよい。例えばiSCSIであれば、TCP/IPのIPアドレスやポート番号等で別インタフェイスであることが識別可能であれば十分である。
また、図1では、便宜的に本実施形態に係るデータ転送システム10が2つの中継装置を含むものとして説明したが、データ転送システム10は、例えば図2に示すような大規模なネットワークシステムにおいて2つ以上の中継装置を含む構成であっても構わない。
図3は、図1に示すクライアント装置側中継装置110のハードウェア構成を示すブロック図である。図3に示すように、コンピュータ200は、例えばハードディスクドライブ(HDD)のような外部記憶装置300と接続されている。この外部記憶装置300は、コンピュータ200によって実行されるプログラム310を格納する。コンピュータ200及び外部記憶装置300は、クライアント装置側中継装置110を構成する。
なお、図3では、クライアント装置側中継装置110について説明したが、ストレージ装置側中継装置120についても同様の構成である。以下、ストレージ装置側中継装置120のハードウェア構成についても、図3を用いて説明する。
図4は、図1に示すデータ転送システム10に含まれるクライアント装置側中継装置110及びストレージ装置側中継装置120の主として機能構成を示すブロック図である。
クライアント装置側中継装置110は、中継部111、キャッシュ格納部112、キャッシュデータテーブル113、キャッシュインデックステーブル114、キャッシュ管理部115及び識別子生成部116を含む。
本実施形態において、中継部111、キャッシュ管理部115及び識別子生成部116は、図3に示されるコンピュータ200が外部記憶装置300に格納されているプログラム310を実行することにより実現されるものとする。また、キャッシュ格納部112、キャッシュデータテーブル113及びキャッシュインデックステーブル114は、外部記憶装置300に格納される。
中継部111は、例えばクライアント装置20及びストレージ装置30(ストレージ装置側中継装置120)間でiSCSI−PDUを中継する。このiSCSI−PDUがデータ転送に関わるもの(READ&SCSI DATAIN/WRITE&DATAOUT)であれば、キャッシュ管理部115を通してキャッシュへのアクセスが実行される。一方、このiSCSI−PDUがデータ転送に関わるものでなければ、当該PDUはそのまま相手先に対して転送される。
ここで、例えばクライアント装置20がストレージ装置30からデータの読み込み(リード)を行う場合を想定する。この場合、クライアント装置20は、ストレージ装置30に格納されているデータの読み込みを要求するためのリード要求(データ読み込み要求)をクライアント装置側中継装置110に送信する。このリード要求には、例えば読み込み(リード)の対象となるデータを示すインデックスが含まれる。インデックスは、例えば読み込みの対象となるデータのファイル名または当該データが格納されているストレージ装置30内のアドレス等を含む。本実施形態では論理ブロックアドレス(LBA:Logical Block Address)によるアドレスを含む。中継部111は、クライアント装置20によって送信されたリード要求を入力(受信)する。中継部111は、入力されたリード要求をストレージ装置側中継装置120に転送する。
また、中継部111は、転送されたリード要求に応じて読み出されたデータ(リード要求に含まれるインデックスによって示されるデータ)をストレージ装置側中継装置120から入力する。中継部111は、入力されたデータをクライアント装置20に転送する。
一方、例えばクライアント装置20がストレージ装置30に対してデータの書き込み(ライト)を行う場合を想定する。この場合、クライアント装置20は、ライト要求をクライアント側中継装置110に送信する。このライト要求には、例えば書き込み(ライト)の対象となるデータ(書き込みデータ)及び当該データを示すインデックスが含まれる。インデックスは、例えば書き込みの対象となるデータのファイル名または当該データの書き込み先であるストレージ装置30内のアドレス等を含む。中継部111は、クライアント装置20によって送信されたライト要求を入力する。中継部111は、入力されたライト要求をストレージ装置側中継装置120に転送する。
キャッシュ格納部(第1のキャッシュ格納部)112は、例えばストレージ装置30(に備えられているディスクボリューム)に格納されているデータをキャッシュするために用いられる。
キャッシュデータテーブル(第1のキャッシュデータテーブル)113には、キャッシュ格納部112に格納されているデータ(キャッシュデータ)に対応付けて当該データの内容に対応する識別子が保持される。このデータの内容に対応する識別子としては、例えばハッシュ値が用いられる。
キャッシュインデックステーブル(第1のキャッシュインデックステーブル)114には、例えばストレージ装置30に格納されているデータを示すインデックス(例えば当該データが格納されているストレージ装置30内のアドレス等)及び当該データの内容に対応する識別子(ハッシュ値)が保持される。なお、以下の説明では、例えばデータが格納されているディスクボリュームのシリアル番号及び論理ブロックアドレス(LBA)の組合せをインデックスとする。シリアル番号は、ストレージ装置30内にあるディスクボリュームを識別するための番号であり、ストレージ装置30に対して例えばCDB(Command Descriptor Block)を発行することで取得される。また、iSCSIの場合は、iSCSI−InitiatorName及びLUN(Logical Unit Number)の組をシリアル番号として利用することも可能であり、様々な実現方法がある。
なお、キャッシュインデックステーブル114は、ストレージ装置30上に存在する全てのディスクボリューム毎に用意されている。つまり、ストレージ装置30内にあるディスクボリュームの各々に対応するキャッシュインデックステーブル114が存在する。また、例えばストレージ装置30内に新たにディスクボリュームが作成された場合には、当該作成されたディスクボリュームに対応するキャッシュインデックステーブル114が作成される。
また、上記したキャッシュデータテーブル113及びキャッシュインデックステーブル114に保持されるハッシュ値は、例えば論理ブロックアドレスのaセクタ(aは512バイトの倍数)単位のデータのハッシュ値である。以下では、キャッシュデータテーブル113及びキャッシュインデックステーブル114に保持されるハッシュ値は、便宜的に1セクタ(512バイト)単位のデータのハッシュ値であるものとして説明する。
また、本実施形態ではiSCSIによるブロック型転送プロトコルを例として、例えばキャッシュデータテーブル113及びキャッシュインデックステーブル114の説明を行うが、iSCSIに限定されるわけではなく、例えばインデックスとしてパス名等を利用することで、NFS(Network File System)またはCIFS(Common Internet File System)等のファイル転送プロトコルにも適用可能である。
キャッシュ管理部115は、中継部111によって入力されたリード要求またはライト要求に応じて、例えばストレージ装置30に対する読み込みの対象となるデータまたは書き込みの対象となるデータ(以下、対象データと表記)に対するキャッシュ制御を実行する。キャッシュ管理部115は、例えばキャッシュ格納部112に対象データを格納することによって、当該対象データをキャッシュする処理を実行する。
また、キャッシュ管理部115は、例えばクライアント装置20によって送信されたリード要求が中継部111によって入力されると、当該リード要求に含まれるインデックスに応じてキャッシュヒットの判定を行う。
この場合、キャッシュ管理部115は、中継部111によって入力されたリード要求に含まれるインデックスに対応付けてキャッシュインデックステーブル114にハッシュ値(当該インデックスに対応するハッシュ値)が保持されているか否かを判定する。キャッシュ管理部115は、リード要求に含まれるインデックスに対応するハッシュ値が保持されていると判定された場合、当該ハッシュ値がキャッシュデータテーブル113に保持されているか否かを判定する。このハッシュ値がキャッシュデータテーブル113に保持されていると判定された場合には、キャッシュデータテーブル113によって当該識別子に対応付けられているデータがキャッシュ格納部112にキャッシュされている。このデータは、リード要求による読み込みの対象となるデータ(対象データ)である。このため、キャッシュ管理部115は、キャッシュヒットと判定する。この場合、キャッシュ管理部115は、キャッシュ格納部112に格納されている対象データをリード要求の要求元であるクライアント端末20に対して送信する。
キャッシュ管理部115は、リード要求に含まれるインデックスに対応付けてキャッシュインデックステーブル114にハッシュ値が保持されていないと判定された場合、当該リード要求に含まれるインデックスによって示されるデータ(対象データ)の内容に対応するハッシュ値の読み込みを要求するためのハッシュ値読み込み要求(識別子読み込み要求)を、中継部111を介してストレージ装置側中継装置120に送信する。このハッシュ値読み込み要求には、対象データを示すインデックスが含まれる。キャッシュ管理部115は、このハッシュ値読み込み要求に応じて当該ストレージ装置側中継装置120によって送信されたハッシュ値を取得する。キャッシュ管理部115は、取得されたハッシュ値に基づいて、キャッシュヒット判定処理を実行する。
また、キャッシュ管理部115は、キャッシュデータテーブル113によってハッシュ値に対応付けられているデータが存在しないと判定された場合には、中継部111を介して、リード要求をストレージ装置側中継装置120に対して送信する。キャッシュ管理部115は、リード要求に応じてストレージ装置側中継装置120によって送信された対象データを取得する。この場合、キャッシュ管理部115は、取得されたデータをリード要求の応答としてクライアント装置20に対して送信する。
また、キャッシュ管理部115は、必要に応じてキャッシュデータテーブル113及びキャッシュインデックステーブル114に対してハッシュ値の登録処理を実行する。
識別子生成部116は、キャッシュ管理部115から例えば対象データを受け取る。識別子生成部116は、受け取られた対象データの内容に対応する識別子としてハッシュ値を生成する。このとき、識別子生成部116は、例えばMD5またはSHA1のような予め定められたハッシュ関数を用いてハッシュ値を生成する。識別子生成部116によって生成されたハッシュ値は、例えばキャッシュ管理部115によってキャッシュデータテーブル113及びキャッシュインデックステーブル114に登録される。
ストレージ装置側中継装置120は、中継部121、キャッシュ格納部122、キャッシュデータテーブル123、キャッシュインデックステーブル124、キャッシュ管理部125及び識別子生成部126を含む。
本実施形態において、中継部121、キャッシュ管理部125及び識別子生成部126は、図3に示されるコンピュータ200が外部記憶装置300に格納されているプログラム310を実行することにより実現されるものとする。また、キャッシュ格納部122、キャッシュデータテーブル123及びキャッシュインデックステーブル124は、外部記憶装置300に格納される。
中継部121は、上記した中継部111と同様に、例えばクライアント装置20(クライアント装置側中継装置110)及びストレージ装置30間でiSCSI−PDUを中継する。このiSCSI−PDUがデータ転送に関わるものであれば、キャッシュ管理部125を通してキャッシュへのアクセスが実行される。一方、このiSCSI−PDUがデータ転送に関わるものでなければ、当該PDUはそのまま相手先に対して転送される。
中継部121は、例えばクライアント装置側中継装置110(の中継部111)によって送信されたリード要求を入力する。中継部121は、入力されたリード要求をストレージ装置30に転送する。また、中継部121は、入力されたリード要求に応じて、ストレージ装置30から対象データを読み出す。中継部121は、入力されたデータをクライアント装置側中継装置110に転送する。
中継部121は、例えばクライアント装置側中継装置110によって送信されたライト要求を入力する。中継部121は、入力されたライト要求をストレージ装置30に転送する。
また、中継部121は、クライアント装置側中継装置110によって送信された識別子読み込み要求を入力する。中継部121は、入力された識別子読み込み要求をキャッシュ管理部125に渡す。
キャッシュ格納部(第2のキャッシュ格納部)122は、上記したクライアント装置側中継装置110に含まれるキャッシュ管理部112と同様に、例えばストレージ装置30に格納されているデータをキャッシュするために用いられる。
キャッシュデータテーブル(第2のキャッシュデータテーブル)123の構成については、上記したクライアント装置側中継装置110に含まれるキャッシュデータテーブル113と同様であるため、その説明を省略する。
また、キャッシュインデックステーブル(第2のキャッシュインデックステーブル)124の構成については、上記したクライアント装置側中継装置110に含まれるキャッシュインデックステーブル114と同様であるため、その説明を省略する。
キャッシュ管理部125は、中継部121によって入力されたリード要求またはライト要求に応じて、対象データに対するキャッシュ制御を実行する。キャッシュ管理部125は、例えばキャッシュ格納部122に対象データを格納することによって、当該対象データをキャッシュする処理を実行する。
キャッシュ管理部125は、例えばクライアント装置側中継装置110によって送信されたリード要求が中継部121によって入力されると、当該リード要求に含まれるインデックスに応じてキャッシュヒットの判定を行う。
この場合、キャッシュ管理部125は、上記したクライアント装置側中継装置110に含まれるキャッシュ管理部115と同様に、中継部121によって入力されたリード要求に含まれるインデックスに対応付けてキャッシュインデックステーブル124にハッシュ値が保持されているか否かを判定する。キャッシュ管理部125は、ハッシュ値が保持されていると判定された場合、当該ハッシュ値がキャッシュデータテーブル123に保持されているか否かを判定する。このハッシュ値がキャッシュデータテーブル123に保持されていると判定された場合には、キャッシュデータテーブル123によって当該識別子に対応付けられているデータがキャッシュ格納部122にキャッシュされている。このデータは、リード要求による読み込みの対象となるデータ(対象データ)である。このため、キャッシュ管理部125は、キャッシュヒットと判定する。この場合、キャッシュ管理部125は、キャッシュ格納部122に格納されている対象データをクライアント装置側中継装置110に対して送信する。
キャッシュ管理部125は、リード要求に含まれるインデックスに対応付けてキャッシュインデックステーブル124にハッシュ値が保持されていないと判定された場合、中継部121を介して、当該リード要求をストレージ装置30に送信する。これにより、キャッシュ管理部125は、ストレージ装置30から対象データを取得する(読み込む)。同様に、ハッシュ値がキャッシュデータテーブル113に保持されていないと判定された場合には、中継部121を介してリード要求がストレージ装置30に送信される。
キャッシュ管理部125は、ストレージ装置30から読み込まれた対象データを、中継部121を介してクライアント装置側中継装置110に送信する。
キャッシュ管理部125は、例えばクライアント装置側中継装置110によって送信された識別子読み込み要求が中継部121から渡されると、当該識別子読み込み要求に含まれるインデックスに対応付けてキャッシュインデックステーブル124に保持されているハッシュ値をクライアント装置側中継装置110に送信する。
また、キャッシュ管理部125は、必要に応じてキャッシュデータテーブル123及びキャッシュインデックステーブル124に対してハッシュ値の登録処理を実行する。
識別子生成部126は、上記したクライアント装置側中継装置110に含まれる識別子生成部116と同様に、例えば対象データの内容に対応する識別子としてハッシュ値を生成する。このとき、識別子生成部126は、例えばMD5またはSHA1のような予め定められたハッシュ関数を用いてハッシュ値を生成する。この識別子生成部126によって生成されたハッシュ値は、例えばキャッシュ管理部125によってキャッシュデータテーブル123及びキャッシュインデックステーブル124に登録される。
図5は、クライアント装置側中継装置110に含まれるキャッシュデータテーブル113のデータ構造の一例を示す。なお、ここではキャッシュデータテーブル113について説明するが、ストレージ装置側中継装置120に含まれるキャッシュデータテーブル123についても同様である。
図5に示すように、キャッシュデータテーブル113には、キャッシュデータ(格納先のアドレス)及び識別子が対応付けて保持されている。ここでは、キャッシュデータのアドレスは、当該キャッシュデータがキャッシュ格納部112に格納されているアドレスであり、例えば8バイトで表される。また、識別子は、対応付けられているデータの内容から、予め定められたハッシュ関数(例えば、SHA1)を用いて生成されたハッシュ値である。また、このハッシュ値は、例えば20バイトで表される。
図5に示す例では、キャッシュデータのアドレス「0x15A0001000020000(8バイト)」に対応付けてハッシュ値「0x5C3EB80066420002BC3DCC7CA4AB6EFAD7ED4AE5(20バイト)」が保持されている。データのアドレス「0x15A0001000020200」に対応付けてハッシュ値「0xF28E8BDB1F95033D31D332AD1C192E5263687F27」が保持されている。また、データのアドレス「0x15A0001000020400」に対応付けてハッシュ値「0xB376885AC8452B6CBF9CED81B1080BFD570D9B91」が保持されている。
図6は、クライアント装置側中継装置110に含まれるキャッシュインデックステーブル114のデータ構造の一例を示す。なお、ここではキャッシュインデックステーブル114について説明するが、ストレージ装置側中継装置120に含まれるキャッシュインデックステーブル124についても同様である。
図6に示すように、キャッシュインデックステーブル114には、ディスクボリュームシリアル番号、論理ブロックアドレス(LBA)及び識別子が保持されている。キャッシュインデックステーブル114では、ディスクボリュームのシリアル番号及び論理ブロックアドレスの組み合わせをインデックスとしている。また、キャッシュインデックステーブル114は、ディスクボリューム(ディスクボリュームのシリアル番号)毎に存在する。
また、図6に示すように、キャッシュインデックステーブル114にはシリアル番号によって識別されるディスクボリューム内の論理ブロックアドレス毎に対応付けて識別子が保持されている。
ここでは、ディスクボリュームのシリアル番号は、例えば10バイトで表される。また、論理ブロックアドレスは、4バイトで表される。識別子は、ディスクボリュームのシリアル番号及び論理ブロックアドレスによって示される(論理ブロックアドレスに格納されている)データの内容から、予め定められたハッシュ関数(例えば、SHA1)を用いて生成されたハッシュ値である。このハッシュ値は、例えば20バイトで表される。
図6には、シリアル番号が「0xF4BAACDDD8FA4ACBF834」によって識別されるディスクボリュームに対応するキャッシュインデックステーブル114が示されている。
図6に示す例では、論理ブロックアドレス「0x00000000(4バイト)」に対応付けてハッシュ値「0x5C3EB80066420002BC3DCC7CA4AB6EFAD7ED4AE5(20バイト)」が保持されている。論理ブロックアドレス「0x00000001」に対応付けてハッシュ値「0xF28E8BDB1F95033D31D332AD1C192E5263687F27」が保持されている。論理ブロックアドレス「0x00000003」に対応付けてハッシュ値「0xB376885AC8452B6CBF9CED81B1080BFD570D9B91」が保持されている。論理ブロックアドレス「0x00000007」に対応付けてハッシュ値「0x5C3EB80066420002BC3DCC7CA4AB6EFAD7ED4AE5」が保持されている。
次に、図7を参照して、キャッシュデータテーブル113及びキャッシュインデックステーブル114の関係について説明する。なお、図7においては、上記した図5及び図6とは異なり、キャッシュデータテーブル113及びキャッシュインデックステーブル114に保持されているディスクボリュームのシリアル番号、論理ブロックアドレス、識別子(ハッシュ値)及びデータのアドレスについては、便宜的に簡略化して記載されている。
なお、ここではキャッシュデータテーブル113及びキャッシュインデックステーブル114の関係について説明するが、キャッシュデータテーブル123及びキャッシュインデックステーブル124の関係についても同様である。
図7では、ディスクボリュームのシリアル番号「1」によって識別されるストレージ装置30内のディスクボリュームに対応するキャッシュインデックステーブル114について説明する。
このキャッシュインデックステーブル114には、論理ブロックアドレス「1」に対応付けて識別子「ハッシュ値1」が保持されている。また、論理ブロックアドレス「2」に対応付けて識別子「ハッシュ値2」、論理ブロックアドレス「3」に対応付けて識別子「ハッシュ値3」、論理ブロックアドレス「4」に対応付けて識別子「ハッシュ値1」が保持されている。つまり、論理ブロックアドレス「1」に格納されているデータ及び論理ブロックアドレス「4」に格納されているデータは同一データである。換言すれば、論理ブロックアドレス「1」及び論理ブロックアドレス「4」は、同一データをポイントしている状態である。
一方、キャッシュデータテーブル113には、識別子「ハッシュ値1」に対応付けてキャッシュデータのアドレスとして「アドレス1」が保持されている。また、識別子「ハッシュ値2」に対応付けてキャッシュデータのアドレスとして「アドレス2」、識別子「ハッシュ値3」に対応付けてキャッシュデータのアドレスとして「アドレス3」が保持されている。
また、キャッシュ格納112の「アドレス1」にはデータAが格納されている。キャッシュ格納部112の「アドレス2」にはデータBが格納されている。また、キャッシュ格納112の「アドレス3」にはデータCが格納されている。
なお、データAは、キャッシュ格納部112の「アドレス1」にキャッシュされているデータであり、ストレージ装置30のディスクボリュームシリアル番号「1」の論理ブロックアドレス「1」及び論理ブロックアドレス「4」に格納されているデータ(と同一)である。
データBは、キャッシュ格納部112の「アドレス2」にキャッシュされているデータであり、ストレージ装置30のディスクボリュームシリアル番号「1」の論理ブロックアドレス「2」に格納されているデータ(と同一)である。
また、データCは、キャッシュ格納部112の「アドレス3」にキャッシュされているデータであり、ストレージ装置30のディスクボリュームシリアル番号「1」の論理ブロックアドレス「3」に格納されているデータ(と同一)である。
上記したように、キャッシュデータテーブル113及びキャッシュインデックステーブル114は、識別子(ハッシュ値)により関連付けられている。これにより、例えばクライアント装置20からストレージ装置30に対してリード要求があった場合には、例えばクライアント装置側中継装置110(ストレージ装置側中継装置120)は、当該リード要求に含まれるインデックス(ディスクボリュームシリアル番号及び論理ブロックアドレス)からキャッシュ格納部112(キャッシュ格納部122)に格納されているキャッシュデータを特定することができる。
次に、図8のフローチャートを参照して、クライアント装置20からストレージ装置30に対してリード要求が送信された場合における本実施形態に係るデータ転送システム10の処理手順について説明する。
クライアント装置20から送信されるリード要求には、当該リード要求によって指定される(読み込みの対象となる)データ(対象データ)を示すインデックスが含まれる。このインデックスには、対象データが格納されているストレージ装置30内のディスクボリュームを識別するディスクボリュームシリアル番号及び当該ディスクボリューム内の論理ブロックアドレスが含まれる。以下、リード要求に含まれるインデックスを対象インデックスと称する。
まず、クライアント装置側中継装置110の中継部111は、クライアント装置20から送信されたリード要求を受信(入力)する(ステップS1)。リード要求が入力されると、クライアント装置側中継装置110においてキャッシュヒット判定処理が実行される。
キャッシュ管理部115は、中継部111によって入力されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル114にハッシュ値が保持されているか否かを判定する(ステップS2)。具体的には、キャッシュ管理部115は、対象インデックスに含まれるディスクボリュームのシリアル番号によって識別されるディスクボリュームに対応するキャッシュインデックステーブル114を特定する。キャッシュ管理部115は、特定されたキャッシュインデックステーブル114において、対象インデックスに含まれる論理ブロックアドレスに対応付けてハッシュ値が保持されているか否かを判定する。
対象インデックスに対応付けてキャッシュインデックステーブル114にハッシュ値が保持されていないと判定された場合(ステップS2のNO)、キャッシュ管理部115は、対象データの内容に対応するハッシュ値の読み込みを要求するためのハッシュ値読み込み要求を、中継部111を介してストレージ装置側中継装置120に送信する(ステップS3)。このハッシュ値読み込み要求には、対象インデックスが含まれる。
ストレージ装置側中継装置120の中継部121は、クライアント装置側中継装置110によって送信されたハッシュ値読み込み要求を入力する。
キャッシュ管理部125は、中継部121によって入力されたハッシュ値読み込み要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル124にハッシュ値が保持されているか否かを判定する(ステップS4)。
キャッシュインデックステーブル124にハッシュ値が保持されていないと判定された場合(ステップS4のNO)、キャッシュ管理部125は、対象データの読み込みを要求するためのリード要求を、中継部121を介してストレージ装置30に対して送信する。これにより、キャッシュ管理部125は、中継部121を介して、対象データをストレージ装置30から読み込む(ステップS5)。
識別子生成部126は、キャッシュ管理部125によって読み込まれた対象データの内容に対応する識別子としてハッシュ値を生成する(ステップS6)。識別子生成部126は、例えばSHA1のようなハッシュ関数を用いてハッシュ値を生成する。
キャッシュ管理部125は、読み込まれた対象データをキャッシュ格納部122にキャッシュ(格納)する。また、キャッシュ管理部125は、識別子生成部126によって生成されたハッシュ値を、キャッシュデータテーブル123及びキャッシュインデックステーブル124に登録する(ステップS7)。
具体的には、キャッシュ管理部125は、識別子生成部126によって生成されたハッシュ値を、対象インデックスに対応付けてキャッシュインデックステーブル124に登録する。また、キャッシュ管理部125は、キャッシュされた対象データに対応付けて識別子生成部126によって生成されたハッシュ値をキャッシュデータテーブル123に登録する。
キャッシュ管理部125は、識別子生成部126によって生成されたハッシュ値を、中継部121を介してクライアント装置側中継装置110に対して送信する(ステップS8)。
クライアント装置側中継装置110の中継部111は、ストレージ装置側中継装置120によって送信されたハッシュ値を入力する。このとき、キャッシュ管理部115は、入力されたハッシュ値を対象インデックスに対応付けてキャッシュインデックステーブル114に登録する。
キャッシュ管理部115は、中継部111によって入力されたハッシュ値がキャッシュデータテーブル113に保持されているか否かを判定する(ステップS9)。
中継部111によって入力されたハッシュ値がキャッシュデータテーブル113に保持されていないと判定された場合(ステップS9のNO)、キャッシュ管理部115は、対象データの読み込みを要求するリード要求を、中継部111を介してストレージ装置側中継装置120に対して送信する(ステップS10)。このリード要求には、対象データを示す対象インデックス(ディスクボリュームシリアル番号及び論理ブロックアドレス)が含まれる。
ストレージ装置側中継装置120の中継部121は、クライアント装置側中継装置110によって送信されたリード要求を入力する。
キャッシュ管理部125は、中継部121によって入力されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル124にハッシュ値が保持されているか否かを判定する(ステップS11)。
キャッシュインデックステーブル124にハッシュ値が保持されていると判定された場合(ステップS11のYES)、キャッシュ管理部125は、当該ハッシュ値がキャッシュデータテーブル123に保持されているか否かを判定する(ステップS12)。
ハッシュ値がキャッシュデータテーブル123に保持されていないと判定された場合(ステップS12のNO)、上記したステップS5〜ステップS7の処理に相当するステップS13〜ステップS15の処理が実行される。
次に、キャッシュ管理部125は、ステップS13において読み込まれた対象データを、中継部121を介してクライアント装置側中継装置110に対して送信する(ステップS16)。
クライアント装置側中継装置110の中継部111は、ストレージ装置側中継装置120によって送信された対象データを入力する。
キャッシュ管理部115は、中継部111によって入力された対象データをキャッシュ格納部112に登録(キャッシュ)する(ステップS17)。このとき、キャッシュ管理部115は、対象データに対応付けてハッシュ値をキャッシュデータテーブル113に登録する。
キャッシュ管理部115は、ステップS1において入力されたリード要求の要求元であるクライアント端末20に対して、当該リード要求の応答として対象データを送信する(ステップS18)。このとき、キャッシュ管理部115は、中継部111を介して対象データを送信する。
一方、ステップS2において対象インデックスに対応付けてキャッシュインデックステーブル114にハッシュ値が保持されていると判定された場合、ステップS9の処理が実行される。
また、ステップS4においてキャッシュインデックステーブル124にハッシュ値が保持されていると判定された場合、ステップS8の処理が実行される。
また、ステップS9において中継部111によって入力されたハッシュ値がキャッシュデータテーブル113に保持されていると判定された場合には、キャッシュデータテーブル113において当該ハッシュ値に対応付けられているデータ(対象データ)がキャッシュ格納部112から取得される。具体的には、キャッシュ管理部115は、中継部111によって入力されたハッシュ値がキャッシュデータテーブル113において対応付けられているキャッシュデータのアドレスを特定し、キャッシュ格納部112の当該特定されたアドレスに格納されているキャッシュデータ(対象データ)を取得する。このようにして、対象データが取得されると、ステップS18の処理が実行される。
また、ステップS11においてキャッシュインデックステーブル124にハッシュ値が保持されていないと判定された場合、ステップS13の処理が実行される。
また、ステップS12においてハッシュ値が保持されていると判定された場合には、キャッシュデータテーブル123において当該ハッシュ値に対応付けられているデータ(対象データ)がキャッシュ格納部122から取得され、ステップS16の処理が実行される。
また、ここでは便宜的にリード要求にはインデックスとして1つの論理ブロックアドレスのみが含まれているものとして説明したが、複数の論理ブロックアドレスが含まれている構成であってもよい。この場合、リード要求には、ディスクボリュームシリアル番号及び論理ブロックアドレスに加えて、データ長が含まれる。この場合には、リード要求に含まれる論理ブロックアドレスから当該リード要求に含まれるデータ長の間に含まれる複数の論理ブロックアドレスの全てに対して上記したような処理が実行される。
次に、図9を参照して、本実施形態に係るデータ転送システム10の動作の第1の具体例について説明する。なお、図中に表記されるNULLは、各種データが保持されていない(埋まっていない)旨を表す。以下の各図についても同様である。
図9に示すストレージ装置30内には1つのディスクボリュームが備えられているものとする。このディスクボリュームは、論理ブロックアドレス1〜4から構成されている。図9に示すように、論理ブロックアドレス1にはデータaが格納されている。また、論理ブロックアドレス2にはデータb、論理ブロックアドレス3にはデータc、論理ブロックアドレス4にはデータaが格納されている。つまり、論理ブロックアドレス1及び論理ブロックアドレス4には同一のデータaが格納されている。
クライアント装置側中継装置110に含まれるキャッシュデータテーブル113には、データaに対応付けて識別子(ハッシュ値)Aが保持されている。つまり、クライアント装置側中継装置110に含まれるキャッシュ格納部112(図示せず)には、データaがキャッシュされている。
また、クライアント装置側中継装置110に含まれるキャッシュインデックステーブル114には、論理ブロックアドレス1に対応付けてハッシュ値Aが保持されている。なお、キャッシュインデックステーブル114には、他の論理ブロックアドレス(論理ブロックアドレス2〜4)に対応付けてNULLが表記されている。これは、キャッシュインデックステーブル114には、論理ブロックアドレス2〜4に対応付けてハッシュ値は保持されていないことを示す。
一方、ストレージ装置側中継装置120に含まれるキャッシュデータテーブル123には、データaに対応付けてハッシュ値Aが保持されている。また、データbに対応付けてハッシュ値Bが保持されている。つまり、ストレージ装置側中継装置120に含まれるキャッシュ格納部122(図示せず)には、データa及びデータbがキャッシュされている。
また、ストレージ装置側中継装置120に含まれるキャッシュインデックステーブル124には、論理ブロックアドレス1に対応付けてハッシュ値Aが保持されている。また、キャッシュインデックステーブル124には、論理ブロックアドレス2に対応付けてハッシュ値B、論理ブロックアドレス4に対応付けてハッシュ値Aが保持されている。なお、キャッシュインデックステーブル124には、論理ブロックアドレス3に対応付けてハッシュ値は保持されていない。
ここで、例えばクライアント装置20からストレージ装置30に対して、対象インデックスとして論理ブロックアドレス4を含むリード要求が送信されたものとする(ステップS101)。このリード要求は、図9においてRead(LBA=4)と表記されている。なお、上記したようにストレージ装置30内には1つのディスクボリュームしか備えられていないので、ここでは、対象インデックスに含まれるディスクボリュームシリアル番号については省略する。
クライアント装置側中継装置110は、クライアント装置20によって送信されたリード要求を入力する。クライアント装置側中継装置110は、リード要求が入力されるとキャッシュヒット判定処理を実行する。
まず、クライアント装置側中継装置110は、入力されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル114にハッシュ値が保持されているか否かを判定する。この場合、クライアント装置側中継装置110に含まれるキャッシュインデックステーブル114には論理ブロックアドレス4に対応付けてハッシュ値が保持されていない。このため、クライアント装置側中継装置110は、インデックスとして論理ブロックアドレス4(対象インデックス)を含むハッシュ値読み込み要求をストレージ装置側中継装置120に対して送信する(ステップS102)。このハッシュ値読み込み要求は、図9においてReadHash(LBA=4)と表記されている。
ストレージ装置側中継装置120は、クライアント装置側中継装置110によって送信されたハッシュ値読み込み要求を入力する。
ストレージ装置側中継装置120は、入力されたハッシュ値読み込み要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル124にハッシュ値が保持されているか否かを判定する。この場合、ストレージ装置側中継装置120に含まれるキャッシュインデックステーブル124には、論理ブロックアドレス4に対応付けてハッシュ値Aが保持されている。したがって、ストレージ装置側中継装置120は、ハッシュ値読み込み要求に対する応答としてハッシュ値Aをクライアント装置側中継装置110に送信する(ステップS103)。
クライアント装置側中継装置110は、ストレージ装置側中継装置120によって送信されたハッシュ値Aを入力する。
クライアント装置側中継装置110は、入力されたハッシュ値Aを論理ブロックアドレス4に対応付けてキャッシュインデックステーブル114に登録する。
次に、クライアント装置側中継装置110は、入力されたハッシュ値Aが伽主データテーブル113に保持されているか否かを判定する。この場合、キャッシュデータテーブル113には、ハッシュ値Aが保持されている。このため、クライアント装置側中継装置110は、キャッシュデータテーブル113においてハッシュ値Aに対応付けられているデータaをキャッシュ格納部112から取得する。クライアント装置側中継装置110は、取得されたデータaを、リード要求に対する応答としてクライアント装置20に対して送信する(ステップS104)。
次に、図10を参照して、本実施形態に係るデータ転送システム10の動作の第2の具体例について説明する。
図10に示すストレージ装置30内には1つのディスクボリュームが備えられているものとする。このディスクボリュームは、論理ブロックアドレス1〜4から構成されている。図10に示すように、論理ブロックアドレス1にはデータaが格納されている。また、論理ブロックアドレス2にはデータb、論理ブロックアドレス3にはデータc、論理ブロックアドレス4にはデータaが格納されている。
クライアント装置側中継装置110に含まれるキャッシュデータテーブル113には、データaに対応付けて識別子(ハッシュ値)Aが保持されている。また、クライアント装置側中継装置110に含まれるキャッシュインデックステーブル114には、論理ブロックアドレス1及び論理ブロックアドレス4に対応付けてハッシュ値Aが保持されている。
一方、ストレージ装置側中継装置120に含まれるキャッシュデータテーブル123には、データaに対応付けてハッシュ値Aが保持されている。また、キャッシュデータテーブル123には、データbに対応付けてハッシュ値Bが保持されている。ストレージ装置側中継装置120に含まれるキャッシュインデックステーブル124には、論理ブロックアドレス1に対応付けてハッシュ値Aが保持されている。また、キャッシュインデックステーブル124には、論理ブロックアドレス2に対応付けてハッシュ値B、論理ブロックアドレス4に対応付けてハッシュ値Aが保持されている。
ここで、例えばクライアント装置20からストレージ装置30に対して、対象インデックスとして論理ブロックアドレス2を含むリード要求が送信されたものとする(ステップS111)。このリード要求は、図10においてはRead(LBA=2)と表記されている。
クライアント装置側中継装置110は、クライアント装置20によって送信されたリード要求を入力する。クライアント装置側中継装置110は、リード要求が入力されるとキャッシュヒット判定処理を実行する。
まず、クライアント装置側中継装置110は、入力されてリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル114にハッシュ値が保持されているか否かを判定する。この場合、クライアント装置側中継装置110に含まれるキャッシュインデックステーブル114には論理ブロックアドレス2に対応付けてハッシュ値が保持されていない。このため、クライアント装置側中継装置110は、論理ブロックアドレス2(対象インデックス)を含むハッシュ値読み込み要求をストレージ装置側中継装置120に対して送信する(ステップS112)。このハッシュ値読み込み要求は、図10においてはReadHash(LBA=2)と表記されている。
ストレージ装置側中継装置120は、クライアント装置側中継装置110によって送信されたハッシュ値読み込み要求を入力する。
ストレージ装置側中継装置120は、入力されたハッシュ値読み込み要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル124にハッシュ値が保持されているか否かを判定する。このとき、ストレージ装置側中継装置120に含まれるキャッシュインデックステーブル124には論理ブロックアドレス2に対応付けてハッシュ値Bが保持されている。したがって、ストレージ装置側中継装置120は、ハッシュ値読み込み要求に対する応答としてハッシュ値Bをクライアント装置側中継装置110に送信する(ステップS113)。
クライアント装置側中継装置110は、ストレージ装置側中継装置120によって送信されたハッシュ値Bを入力する。
クライアント装置側中継装置110は、入力されたハッシュ値Bを論理ブロックアドレス2に対応付けてキャッシュインデックステーブル114に登録する。
次に、クライアント装置側中継装置110は、入力されたハッシュ値Bがキャッシュデータテーブル113に保持されているか否かを判定する。この場合、キャッシュデータテーブル113にはハッシュ値Bは保持されていないため、クライアント装置側中継装置110において、対象データはキャッシュされていない。このため、クライアント装置側中継装置110は、論理ブロックアドレス2(対象インデックス)を含むリード要求をストレージ装置側中継装置120に対して送信する(ステップS114)。
ストレージ装置側中継装置120は、クライアント装置側中継装置110によって送信されたリード要求を入力する。
ストレージ装置側中継装置120は、入力されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル124にハッシュ値が保持されているか否かを判定する。この場合、キャッシュインデックステーブル124には論理ブロックアドレス2に対応付けてハッシュ値Bが保持されている。
次に、ストレージ装置側中継装置120は、ハッシュ値Bがキャッシュデータテーブル123に保持されているか否かを判定する。この場合、キャッシュデータテーブル123にはハッシュ値Bが保持されている。ストレージ装置側中継装置120は、キャッシュデータテーブル123においてハッシュ値Bに対応付けられているデータbをキャッシュ格納部122から取得する。ストレージ装置側中継装置120は、取得されたデータbを、リード要求の応答としてクライアント装置側中継装置110に対して送信する(ステップS115)。
クライアント装置側中継装置110は、ストレージ装置が中継装置120によって送信されたデータbを入力する。
クライアント装置側中継装置110は、入力されたデータbをキャッシュ格納部112にキャッシュする。また、クライアント装置側中継装置110は、入力されたデータbに対応付けてハッシュ値Bをキャッシュデータテーブル113に登録する。
クライアント装置側中継装置110は、入力されたデータbをリード要求に対する応答としてクライアント装置20に対して送信する(ステップS116)。
次に、クライアント装置20からストレージ装置30に対してライト要求が送信された場合の本実施形態に係るデータ転送システム10の動作について説明する。
まず、クライアント装置側中継装置110は、クライアント装置20から送信されたライト要求を入力する。このライト要求には、例えばディスクボリュームシリアル番号及び論理ブロックアドレスを含むインデックス(対象インデックス)及びストレージ装置30に対して書き込まれるデータ(書き込みデータ)が含まれる。
ここで、ライト要求に応じてストレージ装置30に対して書き込み処理が行われる際には、各中継装置(クライアント装置側中継装置110及びストレージ装置側中継装置120)内のキャッシュとストレージ装置30内のデータとの一貫性を保持するための動作が必要となる。
そこで、例えばクライアント装置側中継装置110によってライト要求が受信された際には、当該クライアント装置側中継装置110では、キャッシュの一貫性を保持するために例えば第1の動作または第2の動作が実行される。
まず、第1の動作について説明する。この第1の動作においては、クライアント装置側中継装置110は、受信されたライト要求をそのままストレージ装置側中継装置120に対して送信する。
その際、クライアント装置側中継装置110に含まれる識別子生成部116は、ライト要求に含まれる書き込みデータの内容に対応する識別子(ハッシュ値)を生成する。そして、キャッシュ管理部115は、キャッシュインデックステーブル114においてライト要求に含まれる対象インデックスに対応付けられているハッシュ値を、識別子生成部116によって生成されたハッシュ値に書き換える。また、キャッシュ管理部115は、書き込みデータをキャッシュ格納部112にキャッシュする。キャッシュ管理部115は、書き込みデータに対応付けて識別子生成部116によって生成されたハッシュ値をキャッシュデータテーブル113に登録する。つまり、第1の動作においては、キャッシュの更新によってキャッシュの一貫性が保障される。
次に、第2の動作について説明する。この第2の動作においても、クライアント装置側中継装置110は、受信されたライト要求をそのままストレージ装置側中継装置120に対して送信する。
その際、クライアント装置側中継装置110に含まれるキャッシュ管理部115は、ライト要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル114に保持されているハッシュ値を破棄(または、無効にマーク)する。つまり、第2の動作においては、キャッシュの破棄によってキャッシュの一貫性が保障される。
なお、上記した第1及び第2の動作はクライアント装置側中継装置110によって実行されるものとして説明したが、ストレージ装置側中継装置120によっても実行される。つまり、ストレージ装置側中継装置120では、クライアント装置側中継装置110によって送信されたライト要求に対して上記した動作と同様の動作が実行される。
これにより、ストレージ装置30内のデータと各中継装置内のキャッシュデータとの一貫性を保持することができる。
上記したように本実施形態においては、例えばクライアント装置20から送信されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル114にハッシュ値が保持されていない場合、当該対象インデックスを含むハッシュ値読み込み要求がクライアント装置側中継装置110からストレージ装置側中継装置120に対して送信される。これにより、ハッシュ値読み込み要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル124にハッシュ値が保持されている場合には、当該ハッシュ値がストレージ装置側中継装置120からクライアント装置側中継装置110に対して送信される。この場合に、例えばストレージ装置側中継装置120によって送信されたハッシュ値がキャッシュデータテーブル113に保持されている場合には、キャッシュデータテーブル113において当該ハッシュ値に対応付けられているデータ(対象データ)をキャッシュ格納部112から取得することで、リード要求の応答として対象データをクライアント装置20に対して送信することが可能となる。
よって、本実施形態においては、クライアント装置側中継装置110及びストレージ装置側中継装置120が例えば帯域が細く遅延が大きい回線を用いた広域通信網(WAN)を介して接続されている場合において、当該クライアント装置側中継装置110及びストレージ装置側中継装置120間ではデータ自体は転送されることなく、当該データの内容に対応する識別子のみが転送されるので、当該クライアント装置側中継装置110及びストレージ装置側中継装置120間での転送データ量を削減する(小さくする)ことが可能となる。このように、クライアント装置側中継装置110及びストレージ装置側中継装置120間での転送データ量を小さくすることで転送速度を向上させることが可能となる。
[第1の変形例]
次に、図11〜図14を参照して、本実施形態の第1の変形例について説明する。なお、本変形例に係るデータ転送システムの構成は、前述した本実施形態に係るデータ転送システム10の構成と同様であるため、図1及び図4を用いて説明する。以下の各変形例についても同様にして図1及び図4を用いて説明する。
前述した本実施形態に係るデータ転送システム10においては、例えばクライアント装置20がストレージ装置30からデータ(対象データ)を読み込むためのリード要求が送信されると、クライアント装置側中継装置110がストレージ装置側中継装置120から当該対象データの内容に対応するハッシュ値を取得し、キャッシュデータテーブル113に当該ハッシュ値が保持されていない場合には、対象データ本体を当該ストレージ装置側中継装置120から取得する。このため、例えば取得されたハッシュ値がキャッシュデータテーブル113に保持されていればクライアント装置側中継装置110及びストレージ装置側中継装置120間において対象データ本体を転送する必要がないので、転送データ量を削減できる。
しかしながら、前述した本実施形態においては、クライアント側中継装置110がストレージ装置側中継装置120からハッシュ値を取得した後、当該ハッシュ値がキャッシュデータテーブル113に保持されていない(つまり、キャッシュミスヒットと判定された)場合には、対象データ本体がストレージ装置側中継装置120からクライアント装置側中継装置110に転送される。したがって、結果的にクライアント装置側中継装置110及びストレージ装置側中継装置120間でハッシュ値及び対象データ本体が別々に転送されることになる(つまり、二度手間となる)ため、そのペナルティは大きい。
本変形例に係るデータ転送システム10の特徴は、上記した二度手間を省くために、例えばクライアント装置20がストレージ装置30から対象データを読み込むためのリード要求が送信されると、当該リード要求の後にクライアント装置20が読み込みを要求するインデックスを予想して、当該インデックスに対応付けられているハッシュ値を予めクライアント装置側中継装置120において先読みしておく点にある。つまり、本変形例に係るデータ転送システム10においては、上記したような本実施形態において生じる二度手間を省くことを目的としている。
図11のフローチャートを参照して、クライアント装置20からストレージ装置30に対してリード要求が送信された場合における本変形例に係るデータ転送システム10の処理手順について説明する。
クライアント装置20から送信されるリード要求には、当該リード要求によって指定される(読み込みの対象となる)データ(対象データ)を示すインデックス(対象インデックス)が含まれる。この対象インデックスには、対象データが格納されているストレージ装置30内のディスクボリュームを識別するディスクボリュームシリアル番号及び当該ディスクボリューム内の論理ブロックアドレスが含まれる。
まず、クライアント装置側中継装置110は、前述した図8に示すステップS1及びステップS2の処理に相当するステップS21及びステップS22の処理を実行する。
ステップS22において対象インデックスに対応付けてキャッシュインデックステーブル114にハッシュ値が保持されていないと判定された場合、クライアント装置側中継装置110に含まれるキャッシュ管理部115は、対象インデックスによって示されるデータ(対象データ)の読み込み及びハッシュ値の先読みを要求するための先読み要求(先読みつき読み込み命令)を、中継部111を介してストレージ装置側中継装置120に送信する(ステップS23)。この先読み要求には、対象インデックスが含まれる。
一方、ステップS22において対象インデックスに対応付けてキャッシュインデックステーブル114にハッシュ値が保持されていると判定された場合、キャッシュ管理部115は、当該ハッシュ値がキャッシュデータテーブル113に保持されているか否かを判定する(ステップS24)。
ハッシュ値がキャッシュデータテーブル113に保持されていないと判定された場合(ステップS24のNO)、キャッシュ管理部115は、上記した先読み要求を、中継部111を介してストレージ装置側中継装置120に送信する(ステップS25)。
ステップS23またはステップS25においてクライアント装置側中継装置110から先読み要求が送信されると、ストレージ装置側中継装置120に含まれる中継装置121は、当該先読み要求を入力する。
キャッシュ管理部125は、中継装置121によって入力された先読み要求に応じて、対象データの取得(読み込み)処理を実行する(ステップS26)。この対象データの取得処理においては、例えば前述した図8に示すステップS11〜ステップS15の処理に相当する処理が実行される。これにより、キャッシュ管理部125は、対象データを取得する。
また、キャッシュ管理部125は、中継装置121によって入力された先読み要求に応じて、ハッシュ値の先読み処理を実行する(ステップS27)。このハッシュ値の先読み処理では、まず、例えば先読み要求に含まれる対象インデックスに応じて先読みの対象となるインデックス(先読み先のインデックス)が決定(選択)される。
ここで、先読み先のインデックスを決定する方法として、例えばクライアント装置20から送信されたリード要求がシーケンシャルリードであるものと想定して、当該リード要求に含まれる対象インデックスに後続するインデックスを先読み先のインデックスと決定する方法がある。ここで、この方法によれば、例えばLUN0のディスクボリュームの論理ブロックアドレス1から論理ブロックアドレス10までのデータの読み込みを要求するリード要求(つまり、対象インデックスがLBA1〜10)がクライアント装置20から送信された場合には、先読み先のインデックスとして当該LUN0のディスクボリュームの論理ブロックアドレス11が決定される。
以下、本変形例においては、上記した方法によって先読み先のインデックスが決定されるものとする。
なお、先読み先のインデックスを決定する方法としては、上記した方法以外に、例えば過去のクライアント装置20からのストレージ装置30に対するアクセスの統計情報をもとに決定する方法等、様々な方法が考えられる。
キャッシュ管理部125は、例えば先読み要求に含まれる対象インデックスに後続するインデックスが先読み先のインデックスとして決定されると、当該先読み先のインデックスに基づいて例えば前述した図8のステップS4〜ステップS7の処理に相当する処理を実行する。これにより、先読み先のインデックスに対応するハッシュ値(以下、後続のハッシュ値と表記)が取得され、ハッシュ値の先読み処理は終了される。
次に、キャッシュ管理部125は、ステップS26において取得された対象データ及びステップS27において取得された後続のハッシュ値を、中継部121を介してクライアント装置側中継装置110に対して送信する(ステップS28)。このとき、キャッシュ管理部125は、先読み先のインデックスをクライアント装置側中継装置110に対して通知する。
クライアント装置側中継装置110の中継部111は、ストレージ装置側中継装置120によって送信された対象データ及び後続のハッシュ値を入力する。
キャッシュ管理部115は、中継部111によって入力された対象データを識別子生成部116に渡す。
識別子生成部116は、キャッシュ管理部115から渡された対象データの内容に対応する識別子としてハッシュ値を生成する(ステップS29)。識別子生成部116は、例えばSHA1のようなハッシュ関数を用いてハッシュ値を生成する。
次に、キャッシュ管理部115は、中継部111によって入力された対象データをキャッシュ格納部112にキャッシュする。また、キャッシュ管理部115は、識別子生成部116によって生成されたハッシュ値を、キャッシュデータテーブル113及びキャッシュインデックステーブル114に登録する(ステップS30)。
具体的には、キャッシュ管理部115は、識別子生成部116によって生成されたハッシュ値を、対象インデックスに対応付けてキャッシュインデックステーブル114に登録する。また、キャッシュ管理部115は、キャッシュされた対象データに対応付けて識別子生成部116によって生成されたハッシュ値をキャッシュデータテーブル113に登録する。
また、キャッシュ管理部115は、中継部111によって入力された後続のハッシュ値を、ストレージ装置側中継装置120から通知された先読み先のインデックスに対応付けてキャッシュインデックステーブル114に登録する(ステップS31)。
キャッシュ管理部115は、ステップS21において入力されたリード要求の要求元であるクライアント端末20に対して、当該リード要求の応答として対象データを送信する(ステップS32)。このとき、キャッシュ管理部115は、中継部111を介して対象データを送信する。
一方、ステップS24においてハッシュ値がキャッシュデータテーブル113に保持されていると判定された場合には、キャッシュデータテーブル113において当該ハッシュ値に対応付けられているデータ(対象データ)がキャッシュ格納部112から取得され、ステップS32の処理が実行される。
次に、図12を参照して、本変形例に係るデータ転送システム10の動作の第1の具体例について説明する。ここでは、本変形例においてハッシュ値の先読み処理が効果的である場合の動作例について示す。
図12に示すストレージ装置30内には1つのディスクボリュームが備えられているものとする。このディスクボリュームは、論理ブロックアドレス1〜4から構成されている。図12に示すように、論理ブロックアドレス1にはデータaが格納されている。また、論理ブロックアドレス2にはデータb、論理ブロックアドレス3にはデータc、論理ブロックアドレス4にはデータaが格納されている。つまり、論理ブロックアドレス1及び論理ブロックアドレス4には同一のデータaが格納されている。
クライアント装置側中継装置110に含まれるキャッシュデータテーブル113には、データaに対応付けてハッシュ値Aが保持されている。つまり、クライアント装置側中継装置110に含まれるキャッシュ格納部112(図示せず)には、データaがキャッシュされている。
また、クライアント装置側中継装置110に含まれるキャッシュインデックステーブル114には、論理ブロックアドレス1に対応付けてハッシュ値Aが保持されている。なお、キャッシュインデックステーブル114には、他の論理ブロックアドレス(論理ブロックアドレス2〜4)に対応付けてハッシュ値は保持されていない。
一方、ストレージ装置側中継装置120に含まれるキャッシュデータテーブル123には、データaに対応付けてハッシュ値Aが保持されている。また、キャッシュデータテーブル123には、データcに対応付けてハッシュ値Cが保持されている。つまり、ストレージ装置側中継装置120に含まれるキャッシュ格納部122(図示せず)には、データa及びデータcがキャッシュされている。
また、ストレージ装置側中継装置120に含まれるキャッシュインデックステーブル124には、論理ブロックアドレス1に対応付けてハッシュ値Aが保持されている。また、キャッシュインデックステーブル124には、論理ブロックアドレス3に対応付けてハッシュ値C、論理ブロックアドレス4に対応付けてハッシュ値Aが保持されている。なお、論理ブロックアドレス2に対応付けてハッシュ値は保持されていない。
ここで、例えばクライアント装置20からストレージ装置30に対して、対象インデックスとして論理ブロックアドレス3を含むリード要求が送信されたものとする(ステップS121)。このリード要求は、図12においてはRead(LBA=3)と表記されている。なお、上記したようにストレージ装置30内には1つのディスクボリュームしか備えられていないので、ここでは、インデックスに含まれるディスクボリュームシリアル番号については省略する。
クライアント装置側中継装置110は、クライアント装置20によって送信されたリード要求を入力する。クライアント装置側中継装置110は、リード要求が入力されるとキャッシュヒット判定処理を実行する。
まず、クライアント装置側中継装置110は、入力されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル114にハッシュ値が保持されているか否かを判定する。この場合、クライアント装置側中継装置110に含まれるキャッシュインデックステーブル114には論理ブロックアドレス3に対応付けてハッシュ値が保持されていない。このため、クライアント装置側中継装置110は、論理ブロックアドレス3(対象インデックス)を含む先読み要求をストレージ装置側中継装置120に対して送信する(ステップS122)。この先読み要求は、図12においてはReadEx(LBA=3)と表記されている。
ストレージ装置側中継装置120は、クライアント装置側中継装置110によって送信された先読み要求を入力する。
ストレージ装置側中継装置120は、入力された先読み要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル124にハッシュ値が保持されているか否かを判定する。この場合、ストレージ装置側中継装置120に含まれるキャッシュインデックステーブル124には、論理ブロックアドレス3に対応付けてハッシュ値Cが保持されている。
次に、ストレージ装置側中継装置120は、ハッシュ値Cがキャッシュデータテーブル123に保持されているか否かを判定する。ストレージ装置側中継装置120に含まれるキャッシュデータテーブル123には、ハッシュ値Cが保持されている。この場合、ストレージ装置側中継装置120は、キャッシュデータテーブル123においてハッシュ値Cに対応付けられているデータc(対象データ)を、キャッシュ格納部122から取得する。
また、ストレージ装置側中継装置120は、例えば対象インデックスである論理ブロックアドレス3の後続である論理ブロックアドレス4を先読み先のインデックスとして決定する。この場合、ストレージ装置側中継装置120は、先読み先のインデックスに対応付けてキャッシュインデックステーブル124にハッシュ値が保持されているか否かを判定する。キャッシュインデックステーブル124には、先読み先のインデックスである論理ブロックアドレス4に対応付けてハッシュ値Aが保持されている。このため、ストレージ装置が中継装置120は、後続のハッシュ値としてハッシュ値Aを取得する。
上記したように対象データ(ここでは、データc)及び後続のハッシュ値(ここでは、ハッシュ値A)が取得されると、ストレージ装置側中継装置120は、先読み要求に対する応答として、取得されたデータc及びハッシュ値Aをクライアント側中継装置110に対して送信する(ステップS123)。
クライアント装置側中継装置110は、ストレージ装置側中継装置120によって送信されたデータc及びハッシュ値Aを入力する。
クライアント装置側中継装置110は、入力されたデータcをキャッシュ格納部112にキャッシュする。
また、クライアント装置側中継装置110では、入力されたデータcの内容に対応する識別子としてハッシュ値が生成される。このとき生成されたハッシュ値は、ハッシュ値Cであるものとする。
この場合、クライアント装置側中継装置110は、生成されたハッシュ値Cをデータcに対応付けてキャッシュデータテーブル113に登録する。また、クライアント装置側中継装置110は、生成されたハッシュ値Cを論理ブロックアドレス3(対象インデックス)に対応付けてキャッシュインデックステーブル114に登録する。
また、クライアント装置側中継装置110は、入力されたハッシュ値Aを論理ブロックアドレス4(先読み先のインデックス)に対応付けてキャッシュインデックステーブル114に登録する。
また、クライアント装置側中継装置110は、リード要求に対する応答として、データcを当該クライアント端末20に送信する(ステップS124)。
ここで、例えばクライアント装置20からストレージ装置30に対して、対象インデックスとして論理ブロックアドレス4を含むリード要求が送信されたものとする(ステップS125)。このリード要求は、図12においてRead(LBA=4)と表記されている。
クライアント装置側中継装置110は、クライアント装置20によって送信されたリード要求を入力する。クライアント装置側中継装置110は、リード要求が入力されるとキャッシュヒット判定処理を実行する。
クライアント装置側中継装置110は、入力されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル114にハッシュ値が保持されているか否かを判定する。上記したように先読み要求に応じて、既に論理ブロックアドレス4(先読み先のインデックス)に対応付けられているハッシュ値(後続のハッシュ値)は、ストレージ装置側中継装置120から先読みされている。したがって、キャッシュインデックステーブル114には、論理ブロックアドレスに対応付けてハッシュ値Aが保持されている。
次に、クライアント装置側中継装置110は、ハッシュ値Aがキャッシュデータテーブル113に保持されているか否かを判定する。クライアント装置側中継装置110に含まれるキャッシュデータテーブル113には、ハッシュ値Aが保持されている。このため、クライアント装置側中継装置110は、キャッシュデータテーブル113においてハッシュ値Aに対応付けられているデータaをキャッシュ格納部112から取得する。クライアント装置側中継装置110は、取得されたデータaを、リード要求に対する応答としてクライアント装置20に対して送信する(ステップS126)。
上記したように、予め後続のハッシュ値(ここでは、ハッシュ値A)を先読みしておくことで、クライアント装置側中継装置110及びストレージ装置側中継装置120間における転送処理を省略することが可能となる。
次に、図13を参照して、本変形例に係るデータ転送システム10の動作の第2の具体例について説明する。ここでは、ストレージ装置側中継装置120におけるキャッシュミスヒット時の動作例について説明する。
図13に示すストレージ装置30内には1つのディスクボリュームが備えられているものとする。このディスクボリュームは、論理ブロックアドレス1〜4から構成されている。図13に示すように、論理ブロックアドレス1にはデータaが格納されている。また、論理ブロックアドレス2にはデータb、論理ブロックアドレス3にはデータc、論理ブロックアドレス4にはデータaが格納されている。
クライアント装置側中継装置110に含まれるキャッシュデータテーブル113には、データaに対応付けて識別子(ハッシュ値)Aが保持されている。また、クライアント装置側中継装置110に含まれるキャッシュインデックステーブル114には、論理ブロックアドレス1に対応付けてハッシュ値Aが保持されている。
一方、ストレージ装置側中継装置120に含まれるキャッシュデータテーブル123には、データaに対応付けてハッシュ値Aが保持されている。また、キャッシュデータテーブル123には、データcに対応付けてハッシュ値Cが保持されている。ストレージ装置側中継装置120に含まれるキャッシュインデックステーブル124には、論理ブロックアドレス1に対応付けてハッシュ値Aが保持されている。また、キャッシュインデックステーブル124には、論理ブロックアドレス3に対応付けてハッシュ値Cが保持されている。
ここで、例えばクライアント装置20からストレージ装置30に対して、対象インデックスとして論理ブロックアドレス3を含むリード要求が送信されたものとする(ステップS131)。このリード要求は、図13においてはRead(LBA=3)と表記されている。
クライアント装置側中継装置110は、クライアント装置20によって送信されたリード要求を入力する。クライアント装置側中継装置110は、リード要求が入力されるとキャッシュヒット判定処理を実行する。
まず、クライアント装置側中継装置110は、入力されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル114にハッシュ値が保持されているか否かを判定する。この場合、クライアント装置側中継装置110に含まれるキャッシュインデックステーブル114には論理ブロックアドレス3に対応付けてハッシュ値が保持されていない。このため、クライアント装置側中継装置110は、論理ブロックアドレス3(対象インデックス)を含む先読み要求をストレージ装置側中継装置120に対して送信する(ステップS132)。この先読み要求は、図13においてはReadEx(LBA=3)と表記されている。
ストレージ装置側中継装置120は、クライアント装置側中継装置110によって送信された先読み要求を入力する。
ストレージ装置側中継装置120は、入力された先読み要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル124にハッシュ値が保持されているか否かを判定する。この場合、ストレージ装置側中継装置120に含まれるキャッシュインデックステーブル124には、論理ブロックアドレス3に対応付けてハッシュ値Cが保持されている。
次に、ストレージ装置側中継装置120は、ハッシュ値Cがキャッシュデータテーブル123に保持されているか否かを判定する。ストレージ装置側中継装置120に含まれるキャッシュデータテーブル123には、ハッシュ値Cが保持されている。この場合、ストレージ装置側中継装置120は、キャッシュデータテーブル123においてハッシュ値Cに対応付けられているデータc(対象データ)を、キャッシュ格納部122から取得する。
また、ストレージ装置側中継装置120は、例えば対象インデックスである論理ブロックアドレス3の後続である論理ブロックアドレス4を先読み先のインデックスとして決定する。この場合、ストレージ装置側中継装置120は、先読み先のインデックスに対応付けてキャッシュインデックステーブル124にハッシュ値が保持されているか否かを判定する。キャッシュインデックステーブル124には、先読み先のインデックスである論理ブロックアドレス4に対応付けてハッシュ値(後続のハッシュ値)は保持されていない。
この場合、ストレージ装置側中継装置120は、論理ブロックアドレス4を含むリード要求をストレージ装置30に対して送信する(ステップS133)。このリード要求は、図13においてはRead(LBA=4)と表記されている。これにより、ストレージ装置が中継装置120は、論理ブロックアドレス4に格納されているデータaをストレージ装置30から読み込む(ステップS134)。
ストレージ装置側中継装置120では、読み込まれたデータAの内容に対応する識別子としてハッシュ値が生成される。ここで生成されたハッシュ値は、ハッシュ値Aであるものとする。この場合、ストレージ装置側中継装置120は、生成されたハッシュ値Aを、論理ブロックアドレス4に対応付けてキャッシュインデックステーブル124に登録する。つまり、このハッシュ値Aが後続のハッシュ値となる。
なお、図13に示す例では、キャッシュデータテーブル123にハッシュ値Aが保持されている(つまり、データaがキャッシュされている)が、当該データaがキャッシュされていない場合には、当該データaのキャッシュ処理及びキャッシュデータテーブル123へのハッシュ値Aの登録処理が行われる。
ストレージ装置側中継装置120は、キャッシュ格納部122から取得されたデータc(対象データ)及び生成されたハッシュ値A(後続のハッシュ値)をクライアント装置側中継装置110に対して送信する(ステップS135)。
クライアント装置側中継装置110は、ストレージ装置側中継装置120によって送信されたデータc及びハッシュ値Aを入力する。
クライアント装置側中継装置110は、入力されたデータcをキャッシュ格納部112にキャッシュする。
また、クライアント装置側中継装置110では、入力されたデータcの内容に対応する識別子としてハッシュ値が生成される。このとき生成されたハッシュ値は、ハッシュ値Cであるものとする。
この場合、クライアント装置側中継装置110は、生成されたハッシュ値Cをデータcに対応付けてキャッシュデータテーブル113に登録する。また、クライアント装置側中継装置110は、生成されたハッシュ値Cを論理ブロックアドレス3に対応付けてキャッシュインデックステーブル114に登録する。
また、クライアント装置側中継装置110は、入力されたハッシュ値Aを論理ブロックアドレス4(先読み先のインデックス)に対応付けてキャッシュインデックステーブル114に登録する。
また、クライアント装置側中継装置110は、リード要求に対する応答として、データcを当該クライアント端末20に送信する(ステップS124)。
次に、図14を参照して、本変形例に係るデータ転送システム10の動作の第3の具体例について説明する。ここでは、対象データの転送及びハッシュ値の先読み処理を非同期で行う場合の動作例について説明する。
なお、図14において、クライアント装置20からリード要求が送信される前のストレージ装置30にキャッシュされているデータと、クライアント装置側中継装置110に含まれるキャッシュデータテーブル113、キャッシュインデックステーブル114、ストレージ装置側中継装置120に含まれるキャッシュデータテーブル123及びキャッシュインデックステーブル124に保持されているデータについては、上記した図13と同様であるため、その説明は省略する。
ここで、例えばクライアント装置20からストレージ装置30に対して、対象インデックスとして論理ブロックアドレス3を含むリード要求が送信されたものとする(ステップS141)。このリード要求は、図14においてはRead(LBA=3)と表記されている。
クライアント装置側中継装置110は、クライアント装置20によって送信されたリード要求を入力する。クライアント装置側中継装置110は、リード要求が入力されるとキャッシュヒット判定処理を実行する。
まず、クライアント装置側中継装置110は、入力されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル114にハッシュ値が保持されているか否かを判定する。この場合、クライアント装置側中継装置110に含まれるキャッシュインデックステーブル114には論理ブロックアドレス3に対応付けてハッシュ値が保持されていない。このため、クライアント装置側中継装置110は、対象インデックスとして論理ブロックアドレス3を含む先読み要求をストレージ装置側中継装置120に対して送信する(ステップS142)。なお、この先読み要求は、上記した図13において説明した先読み要求とは異なり、例えば対象データの取得処理及びハッシュ値の先読み処理を非同期で行う旨の通知が含まれる。これにより、ストレージ装置側中継装置120においては、対象データの取得処理及びハッシュ値の先読み処理が非同期で実行される。この先読み要求は、図14においてはReadExAsync(LBA=3)と表記されている。
ストレージ装置側中継装置120は、クライアント装置側中継装置110によって送信された先読み要求を入力する。
ストレージ装置側中継装置120は、入力された先読み要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル124にハッシュ値が保持されているか否かを判定する。この場合、ストレージ装置側中継装置120に含まれるキャッシュインデックステーブル124には、論理ブロックアドレス3に対応付けてハッシュ値Cが保持されている。
次に、ストレージ装置側中継装置120は、ハッシュ値Cがキャッシュデータテーブル123に保持されているか否かを判定する。ストレージ装置側中継装置120に含まれるキャッシュデータテーブル123には、ハッシュ値Cが保持されている。この場合、ストレージ装置側中継装置120は、キャッシュデータテーブル123においてハッシュ値Cに対応付けられているデータcを、キャッシュ格納部122から取得する。
図14に示す例では対象データの取得処理及びハッシュ値の先読み処理は非同期で実行されるため、当該ハッシュ値の先読み処理を待たず、ストレージ装置側中継装置120は、キャッシュ格納部122から取得されたデータc(対象データ)をクライアント装置側中継装置110に対して送信する(ステップS143)。
クライアント装置側中継装置110は、ストレージ装置側中継装置120によって送信されたデータcを入力し、キャッシュ格納部112にキャッシュする。
また、クライアント装置側中継装置110では、入力されたデータcの内容に対応する識別子としてハッシュ値が生成される。このとき生成されたハッシュ値は、ハッシュ値Cであるものとする。この場合、クライアント装置側中継装置110は、生成されたハッシュ値Cをデータcに対応付けてキャッシュデータテーブル113に登録する。また、クライアント装置側中継装置110は、生成されたハッシュ値Cを論理ブロックアドレス3(対象インデックス)に対応付けてキャッシュインデックステーブル114に登録する。
クライアント装置側中継装置110は、リード要求に対する応答として、データcを当該クライアント端末20に送信する(ステップS144)。
一方、上記した対象データ(ここでは、データc)の取得処理とは非同期で、ハッシュ値の先読み処理が実行される。ストレージ装置側中継装置120は、例えば対象インデックスである論理ブロックアドレス3の後続である論理ブロックアドレス4を先読み先のインデックスとして決定する。この場合、ストレージ装置側中継装置120は、先読み先のインデックスに対応付けてキャッシュインデックステーブル124にハッシュ値が保持されているか否かを判定する。キャッシュインデックステーブル124には、先読み先のインデックスである論理ブロックアドレス4に対応付けてハッシュ値(後続のハッシュ値)は保持されていない。
この場合、ストレージ装置側中継装置120は、論理ブロックアドレス4を含むリード要求をストレージ装置30に対して送信する(ステップS145)。このリード要求は、図14においてはRead(LBA=4)と表記されている。これにより、ストレージ装置側中継装置120は、論理ブロックアドレス4に格納されているデータa(対象データ)をストレージ装置30から読み込む(ステップS146)。
ストレージ装置側中継装置120では、読み込まれたデータAの内容に対応する識別子としてハッシュ値が生成される。ここで生成されたハッシュ値は、ハッシュ値Aであるものとする。この場合、ストレージ装置側中継装置120は、生成されたハッシュ値Aを、論理ブロックアドレス4に対応付けてキャッシュインデックステーブル124に登録する。つまり、このハッシュ値Aが後続のハッシュ値となる。
ストレージ装置側中継装置120は、生成されたハッシュ値A(後続のハッシュ値)をクライアント装置側中継装置110に対して送信する(ステップS147)。
クライアント装置側中継装置110は、ストレージ装置側中継装置120によって送信されたハッシュ値Aを入力する。クライアント装置側中継装置110は、入力されたハッシュ値Aを論理ブロックアドレス4(先読み先のインデックス)に対応付けてキャッシュインデックステーブル114に登録する。
なお、例えばクライアント装置20からストレージ装置30に対してライト要求が送信された場合における本変形例に係るデータ転送システム10の動作は、前述した本実施形態と同様であるため、その説明は省略する。
上記したように本変形例においては、例えばクライアント装置20から送信されたリード要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル114にハッシュ値が保持されていない場合、対象データと共に例えば当該対象インデックスの後続のインデックスに対応するハッシュ値(後続のハッシュ値)がストレージ装置側中継装置120からクライアント装置側中継装置110に対して転送される。本変形例においては、このように例えば後続のインデックスに対応するハッシュ値を先読みすることで、例えば上記したようなクライアント装置側中継装置110及びストレージ装置側中継装置120間でハッシュ値及び対象データ本体が別々に転送されることによる二度手間を解消(省略)し、かつ、後にリード要求が送信された場合のキャッシュヒット率を向上させることによりクライアント装置側中継装置110及びストレージ装置側中継装置120間における転送処理を省略することが可能となる。
また、例えば上記した図14で説明したように、ストレージ装置が中継装置120において対象データの転送及びハッシュ値の先読みを非同期とすることで、例えば当該先読み処理によってクライアント装置20へのリード要求に対する応答が遅延することを回避することができる。
なお、本変形例においては、先読み先のインデックスがストレージ装置側中継装置120において決定されるものとして説明したが、例えばクライアント装置側中継装置110において当該先読み先のインデックスの決定処理を行い、当該決定された先読み先のインデックスをストレージ装置側中継装置120に対して明示的に指定する構成であってもよい。
[第2の変形例]
次に、図15を参照して、本実施形態の第2の変形例について説明する。本変形例の特徴は、例えばクライアント装置20からストレージ装置30に対して送信されるリード要求またはライト要求とは独立して、クライアント装置側中継装置110及びストレージ装置側中継装置120間で例えばストレージ装置側中継装置120に含まれているキャッシュインデックステーブル124(に保持されているハッシュ値)の一部または全部の転送を行う点にある。
図15のフローチャートを参照して、本変形例に係るデータ転送システム10の処理手順について説明する。
クライアント装置側中継装置110は、例えばユーザによって指定されたデータを示すインデックスを入力する。このインデックスには、例えばストレージ装置30内のディスクボリュームを識別するディスクボリュームシリアル番号及び当該ディスクボリューム内の論理ブロックアドレスが含まれる。
クライアント装置側中継装置110の中継部111は、入力されたインデックスによって示されるデータの内容に対応するハッシュ値(識別子)の読み込みを要求するための、当該インデックスを含む要求(ハッシュ値読み込み要求)をストレージ装置側中継装置に対して送信する(ステップS41)。
ストレージ装置側中継装置120の中継部121は、クライアント装置側中継装置110から送信されたハッシュ値読み込み要求を入力する。
ストレージ装置側中継装置120のキャッシュ管理部125は、中継部121によって入力されたハッシュ値読み込み要求に含まれるインデックスに対応するハッシュ値の取得処理を実行する(ステップS42)。ここでは、キャッシュ管理部125は、ハッシュ値読み込み要求に含まれるインデックスに対応付けられてキャッシュインデックステーブル124に保持されているハッシュ値を取得する。
なお、キャッシュインデックステーブル124にハッシュ値読み込み要求に含まれるインデックスに対応するハッシュ値が保持されていない場合には、キャッシュ管理部125は、当該インデックスによって示されるデータ(論理ブロックアドレスに格納されているデータ)をストレージ装置30から読み込む。その後、データの内容に対応するハッシュ値が識別子生成部126によって生成されることにより、ハッシュ値読み込み要求に含まれるインデックスによって示されるデータの内容に対応するハッシュ値が取得される。
この取得されたハッシュ値は、例えばキャッシュデータテーブル123及びキャッシュインデックステーブル124に対して登録される。
キャッシュ管理部125は、取得されたハッシュ値を、中継部121を介してクライアント装置側中継装置110に送信する(ステップS43)。
クライアント装置側中継装置110の中継部111は、ストレージ装置側中継装置120によって送信されたハッシュ値を入力する。
キャッシュ管理部115は、中継部111によって入力されたハッシュ値を、ユーザによって指定されたインデックスに対応付けてキャッシュインデックステーブル114に登録する(ステップS44)。
なお、本変形例におけるストレージ装置側中継装置120に含まれるキャッシュインデックステーブル124に保持されているハッシュ値(の一部または全部)の転送処理は、例えば夜中のようにクライアント装置側中継装置110及びストレージ装置側中継装置120間の回線が空いている時間帯等のように、例えばユーザによって指定された時間帯に行われる。
また、例えば前述した図3に示すように複数の中継装置がネットワークシステムに存在する、つまり、データ転送システムに例えば2つ以上の中継装置が含まれる場合には、本変形例におけるハッシュ値の転送処理中には、他の中継装置からの例えばキャッシュインデックステーブルに対する書き込みは抑止(ブロック)される。
上記したように本変形例においては、ストレージ装置側中継装置120に含まれるキャッシュインデックステーブル124に保持されているハッシュ値の一部または全部を、例えばユーザによって指定された時間帯(上記したようにクライアント装置側中継装置110及びストレージ装置側中継装置120間の回線が空いている時間帯等)にクライアント装置側中継装置110に転送することによって、当該クライアント装置側中継装置110のキャッシュの準備または最適化を行うことが可能となる。
なお、本変形例においては、ストレージ装置側中継装置120に含まれるキャッシュインデックステーブル124の一部または全部が転送されるものとして説明したが、キャッシュ格納部122にキャッシュされているデータ及びキャッシュインデックステーブル123において当該データに対応付けられているハッシュ値の一部または全部が転送される構成とすることも可能である。
[第3の変形例]
次に、図16〜図21を参照して、本実施形態の第3の変形例について説明する。本変形例の特徴は、例えばクライアント装置20からストレージ装置30に対してライト要求が送信された場合に、例えばクライアント装置側中継装置110内においてキャッシュデータテーブル113及びキャッシュインデックステーブル114を用いてライトバックキャッシュを構成し、クライアント装置側中継装置110及びストレージ装置側中継装置120間でハッシュ値を利用してデータ転送を行う点にある。
本変形例においては、例えばクライアント装置20からストレージ装置30に対してライト要求が送信された場合、一旦、当該ライト要求に含まれる書き込みデータをクライアント装置側中継装置110にキャッシュしておき、その後当該書き込みデータをストレージ装置30に対して書き込む処理(以下、ストレージ装置30への書き戻し処理と表記)が実行される。
本変形例においては、クライアント装置側中継装置110に含まれるキャッシュデータテーブル113には、インデックス及びハッシュ値に対応付けて、当該インデックスによって示されるデータに対して書き込みが発生したか否か、つまり、ストレージ装置30への書き戻し処理が必要であるか否か(書き戻し処理が完了しているか否か)を示すフラグが保持されている。また、キャッシュインデックステーブル114にも同様に、データ及びハッシュ値に対応付けてフラグが保持されている。
本変形例において、クライアント装置側中継装置110では、大きく2つの処理が実行される。この2つの処理には、ライトバックキャッシュへの書き込み処理及びストレージ装置30への書き戻し処理である。これらの処理の詳細については後述する。
図16は、キャッシュデータテーブル113のデータ構造の一例を示す。図16に示すようにキャッシュデータテーブル113には、キャッシュデータ(格納先のアドレス)及びハッシュ値(識別子)に対応付けてフラグが保持されている。このフラグは、対応付けられているデータに対してストレージ装置30への書き戻し処理が必要であるか否かを示す。
図16に示す例では、キャッシュデータのアドレス「0x15A0001000020000」及びハッシュ値「0x5C3EB80066420002BC3DCC7CA4AB6EFAD7ED4AE5」に対応付けてフラグ「要」が保持されている。このフラグ「要」は、ストレージ装置30への書き戻し処理が必要であることを示す。
また、データのアドレス「0x15A0001000020200」及びハッシュ値「0xF28E8BDB1F95033D31D332AD1C192E5263687F27」に対応付けてフラグ「不要」が保持されている。このフラグ「不要」は、ストレージ装置30への書き戻し処理が必要でない(つまり、不要)であることを示す。また、データのアドレス「0x15A0001000020400」及びハッシュ値「0xB376885AC8452B6CBF9CED81B1080BFD570D9B91」に対応付けてフラグ「要」が保持されている。
図17は、キャッシュインデックステーブル114のデータ構造の一例を示す。図17に示すように、キャッシュインデックステーブル114には、インデックス(ディスクボリュームシリアル番号及び論理ブロックアドレス)及びハッシュ値(識別子)に対応付けてフラグが保持されている。
図17には、シリアル番号が「0xF4BAACDDD8FA4ACBF834」によって識別されるディスクボリュームに対応するキャッシュインデックステーブル114が示されている。
図17に示す例では、論理ブロックアドレス「0x00000000」及びハッシュ値「0x5C3EB80066420002BC3DCC7CA4AB6EFAD7ED4AE5」に対応付けてフラグ「要」が保持されている。論理ブロックアドレス「0x00000001」及びハッシュ値「0xF28E8BDB1F95033D31D332AD1C192E5263687F27」に対応付けてフラグ「不要」が保持されている。論理ブロックアドレス「0x00000003」及びハッシュ値「0xB376885AC8452B6CBF9CED81B1080BFD570D9B91」に対応付けてフラグ「要」が保持されている。論理ブロックアドレス「0x00000007」及びハッシュ値「0x5C3EB80066420002BC3DCC7CA4AB6EFAD7ED4AE5」に対応付けてフラグ「要」が保持されている。
なお、前述した図7で説明したように、キャッシュデータテーブル113及びキャッシュインデックステーブル114は、ハッシュ値により関連付けられている。このため、キャッシュデータテーブル113及びキャッシュインデックステーブル114において同一のハッシュ値には同一のフラグが対応付けて保持されている。
次に、図18のフローチャートを参照して、クライアント装置20からストレージ装置30に対してライト要求が送信された場合における前述したライトバックキャッシュへの書き込み処理の処理手順について説明する。
クライアント装置20から送信されるライト要求には、当該ライト要求によって指定されるデータ(書き込みデータ)及び当該データを示すインデックスが含まれる。このインデックスには、例えば書き込みデータが書き込まれるストレージ装置30内のディスクボリュームを識別するディスクボリュームシリアル番号及び当該ディスクボリュームの論理ブロックアドレスが含まれる。以下、ライト要求に含まれるインデックスを対象インデックスと称する。
まず、クライアント装置側中継装置110の中継部111は、クライアント装置20から送信されたライト要求を受信(入力)する(ステップS51)。ライト要求が入力されると、クライアント装置側中継装置110においてライトバックキャッシュへの書き込み処理が実行される。
次に、キャッシュ管理部115は、中継部111によって入力されたライト要求に含まれる書き込みデータを識別子生成部116に渡す。
識別子生成部116は、キャッシュ管理部115により渡された書き込みデータの内容に対応する識別子としてハッシュ値を生成する。識別子生成部126は、例えばSHA1のようなハッシュ関数を用いてハッシュ値を生成する(ステップS52)。
キャッシュ管理部115は、中継部111によって入力されたライト要求に含まれる対象インデックスに対応付けてキャッシュインデックステーブル114に識別子生成部116によって生成されたハッシュ値を登録する(ステップS53)。
また、キャッシュ管理部115は、対象インデックスに対応付けてキャッシュインデックステーブル114に保持されているフラグを、ストレージ装置30への書き戻し処理が必要であることを示すフラグに書き換える(ステップS54)。つまり、キャッシュ管理部115は、ストレージ装置30への書き戻し処理が必要であることを示すフラグをキャッシュインデックステーブル114に登録する。
次に、キャッシュ管理部115は、識別子生成部116によって生成されたハッシュ値がキャッシュデータテーブル113に保持されているか否かを判定する(ステップS55)。
識別子生成部116によって生成されたハッシュ値がキャッシュデータテーブル113に保持されていないと判定された場合(ステップS55のNO)、キャッシュ管理部115は、書き込みデータをキャッシュ格納部112にキャッシュする(ステップS56)。
キャッシュ管理部115は、書き込みデータに対応付けてキャッシュデータテーブル113に、識別子生成部116によって生成されたハッシュ値を登録する(ステップS57)。
また、キャッシュ管理部115は、書き込みデータに対応付けてキャッシュデータテーブル113に保持されているフラグを、ストレージ装置30への書き戻し処理が必要であることを示すフラグに書き換える(ステップS58)。
キャッシュ管理部115は、中継部111によって入力されたライト要求に対する応答として、書き込みが完了した旨を示す書き込み完了応答をクライアント装置20に対して送信(送信)する(ステップS59)。
このように、ライト要求をストレージ装置30(ストレージ装置側中継装置120)に伝える(送信する)ことなく、書き込み完了応答がクライアント装置20に対して通知される。
一方、ステップS55において識別子生成部116によって生成されたハッシュ値がキャッシュデータテーブル113に保持されていると判定された場合には、当該ハッシュ値に対応付けられているデータ(つまり、書き込みデータ)がキャッシュ格納部122に既にキャッシュされているため、ステップS59の処理が実行される。
なお、上記した書き込みデータがストレージ装置30に書き込まれる、つまり、書き戻し処理が完了するまでは、キャッシュデータテーブル113によって書き戻し処理が必要であることを示すフラグに対応付けられているデータについては、キャッシュからの吐き出し(キャッシュあふれ)が発生しないように管理される。
次に、図19を参照して、上記したライトバックキャッシュへの書き込み処理の処理手順について具体的に説明する。
図19に示すストレージ装置30内には1つのディスクボリュームが備えられているものとする。このディスクボリュームは、論理ブロックアドレス1〜4から構成されている。図19に示すように、論理ブロックアドレス1にはデータaが格納されている。また、論理ブロックアドレス2にはデータb、論理ブロックアドレス3にはデータc、論理ブロックアドレス4にはデータaが格納されている。つまり、論理ブロックアドレス1及び論理ブロックアドレス4には同一のデータaが格納されている。
クライアント装置側中継装置110に含まれるキャッシュデータテーブル113には、データaに対応付けてハッシュ値A及びフラグ0が保持されている。
なお、図19においては、ストレージ装置30への書き戻し処理が必要なことを示すフラグをフラグ1、必要でないことを示すフラグをフラグ0と表記する。
また、クライアント装置側中継装置110に含まれるキャッシュインデックステーブル114には、論理ブロックアドレス1に対応付けてハッシュ値A及びフラグ0が保持されている。なお、キャッシュインデックステーブル114には、他の論理ブロックアドレス(論理ブロックアドレス2〜4)に対応付けてハッシュ値は保持されていない。また、キャッシュインデックステーブル114には、ハッシュ値が保持されていない論理ブロックアドレス2〜4対応付けてフラグ0が保持されている。
一方、ストレージ装置側中継装置120に含まれるキャッシュデータテーブル123には、データaに対応付けてハッシュ値Aが保持されている。また、キャッシュデータテーブル123には、データbに対応付けてハッシュ値B、データcに対応付けてハッシュ値C及びが保持されている。
また、ストレージ装置側中継装置120に含まれるキャッシュインデックステーブル124には、論理ブロックアドレス1に対応付けてハッシュ値Aが保持されている。また、キャッシュインデックステーブル124には、論理ブロックアドレス2に対応付けてハッシュ値B、論理ブロックアドレス3に対応付けてハッシュ値Cが保持されている。なお、論理ブロックアドレス4に対応付けてハッシュ値は保持されていない。
ここで、例えばクライアント装置20からストレージ装置30に対して、書き込みデータとしてデータd及び対象インデックスとして論理ブロックアドレス3を含むライト要求が送信されたものとする(ステップS151)。このライト要求は、図19においてはWrite(LBA=3)←dと表記されている。なお、上記したようにストレージ装置30内には1つのディスクボリュームしか備えられていないので、ここでは、インデックスに含まれるディスクボリュームシリアル番号については省略する。
クライアント装置側中継装置110は、クライアント装置20によって送信されたライト要求を入力する。クライアント装置側中継装置110は、ライト要求が入力されると、ライトバックキャッシュへの書き込み処理を実行する。
まず、クライアント装置側中継装置110では、入力されたライト要求に含まれるデータdの内容に対応する識別子としてハッシュ値が生成される。ここで生成されたハッシュ値は、ハッシュ値Dであるものとする。クライアント装置側中継装置110は、生成されたハッシュ値Dを、ライト要求に含まれる論理ブロックアドレス3に対応付けてキャッシュインデックステーブル113に登録する。このとき、クライアント装置側中継装置110は、キャッシュインデックステーブル114において論理ブロックアドレス3(及びハッシュ値D)に対応付けられているフラグ0を、ストレージ装置30への書き戻し処理が必要であること示すフラグ1に書き換える。
次に、クライアント装置側中継装置110は、生成されたハッシュ値Dがキャッシュデータテーブル113に保持されているか否かを判定する。この場合、キャッシュデータテーブル113にはハッシュ値Dは保持されていないため、クライアント装置側中継装置110は、ライト要求に含まれるデータdをキャッシュ格納部112にキャッシュし、生成されたハッシュ値Dを当該データdに対応付けてキャッシュデータテーブル113に登録する。このとき、クライアント装置側中継装置110は、キャッシュデータテーブル113においてデータd(及びハッシュ値D)に対応付けられているフラグ0を、ストレージ装置30への書き戻し処理が必要であること示すフラグ1に書き換える。
上記したような処理が実行されると、クライアント装置側中継装置110は、書き込み完了応答(図19においてはOKと表記)をクライアント装置20に送信する(ステップS152)。
一方、例えばクライアント装置20からストレージ装置30に対して、書き込みデータとしてデータc及び対象インデックスとして論理ブロックアドレス2を含むライト要求が送信されたものとする(ステップS153)。このライト要求は、図19においてはWrite(LBA=2)←cと表記されている。
クライアント装置側中継装置110は、クライアント装置20によって送信されたライト要求を入力する。クライアント装置側中継装置110は、ライト要求が入力されると、ライトバックキャッシュへの書き込み処理を実行する。
まず、クライアント装置側中継装置110では、入力されたライト要求に含まれるデータcの内容に対応する識別子としてハッシュ値が生成される。ここで生成されたハッシュ値は、ハッシュ値Cであるものとする。クライアント装置側中継装置110は、生成されたハッシュ値Cを、ライト要求に含まれる論理ブロックアドレス2に対応付けてキャッシュインデックステーブル113に登録する。このとき、クライアント装置側中継装置110は、キャッシュインデックステーブル114において論理ブロックアドレス2(及びハッシュ値C)に対応付けられているフラグ0を、ストレージ装置30への書き戻し処理が必要であることを示すフラグ1に書き換える。
次に、クライアント装置側中継装置110は、生成されたハッシュ値Cがキャッシュデータテーブル113に保持されているか否かを判定する。この場合、キャッシュデータテーブル113にはハッシュ値Cは保持されていないため、クライアント装置側中継装置110は、ライト要求に含まれるデータcをキャッシュ格納部112にキャッシュし、生成されたハッシュ値Dを当該データcに対応付けてキャッシュデータテーブル113に登録する。このとき、クライアント装置側中継装置110は、キャッシュデータテーブル113においてデータc(及びハッシュ値C)に対応付けられているフラグ0を、ストレージ装置30への書き戻し処理が必要であること示すフラグ1に書き換える。
上記したような処理が実行されると、クライアント装置側中継装置110は、書き込み完了応答(図19においてはOKと表記)をクライアント装置20に送信する(ステップS154)。
上記したように例えばクライアント装置20からストレージ装置30に対してライト要求が送信された場合には、当該ライト要求はストレージ装置30(ストレージ装置側中継装置120)に伝えられることなく書き込み完了応答がクライアント装置20に送信される。また、書き込みデータがストレージ装置30に書き込まれる(書き戻しされる)まで、当該書き込みデータは、例えばキャッシュデータテーブル113に保持されているフラグに基づいて、キャッシュからの吐き出しが発生しないように管理される。つまり、キャッシュデータテーブル113においてフラグ1に対応付けられているデータは、ストレージ装置30への書き戻し処理が必要である(つまり、書き戻し処理が完了していない)ため、キャッシュからの吐き出しは行われない。
次に、図20のフローチャートを参照して、本変形例に係るデータ転送システム10のストレージ装置30への書き戻し処理の処理手順について説明する。
なお、ストレージ装置30への書き戻し処理は、例えばユーザによって指定された任意のタイミングで実行される。この任意のタイミングとは、例えばユーザによって指定された一定時間毎または夜中のような回線が空いている時間帯等を含む。
ここで、例えばユーザによって指定された任意のタイミングにより、ライトバックキャッシュからの書き戻し処理が実行されたものとする。
この場合、クライアント装置側中継装置110のキャッシュ管理部115は、キャッシュインデックステーブル114を参照して、ストレージ装置30への書き戻し処理が必要であることを示すフラグ(フラグ「要」)に対応付けられているインデックス及びハッシュ値をストレージ装置側中継装置120に対して送信する(ステップS61)。キャッシュ管理部115は、中継部111を介して、インデックス及びハッシュ値を送信する。ここで、送信されたインデックス及びハッシュ値を対象インデックス及び対象ハッシュ値と称する。
次に、ストレージ装置側中継装置120の中継部121は、クライアント装置側中継装置110によって送信された対象インデックス及び対象ハッシュ値を入力する。
キャッシュ管理部125は、中継部121によって入力された対象ハッシュ値がキャッシュデータテーブル123に保持されているか否かを判定する(ステップS62)。
対象ハッシュ値がキャッシュデータテーブル123に保持されていないと判定された場合(ステップS62のNO)、キャッシュ管理部125は、その旨をクライアント装置側中継装置110に通知する(ステップS63)。
クライアント装置側中継装置110のキャッシュ管理部115は、ストレージ装置側中継装置120からの通知を受け取ると、キャッシュデータテーブル113において対象ハッシュ値に対応付けられているデータをキャッシュ格納部112から取得する。キャッシュ管理部115は、取得されたデータを中継部111を介してストレージ装置側中継装置120に送信する(ステップS64)。
ストレージ装置側中継装置120の中継部121は、クライアント装置側中継装置110によって送信されたデータを入力する。
中継部121は、入力されたデータを含むライト要求をストレージ装置30に送信することによって、当該データをストレージ装置30に書き込む(ステップS65)。
キャッシュ管理部125は、中継部121によって入力されたデータ(つまり、ストレージ装置30に書き込まれたデータ)をキャッシュ格納部122にキャッシュする。
次に、キャッシュ管理部125は、対象ハッシュ値をキャッシュデータステーブル123及びキャッシュインデックステーブル124に登録する(ステップS66)。この場合、キャッシュ管理部125は、対象ハッシュ値を対象インデックスに対応付けてキャッシュインデックステーブル124に登録する。また、キャッシュ管理部125は、対象ハッシュ値を、キャッシュ格納部122にキャッシュされたデータに対応付けてキャッシュデータテーブル123に登録する。
上記したステップS66の処理が実行されると、ストレージ装置側中継装置120からクライアント装置側中継装置110に対して、ストレージ装置30への書き戻し処理が完了した旨が通知される。
クライアント装置側中継装置110のキャッシュ管理部115は、キャッシュデータテーブル113及びキャッシュインデックステーブル114において対象ハッシュ値に対応付けられているフラグ(フラグ「要」)を、ストレージ装置30への書き戻し処理が必要でない(つまり、書き戻し処理が完了している)ことを示すフラグ(フラグ「不要」)に書き換える(ステップS67)。
一方、ステップS62において対象ハッシュ値がキャッシュデータテーブル123に保持されていると判定された場合、キャッシュデータテーブル123において当該対象ハッシュ値に対応付けられているデータがキャッシュ格納部122から取得され、ステップS65の処理が実行される。
なお、ステップS62において対象ハッシュ値がキャッシュデータテーブル123に保持されていると判定された場合には、当該対象ハッシュ値は既にキャッシュデータテーブル123に保持されているため、キャッシュ格納部122に対するキャッシュ登録処理及びキャッシュデータテーブル123に対してハッシュ値の登録処理は実行されない。
また、上記説明したストレージ装置30への書き戻し処理は、例えばキャッシュインデックステーブル113に保持されている全ての書き戻し処理が必要であることを示すフラグに対応付けられている対象インデックス(及び対象ハッシュ値)に対して実行される。また、キャッシュインデックステーブル113に対象インデックスが複数存在する場合には、例えば当該対象インデックス及び対象ハッシュ値を一括してストレージ装置側中継装置120に送信することで、一括して処理が実行される構成であってもよい。
次に、図21を参照して、上記したストレージ装置30への書き戻し処理の処理手順について具体的に説明する。
図21に示すストレージ装置30内には1つのディスクボリュームが備えられているものとする。このディスクボリュームは、論理ブロックアドレス1〜4から構成されている。図21に示すように、論理ブロックアドレス1にはデータaが格納されている。また、論理ブロックアドレス2にはデータb、論理ブロックアドレス3にはデータc、論理ブロックアドレス4にはデータaが格納されている。つまり、論理ブロックアドレス1及び論理ブロックアドレス4には同一のデータaが格納されている。
クライアント装置側中継装置110に含まれるキャッシュデータテーブル113には、データaに対応付けてハッシュ値A及びフラグ0が保持されている。また、キャッシュデータテーブル113には、データdに対応付けてハッシュ値D及びフラグ1、データcに対応付けてハッシュ値C及びフラグ1が保持されている。
なお、図21においては、上記した図19と同様に、ストレージ装置30への書き戻し処理が必要なことを示すフラグをフラグ1、必要でないことを示すフラグをフラグ0と表記する。
クライアント装置側中継装置110に含まれるキャッシュインデックステーブル114には、論理ブロックアドレス1に対応付けてハッシュ値A及びフラグ0が保持されている。また、キャッシュインデックステーブル114には、論理ブロックアドレス2に対応付けてハッシュ値C及びフラグ1、論理ブロックアドレス3に対応付けてハッシュ値D及びフラグ1が保持されている。なお、論理ブロックアドレス4に対応付けてハッシュ値は保持されていない。また、キャッシュインデックステーブル114には、ハッシュ値が保持されていない論理ブロックアドレス4対応付けてフラグ0が保持されている。
一方、ストレージ装置側中継装置120に含まれるキャッシュデータテーブル123には、データaに対応付けてハッシュ値Aが保持されている。また、キャッシュデータテーブル123には、データbに対応付けてハッシュ値B、データcに対応付けてハッシュ値Cが保持されている。
また、ストレージ装置側中継装置120に含まれるキャッシュインデックステーブル124には、論理ブロックアドレス1に対応付けてハッシュ値Aが保持されている。また、キャッシュインデックステーブル124には、論理ブロックアドレス2に対応付けてハッシュ値B、論理ブロックアドレス3に対応付けてハッシュ値Cが保持されている。なお、論理ブロックアドレス4に対応付けてハッシュ値は保持されていない。
ここで、例えばユーザによって指定された任意のタイミングによりストレージ装置30への書き戻し処理が実行された場合を想定する。
この場合、まず、クライアント装置側中継装置110は、ストレージ装置30への書き戻し処理が必要であることを示すフラグ1に対応付けられている論理ブロックアドレス2及びハッシュ値Cをストレージ装置側中継装置120に対して送信する(ステップS161)。この論理ブロックアドレス2及びハッシュ値Cは、図21においてはWriteEx(2,C)と表記されている。
ストレージ装置側中継装置120は、クライアント装置側中継装置110によって送信されたハッシュ値Cがキャッシュデータテーブル123に保持されているか否かを判定する。この場合、キャッシュデータテーブル123には、ハッシュ値Cが保持されている。このため、ストレージ装置側中継装置120は、キャッシュデータテーブル123においてハッシュ値Cに対応付けられているデータcをキャッシュ格納部122から取得する。
ストレージ装置側中継装置120は、取得されたデータc及び論理ブロックアドレス2(対象インデックス)を含むライト要求をストレージ装置30に対して送信する(ステップS162)。このライト要求は、図21においてはWrite(2,c)と表記されている。これにより、データcが、ストレージ装置30の論理ブロックアドレス2に書き込まれる。
ストレージ装置30は、データcが書き込まれると、ストレージ装置側中継装置120によって送信されたライト要求の応答として書き込みが完了した旨を通知するための書き込み完了応答(図21においてはOKと表記)をストレージ装置側中継装置120に対して送信する(ステップS164)。
次に、ストレージ装置側中継装置120は、ハッシュ値Cを論理ブロックアドレス2に対応付けてキャッシュインデックステーブル124に登録する。
キャッシュインデックステーブル124にハッシュ値Cが登録されると、ストレージ装置側中継装置120は、フラグ1に対応付けられていた論理ブロックアドレス2の書き戻し処理が完了した旨(図21においてはOKと表記)をクライアント装置側中継装置110に対して通知する(ステップS165)。
クライアント装置側中継装置110は、書き戻し処理が完了した旨の通知を受けると、キャッシュインデックステーブル114において論理ブロックアドレス2(対象インデックス)に対応付けられているフラグ1を書き戻し処理が完了した(書き戻し処理が必要でない)ことを示すフラグ0に書き換える。また、キャッシュインデックステーブル114において、フラグ1に対応付けられているハッシュ値Cが存在しない場合には、キャッシュデータテーブル113において当該ハッシュ値Cに対応付けられているフラグ1をフラグ0に書き換える。
次に、クライアント装置側中継装置110は、フラグ1に対応付けられている論理ブロックアドレス3及びハッシュ値Dをストレージ装置側中継装置120に対して送信する(ステップS166)。この論理ブロックアドレス3及びハッシュ値Dは、図21においてはWriteEx(3,D)と表記されている。
ストレージ装置側中継装置120は、クライアント装置側中継装置110によって送信されたハッシュ値Dがキャッシュデータテーブル123に保持されているか否かを判定する。この場合、キャッシュデータテーブル123にはハッシュ値Dは保持されていないため、ストレージ装置側中継装置120は、その旨(図21においてはnot foundと表記)をクライアント装置側中継装置110に対して通知する(ステップS167)。
クライアント装置側中継装置110は、ストレージ装置側中継装置120からの通知を受けると、当該クライアント装置側中継装置110に含まれるキャッシュデータテーブル113においてハッシュ値Dに対応付けられているデータdをキャッシュ格納部112から取得する。クライアント装置側中継装置110は、取得されたデータdをストレージ装置側中継装置120に対して送信する(ステップS168)。
ストレージ装置側中継装置120は、クライアント装置側中継装置110によって送信されたデータd及び論理ブロックアドレス3を含むライト要求をストレージ装置30に対して送信する(ステップS169)。このライト要求は、図21においてはWrite(3,d)と表記されている。これにより、データdが、ストレージ装置30の論理ブロックアドレス3に書き込まれる。
ストレージ装置30は、データdが書き込まれると、ストレージ装置側中継装置120によって送信されたライト要求の応答として書き込みが完了した旨を通知するための書き込み完了応答(図21においてはOKと表記)をストレージ装置側中継装置120に対して送信する(ステップS170)。
次に、ストレージ装置側中継装置120は、データdをキャッシュ格納部122にキャッシュする。
ストレージ装置側中継装置120は、ハッシュ値Dをデータdに対応付けてキャッシュデータテーブル123に登録する。また、ストレージ装置側中継装置120は、ハッシュ値Dを論理ブロックアドレス3に対応付けてキャッシュインデックステーブル124に登録する。
ストレージ装置中継装置120は、フラグ1に対応付けられていた論理ブロックアドレス3の書き戻し処理が完了した旨(図21においてはOKと表記)をクライアント装置側中継装置110に対して通知する(ステップS171)。
クライアント装置側中継装置110は、書き戻し処理が完了した旨の通知を受けると、キャッシュインデックステーブル114において論理ブロックアドレス3(対象インデックス)に対応付けられているフラグ1をフラグ0に書き換える。また、キャッシュインデックステーブル114において、フラグ1に対応付けられているハッシュ値Cが存在しない場合には、キャッシュデータテーブル113において当該ハッシュ値Cに対応付けられているフラグ1をフラグ0に書き換える。
これにより、図21に示す例では、クライアント装置側中継装置110に含まれるキャッシュインデックステーブル114に保持されていたフラグ1(に対応付けられている論理ブロックアドレス)については全て処理が実行されたため、書き戻し処理は終了される。
上記したように本変形例においては、例えばクライアント装置側中継装置110内においてライトバックキャッシュを構成した場合に、書き戻しが必要であることを示すフラグ(フラグ1)に対応付けられているハッシュ値がストレージ装置側中継装置120に含まれるキャッシュデータテーブル123に保持されている場合には、クライアント装置側中継装置110及びストレージ装置側中継装置120間においてデータ自体を転送することなくハッシュ値のみを転送することで書き戻し処理を完了することができる。本変形例においては、このように転送データ量を小さくすることでクライアント装置側中継装置110及びストレージ装置側中継装置120間において転送速度を向上させることが可能となる。
なお、本変形例において、ライトバックキャッシュへの書き込み処理及びストレージ装置30への書き戻し処理が同時に実行される構成とすれば、ライトバックキャッシュではなくライトスルーキャッシュでの処理とすることができる。この場合であっても、上記したライトバックキャッシュと同様に、転送データ量を削減することが可能となる。したがって、クライアント装置側中継装置110及びストレージ装置側中継装置120間において転送速度を向上させることが可能となる。
また、本変形例においてはクライアント装置側中継装置110内においてライトバックキャッシュを構成するものとして説明したが、例えばストレージ装置側中継装置120内においてライトバックキャッシュを構成してもよい。
また、本願発明は、上記実施形態またはその各変形例そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態またはその各変形例に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、実施形態またはその各変形例に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態またはその各変形例に亘る構成要素を適宜組合せてもよい。
10…データ転送システム、20…クライアント装置、30…ストレージ装置、110…中継装置(第1のデータ転送装置)、111…中継部、112…キャッシュ格納部(第1のキャッシュ格納手段)、113…キャッシュデータテーブル(第1のキャッシュデータテーブル)、114…キャッシュインデックステーブル(第1のキャッシュインデックステーブル)、115…キャッシュ管理部、116…識別子生成部、120…中継装置(第2のデータ転送装置)、121…中継部、122…キャッシュ格納部(第2のキャッシュ格納手段)、123…キャッシュデータテーブル(第2のキャッシュデータテーブル)、124…キャッシュインデックステーブル(第2のキャッシュインデックステーブル)、125…キャッシュ管理部、126…識別子生成部、200…コンピュータ、300…外部記憶装置。