以下において、本発明の実施形態における添付の図面を参照して、本発明の実施形態における技術的解決策を明確に説明する。明らかに、説明される実施形態は、本発明の実施形態のうちのいくつかにすぎず、全てではない。本発明の実施形態に基づいて得られる全ての他の実施形態が本発明の保護範囲内にあるものとする。
図2に示すストレージアレイ等の、本発明の実施形態において提供されるストレージアレイは、入出力マネージャAと、コントローラAと、入出力マネージャBと、コントローラBと、スイッチングデバイスAと、スイッチングデバイスBと、キャッシュデバイスMとを含む。コントローラAは、CPU Aと、メモリAとを含み、CPU Aはバスを介してメモリAと通信し;コントローラBは、CPU Bと、メモリBとを含み、CPU Bはバスを介してメモリBと通信する。入出力マネージャAはスイッチングデバイスA及びスイッチングデバイスBに接続され、入出力マネージャBはスイッチングデバイスA及びスイッチングデバイスBに接続される。スイッチングデバイスAはスイッチングデバイスBに相互接続される。スイッチングデバイスA及びスイッチングデバイスBは共にキャッシュデバイスMに接続される。キャッシュデバイスMについては以下で詳細に説明する。コントローラAはスイッチングデバイスA及びスイッチングデバイスBに接続され、コントローラBはスイッチングデバイスA及びスイッチングデバイスBに接続される。上記の説明に基づいて、スイッチングデバイスA及びスイッチングデバイスBの周囲に、入出力マネージャA、入出力マネージャB、コントローラA及びコントローラBによって、完全に相互接続されたアーキテクチャが形成される。図2に示すストレージアレイにおいて、スイッチングデバイスAは全てのハードディスクに接続され、スイッチングデバイスBも全てのハードディスクに接続される。コントローラA及びコントローラBは共に、図2に示す全てのハードディスクと通信する。特に、コントローラAは、スイッチングデバイスAを介して全てのハードディスクと通信し、コントローラBは、スイッチングデバイスBを介して全てのハードディスクと通信する。コントローラAは、ハードディスクを仮想化して、ホストAに利用可能な論理ユニットLU Aを形成するように構成される。LU AはホストAに搭載され、ホストAはコントローラAを介してLU Aに対しデータアクセスオペレーションを実行する。ここで、LU AはコントローラAにホーミングされ、すなわち、コントローラAはLU Aのホームコントローラである。同様に、コントローラBは、ハードディスクを仮想化して、ホストBに利用可能な論理ユニットLU Bを形成するように構成される。LU BはホストBに搭載され、ホストBはコントローラBを介してLU Bに対しデータアクセスオペレーションを実行する。ここで、LU BはコントローラBにホーミングされ、すなわち、コントローラBはLU Bのホームコントローラである。ここでのホストは、物理ホスト(又は物理サーバと呼ばれる)であっても、仮想ホスト(又は仮想サーバと呼ばれる)であってもよい。論理ユニットLUは一般的に、業界における論理ユニット番号(Logical Unit Number,LUN)と呼ばれる。LUNをホストに割り当てることは、実際には、LUの識別子をホストに割り当てることを指し、それによってLUがホストに搭載される。したがって、LU及びLUNはここでは同じものを意味する。図2に示すストレージアレイにおいて、スイッチングデバイスA及びBは、PCIeスイッチングデバイス、不揮発性メモリエクスプレス伝送バス(Non−Volatile Memory express,NVMe)スイッチングデバイス、シリアル接続スモールコンピュータシステムインターフェース(Serial attached SCSI,SAS)スイッチングデバイス等であってもよく、これは本発明の実施形態によって制限されるものではない。スイッチングデバイスA及びBがPCIeスイッチングデバイスであるとき、PCIeスイッチングデバイスに接続されるハードディスクは、PCIeプロトコルインターフェースを有するハードディスクであり;スイッチングデバイスA及びBがNVMeスイッチングデバイスであるとき、NVMeスイッチングデバイスに接続されるハードディスクは、NVMeプロトコルインターフェースを有するハードディスクであり;スイッチングデバイスA及びBがSASスイッチングデバイスであるとき、SASスイッチングデバイスに接続されるハードディスクは、SASプロトコルインターフェースを有するハードディスクである。図2に示すハードディスクは、機械的ハードディスク、ソリッドステートディスク(Solid State Disk,SSD)、又は他の媒体のハードディスクであってもよい。図2に示すストレージアレイにおけるハードディスクに関して、異なるディスクのストレージ媒体は異なってもよく、それによってハイブリッドハードディスクストレージアレイが形成されるが、これは本発明の実施形態によって制限されるものではない。
キャッシュデバイスMは、特に、揮発性ストレージ媒体、又は相変化メモリ(Phase Change Memory,PCM)等の不揮発性ストレージ媒体によって形成されたストレージデバイスであっても、キャッシュデバイスとして用いるのに適した別の不揮発性ストレージ媒体であってもよく、これは本発明の実施形態によって制限されるものではない。キャッシュデバイスMはデータをキャッシュするように構成される。以下において、本発明の特定の実施形態を参照してキャッシュデバイスMについて記載する。本発明の実施形態において、スイッチングデバイスAがPCIeスイッチングデバイスであり、スイッチングデバイスBがPCIeスイッチングデバイスであり、ハードディスクがPCIeプロトコルインターフェースを有するSSDであることが例として用いられる。
図2に示すストレージアレイにおいて、入出力マネージャAは、ホストによって送信されるデータ書込み要求を受信する。一実施方式において、コントローラAは入出力マネージャAのホームコントローラである。したがって、入出力マネージャAはホストによって送信されるデータオペレーション要求を受信する。入出力マネージャAの要求送信ポリシーが変更されない場合、要求はデータオペレーション要求に従ってデフォルトでコントローラAに送信され、このため、コントローラAは入出力マネージャAのホームコントローラと呼ばれる。本発明の一実施形態では、入出力マネージャAはホストによって送信されたデータ書込み要求を受信し、このデータ書込み要求をPCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してコントローラAに送信する。要求が転送される際に介する特定のPCIeスイッチングデバイスに関しては、予め設定した規則に従って判断されてもよい。PCIeスイッチングデバイスが選択されると、入出力マネージャAはその後、このPCIeスイッチングデバイスを介してコントローラAと通信する。当然ながら、入出力マネージャAはPCIeスイッチングデバイスをランダムに選択してコントローラAと通信してもよく、これは本発明の実施形態によって制限されるものではない。本発明の実施形態は、入出力マネージャAがPCIeスイッチングデバイスAを選択してコントローラAと通信する例を用いる。
入出力マネージャAによって受信されるデータ書込み要求は、書き込まれるデータのアドレスを搬送する。書き込まれるデータのアドレスは、書き込まれるデータのターゲットLUの識別子と、書き込まれるデータの論理ブロックアドレス(Logical Block Address,LBA)と、書き込まれるデータの長さとを含む。入出力マネージャAは、コントローラAにデータ書込み要求を送信する。コントローラAはデータ書込み要求を受信し、書き込まれるデータのアドレスにおける書き込まれるデータのターゲットLUの識別子に従って、コントローラAがターゲットLUのホームコントローラであるか否かを判断する。
コントローラAがターゲットLUのホームコントローラであるとき、すなわち、ターゲットLUはハードディスクを仮想化することによってコントローラAにより生成され、ホストに提供される。コントローラAは、書き込まれるデータをキャッシュするのに用いられるキャッシュデバイスを判断する。このキャッシュデバイスは、本発明のこの実施形態ではキャッシュデバイスMである。実施方式は以下のとおりである:コントローラAは、データ書込み要求に従って、書き込まれるデータにキャッシュアドレスを割り当てるようにキャッシュデバイスMに命令し、キャッシュデバイスMは書き込まれるデータの長さに従ってキャッシュアドレスを割り当てる。コントローラAは、書き込まれるデータに対しキャッシュデバイスMによって割り当てられるキャッシュアドレスを取得する(これ以降、書き込まれるデータに対しキャッシュデバイスMによって割り当てられるキャッシュアドレスを、キャッシュアドレスMと呼び、一実施方式において、キャッシュアドレスは開始アドレス及び長さを含む)。コントローラAは、キャッシュデバイスMの識別子及びキャッシュアドレスMを、PCIeスイッチングデバイスAを介して入出力マネージャAに送信する。入出力マネージャAは、コントローラAによって送信されたキャッシュデバイスMの識別子及びキャッシュアドレスMを受信し、書き込まれるデータを、キャッシュデバイスMの識別子及びキャッシュアドレスMに従ってキャッシュアドレスMに書き込む(又は書き込まれるデータをキャッシュアドレスMに直接書き込んでもよい)。コントローラAは、書き込まれるデータに対し割り当てられるキャッシュアドレスMのみを取得し、入出力マネージャAは、書き込まれるデータを、PCIeスイッチングデバイスAを介してキャッシュアドレスMに直接書き込む。これは、従来技術と比較して、コントローラAのCPU計算リソース及びコントローラAのメモリリソースを節約し、データ書込み効率を改善する。
コントローラAは、書き込まれるデータのアドレスと、キャッシュデバイスMの識別子と、キャッシュアドレスMとの間の対応関係を確立し、したがって、書き込まれるデータを読み出すとき、コントローラAは、書き込まれるデータのキャッシュアドレスMを入出力マネージャAに送信し、入出力マネージャAは、書き込まれるデータのキャッシュアドレスMから、書き込まれるデータを読み出してもよく(又は書き込まれるデータのキャッシュアドレスMから、書き込まれるデータを直接読み出してもよく)、それによって、コントローラAのCPU計算リソース及びコントローラAのメモリリソースを節約し、データ読出し効率を改善する。
条件が満たされた後、ストレージアレイがデータ重複排除を行わない場合、キャッシュデバイスMは書き込まれるデータをストレージアレイのターゲットSSDに記憶する。ターゲットSSDは、書き込まれるデータを記憶するためのSSDを指す。書き込まれるデータをターゲットSSDに書き込む特定のプロセスは以下であってもよい:コントローラAはキャッシュデバイスMの識別子及びキャッシュアドレスMを、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してターゲットSSDのコントローラに送信する。ターゲットSSDのコントローラは、キャッシュデバイスMの識別子及びキャッシュアドレスMに従って、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介して、キャッシュアドレスMから書き込まれるデータを直接読み出し、書き込まれるデータを記憶する。ターゲットSSDのコントローラは、ターゲットSSDにおける書き込まれるデータの記憶アドレスを、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してコントローラAに送信する。ターゲットSSDにおける書き込まれるデータの記憶アドレスは、ターゲットSSDのコントローラの識別子と、ターゲットSSDに書き込まれるデータを記憶するための論理記憶アドレスとを含む。コントローラAは、書き込まれるデータのアドレスと、ターゲットSSDに書き込まれるデータの記憶アドレスとの間の対応関係を確立する。
上記のプロセスは特に図3に示される。
ステップ301:ホストはデータ書込み要求を入出力マネージャAに送信する。
入出力マネージャAは、ストレージアレイ内の入出力受信管理デバイスであり、ホストによって送信されるデータオペレーション要求を受信し、データオペレーション要求をコントローラに転送する役割を果たす。本発明の一実施形態では、ホストは、書き込まれるデータのアドレスを搬送するデータ書込み要求を入出力マネージャAに送信する。例示的に、スモールコンピュータシステムインターフェース(Small Computer System Interface,SCSI)プロトコル、すなわちSCSIプロトコルデータ書込み要求が、データ書込み要求のために用いられてもよい。当然ながら、他のプロトコルが用いられてもよく、これは本発明の実施形態によって制限されるものではない。
ステップ302:データ書込み要求をコントローラAに送信する。
本発明のこの実施形態では、入出力マネージャAは通常、特定のコントローラと通信する。入出力マネージャAは、複数の方式で、例えばコントローラの負荷に従って、又は特定の経路選択アルゴリズムに従ってコントローラとの対応関係を確立してもよいが、これは本発明によって制限されるものではない。入出力マネージャAは、データ書込み要求を受信し、このデータ書込み要求を、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してコントローラAに送信する。本発明のこの実施形態において、入出力マネージャAがデータ書込み要求を受信し、データ書込み要求を、PCIeスイッチングデバイスAを介してコントローラAに送信することが例として用いられる。
ステップ303:コントローラAは書き込まれるデータのキャッシュアドレスを取得する。
コントローラAは、入出力マネージャAによって送信されるデータ書込み要求を受信し、書き込まれるデータをキャッシュするのに用いられるキャッシュデバイスを判断する。これは、本発明のこの実施形態では、キャッシュデバイスMである。一実施方式において、キャッシュデバイスMは、キャッシュアドレスのセグメントをコントローラAに割り当てる。キャッシュアドレスのセグメントにおいて、コントローラAは、書き込まれるデータの長さに従って、書き込まれるデータに対しキャッシュアドレスMを割り当てる。別の実施方式では、コントローラAは、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介して命令をキャッシュデバイスMに送信する。命令は、書き込まれるデータの長さを搬送し、キャッシュデバイスMに、書き込まれるデータに対しキャッシュアドレスを割り当てるように命令する。コントローラAは、キャッシュアドレスMを取得する。
ステップ304:キャッシュデバイスMの識別子及びキャッシュアドレスMを送信する。
コントローラAは、キャッシュアドレスMを取得し、キャッシュデバイスMの識別子及びキャッシュアドレスMを、PCIeスイッチングデバイスAを介して入出力マネージャAに送信する。キャッシュデバイスMの識別子はデバイスアドレスである。
ステップ305:ホストは書き込まれるデータを入出力マネージャAに送信する。
入出力マネージャAは、コントローラAによって送信されたキャッシュデバイスMの識別子及びキャッシュアドレスMを受信し、ホストによって送信された書き込まれるデータを受信する。
ステップ306:書き込まれるデータをキャッシュアドレスMに書き込む。
入出力マネージャAは、キャッシュデバイスMの識別子及びキャッシュアドレスMに従って、書き込まれるデータを、PCIeスイッチングデバイスAを介してキャッシュアドレスMに直接書き込む。入出力マネージャAは、PCIeスイッチングデバイスAを介して、キャッシュデバイスMによって送信される、書き込まれるデータの書込みに成功したことを示す応答を受信する。入出力マネージャAは、データ書込み要求が完了したことを示す応答をホストに送信し、書込み要求動作が完了したことをホストに通知する。
ステップ307:コントローラAに、書き込まれるデータがキャッシュアドレスMに書き込まれることを通知する。
入出力マネージャAは、書き込まれるデータをキャッシュアドレスMに書き込むことに成功し、コントローラAに、書き込まれるデータがキャッシュアドレスMに書き込まれることを通知する。
ステップ308:コントローラAは、書き込まれるデータのアドレスと、キャッシュデバイスMと、キャッシュアドレスMとの間の対応関係を確立する。
コントローラAは、入出力マネージャAによって送信される通知を受信し、書き込まれるデータのアドレスと、キャッシュデバイスMと、キャッシュアドレスMとの間の対応関係を確立する。
キャッシュデバイスMは、書き込まれるデータに対しキャッシュアドレスMを割り当て、それによって、書き込まれるデータのアドレスと、キャッシュアドレスMとの間の対応関係を確立する。キャッシュデバイスMは、コントローラAによって送信されたキャッシュアドレス割当て命令から、書き込まれるデータのアドレスを取得してもよく、キャッシュアドレスMを割り当てた後、キャッシュデバイスMは、書き込まれるデータのアドレスと、キャッシュアドレスMとの間の対応関係を確立する。別の実施方式では、キャッシュデバイスMは、ターゲットLUの排他的キャッシュデバイスであり、ターゲットLUのデータをキャッシュするためにのみ用いられ、したがって、キャッシュデバイスMは、デフォルトで、ターゲットLUと、ターゲットLUにおけるLBAと、キャッシュアドレスとの間の対応関係を保存する。キャッシュデバイスMは、デフォルトで、ターゲットLUと、ターゲットLUにおけるLBAと、キャッシュデバイスMのキャッシュアドレスのセグメントとの間の対応関係を保存する。キャッシュアドレスのこのセグメントにおいて、キャッシュデバイスMは、書き込まれるデータに対しキャッシュアドレスMを割り当てる。
ストレージアレイの信頼性を改善するために、また、書き込まれるデータの複数のコピーをキャッシュするために、図1に示す従来技術において、入出力マネージャAは書き込まれるデータを送信し、CPU Aは、書き込まれるデータをメモリAに書き込み、CPU AはメモリAから書き込まれるデータを読み出し、書き込まれるデータを、PCIeスイッチAを介してPCIeスイッチBに送信する。PCIeスイッチBは、書き込まれるデータをCPU Bに送信し、CPU Bは書き込まれるデータをメモリBに書き込む。本発明のこの実施形態では、キャッシュデバイスMにおける書き込まれるデータの損失を防ぐために、ストレージアレイは書き込まれるデータを複数のキャッシュデバイスにキャッシュする。したがって、書き込まれるデータが2つのキャッシュデバイスにキャッシュされることが例として用いられる。図2に示すストレージアレイは、キャッシュデバイスNを更に含む。PCIeスイッチングデバイスA及びPCIeスイッチングデバイスBは共にキャッシュデバイスNに接続される。したがって、コントローラAは、入出力マネージャAによって送信されるデータ書込み要求を受信し、キャッシュデバイスMが書き込まれるデータをキャッシュする一次キャッシュデバイスとしての役割を果たすと判断し、キャッシュデバイスNが書き込まれるデータをキャッシュする二次キャッシュデバイスとしての役割を果たすと判断する。コントローラAは、書き込まれるデータに対し割り当てられ、キャッシュデバイスM及びキャッシュデバイスN内に位置するキャッシュアドレスを取得する。一実施方式において、コントローラAは、命令をキャッシュデバイスM及びキャッシュデバイスNのそれぞれに送信する。命令は、キャッシュデバイスM及びキャッシュデバイスNの双方に、書き込まれるデータに対しキャッシュアドレスを割り当てるように命令するのに用いられる。命令は、書き込まれるデータの長さを搬送する。キャッシュデバイスMによって、書き込まれるデータに対し割り当てられるキャッシュアドレスは、キャッシュアドレスMと呼ばれ、キャッシュデバイスNによって、書き込まれるデータに対し割り当てられるキャッシュアドレスは、キャッシュアドレスNと呼ばれる。コントローラAはキャッシュアドレスM及びキャッシュアドレスNを取得する。コントローラAは、キャッシュデバイスMの識別子及びキャッシュアドレスMを、PCIeスイッチングデバイスAを介して入出力マネージャAに送信し、キャッシュデバイスNの識別子及びキャッシュアドレスNを、PCIeスイッチングデバイスAを介して入出力マネージャAに送信する。特定の実施態様では、コントローラAは、キャッシュデバイスMの識別子及びキャッシュアドレスM、並びにキャッシュデバイスNの識別子及びキャッシュアドレスNを、1つのメッセージを介して、又は2つのメッセージをそれぞれ介して入出力マネージャAに送信することができ、これはここでは制限されない。別の実施方式では、キャッシュデバイスMは、キャッシュアドレスの排他的セグメントをコントローラAに対し割り当てる。この排他的セグメントは、ホームコントローラAのLUのデータをキャッシュするためにのみ用いられる。キャッシュデバイスMのキャッシュアドレスのこのセグメントにおいて、コントローラAは、書き込まれるデータに対しキャッシュアドレスMを直接割り当てる。キャッシュデバイスNは、キャッシュアドレスの排他的セグメントをコントローラAに対し割り当て、キャッシュデバイスNのキャッシュアドレスのこのセグメントにおいて、コントローラAは、書き込まれるデータに対しキャッシュアドレスNを直接割り当てる。
入出力マネージャAは、キャッシュデバイスMの識別子及びキャッシュアドレスM、並びにキャッシュデバイスNの識別子及びキャッシュアドレスNを受信する。入出力マネージャAは、キャッシュデバイスMの識別子及びキャッシュアドレスMに従って、書き込まれるデータを、PCIeスイッチングデバイスAを介してキャッシュアドレスMに直接書き込み、入出力マネージャAは、キャッシュデバイスNの識別子及びキャッシュアドレスNに従って、書き込まれるデータを、PCIeスイッチングデバイスAを介してキャッシュアドレスNに直接書き込む。入出力マネージャAは、PCIeスイッチングデバイスAを介して、書き込まれるデータがキャッシュアドレスMに書き込まれることに成功したことを示す応答を受信し、コントローラAに、書き込まれるデータのアドレスと、キャッシュデバイスMの識別子と、キャッシュアドレスMとの間の対応関係を確立するように命令する。同様に、コントローラAは、書き込まれるデータのアドレスと、キャッシュデバイスNの識別子と、キャッシュアドレスNとの間の対応関係を確立する。
別の実施方式では、コントローラAは、キャッシュデバイスMの識別子及びキャッシュアドレスMを、PCIeスイッチングデバイスAを介して入出力マネージャAに送信する。入出力マネージャAは、キャッシュデバイスMの識別子及びキャッシュアドレスMを受信する。入出力マネージャAは、書き込まれるデータを、キャッシュデバイスMの識別子及びキャッシュアドレスMに従って、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してキャッシュアドレスMに直接書き込む。コントローラAは、データ書込み命令を、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してキャッシュデバイスMに送信する。データ書込み命令は、キャッシュデバイスNの識別子及びキャッシュアドレスNを搬送する。キャッシュデバイスMは書き込まれるデータをキャッシュし、キャッシュデバイスMは、書き込まれるデータを、データ書込み命令に従って、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してキャッシュアドレスNに直接書き込む。
コントローラAは、入出力マネージャAが、キャッシュデバイスM及びキャッシュデバイスNへの書き込まれるデータの書込みを実施するように、書き込まれるデータに対し割り当てられるキャッシュアドレスM及びキャッシュアドレスNを取得する必要があるのみであり、それによって、コントローラAのCPU計算リソース及びコントローラAのメモリリソースを節約し、データ書込み効率を改善する。
別の場合、入出力マネージャAはホストのデータ書込み要求を受信する。データ書込み要求は書き込まれるデータのアドレスを搬送する。入出力マネージャAは、PCIeスイッチングデバイスAによって転送することにより、データ書込み要求をコントローラAに送信する。コントローラAは、入出力マネージャAによって送信されたデータ書込み要求を受信し、データ書込み要求内に搬送されるターゲットLUの識別子に従って、コントローラAがターゲットLUのホームコントローラでないと判断する。特定の実施形態が図4に示される。
ステップ401:ホストがデータ書込み要求を入出力マネージャAに送信する。
ホストはデータ書込み要求を入出力マネージャAに送信する。データ書込み要求は書き込まれるデータのアドレスを搬送する。
ステップ402:データ書込み要求をコントローラAに送信する。
本発明のこの実施形態において、コントローラAは入出力マネージャAのホームコントローラである。入出力マネージャAはデータ書込み要求を受信し、データ書込み要求をPCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してコントローラAに送信する。本発明のこの実施形態において、入出力マネージャAがデータ書込み要求を受信し、データ書込み要求を、PCIeスイッチングデバイスAを介してコントローラAに送信することが例として用いられる。
ステップ403:コントローラAがターゲットLUのホームコントローラでないと判断する。
コントローラAは、入出力マネージャAによって送信されるデータ書込み要求を受信し、データ書込み要求において搬送される書き込まれるデータのターゲットLUの識別子に従って、コントローラAがターゲットLUのホームコントローラでないと判断する。コントローラAは、コントローラとLUとの間の対応関係を問い合わせ、コントローラBがターゲットLUのホームコントローラであると判断する。
ステップ404:データ書込み要求をコントローラBに送信する。
コントローラAは、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してデータ書込み要求をコントローラBに送信する。この実施形態では、PCIeスイッチングデバイスBがデータ書込み要求をコントローラBに転送することが例として用いられる。
ステップ405:書き込まれるデータのキャッシュアドレスを取得する。
コントローラBは、コントローラAによって送信されるデータ書込み要求を受信し、書き込まれるデータをキャッシュするのに用いられるキャッシュデバイスを判断する。本発明のこの実施形態では、これはキャッシュデバイスMである。特定の実施方式については、コントローラAがキャッシュデバイスMから書き込まれるデータのキャッシュアドレスを取得する方式を参照されたい。
ステップ406:キャッシュデバイスMの識別子及びキャッシュアドレスMをコントローラAに送信する。
コントローラBは、キャッシュアドレスMを取得し、キャッシュデバイスMの識別子及びキャッシュアドレスMを、PCIeスイッチングデバイスBを介してコントローラAに送信する。別の実施方式では、キャッシュデバイスMの識別子及びキャッシュアドレスMも、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してコントローラAに直接送信されてもよい。
ステップ407:キャッシュデバイスMの識別子及びキャッシュアドレスMを入出力マネージャAに送信する。
コントローラAは、コントローラBによって送信されたキャッシュデバイスMの識別子及びキャッシュアドレスMを受信し、書き込まれるデータのキャッシュアドレスMを、PCIeスイッチングデバイスを介して送信する。
ステップ408:ホストは書き込まれるデータを入出力マネージャAに送信する。
入出力マネージャAはキャッシュデバイスMの識別子及びキャッシュアドレスMを受信し、ホストによって送信されたデータ書込み要求に応答する。ホストは、書き込まれるデータを入出力マネージャAに送信する。
ステップ409:書き込まれるデータをキャッシュアドレスMに書き込む。
入出力マネージャAは、ホストによって送信された書き込まれるデータを受信し、キャッシュデバイスMの識別子及びキャッシュアドレスMに従って、書き込まれるデータを、PCIeスイッチングデバイスAを介してキャッシュアドレスMに直接書き込む。入出力マネージャAは、PCIeスイッチングデバイスAを介して、キャッシュデバイスMによって送信された、書き込まれるデータの書込みに成功したことを示す応答を受信する。入出力マネージャAは、データ書込み要求が完了したことを示す応答をホストに送信し、書込み要求動作が完了したことをホストに通知する。
ステップ410:コントローラBに、書き込まれるデータがキャッシュアドレスMに書き込まれることを通知する。
入出力マネージャAは、書き込まれるデータをキャッシュアドレスMに書き込むことに成功し、コントローラBに、書き込まれるデータがキャッシュアドレスMに書き込まれることを通知する。これは特に、入出力マネージャAが通知を、PCIeスイッチングデバイスAを介してコントローラAに転送すること、及びコントローラAが、通知を、PCIeスイッチングデバイスBを介してコントローラBに転送すること;又は、入出力マネージャAが、通知を、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してコントローラBに直接送信することを含む。
ステップ411:コントローラBは、書き込まれるデータのアドレスと、キャッシュデバイスMと、キャッシュアドレスMとの間の対応関係を確立する。
コントローラBは、入出力マネージャAによって送信される通知を受信し、書き込まれるデータのアドレスと、キャッシュデバイスMと、キャッシュアドレスMとの間の対応関係を確立する。
キャッシュデバイスMが、書き込まれるデータのアドレスとキャッシュアドレスMとの間の対応関係をどのように確立するかについては、上記の実施形態における説明を参照し、ここでは詳細を繰り返し説明することはしない。
キャッシュデバイスNは、書き込まれるデータに対しキャッシュアドレスNを割り当て、それによって、書き込まれるデータのアドレスと、キャッシュアドレスNとの間の対応関係を確立する。キャッシュデバイスNは、コントローラAによって送信されたキャッシュアドレス割当て命令から、書き込まれるデータのアドレスを取得してもよく、キャッシュアドレスNを割り当てた後、キャッシュデバイスNは、書き込まれるデータのアドレスと、キャッシュアドレスNとの間の対応関係を確立する。
キャッシュデバイスMにキャッシュされる書き込まれるデータの損失を防ぐために、コントローラAが書き込まれるデータのターゲットLUのホームコントローラでないシナリオにおいて、書き込まれるデータが、キャッシュとしての役割を果たす複数のキャッシュデバイスを必要とするとき、入出力マネージャAは、データ書込み要求をコントローラBに送信する。そのプロセスについては、上記の実施形態における説明を参照されたい。コントローラBによって、書き込まれるデータのキャッシュアドレスを取得するプロセスについては、コントローラAが書き込まれるデータのターゲットLUのホームコントローラであり、コントローラAが複数のキャッシュデバイスのキャッシュアドレスを取得するシナリオを参照されたい。他のステップについても、上記の実施形態における説明を参照し、ここでは詳細を繰り返し説明することはしない。
ホストがデータをストレージアレイに書き込んだ後、ホストは書き込まれたデータにアクセスし、すなわち、データ読出し要求を送信する。特定のプロセスが図5に示される。
ステップ501:データ読出し要求を送信する。
ホストが、データ読出し要求を入出力マネージャAに送信する。データ読出し要求は、読み出されるデータのアドレスを搬送する。読み出されるデータのアドレスは、読み出されるデータが位置する論理ユニットLUの識別子と、読み出されるデータのLBAと、読み出されるデータの長さとを含む。特に、ホストは、SCSIプロトコルを用いることによって、データ読出し要求を入出力マネージャAに送信してもよいが、これは本発明によって制限されるものではない。説明を容易にするために、ここで読み出されるデータは、上記で説明した書き込まれるデータである。
ステップ502:データ読出し要求をコントローラAに送信する。
入出力マネージャAは、ホストによって送信されたデータ読出し要求を受信し、データ読出し要求を、PCIeスイッチングデバイスAを介してコントローラAに送信する。
ステップ503:コントローラAは、キャッシュデバイスMの識別子及びキャッシュアドレスMを入出力マネージャAに送信する。
コントローラAが、読み出されるデータが位置するLUのホームコントローラであり、読み出されるデータがキャッシュデバイスM等のキャッシュデバイスにおいてキャッシュされるとき、データ読出し要求に従って、読み出されるデータのアドレスと、キャッシュデバイスの識別子と、キャッシュアドレスとの間の対応関係が問い合わせされ、読み出されるデータをキャッシュデバイスMにキャッシュするのに用いられるキャッシュアドレスMが判断される。読み出されるデータが依然としてキャッシュデバイスM内にキャッシュされているとき、キャッシュデバイスM内の読み出されるデータのキャッシュアドレスはキャッシュアドレスMである。コントローラAは、キャッシュデバイスMの識別子及びキャッシュアドレスMを、PCIeスイッチングデバイスAを介して入出力マネージャAに送信する。
ステップ504:キャッシュアドレスMから読み出されるデータを読み出す。
入出力マネージャAは、キャッシュデバイスMの識別子及びキャッシュアドレスMに従って、PCIeスイッチングデバイスAを介してキャッシュアドレスMから読み出されるデータを直接読み出す。
ステップ505:読み出されるデータを返す。
入出力マネージャAは、キャッシュアドレスMから読み出されるデータを読み出し、読み出されるデータをホストに返す。
入出力マネージャAが、データ読出し要求に従って、読み出されるデータのクエリ要求を、PCIeスイッチングデバイスAを介してコントローラAに送信し、コントローラAが、読み出されるデータが位置するLUのホームコントローラでないとき、コントローラAは、読み出されるデータが位置するLUとホームコントローラとの間の対応関係を問い合わせ、コントローラBが、読み出されるデータが位置するLUのホームコントローラであると判断する。コントローラAは、読み出されるデータのクエリ要求を、PCIeスイッチングデバイスBを介してコントローラBに送信する。上記の書き込まれるデータが依然として、ここで言及される読み出されるデータであることが例として用いられる。したがって、読み出されるデータのアドレスは、上記で記載した書き込まれるデータのアドレスである。読み出されるデータが依然としてキャッシュデバイスM内にキャッシュされているとき、キャッシュデバイスM内の読み出されるデータのキャッシュアドレスはキャッシュアドレスMである。コントローラBは、書き込まれるデータのアドレスと、キャッシュデバイスMの識別子と、キャッシュアドレスMとの間の対応関係を問い合わせ、読み出されるデータをキャッシュするキャッシュデバイスMの識別子及びキャッシュアドレスMを判断し、キャッシュデバイスMの識別子及びキャッシュアドレスMを、PCIeスイッチングデバイスBを介してコントローラAに送信する。コントローラAは、キャッシュデバイスMの識別子及びキャッシュアドレスMを、PCIeスイッチングデバイスAを介して入出力マネージャAに送信する。コントローラBも、キャッシュデバイスMの識別子及びキャッシュアドレスMを、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介して入出力マネージャAに直接送信してもよい。後続の読出し動作については、上記の実施形態における読出し動作を参照し、ここでは詳細を繰り返し説明することはしない。
上記の書き込まれるデータが依然としてここで言及される読み出されるデータであることが例として用いられる。したがって、読み出されるデータのアドレスは、上記で記載した書き込まれるデータのアドレスである。読み出されるデータが既にターゲットSSDに記憶されているとき、読み出されるデータが位置するLUのホームコントローラが、読み出されるデータのアドレス(書き込まれるデータのアドレス)と、ターゲットSSDにおける読み出されるデータの記憶アドレスとの間の対応関係を問い合わせ、ターゲットSSDにおける読み出されるデータの記憶アドレスを取得し、ターゲットSSDにおける読み出されるデータの記憶アドレスを、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介して入出力マネージャAに送信する。ターゲットSSDにおける読み出されるデータの記憶アドレスは、ターゲットSSDのコントローラの識別子と、ターゲットSSDにおける読み出されるデータの論理記憶アドレスとを含む。入出力マネージャAは、ターゲットSSDにおける読み出されるデータの記憶アドレスに従って、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介して、ターゲットSSDにおける読み出されるデータの論理記憶アドレスから読み出されるデータを直接読み出す。
上記の実施形態において、読み出されるデータがターゲットSSDにおいて部分的に保存され、上記で記載したように本発明のこの実施形態においてキャッシュデバイスMに部分的にキャッシュされているとき、入出力マネージャAは、キャッシュデバイスにおける読み出されるデータのキャッシュアドレスに従ってPCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してキャッシュアドレスからデータを直接読み出し;入出力マネージャAは、ターゲットSSDのコントローラの識別子及びターゲットSSD内の読み出されるデータの論理記憶アドレスに従ってPCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してターゲットSSD内の論理記憶アドレスからデータを直接読み出す。これについてはここでは詳細に説明しない。
複数のキャッシュデバイスが、読み出されるデータをキャッシュする動作を実行するとき、通常、読み出されるデータが位置するLUのホームコントローラが、入出力マネージャAに、読み出されるデータをキャッシュする一次キャッシュデバイスMの識別子及びキャッシュアドレスMを返す。他の手続き的動作については、上記の実施形態における読出し動作を参照し、ここでは詳細を繰り返し説明することはしない。
ストレージアレイにおいて、データ重複排除が行われる。これは、ストレージ空間を節約し、ストレージコストを低減することができる。本発明の実施形態による図2に示すストレージアレイにおいて、ホストはデータ書込み要求を入出力マネージャAに送信し、データ書込み要求は書き込まれるデータのアドレスを搬送する。入出力マネージャAは、データ書込み要求を、PCIeスイッチングデバイスAを介してコントローラAに送信する。コントローラAが書き込まれるデータのターゲットLUのホームコントローラであるとき、コントローラAはキャッシュデバイスMの識別子及びキャッシュアドレスMを入出力マネージャAに提供する。入出力マネージャAは、書き込まれるデータを、キャッシュデバイスMの識別子及びキャッシュアドレスMに従って、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してキャッシュアドレスMに直接書き込む。
キャッシュデバイスMにキャッシュされる書き込まれるデータがストレージアレイのSSDに記憶される前に、データ重複排除が行われる。これは、ストレージ空間を効果的に節約し、ストレージ空間の利用率を改善することができる。図2に示すストレージアレイを例として用いると、ストレージアレイSSDに記憶されるデータに関して、データがキャッシュデバイスMによってSSD内に記憶される前に、データ重複排除が実行される。データ重複排除技術は、予め設定された規則に従ってデータをデータブロックに分割し、各データブロックの固有値を計算することである。データブロックの固有値は通常、ハッシュ(Hash)アルゴリズムを用いることによって計算される。ハッシュ演算は、データブロックに対して行われ、ハッシュ値が得られ、このハッシュ値は固有値として用いられる。一般的なハッシュアルゴリズムは、MD5、SHA1、SHA−256、SHA−512等を含む。例えば、データブロックAの固有値がSSDに既に記憶されたデータブロックBの固有値と同じである場合、データブロックA及びデータブロックBは同一である。したがって、重複データブロックAはキャッシュデバイスMから削除され、SSDにデータブロックBを記憶するための論理記憶アドレスが、SSD内のデータブロックAの論理記憶アドレスとして用いられる。
特定の実施態様では、データブロックの固有値の比較がコントローラによって実施される。データ重複排除はストレージアレイにおいて行われ、各一意のデータブロックが固有値を有するので、多くの固有値が生成される。ストレージアレイ内のコントローラ間の均衡を実施するために、各コントローラは、ハッシュ分布アルゴリズム等のデータブロック固有値分布アルゴリズムに従って、いくつかのデータブロックの固有値を比較する役割を果たす。このようにして、各コントローラは、データブロック固有値分布アルゴリズムに従ってストレージアレイ内に記憶されたいくつかの一意のデータの固有値インデックスのみを維持する。いくつかの一意のデータの固有値インデックスは、固有値インデックスセットと呼ばれる。コントローラは、SSDに書き込まれることになるデータブロックの固有値のための固有値インデックスセットを問い合わせ、固有値が固有値インデックスセット内の固有値と同じであるか否かを判断する。例えば、コントローラAは、固有値分布アルゴリズムに従って固有値インデックスセットAを維持する必要があり、したがって、コントローラAが固有値インデックスセットA内の全ての固有値のホームコントローラであるか;又は固有値インデックスセットAからの固有値がデータブロックXの固有値と同じであるコントローラが、データブロックXの固有値のホームコントローラ及び固有値インデックスセットA内の全ての固有値のホームコントローラの双方である。
特に、固有値インデックスセットは、図6に示す固有値インデックスによって形成される。例えば、固有値1のインデックスは、固有値1と、データブロック記憶アドレス1と、基準カウントとを含む。データブロック記憶アドレス1は、SSD A内の一意のデータブロックCの記憶アドレス、又はキャッシュデバイス内のデータブロックCの記憶アドレスを表すのに用いられる。SSD A内のデータブロックCの記憶アドレスは、SSD Aのコントローラの識別子と、SSD A内に記憶されるデータブロックCの論理記憶アドレスとを含んでもよい。キャッシュデバイス内のデータブロックCの記憶アドレスは、キャッシュデバイスの識別子と、キャッシュアドレスとを含む。固有値1はデータブロックCの固有値を表す。基準カウントは、固有値1を有するデータブロックの量を表す。例えば、データブロックAがストレージアレイ内に初めて記憶されるとき、固有値1を有するデータブロックの量が1である場合、基準カウントは1である。同じ固有値1を有するデータブロックDがSSD内に再び記憶されるとき、データブロックDは、データ重複排除の原理に従ってSSD内に保存されないが、基準カウントは1だけ増加し、2に更新される。要約すると、固有値インデックス内のデータブロック記憶アドレスは、キャッシュデバイス内のデータブロックの記憶アドレスであるか、又はターゲットハードディスク内のデータブロックの記憶アドレスである。キャッシュデバイス内のデータブロックの記憶アドレスは、キャッシュデバイスの識別子と、キャッシュデバイスにおけるデータブロックのキャッシュアドレスとを含み;ターゲットハードディスクにおけるデータブロックの記憶アドレスは、ターゲットハードディスクのコントローラの識別子と、ターゲットハードディスク内のデータブロックを記憶するための論理記憶アドレスとを含む。図6に示す固有値インデックスは、例示的な実施態様にすぎず、固有値インデックスはマルチレベルインデックスであってもよい。インデックスは、データ重複排除のために用いることができる任意の形態のインデックスであってもよく、これは本発明のこの実施形態によって制限されるものではない。
図2に示すストレージアレイにおいて、コントローラAが、キャッシュデバイスM内にキャッシュされるデータブロックのターゲットLUのホームコントローラとしての役割を果たすことが例として用いられる。上記の実施形態を参照すると、データ書込み要求を受信した後、入出力マネージャAは、コントローラAからキャッシュデバイスMの識別子及びキャッシュアドレスMを取得する。入出力マネージャAは、書き込まれるデータを、キャッシュデバイスMの識別子及びキャッシュアドレスMに従って、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してキャッシュアドレスMに直接書き込む。コントローラAは、書き込まれるデータのアドレスと、キャッシュデバイスMの識別子と、キャッシュアドレスMとの間の対応関係を確立する。ホームコントローラAのLUにキャッシュされたデータがキャッシュデバイスMからSSDに書き込まれるとき、キャッシュアドレスMにおけるデータが例として用いられる。通常、データ重複排除が行われているとき、データブロックの固有値が計算される必要がある。データブロックの固有値を計算するために、データは、データブロックを取得するために、固有の規則に従ってまず分割される必要がある。データブロックへの分割のための2つの方法、すなわち、固定長のデータブロックにデータを分割すること、又は可変長のデータブロックにデータを分割することが存在してもよい。本発明のこの実施形態において、データが固定長のデータブロックに分割されることが例として用いられる。例えば、データは、4KBの大きさのデータブロックに分割される。例示的に、キャッシュアドレスMに書き込まれる、書き込まれるデータは、4KBの大きさのいくつかのデータブロックに分割される。コントローラAは、各データブロックのLUの識別子と、データブロックのLBAと、データブロックの長さとを記録する。データブロックのLUの識別子、データブロックのLBA、及びデータブロックの長さは、これ以降、データブロック記憶アドレスと呼ばれる。4KBの大きさのいくつかのデータブロック内のデータブロックXを例として用いて(ここで、データブロックXは重複排除されることになるデータブロック(data block to be deduplicated)と呼ばれ、短縮して、重複排除されるデータブロック(to−be−deduplicated data block)としても知られる)、コントローラAは、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してデータブロック固有値要求をキャッシュデバイスMに送信する。固有値要求は、データブロックXのアドレスを含む。キャッシュデバイスMは、データ重複排除を実行するために、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してデータブロックXの固有値をコントローラAに送信する。図7に示すように、特定のプロセスは以下を含む:
ステップ701:キャッシュデバイスMがデータブロックXの固有値を計算する。
コントローラAが、キャッシュデバイスMに、データブロックXの固有値を取得する命令を送信する。命令はデータブロックXのアドレスを搬送する。キャッシュデバイスMは、命令を受信し、コントローラAによって送信されたデータブロックXの固有値を取得する。この場合、キャッシュデバイスMは、データブロックXのアドレスと、キャッシュアドレスBとの間の対応関係を記憶し、データブロックXの固有値を得るために、命令内に搬送されているデータブロックXのアドレスに従ってデータブロックXを判断し、データブロックXの固有値を計算し、キャッシュアドレスXにデータブロックXの固有値をキャッシュする。
ステップ702:データブロックXの固有値をコントローラAに送信する。
キャッシュデバイスMは、データブロックXの固有値を取得し、データブロックXの固有値の応答メッセージを、データブロックXが位置するLUのホームコントローラAに送信する。データブロックXの固有値の応答メッセージは、データブロックXの固有値を搬送する。更に、データブロックXの固有値の応答メッセージは、データブロックXの固有値をキャッシュするキャッシュデバイスMの識別子と、キャッシュデバイスMにおけるデータブロックXの固有値のキャッシュアドレスXとを更に搬送する。
ステップ703:固有値分布アルゴリズムに従って、データブロックXの固有値のホームコントローラを判断する。
ステップ704:コントローラAはローカル固有値インデックスセットAを問い合わせる。
コントローラAがデータブロックXの固有値のホームコントローラであるとき、コントローラAはローカル固有値インデックスセットAを問い合わせ、固有値インデックスセットA内に、データブロックXの固有値と同じ固有値が存在するか否かを判断する。
データブロックXの固有値と同じ固有値が固有値インデックスセットA内に存在するとき、ステップ705a及び706aが実行される。図6に示すように、データブロックXの固有値は固有値1と同じ、すなわち、データブロックXはデータブロックAと同じである。
ステップ705a:コントローラAは、固有値1のインデックスにおける基準カウントを更新する。
固有値1のインデックスにおける基準カウントは1であり、すなわち、データブロックAのみがストレージアレイ内に存在する。データブロックXの固有値は固有値1と同じであることがわかり、したがって、基準カウントが2に更新される。
ステップ706a:コントローラAは、キャッシュデバイスMに、データブロックXを削除するように命令する。
コントローラAは、キャッシュデバイスMに、データブロックXを削除するように命令する。コントローラAは、データブロックXのアドレスと、データブロックXの固有値との間の対応関係を確立するか、又はコントローラAは、データブロックXのアドレスと、データブロックXの固有値と、データブロックAの記憶アドレスとの間の対応関係を確立する。
ステップ704において、データブロックXが重複データブロックであると判断される。したがって、データブロックXはSSD内に保存される必要がなく、キャッシュデバイスMはデータブロックXを削除するように命令される。
固有値インデックスセットA内にデータブロックXの固有値と同じ固有値が存在しないとき、ステップ705b、706b、707、708、709及び710が実行される。
ステップ705b:キャッシュデバイスM内にキャッシュされるデータブロックXのキャッシュアドレスBを取得する。
コントローラAは、キャッシュデバイスMにおけるデータブロックXの固有値のキャッシュアドレスXに従って、キャッシュデバイスMからPCIeスイッチングデバイスAを介してデータブロックXのキャッシュアドレスBを取得する。
ステップ706b:キャッシュデバイスMの識別子及びキャッシュアドレスBをターゲットSSDのコントローラに送信する。
コントローラAは、キャッシュデバイスMの識別子とキャッシュアドレスBを取得し、キャッシュデバイスMの識別子及びキャッシュアドレスBを、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してターゲットSSDのコントローラに送信する。
ステップ707:ターゲットSSDのコントローラは、キャッシュアドレスBからデータブロックXを読み出す。
ターゲットSSDのコントローラは、キャッシュデバイスMの識別子及びキャッシュアドレスBを受信し、キャッシュデバイスMの識別子及びキャッシュアドレスBに従って、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介して、キャッシュアドレスBからデータブロックXを直接読み出す。
ステップ708:ターゲットSSDのコントローラは、ターゲットSSDにおけるデータブロックXの記憶アドレスをコントローラAに送信する。
ターゲットSSDのコントローラは、キャッシュアドレスBからデータブロックXを読み出し、データブロックXをターゲットSSD内に記憶する。ターゲットSSDのコントローラは、ターゲットSSDにおけるデータブロックXの記憶アドレスを、PCIeスイッチングデバイスAを介してコントローラAに送信する。ターゲットSSD内のデータブロックXの記憶アドレスは、ターゲットSSDのコントローラの識別子と、ターゲットSSDにおけるデータブロックXを記憶するための論理記憶アドレスとを含む。
ステップ709:コントローラAは、データブロックXの固有値インデックスを確立する。
コントローラAは、ターゲットSSDにおけるデータブロックXの記憶アドレスを受信し、データブロックXの固有値インデックスを確立し、基準カウントを1にセットする。コントローラAは、データブロックXのアドレスと、データブロックXの固有値と、ターゲットSSDにおけるデータブロックXの記憶アドレスとの間の対応関係を確立する。コントローラAもデータブロックXの固有値のキャッシュアドレスXを記録する必要がある。データブロックXの固有値がSSD内に記憶されるとき、コントローラAは、ターゲットSSDにおけるデータブロックXの固有値の記憶アドレスも記録する必要がある。
別の事例では、コントローラAはデータブロックXの固有値のホームコントローラではないが、単に、データブロックXが位置するLUのホームコントローラである。本発明のこの実施形態では、コントローラBがデータブロックXの固有値のホームコントローラであることが例として用いられ、コントローラAは、データブロックXの固有値をPCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してコントローラBに送信する。コントローラBは、コントローラAによって送信されるデータブロックXの固有値を受信し、コントローラBの固有値インデックスセットBを問い合わせる。コントローラBが、固有値インデックスセットA内にデータブロックXの固有値と同じ固有値が存在すること、例えば、データブロックRの固有値がデータブロックXの固有値と同じであることを見つけると、コントローラBは、キャッシュデバイスMにデータブロックXを削除するように命令する。これは特に、コントローラBが、削除命令を、PCIeスイッチングデバイスBを介してコントローラAに送信することを含む。コントローラAは、削除命令を、PCIeスイッチングデバイスAを介してキャッシュデバイスMに送信し、キャッシュデバイスMはデータブロックXを削除する。コントローラBは、データブロックXの固有値と同じ固有値のインデックスの基準カウントを更新し、すなわち、基準カウントを1だけ増加させる。データブロックRが既にSSDに記憶されているとき、データブロックRのインデックスにおけるデータブロックRの記憶アドレスは、データブロックRを記憶するSSDのコントローラの識別子、及びデータブロックRをSSDに記憶するための論理記憶アドレスを含む。データブロックRがキャッシュデバイス内にあるとき、データブロックRのインデックスにおけるデータブロックRの記憶アドレスは、キャッシュデバイスの識別子及びキャッシュアドレスを含む。コントローラAは、データブロックXのアドレスと、データブロックXの固有値と、データブロックXの固有値のホームコントローラBのアドレスとの間の対応関係を確立し、したがって、コントローラAは、各データブロックのアドレスと、データブロックの固有値と、データブロックの記憶アドレスとの間の対応関係を必要とせず、コントローラAによって記憶されるデータ量が効率的に低減される。代替的に、コントローラAは、データブロックXのアドレスと、データブロックXの固有値と、データブロックRの記憶アドレスとの間の対応関係を確立する。その後データブロックXを読み出すとき、コントローラAは、データブロックXのアドレスと、データブロックXの固有値と、データブロックRの記憶アドレスとの間の対応関係を問い合わせることによって、データブロックRの記憶アドレスを直接判断することができ、入出力マネージャAは、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介して、データブロックRの記憶アドレスからデータブロックXを直接読み出し、それによってデータ読出し効率を改善する。
コントローラAが、単に、データブロックXが位置するLUのホームコントローラであるが、データブロックXの固有値のホームコントローラではないとき、コントローラBは、データブロックXの固有値と同じ固有値が固有値インデックスセットB内に存在しないことを見つけ、コントローラBは、PCIeスイッチングデバイスBを介してコントローラAに要求を送信することによって、キャッシュデバイスMにおけるデータブロックXのキャッシュアドレスBを取得する。コントローラAは、PCIeスイッチングデバイスAを介してキャッシュデバイスMに要求を送信する。キャッシュデバイスMは、キャッシュデバイスMの識別子及びキャッシュアドレスBをコントローラBに送信する。コントローラBは、キャッシュデバイスMの識別子及びキャッシュアドレスBを、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介して(ここで、PCIeスイッチングデバイスAが例として用いられる)ターゲットSSDのコントローラに送信する。ターゲットSSDのコントローラは、キャッシュデバイスMの識別子及びキャッシュアドレスBに従って、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介して、キャッシュアドレスBからデータブロックXを直接読み出し、データブロックXをターゲットSSDに記憶する。ターゲットSSDのコントローラは、ターゲットSSD内のデータブロックXの記憶アドレスを、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してコントローラBに送信する。コントローラBは、ターゲットSSD内のデータブロックXの記憶アドレスを受信し、データブロックXの固有値インデックスを確立し、インデックス内の基準カウントを1にセットする。コントローラBも、データブロックXの固有値のキャッシュアドレスXを記録する必要がある。データブロックXの固有値がSSDに記憶されるとき、コントローラBもデータブロックXの固有値の記憶アドレスをSSDに記録する必要がある。
コントローラBは、ターゲットSSDにおけるデータブロックXの記憶アドレスを受信し、コントローラAに通知を送信する。通知は、ターゲットSSDにおけるデータブロックXの記憶アドレスを搬送する。コントローラAは、コントローラBによって送信される通知に従って、データブロックXのアドレスと、固有値と、ターゲットSSDにおけるデータブロックXの記憶アドレスとの間の対応関係を確立する。別の実施方式では、コントローラAが、単に、データブロックXが位置するLUのホームコントローラであるが、データブロックXの固有値のホームコントローラではないとき、コントローラAは、データブロックXのアドレスと、データブロックXの固有値と、コントローラBのアドレスとの間の対応関係を確立する。
本発明のこの実施形態におけるストレージアレイに従って、キャッシュデバイスは、データブロックXのフィンガープリントの計算を実施する。これは、コントローラの計算リソースを節約する。データブロックXをターゲットSSDに記憶するプロセスの間、コントローラはキャッシュデバイスMの識別子及びキャッシュアドレスBのみを提供し、ターゲットSSDのコントローラはキャッシュアドレスBからデータブロックXを直接読み出す。これは、コントローラの計算リソース及びメモリリソースを節約し、ストレージアレイの性能を改善する。
図2に示すストレージアレイに基づいて、上記のデータ重複排除動作に従ってデータがSSDに書き込まれる。入出力マネージャAがデータブロックXのアドレスを搬送するデータ読出し要求、例えばデータブロックXを読み出すことの要求を受信すると、入出力マネージャAは、PCIeスイッチングデバイスAを介してデータ読出し要求をコントローラAに送信する。コントローラAは、コントローラAが、データブロックXが位置するLUのホームコントローラであると判断する。一実施方式において、コントローラAは、読み出されるデータブロックXのアドレスと、データブロックXの固有値と、ターゲットSSDにおけるデータブロックXの記憶アドレスとの間の対応関係を検索して、ターゲットSSDにおけるデータブロックXの記憶アドレスを判断する。コントローラAは、ターゲットSSDにおけるデータブロックXの記憶アドレスを、PCIeスイッチングデバイスAを介して入出力マネージャAに送信する。入出力マネージャAは、ターゲットSSDにおける読み出されるデータブロック、すなわちデータブロックXの記憶アドレスに従って、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介して、ターゲットSSDにおけるデータブロックXの論理記憶アドレスからデータブロックXを直接読み出す。別の実施方式では、コントローラAは、データブロックXのアドレスと、データブロックXの固有値と、データブロックXの固有値のホームコントローラのアドレスとの間の対応関係を検索して、データブロックXの固有値のホームコントローラBを判断し、コントローラBにおけるデータブロックXの固有値インデックスを問い合わせて、ターゲットSSDにおけるデータブロックXの記憶アドレスを判断するか;又は、データブロックXの固有値のホームコントローラBを判断し、コントローラBにおけるデータブロックXの固有値と同じ固有値を有するデータブロックの固有値インデックスを問い合わせて、データブロックXの固有値と同じ固有値を有するデータブロックの記憶アドレスを判断し、次に、データブロックXの固有値と同じ固有値を有するデータブロックの記憶アドレスからデータを読み出す。コントローラAが、データブロックXが位置するLUのホームコントローラ、及びデータブロックXの固有値のホームコントローラの双方であるとき、別の実施方式では、コントローラAは、読み出されるデータブロックXのアドレスと、データブロックXの固有値との間の対応関係を検索し、データブロックXの固有値に従って、コントローラAによって維持される固有値インデックスセットAを問い合わせて、読み出されるデータブロックXの記憶アドレスを判断し、次に、読み出されるデータブロックXの記憶アドレスを入出力マネージャAに送信する。入出力マネージャAは、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してデータブロックXの記憶アドレスからデータブロックを読み出す。
図2に示すストレージアレイに書き込まれるデータが複数のキャッシュデバイスにキャッシュされる場合において、データ重複排除動作が実行されているとき、データ重複排除は、キャッシュデバイスのうちの1つにおけるデータに対してのみ実行される。特に、データ重複排除は、一次キャッシュデバイスにおけるデータに対して実行することができるか、又はデータをキャッシュする複数のキャッシュデバイスの負荷に従って、データ重複排除動作を実行するためにキャッシュデバイスのうちの1つが選択されるが、これは本発明のこの実施形態によって制限されるものではない。
本発明のこの実施形態において、別の実施事例では、入出力マネージャとコントローラとの間に必ずしもホーミングの概念が存在しない。すなわち、コントローラAは入出力マネージャAのホームコントローラではない。各入出力マネージャは、LUと、LUがホーミングされるコントローラとの間の対応関係を保存する。入出力マネージャは、データオペレーション要求において搬送されるターゲットLUの識別子に従って、ターゲットLUの識別子とホームコントローラとの間の対応関係を問い合わせて、ターゲットLUのホームコントローラを判断し、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してターゲットLUのホームコントローラに要求を直接送信する。更に、任意のPCIeスイッチングデバイスを介して、コントローラ間で、又はコントローラとSSDとの間で、又は入出力マネージャとコントローラとの間で、又は入出力マネージャとSSDとの間で、又はキャッシュデバイスとコントローラとの間で、又はキャッシュデバイスとSSDとの間で通信が行われてもよい。本発明のこの実施形態において、ターゲットハードディスクにおける記憶アドレスにデータブロックXを記憶するための論理記憶アドレスは、ターゲットハードディスクにデータブロックXを記憶するための論理ブロックアドレスを指し、特に、本発明のこの実施形態では、ターゲットSSDにデータブロックXを記憶するための論理ブロックアドレスを指す。
本発明のこの実施形態において、図2は、2つのコントローラ、2つのスイッチングデバイス、2つの入出力マネージャ及び1つのキャッシュデバイスのみを示す。しかしながら、特定の実施態様において、コントローラ、スイッチングデバイス、入出力マネージャ及びキャッシュデバイスの量は、必要に応じて設定されて、柔軟に拡張されてもよい。任意の入出力マネージャが任意のスイッチングデバイスを介して任意のコントローラに接続されるか、又は任意の入出力マネージャが任意のスイッチングデバイスを介して任意のハードディスクに接続されるか、又は任意の入出力マネージャが任意のスイッチングデバイスを介して任意のキャッシュデバイスに接続される。任意のコントローラが任意のスイッチングデバイスを介して任意のコントローラに接続されるか、又は任意のコントローラが任意のスイッチングデバイスを介して任意のハードディスクに接続されるか、又は任意のコントローラが任意のスイッチングデバイスを介して任意のキャッシュデバイスに接続される。任意のキャッシュデバイスがスイッチングデバイスを介して任意のハードディスクに接続される。任意のスイッチングデバイスを介して接続された任意の2つのデバイス間で双方向通信が実施される。任意の2つのスイッチングデバイスが直接接続される。本発明のこの実施形態において提供されるストレージアレイアーキテクチャにおいて、論理的に、コントローラは併せてコントローラプレーンと呼ばれ、スイッチングデバイスは併せてスイッチングプレーンと呼ばれ、ハードディスクは併せてストレージプレーンと呼ばれ、入出力マネージャは併せて入出力管理プレーンと呼ばれ、キャッシュデバイスは併せてキャッシュプレーンと呼ばれる。本発明のこの実施形態において提供されるアーキテクチャにおいて、データ読出し及び書込み制御は、データ読出し及び書込みと分離される。コントローラはデータ読出し及び書込み制御を実施するが、データ読出し及び書込み(又は換言すれば、読出し及び書込みデータ)はコントローラを通過しない。これは、コントローラのCPU計算リソース及びコントローラのメモリリソースを節約し、データ書込み効率を改善し、ストレージアレイのデータ処理効率を改善する。本発明のこの実施形態におけるストレージアレイアーキテクチャは、コントローラ及びハードディスク等のデバイスの拡張を実施することができ、コントローラ、スイッチングデバイス、ハードディスク等はストレージアレイの性能要件に従って柔軟に追加されてもよい。
当然ながら、本発明のこの実施形態における技術的解決策は、ストレージアレイが1つの入出力マネージャ、1つのコントローラ、1つのスイッチングデバイス、1つのキャッシュデバイス及びいくつかのハードディスクを含むシナリオにも適用可能である。このシナリオにおいてストレージアレイにデータを書き込む方式については、上記の実施形態における説明を参照されたい。データ重複排除がストレージアレイにおいて実行されるシナリオについては、上記の実施形態における説明を参照されたい。ストレージアレイにおいて実行されるデータ読出し動作については、上記の実施形態における説明を参照されたい。当然ながら、ストレージアレイは2つのコントローラ及び1つのスイッチングデバイスを含んでもよく、2つのコントローラはスイッチングデバイスに接続される。そのようなシナリオにおけるデータ書込み動作、データ重複排除動作、及びデータ読出し動作については、上記の実施形態における説明を参照し、ここでは詳細を繰り返し説明することはしない。本発明のこの実施形態において、デバイスAは、キャッシュアドレスAからデータを読み出し(又は換言すれば、キャッシュアドレスAから直接データを読み出し)、デバイスBの識別子及びキャッシュアドレスAに従って、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してデータをキャッシュアドレスAに書き込む(又は換言すれば、データをキャッシュアドレスAに直接書き込む)。そのような実施方式は、ダイレクトメモリアクセス(Direct Memory Access,DMA)技術によって実施されてもよく、デバイスA及びデバイスBは、特に本発明のこの実施形態におけるDMAアクセスを実行するデバイスを表す。
コントローラは、デバイスBのキャッシュアドレスを取得し、デバイスBの識別子及びデバイスBのキャッシュアドレスをPCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してデバイスCに送信する。コントローラは、デバイスBと通信して、PCIeスイッチングデバイスA又はPCIeスイッチングデバイスBを介してキャッシュアドレスを取得し、デバイスBの識別子を既に学習しているので、キャッシュアドレスが取得され、デバイスBの識別子及びデバイスBのキャッシュアドレスがデバイスCに送信されてもよい。当然ながら、コントローラはデバイスBの識別子及びキャッシュアドレスも取得してもよい。デバイスBの識別子は、デバイスBのアドレス、又はデバイスを一意に識別する別の識別子であってもよい。
当業者は、本明細書において開示される実施形態を参照して記載される例示的なユニット及びアルゴリズムステップは、電子ハードウェアによって、又はコンピュータソフトウェア及び電子ハードウェアの組み合わせによって実施されてもよいことを認識することができる。機能がハードウェアによって実行されるか又はソフトウェアによって実行されるかは、技術的解決策の特定の応用形態及び設計制約条件に依拠する。当業者は、異なる方法を用いて、特定の用途毎に記載された機能を実施することができるが、実施が本発明の範囲を超えているとみなされるべきでない。
便宜上及び簡単な説明のために、上記のシステム、装置及びユニットの詳細な動作プロセスについては、上記の方法の実施形態における対応するプロセスを参照し、ここでは詳細を繰り返し説明することはしないことが、当業者によって明確に理解されることができる。
本出願において提供されるいくつかの実施形態において、開示されるシステム及び方法は他の方式で実施されてもよいことが理解されるべきである。例えば、記載された装置の実施形態は例示にすぎない。例えば、ユニット分割は単に論理機能分割であり、実際の実施態様では他の分割であってもよい。例えば、複数のユニット又はコンポーネントが組み合わされるか若しくは別のシステムに統合されてもよく、又はいくつかの特徴が無視されるか若しくは実行されなくてもよい。更に、表示又は検討される相互結合又は直接結合又は通信接続は、いくつかのインターフェースを通じて実施されてもよい。装置又はユニット間の間接結合又は通信接続は、電子的に、機械的に、又は他の形態で実施されてもよい。
別個の部分として記載されるユニットは、物理的に別個であっても別個でなくてもよく、ユニットとして表示される部分は物理的ユニットであっても物理的ユニットでなくてもよく、1つの位置に位置してもよく、又は複数のネットワークユニット上に分散されてもよい。ユニットのうちのいくつか又は全ては、実施形態の解決策の目的を達成する実際の必要性に従って選択されてもよい。
更に、本発明の実施形態における機能ユニットは、1つの処理ユニットに統合されてもよく、又はユニットの各々が物理的に単独で存在してもよく、又は2つ以上のユニットが1つのユニットに統合される。
機能がソフトウェア機能ユニットの形態で実施され、独立した製品として販売されるか又は用いられるとき、機能はコンピュータ可読不揮発性ストレージ媒体に記憶されてもよい。そのような理解に基づいて、本発明の技術的解決策を本質的に、又は従来技術に寄与する部分を、又は技術的解決策のうちのいくつかを、ソフトウェア製品の形態で実施してもよい。ソフトウェア製品は、不揮発性ストレージ媒体に記憶され、コンピュータデバイス(パーソナルコンピュータ、サーバ、又はネットワークデバイスであってもよい)に、本発明の実施形態に記載の方法のステップのうちの全て又はいくつかを実行するように命令するための複数の命令を含む。上記の不揮発性ストレージ媒体は:USBフラッシュドライブ、リムーバブルハードディスク、リードオンリメモリ(Read−Only Memory,ROM)、磁気ディスク又は光ディスク等の、プログラムコードを記憶することができる任意の媒体を含む。