JP4643543B2 - キャッシュ一貫性保証機能を有するストレージクラスタシステム - Google Patents

キャッシュ一貫性保証機能を有するストレージクラスタシステム Download PDF

Info

Publication number
JP4643543B2
JP4643543B2 JP2006305437A JP2006305437A JP4643543B2 JP 4643543 B2 JP4643543 B2 JP 4643543B2 JP 2006305437 A JP2006305437 A JP 2006305437A JP 2006305437 A JP2006305437 A JP 2006305437A JP 4643543 B2 JP4643543 B2 JP 4643543B2
Authority
JP
Japan
Prior art keywords
directory
storage device
master
node
cache
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2006305437A
Other languages
English (en)
Other versions
JP2008123198A (ja
Inventor
康治 鶴久
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Toshiba Digital Solutions Corp
Original Assignee
Toshiba Corp
Toshiba Solutions Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp, Toshiba Solutions Corp filed Critical Toshiba Corp
Priority to JP2006305437A priority Critical patent/JP4643543B2/ja
Publication of JP2008123198A publication Critical patent/JP2008123198A/ja
Application granted granted Critical
Publication of JP4643543B2 publication Critical patent/JP4643543B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、一般に、ストレージクラスタシステムに関し、特に、複数のブロックデバイス制御装置を統合した仮想的なブロックデバイスを外部に提供するストレージクラスタシステムに関する。
近年、ユーザの使用するシステムデータ、ユーザデータの増加に伴い、複数のストレージを統合して仮想的な大容量ストレージとして運用することにより、システム構築および運用に関するコストの削減を可能とするストレージクラスタシステムのニーズが高まっている。特に、クラスタシステムのインタコネクトとして標準化されたインフィニバンド等ではなく、イーサネット(登録商標)やFC(Fibre Channel)等をインタコネクトとして複数のブロックデバイス制御装置(ノード)を疎結合した低コストなストレージクラスタシステムが存在する。
ストレージクラスタシステムでは複数のノードにデータが分散するため、ホストコンピュータからリード/ライト要求を受信するノードにおいてデータをキャッシュすることがスループットを向上させるために不可欠であり、同時に各ノード内のキャッシュの一貫性を保証することが非常に重要となる。
分散したキャッシュの一貫性保証については、並列計算機やマルチプロセッサシステムにおいて発展した技術であり、例えば、特許文献1のように、様々な方法が提案されている。
前記の疎結合したストレージクラスタシステムにおいては、あるノードに対するホストコンピュータからのリード/ライト要求を他の全ノードが検知してキャッシュを制御するバススヌーピング方式は適さず、データがどのノードのキャッシュに分散しているかをディレクトリによって管理しノード間通信を介してキャッシュを制御するディレクトリ方式が一般的に採用される。ディレクトリはあるノードで集中管理されることもあるし、複数のノードに分散していることもある。
各ノードは、リード要求を受信してリードデータをキャッシュするとき、ディレクトリによって該リード領域に対して該ノードを関連付けておく。また各ノードは、ライト要求を受信したとき、ディレクトリを探索し、該ライト対象領域をキャッシュしているノードに対するリードキャッシュインバリデート処理を完了してから、ライト要求受信処理を完了する。リードキャッシュインバリデート処理はノード間通信の要求/応答メッセージ送受信処理によって行われ、要求メッセージを受信したノードはメッセージを解釈してキャッシュを探索/破棄した後に応答メッセージを送信する。
特開平6−274461号公報
しかしながら、上記従来技術においては、リードキャッシュインバリデート要求を受信したノードがキャッシュデータの探索を常に行う必要がある。そのため、他ノードへのライト要求に伴ってリードキャッシュインバリデート要求を受信したとき、たとえば該キャッシュデータに対する次のリード要求を受信するまでの間にリソース枯渇等を理由に該キャッシュデータが破棄されていた場合、本来は不要であるリードキャッシュインバリデート処理のコストを強いられることになる。
また、リードキャッシュインバリデート処理を行うために、ストレージ装置のI/O処理の延長でノード間通信処理が発生し、ストレージ装置として例外的な処理であるノード間通信処理を行うことで招くプロセッサの命令キャッシュミス等によるオーバヘッドが無視できない。RDMA(RemoteDirect Memory Access)転送方式を利用して、受信ノードにおけるソフトウェア処理に起因するオーバヘッドを低減することも可能であるが、専用ハードウェア(以下、「H/W」とも称する)が必要となると共に、受信ノード上のプロセッサとの排他制御が必要となる。また、ノード間通信を行うインタコネクトの信頼性および可用性を高めるために、インタコネクトを二重化したり、ソフトウェアで管理するコストがかかる。
本発明はこのような事情に鑑みてなされたものであり、ストレージ装置が本来持つ、ブロックデバイス用インタフェースを介して仮想的なブロックデバイスを外部に提供する機能を利用し、専用H/Wが不要でありながらリードキャッシュインバリデート処理にかかるコストを低減し、キャッシュの一貫性を保証するストレージクラスタシステムを提供することを目的とする。
また、限られたディレクトリ領域を有効に活用して、小さなディレクトリ領域でも柔軟に管理できるストレージクラスタシステムを提供することも目的とする。
さらに、キャッシュを時間管理することにより、リードキャッシュインバリデート処理を行う頻度を低減しつつ、キャッシュの一貫性を保証するストレージクラスタシステムを提供することも目的とする。
上記の目的を達成するために、本発明では、以下のような手段を講じる。
すなわち、請求項1の発明は、互いに接続された複数の記憶デバイス制御装置と、複数の記憶デバイス制御装置によってそれぞれ管理される物理記憶デバイスとを備えてなり、各物理記憶デバイスが統合されることによって、外部装置へ提供される仮想記憶デバイスを形成しているストレージクラスタシステムである。
このストレージクラスタシステムでは、各記憶デバイス制御装置は、外部装置または各記憶デバイス制御装置のうちの他の記憶デバイス制御装置からの仮想記憶デバイスへのアクセス要求に対し、アクセス対象範囲が配下の物理記憶デバイスに存在しない場合にはスレーブノードとして機能し、存在する場合にはマスタノードとして機能し、
スレーブノードとして機能する記憶デバイス制御装置は、アクセス要求を受信した場合には、マスタノードとして機能する記憶デバイス制御装置へアクセス要求を転送し、アクセス要求がリード要求であれば、マスタノードとして機能する記憶デバイス制御装置から転送されたデータをキャッシュし、アクセス要求がライト要求であれば外部装置から転送されたデータをキャッシュする。
また、マスタノードとして機能する記憶デバイス制御装置は、配下の物理記憶デバイス内の領域のうち、仮想記憶デバイスを形成する領域に関する、キャッシュの状態を管理するデータ構造であるディレクトリエントリを含んだマスタディレクトリを管理し、マスタディレクトリをマップしたディレクトリ仮想記憶デバイスを備える。ディレクトリ仮想記憶デバイスは、各記憶デバイス制御装置からアクセス可能であり、ディレクトリエントリには、スレーブノードとして機能する記憶デバイス制御装置とアクセス対象範囲との関連付けが記録される。そして、キャッシュの状態が更新された場合、各記憶デバイス制御装置のうちの何れかがディレクトリ仮想記憶デバイスにライトすることで、ディレクトリエントリにおけるスレーブノードとして機能する記憶デバイス制御装置とアクセス対象範囲との関連付けを更新し、スレーブノードとして機能する記憶デバイス制御装置がディレクトリ仮想記憶デバイスをリードすることで、ディレクトリエントリによってスレーブノードとして機能する記憶デバイス制御装置とアクセス対象範囲が関連付けられていれば、キャッシュされたデータが有効であると判定でき、キャッシュの一貫性を保証することができる
請求項2の発明は、請求項1の発明のストレージクラスタシステムにおいて、マスタノードとして機能する記憶デバイス制御装置は、アクセス要求が転送された場合、ディレクトリ仮想記憶デバイスにライトし、マスタディレクトリにおけるディレクトリエントリを更新する。
請求項3の発明は、請求項1の発明のストレージクラスタシステムにおいて、スレーブノードとして機能する記憶デバイス制御装置は、アクセス要求を受信した場合、ディレクトリ仮想記憶デバイスにライトし、マスタディレクトリにおけるディレクトリエントリを更新する。
請求項4の発明は、請求項1の発明のストレージクラスタシステムにおいて、スレーブノードとして機能する記憶デバイス制御装置マスタディレクトリのコピーをマップしたディレクトリコピー仮想記憶デバイスを備えている。そして、ディレクトリコピー仮想記憶デバイスの情報は、各記憶デバイス制御装置間で共有される。
各記憶デバイス制御装置のうちの何れかが前記ディレクトリコピー仮想記憶デバイスにライトすることで、マスタディレクトリのコピーのディレクトリエントリにおけるスレーブノードとして機能する記憶デバイス制御装置とアクセス対象範囲との関連付けを更新する。スレーブノードとして機能する記憶デバイス制御装置がアクセス要求を受信し、アクセス対象範囲のキャッシュデータを保持している場合に、ディレクトリコピー仮想記憶デバイスをリードし、マスタディレクトリのコピーに記録されたディレクトリエントリによってスレーブノードとして機能する記憶デバイス制御装置とアクセス対象範囲とが関連付けられていれば、キャッシュデータが有効であると判定する。
請求項5の発明は、請求項4の発明のストレージクラスタシステムにおいて、マスタノードとして機能する記憶デバイス制御装置は、アクセス要求が転送された場合、ディレクトリ仮想記憶デバイスをライトしてマスタディレクトリに記録されたディレクトリエントリを更新するとともに、ディレクトリコピー仮想記憶デバイスをライトしてマスタディレクトリのコピーに記録されたディレクトリエントリを更新する。
請求項6の発明は、請求項4の発明のストレージクラスタシステムにおいて、スレーブノードとして機能する記憶デバイス制御装置は、アクセス要求を受信した場合、ディレクトリ仮想記憶デバイスをライトしてマスタディレクトリに記録されたディレクトリエントリを更新するとともに、ディレクトリコピー仮想記憶デバイスをライトしてマスタディレクトリのコピーに記録されたディレクトリエントリを更新する。
請求項7の発明は、請求項4の発明のストレージクラスタシステムにおいて、ディレクトリコピー仮想記憶デバイスにマップされるマスタディレクトリのコピーを、コピー元のディレクトリ管理ノードの仮想記憶領域の仮想番地と同じ仮想番地にマップする。
請求項8の発明は、請求項4又は請求項7の発明のストレージクラスタシステムにおいて、互いに同期しているタイマを各記憶デバイス制御装置にそれぞれ備えている。そして、ディレクトリエントリにおいて、自己が備えるタイマによって計時された時刻に、予め定めた時間を加えた時刻を示すタイムスタンプを、アクセス要求で指定されたアクセス対象範囲に更に関連付けている。更に、スレーブノードとして機能する記憶デバイス制御装置がアクセス要求を受信した場合に、アクセス対象範囲のキャッシュデータを保持していれば、ディレクトリコピー仮想記憶デバイスをリードし、マスタディレクトリのコピーに記録されたディレクトリエントリによってスレーブノードとして機能する記憶デバイス制御装置とアクセス対象範囲とが関連付けられており、ディレクトリエントリによってアクセス対象範囲に関連付けられたタイムスタンプによって示される時刻が、自己が備えるタイマによって計時された時刻よりも過去ではない場合には、このアクセス対象範囲からのキャッシュされたデータは有効であると判定し、過去である場合には、このアクセス対象範囲からのキャッシュされたデータは無効であると判定する。
請求項9の発明は、請求項8の発明のストレージクラスタシステムにおいて、スレーブノードとして機能する記憶デバイス制御装置は、マスタディレクトリのコピーに記録されたディレクトリエントリにおいて、アクセス対象範囲に関連付けられたタイムスタンプによって示される時刻が、自己が備えるタイマによって計時された時刻よりも過去である場合、このアクセス対象範囲からのキャッシュされたデータの有効性を、ディレクトリ仮想記憶デバイスをリードすることにより問い合わせる。
本発明によれば、ストレージ装置が本来持つ、ブロックデバイス用インタフェースを介して仮想的なブロックデバイスを外部に提供する機能を利用し、専用H/Wが不要でありながらリードキャッシュインバリデート処理にかかるコストを低減し、キャッシュの一貫性を保証するストレージクラスタシステムを実現することができる。
また、限られたディレクトリ領域を有効に活用して、小さなディレクトリ領域でも柔軟に管理できるストレージクラスタシステムを実現することができる。
さらに、キャッシュを時間管理することにより、リードキャッシュインバリデート処理を行う頻度を低減しつつ、キャッシュの一貫性を保証するストレージクラスタシステムを実現することができる。
以下に、本発明を実施するための最良の形態について図面を参照しながら説明する。
(第1の実施の形態)
図1は、本発明の第1の実施の形態に係るストレージクラスタシステムの構成例を示す簡略ブロック図である。
N台のホストコンピュータ1(#1)〜1(#N)が、スイッチ3を介してM台のブロックデバイス制御装置2(#1)〜2(#M)と接続する。各ブロックデバイス制御装置2にはそれぞれ配下にディスクアレイ4(#1)〜4(#M)が接続されている。
ホストコンピュータ1とブロックデバイス制御装置2間を接続するインタコネクトとして、SCSIプロトコルに基づくブロックデバイス用インタフェース(I/F)であるFCやiSCSIを想定している。FCの場合、スイッチ3の部分がファブリックスイッチとなり、iSCSIの場合はイーサネットのスイッチングハブとなる。
M台のブロックデバイス制御装置(以降、「ノード」とも称する)2(#1)〜2(#M)が提供するストレージを組み合わせて、各ホストコンピュータ1(#1)〜1(#N)に対して仮想的な一つの大容量ブロックデバイスを提供している。ホストコンピュータ1からのリード/ライト要求は、予め設定された1台のブロックデバイス制御装置(代表ノード)2に対して発行される。また、各ホストコンピュータ1(#1)〜1(#N)に対して異なる代表ノードを割り当てて、マルチポートストレージとして使用することも可能である。
このように構成されてなるストレージクラスタシステムは、ホストコンピュータ1に対して提供する仮想的なブロックデバイスのLUN(Logical Unit Number)とその仮想ブロックデバイスがマップされた実際のノードのアドレスとを対応付けたテーブルであるルーティングテーブルを管理している。ルーティングテーブルは、各ノードが提供している固定サイズの領域(エクステント)毎のエントリによって構成され、各エクステントを提供しているノード(マスタノード)と対応付けられている。また、ルーティングテーブルはストレージクラスタシステム内の全てのノードによって共有される。
ホストコンピュータ1に対して割り当てられた代表ノードは、ホストコンピュータ1からのLUNへのリード/ライト要求を、そのブロックアドレスからエクステントを特定し、ルーティングテーブルで指定されたマスタノードのLUNへの要求に変換する。その後、変換したリード/ライト要求を上記インタコネクトであるスイッチ3経由で転送し、指定されたリード/ライトデータをホストコンピュータ1とマスタノード間で中継する。この一連の中継処理を行うノードをスレーブノードと呼ぶ。
つまり、各ノードはホストコンピュータ1あるいは他ノードからのエクステントへのリード/ライト要求に対して、そのエクステントが配下のディスクアレイ4に存在する場合はマスタノードとして動作し、存在しない場合はスレーブノードとして動作する。
図2は、ノード内部の構成例を示すブロック図である。
ノードはI/Oプロセッサ203上で動作するソフトウェアにより制御される。ソフトウェアはROM202に格納され、起動時にメモリ204にロードされI/Oプロセッサ203上で実行される。メモリ204は、バッテリ205により停電時もバックアップされ、ホストコンピュータ1に提供するブロックデバイスのディスクキャッシュとしても使用される。
I/Oプロセッサ203とホストコンピュータ1間はホストI/F201を介して接続し、I/Oプロセッサ203とディスクアレイ4間はディスクI/F206を介して接続する。ホストI/F201としてはFCやiSCSI、ディスクI/F206としてはFC、パラレルSCSI、SAS(Serial Attached SCSI)、SATA(Serial ATA)等の通常のブロックデバイス用I/Fコントローラを想定している。I/Oプロセッサ203、ホストI/F201、ディスクI/F206間はPCIバスなどのインタコネクトで接続する。また、I/Oプロセッサ203内には、割り込みコントローラ、RAID5用のパリティ計算モジュール、DMAコントローラ等のH/Wがある。
ソフトウェアでは、これらの内部H/WとホストI/Fコントコーラ、ディスクI/Fコントローラ等の外部H/Wを制御し、複数のHDDで構成するディスクアレイを仮想的なブロックデバイス制御装置2としてホストコンピュータ1に提供する。
またブロックデバイス制御装置2のディスクキャッシュは、スレーブノードとして動作するエクステントに対してはリードキャッシュ/ライトスルーキャッシュとして使用され、その他の場合においてはリードキャッシュ/ライトバックキャッシュとして使用されるようにソフトウェアで制御される。
また、ノード内のキャッシュブロックが枯渇したとき等には、ソフトウェアによってキャッシュブロックの選定/破棄処理が行われ、効率的にディスクデータがキャッシュされる。
次に、マスタノードとスレーブノード間でエクステントのキャッシュの状態を共有するためのデータ構造(マスタディレクトリ/スレーブディレクトリ)について説明する。
マスタディレクトリはエクステント毎のキャッシュの状態を管理するデータ構造であり、マスタノードのみが管理する。スレーブディレクトリは、マスタディレクトリのコピーであり、そのエクステントにリード/ライトを実行する全てのスレーブディレクトリが持つ。これらは、スレーブノードにおけるリード/ライト要求転送処理やマスタノードにおけるリード/ライト処理において参照/更新される。各エクステントとマスタディレクトリおよびスレーブディレクトリはディレクトリ管理テーブルによって対応付けられている。
各エクステントに対する一つのマスタディレクトリと複数のスレーブディレクトリは全ノードにおいて、I/Oプロセッサ203のMMU(Memory Management Unit)によって同一仮想番地にマップされ、その仮想番地は後述のディレクトリ管理テーブルによって、全ノードで共有される。各ノードのI/Oプロセッサ203はマップされた仮想番地においてマスタディレクトリ/スレーブディレクトリを参照するが、マスタディレクトリに対してのみ更新を行う。スレーブディレクトリの更新は、後述する外部からのディレクトリアクセス手段を用いてマスタノードが行う。
図3は、エクステントとマスタディレクトリ/スレーブディレクトリの関係を示す図であり、ホストコンピュータ1へ提供されるLU(Logical Unit)の一部であるエクステントkがノードxにマップされ、エクステント(k+1)がノード(x+1)にマップされている。ノードxは、エクステントkに対してはマスタノードとして動作し、エクステント(k+1)に対してはスレーブノードとして動作する。また、ノード(x+1)はエクステント(k+1)に対してはマスタノード、エクステントxに対してはスレーブノードとして動作する。
エクステントkに関するリード/ライト処理に伴うキャッシュの状態を管理するマスタディレクトリk/スレーブディレクトリkに関しては、それぞれ各ノードにおいて仮想アドレス空間の0xA0000000番地にマップされ、同様にマスタディレクトリ(k+1)/スレーブディレクトリ(k+1)は0xA0100000番地にマップされている。ノードxにおいては、マスタディレクトリkに対しては参照/更新を行うが、スレーブディレクトリ(k+1)に対しては参照のみ行う。スレーブディレクトリ(k+1)の更新は、外部からのディレクトリアクセス手段を用いてノード(x+1)が行う。
次に、外部からのディレクトリアクセス手段について説明する。
各ノードにおけるマスタディレクトリ/スレーブディレクトリは配下のディスクアレイ4にマップされ、ディレクトリ別のLUを構成する。このマスタディレクトリ/スレーブディレクトリのデータを含むLUは、エクステント毎に定められた個別のLUN(ディレクトリLUN)が割り当てられ、そのLUNはディレクトリ管理テーブルによって全ノードで共有される。つまり、ノードxがマスタディレクトリkをLUN 10で提供しているのであれば、ノード(x+1)はスレーブディレクトリkをLUN 10で提供する。
つまり、各ノードの外部からのディレクトリアクセス手段は、ブロックデバイス制御装置2が本来備えるディスクアレイ4のデータをLUとして提供する機能により、そのLUに対するリード/ライト処理によって実現されている。当然のことながら、リード/ライト処理はターゲットとなるノードのキャッシュメモリを仲介して行われ、ターゲットの処理の前後においてキャッシュブロックのアクセス対象範囲の排他的使用権獲得/放棄がなされる。また、このLUへのリード/ライト処理によってキャッシュされたデータを決められた仮想番地にマップすることで、全ノードにおけるI/Oプロセッサ203が同一エクステントに対応するディレクトリが同一仮想番地で参照することが可能となる。
本実施の形態では、ディレクトリ内のデータが各ノードにおいてディスクアレイ4に書き込まれてメモリ204上にキャッシュされていない状況も想定しているが、処理の高速化のためにディレクトリ用のキャッシュをロックしてディスクアレイ4への書き込みを行わない方式も考えられる。
図4は、マスタディレクトリおよびスレーブディレクトリのデータ構造を示す図である。スレーブディレクトリはマスタディレクトリのコピーであるため、以下ではマスタディレクトリに関してのみ説明する。また、本実施の形態ではエクステントのサイズを32Mバイト、キャッシュブロックサイズを8Kバイト、ノード識別子長を1バイトとし、1キャッシュブロックに最大32のノードが関連付けられることとする。
マスタディレクトリは基数木(Radix Tree)と呼ばれる公知のデータ構造により構成される。3段の基数木であり、上段401と中段402のデータ構造は、要素数が16の配列であり、それぞれの配列の要素は中段402のデータ構造へのポインタ、下段403のデータ構造へのポインタである。下段403のデータ構造は要素数が16の配列であり、配列の要素は、要素数が32のノード識別子の配列である。各データ構造のサイズはいずれも512バイトである。
エクステントのサイズが32M(2^25)バイトであるため、エクステントのアクセス範囲は2^16セクタであり、エクステント内のオフセット値は16ビットで表現される。エクステント内のオフセット値のビット12〜15の値を上段401のデータ構造内の配列のインデックスとし、ビット8〜11の値を中段402のデータ構造内の配列のインデックスとし、ビット4〜7の値を下段403のデータ構造内の配列のインデックスとする。これにより、エクステント内のキャッシュブロック(2^4セクタ)毎に下段403のデータ構造の配列の1要素(ディレクトリエントリ)が割り当てられ、そのキャッシュブロックに最大で32のノードが関連付けられていることを表している。
例えば、オフセット値0xFF24に相当するディレクトリエントリは、上段401のデータ構造のインデックス15の要素に関連付けられた、中段402のデータ構造のインデックス15に関連付けられた、下段403のデータ構造のインデックス2の要素である。
基数木の根となる上段401のデータ構造はエクステント用のディレクトリ領域の先頭番地にマップされており、中段402/下段403のデータ構造に対してはポインタを辿って参照する。全くノードが関連付けられていない部分木のデータ構造は存在する必要は無く、必要になったときにエクステント用のディレクトリ領域の空き領域から512バイト単位で割り当てられる。
次に、ディレクトリのリード/ライト処理について説明する。
他ノードに対するディレクトリのリード/ライトは基数木を構成するデータ構造単位で行い、アクセス対象のデータ構造の仮想番地と根のデータ構造の仮想番地の差分(オフセット)をセクタサイズで割った値をブロックアドレスとし、セクタ単位のリード/ライト要求処理を該ディレクトリのディレクトリLUNに対して発行する。
ノード内におけるI/Oプロセッサ203によるディレクトリ探索/更新処理においては、外部からのディレクトリに対するリード/ライト処理との競合における一貫性の保証が必要となる。このため、I/Oプロセッサ203が各節のデータ構造にアクセスする場合も、ディレクトリLUNに対する内部リード/ライト処理を行う。内部リード/ライト処理は、ディスクアレイ4に書き出されているかもしれないデータをキャッシュメモリにロードして仮想アドレス空間にマップし、そのアクセス領域に該当するキャッシュの排他的使用権を獲得するために行う。内部リード/ライト処理が完了したときは、アクセス領域に該当するキャッシュの排他的使用権は獲得したままとし、ディレクトリ探索/更新処理が完了してから一括してキャッシュの排他的使用権を放棄する。
これにより、I/Oプロセッサ203によるディレクトリ/更新処理が行われている途中で、外部からのディレクトリLUNに対するリード/ライト処理が発生しても、キャッシュメモリへのアクセスする時点で排他されるために、ディレクトリのデータの一貫性は損なわれない。
上記の通り、ディレクトリに対する全てのリード/ライト処理は、ディレクトリLUNに対するセクタ単位のリード/ライト処理によって実現される。
図5は、ディレクトリLUNに対するリード/ライト処理における、ディレクトリ領域をマップしたキャッシュブロック探索のフローチャートである。
まず、該ディレクトリLUNのアクセス領域に該当するキャッシュブロックが存在するか否かを判定する(ステップ501)。ステップ510の結果が真のときは、キャッシュブロック内のアクセス領域の排他的使用権を獲得する(ステップ504)。ステップ501の結果が偽であるときは、新たにキャッシュブロックを獲得し(ステップ502)、ディレクトリ管理テーブルを走査することにより該ディレクトリLUNがマップされる先頭の仮想番地を取得し、先頭番地とブロックアドレスを加算してマップされるべき仮想番地を求める。その後、該仮想番地にマップあるいは再マップ処理を行う(ステップ503)。
キャッシュブロック内のアクセス領域の排他的使用権を獲得し(ステップ504)、リード処理且つキャッシュミスであることを判定する(ステップ505)。ステップ505の結果が偽であるときは処理を完了する。ステップ505の結果が真であるときは、ディスクアレイ4へリード要求を発行し(ステップ506)、ディスクアレイ4へのリード処理が完了するまで待機する(ステップ507)。
上記のように処理を行うことによって、ディレクトリのデータがキャッシュメモリ上に読み込まれたときには、常に決められた仮想番地にマップされる。
次に、マスタノードにおけるライト要求処理におけるリードキャッシュインバリデート処理を例にして、ディレクトリ更新手順について説明する。
図6(a)は、ノードxにおけるマスタディレクトリkを示す図であり、エクステント内のあるキャッシュブロック(オフセット値0xFF20〜0xFF30)に対して、過去にノードyと(y+1)からリード要求を受信したことを示している。図6(b)は、その後にノード(y+2)から該キャッシュブロックに対してライト要求を受信した後のマスタディレクトリkを示す図である。
ノードxにおいて、ノード(y+2)からのエクステントkに対するライト要求を受信したとき、まずディレクトリ管理テーブルからエクステントkに対応するマスタディレクトリkの仮想番地(0xA0000000)、ディレクトリLUNを獲得する。マスタディレクトリkの基数木の上段のデータ構造を参照するため、ディレクトリLUNのブロックアドレス0に対して512バイトの内部リード要求を発行する。
ライト対象範囲のオフセット値からインデックス15の配列要素を参照し、中段のデータ構造の仮想番地(0xA0000200)を求める。中段のデータ構造を参照するため、ディレクトリLUNのブロックアドレス1に対して512バイトの内部リード要求を発行する。
ライト対象範囲のオフセット値からインデックス15の配列要素を参照し、下段のデータ構造の仮想番地(0xA0000400)を求める。下段のデータ構造を参照するため、ディレクトリLUNのブロックアドレス2に対して512バイトの内部リード要求を発行する。
ライト対象範囲のオフセット値からインデックス2の配列要素を参照し、該ライト対象範囲にノードyと(y+1)が関連付けられていることを記憶し、yと(y+1)を消去して(y+2)を関連付けた後、ディレクトリLUNのブロックアドレス2に対して内部ライト要求を発行する。
その後、各段のデータ構造に対するリード/ライト処理で獲得した、ディレクトリデータを含むキャッシュの排他的使用権を放棄する。
次に、関連付けを消去したノードに対してマスタディレクトリkの更新を反映させる。ノードyとノード(y+1)のディレクトリLUNのブロックアドレス2に対して、512バイトのライト要求を発行して完了まで待機し、リードキャッシュインバリデート処理を完了する。
Figure 0004643543
表1は、ディレクトリ管理テーブルのデータ構造を示す図である。ディレクトリ管理テーブルはエクステント単位のエントリで構成され、各エントリはエクステント識別子、マスタノード識別子、ディレクトリの仮想番地、及びディレクトリLUNによって構成される。エクステント識別子は、ホストコンピュータ1へ提供するLUNや開始ブロックアドレス、サイズ等、エクステントを一意に特定できる情報と関連付けられる。
ディレクトリ管理テーブルは、ルーティングテーブルあるいは構成情報の一部として全てのブロックデバイス制御装置2(#1)〜(#M)で共有されることを想定している。
本実施の形態では、ディレクトリ管理テーブルを用いてエクステントとディレクトリの仮想番地、及びディレクトリLUNを関連付けているが、エクステント識別子によって仮想番地、ディレクトリLUNが一意に特定できるのであれば、他のデータ構造を用いても良い。また、計算によって線形的に求めることができるような仮想番地の配置/ディレクトリLUNの番号付けのルールを用いても良い。
次に、ノードにおけるリード要求受信処理について説明する。
ノードでは、受信したリード要求におけるLUN、ブロックアドレス、サイズからエクステントを特定し、ルーティングテーブルから該エクステントのマスタノードを特定する。特定されたマスタノードが自ノードのときはマスタノードのリード要求受信処理が実行され、マスタノードが他ノードのときはスレーブノードのリード要求受信処理が実行され、ルーティングテーブルに存在しないときは自ノードが単体で提供しているLUNに対するリード要求処理が実行される。
図7はスレーブノードにおける、データサイズがキャッシュブロックサイズ以下のリード要求受信処理のフローチャートである。
まず、該エクステントのリード対象領域に該当するキャッシュブロックを特定し、キャッシュヒットの判定を行う(ステップ701)。このとき、キャッシュブロック内のリード対象領域の排他的使用権を獲得する。
ステップ701の結果が偽であれば、キャッシュブロックを獲得してリード対象領域の排他的使用権を獲得し(ステップ702)、マスタノードへリード要求を転送する(ステップ705)。
ステップ701の結果が真であれば、ディレクトリ管理テーブルを走査することにより該エクステントに対応するスレーブディレクトリを特定し、スレーブディレクトリからリード対象領域に該当するディレクトリエントリを特定する(ステップ703)。このとき、ディレクトリのデータ構造は内部リード処理によって参照されるため、図5に示したフローチャートに従ってディレクトリのデータ構造はキャッシュメモリ上にロードされ、当該領域の排他的使用権を獲得している。
該ディレクトリエントリが存在し、且つ該ディレクトリエントリに自ノードが関連付けられていることを判定する(ステップ704)。判定後にディレクトリのデータ構造に割り当てられたキャッシュ領域の排他的使用権を放棄する。
ステップ704の結果が真であれば、該リード対象領域のキャッシュデータが有効であると判断できるため、イニシエータに対してデータとステータスの転送を行い(ステップ707)、キャッシュブロック内のリード対象領域の排他的使用権を放棄して(ステップ708)、処理を完了する。
ステップ704の結果が偽であれば、該キャッシュデータがマスタノードによってインバリデートされたと判断し、マスタノードへリード要求を転送する(ステップ705)。その後、マスタノードでのリード受信処理が完了するまで待機し(ステップ706)、イニシエータに対してデータとステータスの転送を行い(ステップ707)、キャッシュブロック内のリード対象領域の排他的使用権を放棄して(ステップ708)、処理を完了する。
図8は、マスタノードにおける、データサイズがキャッシュブロックサイズ以下のリード要求受信処理のフローチャートである。
まず、該エクステントのリード対象領域に該当するキャッシュブロックを特定し、キャッシュヒットの判定を行う(ステップ801)。このとき、キャッシュブロック内のリード対象領域の排他的使用権を獲得する。
ステップ801の結果が真であれば、イニシエータに対してデータとステータスの転送を行い(ステップ805)、キャッシュブロック内のリード対象領域の排他的使用権を放棄する(ステップ806)。
ステップ801の結果が偽であれば、キャッシュブロックを獲得して該リード対象領域のキャッシュの排他的使用権を獲得し(ステップ802)、ディスクアレイ4へのリード要求を発行し(ステップ803)、処理が完了するまで待機した後に(ステップ804)、イニシエータに対してデータとステータスの転送を行い(ステップ805)、キャッシュブロック内のリード対象領域の排他的使用権を放棄する(ステップ806)。
イニシエータのアドレスと構成情報から、イニシエータがストレージクラスタシステム内のスレーブノードであるか否かを判定する(ステップ807)。ステップ807の結果が偽であれば、ホストコンピュータ1からのリード要求であると判断して処理を完了する。
ステップ807の結果が真であるとき、ディレクトリ管理テーブルを走査することにより該エクステントに対応するマスタディレクトリの仮想番地、ディレクトリLUNを特定し、マスタディレクトリからリード対象領域に該当するディレクトリエントリを特定する。このとき、ディレクトリのデータ構造は内部リード処理によって探索されるため、図5に示したフローチャートに従ってディレクトリのデータ構造はキャッシュメモリ上にロードされ、当該領域の排他的使用権を獲得している。ディレクトリエントリが存在しなければ内部ライト処理によって新設する。その後、該ディレクトリエントリに対してイニシエータのノード識別子を内部ライト処理によって関連付ける(ステップ808)。その後、ディレクトリ領域のデータ構造に割り当てられたキャッシュ領域の排他的使用権を放棄する。
さらにイニシエータのスレーブディレクトリを更新するために、マスタディレクトリ内における更新部分に関して、イニシエータのディレクトリLUNに対するライト要求を発行する(ステップ809)。
なお、ステップ807からステップ809に至るマスタディレクトリおよびスレーブディレクトリの更新処理は、ステップ801からステップ806に至るリードデータ/ステータス転送処理との実行順序に依存関係は無く、並行して実行されても良い。
次に、ノードにおけるライト要求受信処理について説明する。
ノードでは、受信したライト要求におけるLUN、ブロックアドレス、サイズからエクステントを特定し、ルーティングテーブルから該エクステントのマスタノードを特定する。特定されたマスタノードが自ノードのときはマスタノードのライト要求受信処理が実行され、マスタノードが他ノードのときはスレーブノードのライト要求受信処理が実行され、ルーティングテーブルに存在しないときは自ノードが単体で提供しているLUNに対するライト要求処理が実行される。
図9は、スレーブノードにおける、データサイズがキャッシュブロックサイズ以下のライト要求受信処理のフローチャートである。
まず、該エクステントのライト対象領域に該当するキャッシュブロックを特定し、キャッシュヒットの判定を行う(ステップ901)。このとき、キャッシュブロック内のライト対象領域の排他的使用権を獲得する。
ステップ901の結果が偽であれば、キャッシュブロックを獲得してライト対象領域の排他的使用権を獲得する(ステップ902)。キャッシュ内のライト対象領域に対して、イニシエータからのデータ転送を行う(ステップ903)。続いて、マスタノードへライト要求を転送し(ステップ904)、マスタノードでのライト受信処理が完了するまで待機する(ステップ905)。マスタノードのライト受信処理が完了すると、イニシエータに対してステータスを転送して(ステップ906)、キャッシュブロック内のライト対象領域の排他的使用権を放棄して(ステップ907)、処理を完了する。
ステップ901の結果が真であれば、ステップ902をパスしてステップ903に進む。
図10は、マスタノードにおける、データサイズがキャッシュブロックサイズ以下のライト要求受信処理のフローチャートである。
まず、該エクステントのライト対象領域に該当するキャッシュブロックを特定し、キャッシュヒットの判定を行う(ステップ1001)。このとき、キャッシュブロック内のライト対象領域の排他的使用権を獲得する。
ステップ1001の結果が偽であれば、キャッシュブロックを獲得してライト対象領域の排他的使用権を獲得する(ステップ1002)。キャッシュ内のライト対象領域に対して、イニシエータからのデータ転送を行う(ステップ1003)。次に、ディレクトリ管理テーブルを走査することにより該エクステントに対応するマスタディレクトリの仮想番地、ディレクトリLUNを特定し、マスタディレクトリからライト対象領域に該当するディレクトリエントリを特定する。このとき、ディレクトリのデータ構造は内部リード処理によって参照されるため、図5に示したフローチャートに従ってディレクトリのデータ構造はキャッシュメモリ上にロードされ、当該領域の排他的使用権を獲得している。ディレクトリエントリが存在しなければ内部ライト処理によって新設する。該ディレクトリエントリに関連付けられたスレーブノードのうち、イニシエータを除いた全てのスレーブノードの関連付けを内部ライト処理によって削除する(ステップ1004)。
関連付けを削除された全てのスレーブノードに対して、マスタディレクトリ内における更新部分に関して、各スレーブノードのディレクトリLUNに対するライト要求を発行する。ライト要求を発行した全てのスレーブノードからのステータスを受信するまで待機する(ステップ1005)。
ステップ1005の完了をもって各スレーブノードのキャッシュのインバリデート処理が完了したと判断できるため、イニシエータに対してステータスを転送し(ステップ1006)、キャッシュブロック内のライト対象領域の排他的使用権を放棄する(ステップ1007)。また、イニシエータのアドレスと構成情報から、イニシエータがストレージクラスタシステム内のスレーブノード且つ該ディレクトリエントリに関連付けられていないことを判定する(ステップ1008)。その後、ディレクトリのデータ構造に割り当てられたキャッシュ領域の排他的使用権を放棄する。
ステップ1008の結果が偽であれば、ホストコンピュータ1からのライト要求であるか、または以前に該ライト対象領域に対してリード/ライト要求を受信したためスレーブディレクトリの更新が必要ないと判断して処理を完了する。
ステップ1008の結果が真であるとき、該ディレクトリエントリに対してイニシエータのノード識別子を関連付ける(ステップ1009)。さらにイニシエータのスレーブディレクトリを更新するために、マスタディレクトリ内における更新部分に関して、イニシエータのディレクトリLUNに対するライト要求を発行する(ステップ1010)。
なお、ステップ1008からステップ1010に至るマスタディレクトリおよびスレーブディレクトリの更新処理は、ステップ1001からステップ1007に至るライトデータ受信処理との実行順序に依存関係は無く、並行して実行されても良い。
ステップ1001の結果が真であれば、ステップ1002をパスしてステップ1003に進む。
本実施の形態では、マスタノード/スレーブノードのリード要求受信処理およびライト要求受信処理はデータサイズがキャッシュブロック以下の場合の処理のみを説明しているが、リード/ライト対象領域が複数のキャッシュブロックに跨る場合は、同様の処理が各キャッシュブロック単位で行われる。当然のことながら、複数のキャッシュブロックに対する処理をまとめて上記処理を行うことも可能である。
また、本実施の形態におけるリードキャッシュインバリデート処理はマスタノードがスレーブディレクトリをライトする方式で実現されるが、スレーブノードがマスタディレクトリをリードする方式でも実現することが可能である。
上記の構成、作用により、キャッシュ操作に伴う不要な処理を行わず、専用H/Wを用いずにストレージクラスタシステムにおいてキャッシュの一貫性を保証することができる。また、各ノードにおけるリードキャッシュインバリデート処理におけるキャッシュ制御処理は、ストレージ装置として最適化が施された仮想ブロックデバイスへのリード/ライト要求受信処理によって実行され、キャッシュデータやディレクトリの探索処理が発生せず、処理コストは低減される。
また、各ノードにおけるディレクトリは同一仮想番地にマップされるために、動的に必要な領域を確保してポインタで指定することができ、限られたディレクトリ領域を有効に利用することができる。
(第2の実施の形態)
図11は、本発明の第2の実施の形態に係るストレージクラスタシステムの構成例を示す簡略ブロック図である。
図11に示すように、本実施の形態に係るストレージクラスタシステムの構成は、各ノードがハートビートチャネル5によって接続されていることを除けば、第1の実施の形態に係るストレージクラスタシステムの構成と同様である。
各ノードは、ストレージクラスタシステム内の特定のノードH(ハートビートノード)からのハートビート確認メッセージを受信して、ハートビート応答メッセージを送信している。ハートビートノードから送信されるハートビート確認メッセージにはタイムスタンプが付与されており、各ノードは受信したタイムスタンプ値を使用してノード内の時刻を調整して、ノードHと時刻を同期させている。
Figure 0004643543
上記表2は、ディレクトリの下段のデータ構造の1要素であるディレクトリエントリのデータ構造を示す表である。第1の実施の形態とは、1キャッシュブロックに関連付けられる最大ノード数が28に変更されている点と、タイムスタンプが付与されている点が異なる。タイムスタンプは、マスタノードにおいて該キャッシュブロックに対するリード/ライト要求を受信したときに付与される。
図12は、スレーブノードにおけるデータサイズがキャッシュブロックサイズ以下のリード要求受信処理のフローチャートである。図12のフローチャートでは、図7のフローチャートに示す処理と同一の処理については、図7と同一のステップ番号を付している。すなわち、図12のフローチャートは、図7のフローチャートにおけるステップ704の処理と、ステップ705の処理との間に、新たな処理であるステップ709乃至711を追加したものである。したがって、ここでは、図7のフローチャートと異なる点について説明し、重複説明を避ける。
すなわち、ステップ704の結果が真であったとき、該ディレクトリエントリのタイムスタンプが現在時刻よりも古い値であることを検査する(ステップ709)。ステップ709の結果が偽であるとき、該アクセス領域に対応するキャッシュデータが有効であると判断して、ステップ707を実行する。
ステップ709の結果が真であるとき、該ディレクトリエントリから自ノードの関連付けが削除されている可能性があるため、該ディレクトリエントリに関してマスタノードのディレクトリLUNに対するリード要求を発行し、そのリードデータによって該ディレクトリエントリを上書きする(ステップ710)。その後、該ディレクトリエントリに自ノードが関連付けられていて、かつ該ディレクトリエントリのタイムスタンプが現在時刻よりも新しい値であることを判定する(ステップ711)。
ステップ711の結果が真であるときはステップ707を実行し、ステップ711の結果が偽であるときはステップ705を実行する。
図13は、マスタノードにおける、データサイズがキャッシュブロックサイズ以下のリード要求受信処理のフローチャートである。図13のフローチャートでは、図8のフローチャートに示す処理と同一の処理については、図8と同一のステップ番号を付している。すなわち、図13のフローチャートは、図8のフローチャートにおけるステップ808の処理に代えて、新たな処理であるステップ810を行うようにしたものである。したがって、ここでは、図8のフローチャートと異なる点について説明し、重複説明を避ける。
すなわち、ステップ807の結果が真のとき、ディレクトリ管理テーブルを走査することにより該エクステントに対応するマスタディレクトリの仮想番地、ディレクトリLUNを特定し、マスタディレクトリからリード対象領域に該当するディレクトリエントリを特定する。このとき、ディレクトリのデータ構造は内部リード処理によって参照されるため、図5に示したフローチャートに従ってディレクトリのデータ構造はキャッシュメモリ上にロードされ、当該領域の排他的使用権を獲得している。ディレクトリエントリが存在しなければ内部ライト処理によって新設する。その後、内部ライト処理によって、マスタノードにおける現在時刻に時間tを加算した値(キャッシュ有効期限)をタイムスタンプとしてディレクトリエントリに記録し、イニシエータのノード識別子を関連付ける(ステップ810)。その後、ディレクトリのデータ構造に割り当てられたキャッシュ領域の排他的使用権を放棄して、ステップ809を実行する。
図14は、マスタノードにおける、データサイズがキャッシュブロックサイズ以下のライト要求受信処理のフローチャートである。図14のフローチャートでは、図10のフローチャートに示す処理と同一の処理については、図10と同一のステップ番号を付している。すなわち、図14のフローチャートは、図10のフローチャートにおけるステップ1004とステップ1005との間にステップ1011を追加し、ステップ1009の代わりにステップ1012を設けたものである。したがって、ここでは、図10のフローチャートと異なる点について説明し、重複説明を避ける。
すなわち、ステップ1004を実行した後、該ディレクトリエントリのタイムスタンプが現在時刻よりも古い値であることを検査する(ステップ1011)。ステップ1011の結果が偽であるときはステップ1005を実行し、ステップ1011の結果が真であるときはステップ1006を実行する。
また、ステップ1008の結果が真であるとき、マスタノードにおける現在時刻と時間tによってキャッシュ有効期限を算出してディレクトリエントリのタイムスタンプとして記録し、イニシエータのノード識別子を関連付ける(ステップ1012)。その後、ディレクトリ領域の排他的使用権を放棄して、ステップ1010を実行する。
第1の実施の形態と同様に、ステップ1008からステップ1010に至るマスタディレクトリおよびスレーブディレクトリの更新処理は、ステップ1001からステップ1007に至るライトデータ受信処理との実行順序に依存関係は無く、並行して実行されても良いが、ステップ1011のタイムスタンプ判定に用いられる値がステップ1012において更新される前のタイムスタンプ値である必要がある。
本実施の形態に係るストレージクラスタシステムは、上記以外は、全て第1の実施の形態に係るストレージクラスタシステムと同様である。
以上説明したように、本実施の形態では、マスタノードではキャッシュブロック単位で、スレーブノードにおけるキャッシュ有効期限(直近のリード/ライト要求を受信した時刻から時間tが経過した時刻)をマスタディレクトリに記録し、リード/ライト要求を受信するたびに更新する。キャッシュ有効期限を経過したキャッシュブロックに対するライト要求受信処理では、既にスレーブノードのキャッシュデータは有効ではないためスレーブノードに対するリードキャッシュインバリデート処理を行わない。
また、スレーブノードでは、スレーブディレクトリに記録されているキャッシュ有効期限を経過したキャッシュブロックに対するリード要求受信処理では、キャッシュデータが有効ではないためにマスタノードからディレクトリエントリのリードを行う。その後、リードされたディレクトリエントリに対して自ノードが関連付けられてない、あるいはリードしたキャッシュブロック有効期限が現在時刻よりも過去の値であれば、マスタノードに対してリード要求を転送する。時間tは固定値でも良いし、様々なパラメータで変動する値でも良く、マスタノードが任意の値を選択することが可能である。
よって本実施の形態では、第1の実施の形態と全く同様の効果が得られることに加えて、マスタノードにおけるライト要求受信処理でのリードキャッシュインバリデート処理を行う頻度を低減することができる。
以上、本発明を実施するための最良の形態について、添付図面を参照しながら説明したが、本発明はかかる構成に限定されない。特許請求の範囲の発明された技術的思想の範疇において、当業者であれば、各種の変更例及び修正例に想到し得るものであり、それら変更例及び修正例についても本発明の技術的範囲に属するものと了解される。
第1の実施の形態に係るストレージクラスタシステムの構成例を示す簡略ブロック図。 第1の実施の形態におけるノード内部の構成例を示すブロック図。 第1の実施の形態におけるエクステントとマスタディレクトリ/スレーブディレクトリの関係を示す図。 第1の実施の形態におけるマスタディレクトリおよびスレーブディレクトリのデータ構造を示す図。 第1の実施の形態におけるディレクトリLUNに対するリード/ライト処理における、ディレクトリ領域をマップしたキャッシュブロック探索のフローチャート。 第1の実施の形態におけるノードxにおけるマスタディレクトリkを示す図(図6(a))と、ノード(y+2)から該キャッシュブロックに対してライト要求を受信した後のマスタディレクトリkを示す図(図6(b))。 第1の実施の形態におけるスレーブノードにおける、データサイズがキャッシュブロックサイズ以下のリード要求受信処理のフローチャート。 第1の実施の形態におけるマスタノードにおける、データサイズがキャッシュブロックサイズ以下のリード要求受信処理のフローチャート。 第1の実施の形態におけるスレーブノードにおける、データサイズがキャッシュブロックサイズ以下のライト要求受信処理のフローチャート。 第1の実施の形態におけるマスタノードにおける、データサイズがキャッシュブロックサイズ以下のライト要求受信処理のフローチャート。 第2の実施の形態に係るストレージクラスタシステムの構成例を示す簡略ブロック図。 第2の実施の形態におけるスレーブノードにおけるデータサイズがキャッシュブロックサイズ以下のリード要求受信処理のフローチャート。 第2の実施の形態におけるマスタノードにおける、データサイズがキャッシュブロックサイズ以下のリード要求受信処理のフローチャート。 第2の実施の形態におけるマスタノードにおける、データサイズがキャッシュブロックサイズ以下のライト要求受信処理のフローチャート。
符号の説明
1…ホストコンピュータ、2…ブロックデバイス制御装置、3…スイッチ、4…ディスクアレイ、5…ハートビートチャネル、201…ホストインタフェース、202…ROM、203…I/Oプロセッサ、204…メモリ、205…バッテリ

Claims (9)

  1. 互いに接続された複数の記憶デバイス制御装置と、前記複数の記憶デバイス制御装置によってそれぞれ管理される物理記憶デバイスとを備えてなり、前記各物理記憶デバイスが統合されることによって、外部装置へ提供される仮想記憶デバイスを形成しているストレージクラスタシステムにおいて、
    前記各記憶デバイス制御装置は、前記外部装置または前記各記憶デバイス制御装置のうちの他の記憶デバイス制御装置からの前記仮想記憶デバイスへのアクセス要求に対し、アクセス対象範囲が配下の物理記憶デバイスに存在しない場合にはスレーブノードとして機能し、存在する場合にはマスタノードとして機能し、
    前記スレーブノードとして機能する記憶デバイス制御装置は、前記アクセス要求を受信した場合には、前記マスタノードとして機能する記憶デバイス制御装置へ前記アクセス要求を転送し、前記アクセス要求がリード要求であれば、前記マスタノードとして機能する記憶デバイス制御装置から転送されたデータをキャッシュし、前記アクセス要求がライト要求であれば前記外部装置から転送されたデータをキャッシュし、
    前記マスタノードとして機能する記憶デバイス制御装置は、配下の物理記憶デバイス内の領域のうち、前記仮想記憶デバイスを形成する領域に関する、キャッシュの状態を管理するデータ構造であるディレクトリエントリを含んだマスタディレクトリを管理し、前記マスタディレクトリをマップしたディレクトリ仮想記憶デバイスを備え、
    前記ディレクトリ仮想記憶デバイスは、前記各記憶デバイス制御装置からアクセス可能であり、
    前記ディレクトリエントリには、前記スレーブノードとして機能する記憶デバイス制御装置と前記アクセス対象範囲との関連付けが記録され、
    前記キャッシュの状態が更新された場合、前記各記憶デバイス制御装置のうちの何れかが前記ディレクトリ仮想記憶デバイスにライトすることで、前記ディレクトリエントリにおける前記スレーブノードとして機能する記憶デバイス制御装置と前記アクセス対象範囲との関連付けを更新し、
    前記スレーブノードとして機能する記憶デバイス制御装置が前記ディレクトリ仮想記憶デバイスをリードすることで、前記ディレクトリエントリによって前記スレーブノードとして機能する記憶デバイス制御装置と前記アクセス対象範囲が関連付けられていれば、前記キャッシュされたデータが有効であると判定でき、キャッシュの一貫性を保証するストレージクラスタシステム。
  2. 請求項1に記載のストレージクラスタシステムにおいて、
    前記マスタノードとして機能する記憶デバイス制御装置は、前記アクセス要求が転送された場合、前記ディレクトリ仮想記憶デバイスをライトし、前記マスタディレクトリにおけるディレクトリエントリを更新するストレージクラスタシステム。
  3. 請求項1に記載のストレージクラスタシステムにおいて、
    前記スレーブノードとして機能する記憶デバイス制御装置は、前記アクセス要求を受信した場合、前記ディレクトリ仮想記憶デバイスをライトし、前記マスタディレクトリにおけるディレクトリエントリを更新するストレージクラスタシステム。
  4. 請求項1に記載のストレージクラスタシステムにおいて、
    前記スレーブノードとして機能する記憶デバイス制御装置が、前記マスタディレクトリのコピーをマップしたディレクトリコピー仮想記憶デバイスを備え、
    前記ディレクトリコピー仮想記憶デバイスの情報は、前記各記憶デバイス制御装置間で共有され、
    前記各記憶デバイス制御装置のうちの何れかが前記ディレクトリコピー仮想記憶デバイスにライトすることで、前記マスタディレクトリのコピーの前記ディレクトリエントリにおける前記スレーブノードとして機能する記憶デバイス制御装置と前記アクセス対象範囲との関連付けを更新し、
    前記スレーブノードとして機能する記憶デバイス制御装置が前記アクセス要求を受信し、前記アクセス対象範囲のキャッシュデータを保持している場合に、前記ディレクトリコピー仮想記憶デバイスをリードし、前記マスタディレクトリのコピーに記録されたディレクトリエントリによって前記スレーブノードとして機能する記憶デバイス制御装置と前記アクセス対象範囲とが関連付けられていれば、前記キャッシュデータが有効であると判定するストレージクラスタシステム。
  5. 請求項4に記載のストレージクラスタシステムにおいて、
    前記マスタノードとして機能する記憶デバイス制御装置は、前記アクセス要求が転送された場合、前記ディレクトリ仮想記憶デバイスをライトして前記マスタディレクトリに記録されたディレクトリエントリを更新するとともに、前記ディレクトリコピー仮想記憶デバイスをライトして前記マスタディレクトリのコピーに記録されたディレクトリエントリを更新するストレージクラスタシステム。
  6. 請求項4に記載のストレージクラスタシステムにおいて、
    前記スレーブノードとして機能する記憶デバイス制御装置は、前記アクセス要求を受信した場合、前記ディレクトリ仮想記憶デバイスをライトして前記マスタディレクトリに記録されたディレクトリエントリを更新するとともに、前記ディレクトリコピー仮想記憶デバイスをライトして前記マスタディレクトリのコピーに記録されたディレクトリエントリを更新するストレージクラスタシステム。
  7. 請求項4に記載のストレージクラスタシステムにおいて、
    前記ディレクトリコピー仮想記憶デバイスにマップされる前記マスタディレクトリのコピーを、コピー元のディレクトリ管理ノードの仮想記憶領域の仮想番地と同じ仮想番地にマップするストレージクラスタシステム。
  8. 請求項4又は請求項7に記載のストレージクラスタシステムにおいて、
    互いに同期しているタイマを前記各記憶デバイス制御装置にそれぞれ備え、
    前記ディレクトリエントリにおいて、自己が備えるタイマによって計時された時刻に、予め定めた時間を加えた時刻を示すタイムスタンプを、前記アクセス要求で指定されたアクセス対象範囲に更に関連付け、
    前記スレーブノードとして機能する記憶デバイス制御装置が前記アクセス要求を受信した場合に、アクセス対象範囲のキャッシュデータを保持していれば、前記ディレクトリコピー仮想記憶デバイスをリードし、前記マスタディレクトリのコピーに記録されたディレクトリエントリによって前記スレーブノードとして機能する記憶デバイス制御装置と前記アクセス対象範囲とが関連付けられており、前記ディレクトリエントリによって前記アクセス対象範囲に関連付けられたタイムスタンプによって示される時刻が、自己が備えるタイマによって計時された時刻よりも過去ではない場合には、このアクセス対象範囲からのキャッシュされたデータは有効であると判定し、過去である場合には、このアクセス対象範囲からのキャッシュされたデータは無効であると判定するストレージクラスタシステム。
  9. 請求項8に記載のストレージクラスタシステムにおいて、
    前記スレーブノードとして機能する記憶デバイス制御装置は、前記マスタディレクトリのコピーに記録されたディレクトリエントリにおいて、前記アクセス対象範囲に関連付けられたタイムスタンプによって示される時刻が、自己が備えるタイマによって計時された時刻よりも過去である場合、このアクセス対象範囲からのキャッシュされたデータの有効性を、前記ディレクトリ仮想記憶デバイスをリードすることにより問い合わせるストレージクラスタシステム。
JP2006305437A 2006-11-10 2006-11-10 キャッシュ一貫性保証機能を有するストレージクラスタシステム Active JP4643543B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006305437A JP4643543B2 (ja) 2006-11-10 2006-11-10 キャッシュ一貫性保証機能を有するストレージクラスタシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006305437A JP4643543B2 (ja) 2006-11-10 2006-11-10 キャッシュ一貫性保証機能を有するストレージクラスタシステム

Publications (2)

Publication Number Publication Date
JP2008123198A JP2008123198A (ja) 2008-05-29
JP4643543B2 true JP4643543B2 (ja) 2011-03-02

Family

ID=39507898

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006305437A Active JP4643543B2 (ja) 2006-11-10 2006-11-10 キャッシュ一貫性保証機能を有するストレージクラスタシステム

Country Status (1)

Country Link
JP (1) JP4643543B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105511805A (zh) * 2015-11-26 2016-04-20 深圳市中博科创信息技术有限公司 集群文件系统的数据处理方法和装置

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8190816B2 (en) * 2008-10-17 2012-05-29 Netapp, Inc. Embedded scale-out aggregator for storage array controllers
US8667098B2 (en) * 2010-12-03 2014-03-04 Hitachi, Ltd. Cluster storage setting method, system, and management system
KR20200037376A (ko) 2017-08-10 2020-04-08 후아웨이 테크놀러지 컴퍼니 리미티드 데이터 액세스 방법, 디바이스 및 시스템
CN110990483B (zh) * 2019-11-26 2023-05-30 上海莉莉丝科技股份有限公司 分布式缓存中的缓存节点的数据访问和控制方法及系统
CN113312300B (zh) * 2021-06-17 2024-05-03 上海天玑科技股份有限公司 一种融合数据传输和存储的非易失内存缓存方法
CN117614956B (zh) * 2024-01-24 2024-03-29 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) 一种分布式存储的网内缓存方法、系统以及储存介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003140837A (ja) * 2001-10-30 2003-05-16 Hitachi Ltd ディスクアレイ制御装置
JP2003173295A (ja) * 2001-12-05 2003-06-20 Hitachi Ltd ディスク制御装置のキャッシュメモリ配置構成
JP2003519686A (ja) * 2000-01-11 2003-06-24 アルタナ ファルマ アクチエンゲゼルシャフト フェナントリジン−n−オキシド
JP2005043930A (ja) * 2003-07-22 2005-02-17 Hitachi Ltd 記憶装置システム
JP2005276094A (ja) * 2004-03-26 2005-10-06 Hitachi Ltd 分散ストレージ装置のファイル管理方法及び分散ストレージシステム並びにプログラム
JP2005301802A (ja) * 2004-04-14 2005-10-27 Hitachi Ltd ストレージシステム
JP2006018689A (ja) * 2004-07-02 2006-01-19 Hitachi Ltd ストレージ制御装置、そのクラスタ間データ通信方法、及びそのクラスタ間通信制御プログラム

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3772369B2 (ja) * 1995-11-20 2006-05-10 株式会社日立製作所 記憶サブシステム
JPH1185616A (ja) * 1997-09-11 1999-03-30 Canon Inc 情報処理システム及び情報処理装置及びそれらの制御方法及び記憶媒体

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003519686A (ja) * 2000-01-11 2003-06-24 アルタナ ファルマ アクチエンゲゼルシャフト フェナントリジン−n−オキシド
JP2003140837A (ja) * 2001-10-30 2003-05-16 Hitachi Ltd ディスクアレイ制御装置
JP2003173295A (ja) * 2001-12-05 2003-06-20 Hitachi Ltd ディスク制御装置のキャッシュメモリ配置構成
JP2005043930A (ja) * 2003-07-22 2005-02-17 Hitachi Ltd 記憶装置システム
JP2005276094A (ja) * 2004-03-26 2005-10-06 Hitachi Ltd 分散ストレージ装置のファイル管理方法及び分散ストレージシステム並びにプログラム
JP2005301802A (ja) * 2004-04-14 2005-10-27 Hitachi Ltd ストレージシステム
JP2006018689A (ja) * 2004-07-02 2006-01-19 Hitachi Ltd ストレージ制御装置、そのクラスタ間データ通信方法、及びそのクラスタ間通信制御プログラム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105511805A (zh) * 2015-11-26 2016-04-20 深圳市中博科创信息技术有限公司 集群文件系统的数据处理方法和装置
CN105511805B (zh) * 2015-11-26 2019-03-19 深圳市中博科创信息技术有限公司 集群文件系统的数据处理方法和装置

Also Published As

Publication number Publication date
JP2008123198A (ja) 2008-05-29

Similar Documents

Publication Publication Date Title
JP6967986B2 (ja) メモリシステム
Byan et al. Mercury: Host-side flash caching for the data center
TWI525431B (zh) 資料儲存系統、資料結構及資料儲存方法
US7380059B2 (en) Methods and systems of cache memory management and snapshot operations
JP5349897B2 (ja) ストレージシステム
JP4643543B2 (ja) キャッシュ一貫性保証機能を有するストレージクラスタシステム
JP6898393B2 (ja) ストレージシステム及びデータ転送方法
US9442858B2 (en) Solid state drives as a persistent cache for database systems
US20090240880A1 (en) High availability and low capacity thin provisioning
US20080235477A1 (en) Coherent data mover
JP5806776B2 (ja) ストレージシステム
US9940023B2 (en) System and method for an accelerator cache and physical storage tier
US20050005074A1 (en) Multi-node system in which home memory subsystem stores global to local address translation information for replicating nodes
JP2017151982A (ja) データストレージサブシステムにおけるキャッシングのための方法およびシステム
JP2011521315A (ja) マルチプロセッサ/マルチスレッド環境における記憶要求を調整するための装置、システム及び方法
WO2012116369A2 (en) Apparatus, system, and method for managing contents of a cache
US20130227219A1 (en) Processor, information processing apparatus, and arithmetic method
WO2011002437A1 (en) Memory agent to access memory blade as part of the cache coherency domain
US20160266793A1 (en) Memory system
US9632934B2 (en) Maintaining coherence when removing nodes from a directory-based shared memory system
CN116194900A (zh) 高速缓存技术
WO2012021847A2 (en) Apparatus, system and method for caching data
US20040260905A1 (en) Multi-node system in which global address generated by processing subsystem includes global to local translation information
US10067877B1 (en) Method, apparatus and computer program product for use in managing multi-cache data storage systems
JP2006164218A (ja) ストレージシステム及びそのキャッシュ制御方法

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20091028

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091104

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091224

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100420

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100618

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20101109

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20101202

R150 Certificate of patent or registration of utility model

Ref document number: 4643543

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131210

Year of fee payment: 3

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350