JP4286857B2 - ノード間共用ファイル制御方法 - Google Patents

ノード間共用ファイル制御方法 Download PDF

Info

Publication number
JP4286857B2
JP4286857B2 JP2006253341A JP2006253341A JP4286857B2 JP 4286857 B2 JP4286857 B2 JP 4286857B2 JP 2006253341 A JP2006253341 A JP 2006253341A JP 2006253341 A JP2006253341 A JP 2006253341A JP 4286857 B2 JP4286857 B2 JP 4286857B2
Authority
JP
Japan
Prior art keywords
file
token
cache
node
data
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.)
Expired - Fee Related
Application number
JP2006253341A
Other languages
English (en)
Other versions
JP2006351040A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2006253341A priority Critical patent/JP4286857B2/ja
Publication of JP2006351040A publication Critical patent/JP2006351040A/ja
Application granted granted Critical
Publication of JP4286857B2 publication Critical patent/JP4286857B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、複数のノード(ホストコンピュータ)から同一のファイルを共用することを可能とするノード間共用ファイルシステム(分散ファイルシステム)のコンシステンシ保証制御技術に関する。
分散ファイルシステムにおいて、トークンを利用して複数のノード上にキャッシュされているデータのコンシステンシ(一貫性、整合性)を保つ方式は良く知られている。代表的な方式では、ファイルのアクセス範囲(通常、ブロック番号の始端と終端が用いられる)ごとにmultiple-read/single-writeの制御を行うトークンが用意される。そして、ファイルにアクセスしようとするノードは、自身がアクセス範囲のトークンを保持しているか否かを調べ、もし保持していなければトークンを管理しているサーバにトークンを要求する。トークンを管理しているサーバは、read権は複数のノードに渡されることを許し(multiple-read )、write 権は1つのノードのみに渡されるように(single-write)、アクセス権制御を実行する。
上述の従来方式は、各ノードにキャッシュされているデータの一貫性を保ちつつサーバとクライアントの間の通信を減らすために有効な方式であるが、以下の問題点を有する。

1)ファイルアクセスの都度にトークンを獲得する必要がある。例えば、科学技術計算のための巨大なファイルをユーザがシーケンシャルにアクセスする場合、ユーザは、特定バイトずつのファイルアクセス要求を出す都度に、サーバにトークンを獲得するための要求を発行せざるを得ない。この事実は、オーバヘッドの増大を招く。

2)ファイルが最後にアクセスされた時刻を保持するファイルアクセス時刻(ファイル時刻)の正当性を保証するために、ユーザはファイルアクセス要求を発行する都度にサーバにそのアクセスの存在を通知せざるを得ない。この事実は、オーバヘッドの増大を招く。

3)ユーザはファイルサイズを更新するときにはその旨をサーバに通知し、サーバは他ノードに発行されている全てのトークンを回収しなければならない。このため、例えばファイルを拡張するプログラムとファイルをその先頭から順に読むプログラムをそれぞれ異なるノードで同時に実行させることができず、システム全体の性能が低下するといった問題が生ずる。

4)サーバが二重化され、障害発生時に運用サーバが待機系サーバに切り替えられる機能を有するシステムにおいて、待機系サーバへの切替えの時点でいままで運用されてきた時計も待機系のサーバ内の時計に切り替えられるため、ファイル時刻の逆転現象が発生する可能性がある。この事実は、データのコンシステンシの喪失を招く。

5)メインフレームで採用されるような、ディスクがノード間で直接共用されネットワークを介したデータ転送が削減される方式を、離散ファイルを特徴とするオープン系のファイルシステムに適用しようとした場合に、各ノードはファイルシステム上でブロックを割り当てる都度にサーバと通信する必要が生ずる。この事実は、オーバヘッドの増大を招く。
一方、トークンを利用した分散ファイルシステムにおいては、複数のノードが同時並行的なアクセスを行うため、ファイルシステムの耐故障性に関しても十分な配慮が必要である。一般に、ファイルシステムの耐故障性を向上させる方式として、ログファイルを設けてメタデータの更新をトランザクショナルに行うログ方式が知られている。ログ方式では一般に、1つのトランザクションの処理途中結果を他のトランザクションに見せてはならないという制約のために、いわゆる2フェーズロック制御が行われる。この制御では、更新に必要なロックが順に獲得されてゆき、全ての更新が完了した時点で一括して、メタデータの更新内容がログファイルロックに書き出され、書出しが完了した時点でロックが一括して返却される。この際に必然的に発生する複数のロック獲得に伴うデッドロックは、資源獲得を示す有向グラフを用いて自動的に検出され、デッドロックの原因となっている一方のトランザクションがキャンセルされ、再試行させられることにより解消される方式が、一般的に用いられる。
しかし、上述のようなログ方式をトークンシステムに適用してデッドロックを自動的に検出し回復を図る汎用的な方式は考え出されていない。また、従来のログ方式では、ログがキャッシュブロック単位に採取されると共に、トランザクション終了時にファイルシステムの実更新が発生するため、I/O量が相対的に多くなるという欠陥があった。
また上記ログ方式では、トランザクションのキャンセル時のデータ復元処理がメタデータのみに限られ、性能向上のために用意きれたメモリに常駐する制御表は対象外であるため、プログラム作成が難しいという欠陥も持っていた。
本発明の課題は、トークンを用いたノード間共用ファイルシステムにおいて、上述の各問題点を解決することにあり、メタデータの更新をコンシステントにかつデッドロックフリーで行なうことにより従来のログ方式の性能上及びプログラム作成上の問題点を解決することにある。
本発明の第1の構成は、サーバ装置において、クライアント装置からのトークン回収完了メッセージの受信時に、そのメッセージに対応するトークン回収の契機となった要求を処理している実行単位が保持していたファイルロックを継承して処理を実行することによりデッドロックを回避する過程を含むように構成される。この場合に、ロックの継承を行える実行単位を1つに制限する過程を更に含むように構成することができる。
上述した本発明の第1の構成によれば、トークン制御において、デッドロックの発生を回避することのできる効率的なファイルロック制御が実現される。
本発明の第2の構成は、本発明の第1の構成において、トークン回収の待ち状態を資源として記憶し、他の資源の獲得待ち状態との関係から、デッドロック状態を自動的に検出する過程を更に含むように構成される。
上述した本発明の第2の構成によれば、トークンに基づいてトランザクション制御されているメタデータ等の更新処理におけるデッドロックの発生を適切に検出することができる。
本発明の第3の構成は、本発明の第2の構成において、デッドロック状態が検出されその状態の原因となっているトランザクションがキャンセルさせられる際に、更新されたキャッシュデータの無効化と共に、主記憶装置に常駐されている関連制御表の再設定を行う過程を更に含むように構成される。
上述した本発明の第3の構成によれば、トランザクションのキャンセルに伴う常駐制御表の高速なリストアが実現される。
本発明の第4の構成は、本発明の第1の構成を前提として、デッドロック状態の発生に備え、ファイル又はディスクに関する属性情報を保持するメタデータの更新をキャッシュ上でのみ行い、ディスクへの書き込みが、要求された処理の完了まで遅延させられるトランザクション制御において、キャッシュデータの更新時に更新されたキャッシュ位置を記録する過程と、トランザクションの完了時に、前記記録から必要最小限の変更データのみをログファイルに書き出すことによりログデータ量を削減する過程とを含むように構成される。ここで、更新されたキャッシュ位置を記録する際に、その記録と先行する記録とをマージすることにより、ログファイルに書き出すログデータ量を最小化する過程を更に含むように構成することができる。
上述した本発明の第4の構成によれば、ログファイルに書き出されるログデータ量の削減が実現される。本発明の第5の構成は、本発明の第4の構成において、キャッシュが2次キャッシュを含むように構成される。
上述した本発明の第5の構成によれば、ログファイルを実ディスク上に書き出すログフラッシュ処理を、実行中のトランザクションと独立して行うことが可能となり、システム性能の向上が実現される。
本発明の第1の構成によれば、トークン制御において、デッドロックの発生を回避することのできる効率的なファイルロック制御が実現される。本発明の第2の構成によれば、トークンに基づいてトランザクション制御されているメタデータ等の更新処理におけるデッドロックの発生を適切に検出することができる。
本発明の第3の構成によれば、トランザクションのキャンセルに伴う常駐制御表の高速なリストアが実現される。本発明の第4の構成によれば、ログファイルに書き出されるログデータ量の削減が実現される。
本発明の第5の構成によれば、ログファイルを実ディスク上に書き出すログフラッシュ処理を、実行中のトランザクションと独立して行うことが可能となり、システム性能の向上が実現される。
以下、本発明の実施の形態について詳細に説明する。図1は、本発明の実施の形態の構成を示すブロック構成図である。
#1〜#3の各ノード101は、ファイル105が格納されているディスク装置と直結され、またローカルエリアネットワーク(LAN)106によって相互に接続される。
ファイル105を共用する複数のノード101(図中では、#1〜#3)の全てにクライアント部102、そのうちの2つのノード101(図中では、#1と#2)にサーバ部103が存在する。
一方のノード101(#1)内のサーバ部103(#1)は主サーバ、他方のノード101(#2)のサーバ部103(#2)は従サーバと呼ばれる。それぞれのノード101内のクライアント部102は、主サーバであるノード101(#1)内のサーバ部103(#1)とのみ通信することにより、ファイル操作処理を実行する。
主サーバであるサーバ部103(#1)は、任意のクライアント部102からの要求(依頼)を処理して、その処理結果を、自身が保持するメタデータ104(#1)に反映させる。従サーバであるノード101(#2)内のサーバ部103(#2)が存在するときには、主サーバであるサーバ部103(#1)は、メタデータ104(#1)の更新内容(差分)をサーバ部103(#2)にも送る。従サーバであるサーバ部103(#2)は、送られてきたデータをノード101(#2)内のメタデータ104(#2)に反映させる。
任意のノード101内のクライアント部102は、図2に示されるように、そのノード101内のオペレーティングシステム(OS)201内に存在し、そのノード101内のユーザプログラム202からのファイル操作要求を、主サーバであるノード101(#1)内のサーバ部103(#1)の助けを借りて処理する。#1又は#2のノード101内のサーバ部103は、そのノード101内のオペレーティングシステム201に組み込んでもよいし、ユーザデーモンプログラムとしてオペレーティングシステム201の外に実装してもよい。このサーバ部103は、複数のノード101上のクライアント部102からのファイル操作要求を、LAN106(図1参照)を介して受け付ける。
上述の構成のもとでクライアント部102とサーバ部103がファイル操作制御を実行する場合、本実施の形態では、下記のトークンが用いられる。
1)ファイル105ごとに複数種類(例えば4種類)のトークンが用意され、その中に、ファイルサイズの拡張を制御しmultiple-read/single-write特性を有するサイズトークンが含めさせられる。
2)ファイル105ごとに複数種類(例えば4種類)のトークンが用意され、その中に、ファイル時刻を制御しmultiple-write/multiple-read特性を有する時刻トークンが含めさせられる。1つのノード101は、1つのファイル105について、read権の時刻トークンとwrite 権の時刻トークンを同時に取得できる。ただし、或るノード101内のクライアント部102がサーバ部103に或るファイル105についてのread権の時刻トークンを要求したときに、他のノード101内のクライアント部102がそのファイル105についてのwrite 権の時刻トークンを持っていた場合には、サーバ部103は、その、他のノード101内の時刻トークンを回収する。また逆に、或るノード101内のクライアント部102がサーバ部103に或るファイル105についてのwrite 権の時刻トークンを要求したときに、他のノード101内のクライアント部102がそのファイル105についてのread権の時刻トークンを持っていた場合も、サーバ部103は、その、他のノード101内の時刻トークンを取り上げる。すなわち、1つのファイル105については、複数のノードがそれぞれ、そのファイル105についてのread権の時刻トークンとwrite 権の時刻トークンを同時に保有するということはない。
3)ファイル105ごとに複数種類(例えば4種類)のトークンが用意され、その中に、ファイルサイズの縮小を制御しmultiple-read/single-write特性を有する属性トークンが含めさせられる。
4)ファイル105ごとに複数種類(例えば4種類)のトークンが用意され、その中に、ファイル内データのアクセス権を制御しファイル105を構成するブロックごとに存在するmultiple-read/single-write特性を有するデータトークンが含めさせられる。また、本実施の形態は、下記の基本的動作を実行する。
5)各トークンは、サーバ部103によって管理され、トークンが必要なノード101内のクライアント部102は、サーバ部103に、必要なトークンの獲得を要求(依頼)する。
6)サーバ部103は、ファイル105を格納するディスク上のどこが空いているかを示す空きブロック情報(空きエクステント情報)及び個々のファイル105のディスク上での存在場所(ファイル105のエクステント情報)を、メタデータ104として管理している。
7)クライアント部102は、サーバ部103に、ディスク上の空きブロック群(空きエクステント群)を事前要求(リザーブ要求)し、ユーザプログラム202からのwrite 要求時には、事前要求で確保しておいた空きエクステント群の中から最適なものを割り当て、そこにユーザデータを書き込む。
続いて、本実施の形態の具体的な動作について、以下に順次説明する。
図3は、任意のノード101内のクライアント部102が実行するファイル操作要求制御のメイン動作フローチャートであり、図5及び図6は、主サーバであるノード101(#1)内のサーバ部103(#1)が実行するファイル操作要求制御のメイン動作フローチャートである。なお、以下の説明において、特に言及しない場合には、「サーバ部103」と記述した場合には、主サーバであるノード101(#1)内のサーバ部103(#1)を指すものとする。
1)クライアント部102及びサーバ部103でのopen操作処理
任意のノード101において、ユーザプログラム202(図2)がファイル105のopen要求を実行すると、同一のノード101内のクライアント部102がそのopen要求を受け取る(図3のステップ301の判定がYES)。この結果、クライアント部102は、open操作処理を実行する(図3のステップ302)。図4は、クライアント部102が実行する図3のステップ302のopen操作処理の動作フローチャートである。
まず、クライアント部102は、LAN106(図1)を介して、サーバ部103に、open要求を送信する。このopen要求には、アクセスの種別を示すオープンモード(read又はwrite )が付加される。
その後、クライアント部102は、サーバ部103からの応答を待つ(図4のステップ402−>403−>402の処理ループ)。なお、タイムアウト時には、クライアント部102は、エラー処理を実行し(図4のステップ403−>404)、その後、図3のメイン動作フローチャートの処理ループに戻る。
サーバ部103は、クライアント部102からopen要求を受信すると(図5のステップ500の判定がYES)、open操作処理を実行する(図5のステップ501)。図7は、サーバ部103が実行する図5のステップ501のopen操作処理の動作フローチャートである。
まず、サーバ部103は、受信されたopen要求によって指定されているファイル105(図1)について、そのopen要求によって指定されているオープンモードと矛盾するデータトークンを他のノード101に渡しているかどうかを調べる(図7のステップ701)。
サーバ部103は、上記オープンモードと矛盾するデータトークンを他のノード101に渡していない場合に、ファイル全体のデータトークン及びエクステント情報と、属性トークンと、サイズトークンと、時刻トークンと、属性データを、それぞれ応答データとして設定し(図7のステップ702〜706)、応答処理を実行する(図7のステップ707)。ファイル全体のデータトークンとサイズトークンは、それぞれ、前記open要求によって指定されているオープンモードが、readならread権のトークン、write ならwrite 権のトークンである。また、時刻トークンは、write 権のトークンである。さらに、属性データには、例えばファイルサイズ、アクセス権、ファイル作成日付、ファイル更新日付等のデータが含まれる。
一方、サーバ部103は、上記オープンモードと矛盾するデータトークンを他のノード101に渡している場合には、ファイル全体のデータトークンは設定せずに、エクステント情報と、属性トークンと、サイズトークンと、時刻トークンと、属性データのみを、それぞれ応答データとして設定し(図7のステップ703〜706)、応答処理を実行する(図7のステップ707)。
クライアント部102は、サーバ部103から応答を受信すると、その応答に含まれているファイル全体のデータトークン及びエクステント情報と、属性トークンと、サイズトークンと、時刻トークンと、属性データを、それぞれメモリ内のキャッシュ領域に保持する(図4のステップ402−>405〜409)。その後、クライアント部102は、ユーザプログラム202へのファイルディスクリプタの応答等の、その他のopen操作処理を実行し、その後、図3のメイン動作フローチャートの処理ループに戻る。
以上のようにして、本実施の形態では、ファイル105のopen時に、競合が発生していなければ、以降のファイルアクセス(readアクセス又はwrite アクセス)に必要なトークンが全て渡されるため、クライアント部102は、サーバ部103との間で、トークン獲得のための通信を行う必要が全くなくなるという効果を有する。
また、open要求時にファイル全体のトークンが引き渡されることにより、可能な限り新たなトークン要求を行わずにファイルへの連続アクセスが可能となる。データベースアクセス等を除く一般的なファイルアクセスでは、1つのノード101からのwrite 要求の発行時に他のノード101からread命令が発行される確率は小さい。従って、1つのノード101に引き渡されたファイル全体のトークンが回収される確率も低く、ファイル105への連続アクセス時にアクセス単位ごとにトークン要求が不要になることによる性能向上が期待できる。
2)クライアント部102でのread操作処理
任意のノード101で、ユーザプログラム202がファイル105のread要求を発行すると、同一のノード101内のクライアント部102がそのread要求を受け取る(図3のステップ303の判定がYES)。この結果、クライアント部102は、read操作処理を実行する(図3のステップ304)。図8は、クライアント部102が実行する図3のステップ304のread操作処理の動作フローチャートである。
まず、クライアント部102は、必要な以下のトークンを保持しているかどうかを調べる(図8のステップ801)。
・read要求された範囲のread権のデータトークン
・属性トークン
・write 権の時刻トークン
・read要求が最終ブロックのread要求である場合のみ、
その最終ブロックについてのread権のサイズトークン
ここで、属性トークンが存在すれば、ファイル105の最終ブロックの1つ前のブロックまではファイル内容が変更されていないことが保証されるため、かかるブロックのread操作処理時にはサイズトークンは獲得する必要はない。一方、read要求が最終ブロックのread要求である場合において、上記サイズトークンが存在しない場合には、他のノード101内のクライアント部102がその最終ブロックからのファイルサイズの拡張処理(write 操作処理)を実行している可能性があり、最終ブロックのread可能範囲が保証されない。上記サイズトークンが獲得された場合には、最終ブロックのread可能範囲が保証されるため、ユーザプログラム202は、その最終ブロックについてのread操作処理が可能となる。
このように本実施の形態では、ファイル105の最終ブロックにアクセスするのでなければ、サイズトークンを獲得することなくファイル105にアクセスすることが可能となり、これと並行して、他のノード101は、サイズトークンを獲得してファイル105の最終ブロックにアクセスし、ファイル105のサイズを拡張するwrite 操作処理を実行することができる。このため、例えばファイルを拡張するプログラムとファイルをその先頭から順に読むプログラムをそれぞれ異なるノード101で同時に実行させることが可能となり、システム全体の性能を向上させることができる。
クライアント部102は、もし上記トークンを全て保持しているなら、サーバ部103にトークンを要求することなく、クライアント部102が保持する(キャッシュしている)データを使って、ユーザプログラム202の要求を処理する(図8のステップ801−>802)。その後、クライアント部102は、図3のメイン動作フローチャートの処理ループに戻る。
一方、クライアント部102は、もし不足するトークンが存在するなら、そのトークンをLAN106(図1)を介してサーバ部103に要求し、サーバ部103からの応答を待つ(図8のステップ801−>803,ステップ804−>805−>804の処理ループ)。なお、タイムアウト時には、クライアント部102は、エラー処理を実行し(図4のステップ403−>404)、その後、図3のメイン動作フローチャートの処理ループに戻る。
クライアント部102は、サーバ部103から応答を受信すると、その応答に基づいてユーザプログラム202の要求を処理する(図8のステップ804−>807)。その後、クライアント部102は、図3のメイン動作フローチャートの処理ループに戻る。
3)クライアント部102でのwrite 操作処理
任意のノード101で、ユーザプログラム202がファイル105のwrite 要求を発行すると、同一のノード101内のクライアント部102がそのwrite 要求を受け取る(図3のステップ305の判定がYES)。この結果、クライアント部102は、write 操作処理を実行する(図3のステップ306)。この処理は、read操作処理と同様の図8の動作フローチャートによって示される。
まず、クライアント部102は、必要な以下のトークンを保持しているかどうかを調べる(図8のステップ801)。
・write 要求された範囲のwrite 権のデータトークン
・属性トークン
・write 権の時刻トークン
・write 要求が最終ブロックのwrite 要求である場合のみ、
その最終ブロックについてのwrite 権のサイズトークン
ここで、サイズトークンを用いることにより得られる効果は、read操作処理時の場合と同様である。
クライアント部102は、もし上記トークンを全て保持しているなら、サーバ部103にトークンを要求することなく、クライアント部102が保持する(キャッシュしている)データを使って、ユーザプログラム202の要求を処理する(図8のステップ801−>802)。その後、クライアント部102は、図3のメイン動作フローチャートの処理ループに戻る。
一方、クライアント部102は、もし不足するトークンが存在するなら、そのトークンをLAN106(図1)を介してサーバ部103に要求し、サーバ部103からの応答を待つ(図8のステップ801−>803,ステップ804−>805−>804の処理ループ)。なお、タイムアウト時には、クライアント部102は、エラー処理を実行し(図4のステップ403−>404)、その後、図3のメイン動作フローチャートの処理ループに戻る。
クライアント部102は、サーバ部103から応答を受信すると、その応答に基づいてユーザプログラム202の要求を処理する(図8のステップ804−>807)。その後、クライアント部102は、図3のメイン動作フローチャートの処理ループに戻る。
4)クライアント部102でのファイル時刻操作処理
任意のノード101において、ユーザプログラム202(図2)がファイル105に関するファイル時刻を要求すると、同一のノード101内のクライアント部102がその要求を受け取る(図3のステップ307の判定がYES)。この結果、クライアント部102は、ファイル時刻操作処理を実行する(図3のステップ308)。図9は、クライアント部102が実行する図3のステップ308のファイル時刻操作処理の動作フローチャートである。
まず、クライアント部102は、ユーザプログラム202から指定されたファイル105について、read権の時刻トークンのみを保持しているかどうかを調べる(図9のステップ901)。この判定がYESならば、クライアント部102は、自身が保持するファイル時刻をユーザプログラム202に応答する(図9のステップ903)。その後、クライアント部102は、図3のメイン動作フローチャートの処理ループに戻る。
上記判定がNOならば、クライアント部102は次に、ユーザプログラム202から指定されたファイル105について、read権とwrite 権の各時刻トークンを保持しており、かつ前回サーバ部103から上記ファイル105に関するファイル時刻を取得してからそのファイル105に未アクセスであるかどうかを調べる(図9のステップ902)。この判定がYESの場合にも、クライアント部102は、自身が保持するファイル時刻をユーザプログラム202に応答する(図9のステップ903)。その後、クライアント部102は、図3のメイン動作フローチャートの処理ループに戻る。
上記ステップ903の判定もNOならば、クライアント部102は、LAN106を介してサーバ部103に、自クライアント部102でのそのファイル105に関するファイルアクセスの有無を付加した要求であって、read権の時刻トークンの獲得要求を送信する(図9のステップ904)。
その後、クライアント部102は、サーバ部103からの応答を待つ(図9のステップ905−>906−>905の処理ループ)。なお、タイムアウト時には、クライアント部102は、エラー処理を実行し(図9のステップ906−>907)、その後、図3のメイン動作フローチャートの処理ループに戻る。
クライアント部102は、サーバ部103からファイル時刻を受信すると、そのファイル時刻をユーザプログラム202に応答する(図9のステップ905−>908)。また、クライアント部102は、そのファイル時刻を、クライアント部102内の上記ファイル105に対応するキャッシュ領域に保持する(図9のステップ909)。さらにクライアント部102は、上記キャッシュ領域において、上記ファイル105に対してファイルアクセスなしの状態を設定する(図9のステップ910)。
5)サーバ部103でのread権の時刻トークンの応答処理
任意のノード101において、クライアント部102が、前述した図3のステップ308及び図9のファイル時刻操作処理を実行することによって、サーバ部103にread権の時刻トークンを要求すると(図9のステップ904)、サーバ部103が、それを受け取ることにより(図5のステップ502の判定がYES)、read権の時刻トークンの応答処理を実行する(図5のステップ503)。図10は、サーバ部103が実行する図5のステップ503の応答処理の動作フローチャートである。
サーバ部103は、クライアント部102からread権の時刻トークンの獲得要求を受信すると、まずその時刻トークンに対応するwrite 権の時刻トークンを保持するクライアント部102が存在するかどうかを調べる(図10のステップ1001)。
この判定がYESの場合は、クライアント部102は、上記write 権の時刻トークンを保持する全てのクライアント部102に、そのwrite 権の時刻トークンの回収要求を発行し、全てのクライアント部102からの応答を待つ(図10のステップ1001−>1002,ステップ1003−>1004−>1003の処理ループ)。なお、タイムアウト時には、サーバ部103は、エラー処理を実行し(図10のステップ1004−>1005)、その後、図5及び図6のメイン動作フローチャートの処理ループに戻る。
これに対して、各クライアント部102では、要求されたwrite 権の時刻トークンの回収処理を実行する(図3のステップ309−>310)。具体的には、各クライアント部102は、要求されたwrite 権の時刻トークンを無効化すると共に、その時刻トークンに対応するファイル105に対するファイルアクセスの有無を、サーバ部103への応答に付加する。
サーバ部103は、ステップ1001の判定がNOであった場合、又は上記write 権の時刻トークンを保持する全てのクライアント部102からの応答を受信した場合に、read権の時刻トークンを要求しているクライアント部102に応答するファイル時刻を決定する(図10のステップ1006)。具体的には、要求元を含めて(図9のステップ904参照)、いずれかのノード101のクライアント部102がファイルアクセス有りを応答した場合は、サーバ部103は、自身がメタデータ104として保持する該当ファイル時刻を、現時刻により更新する。なお、各クライアント部102からファイルアクセス相対時刻間隔(何秒前にアクセスしたかを示すデータ)を応答させるようにし、応答された各クライアント部102からのファイルアクセス相対時刻間隔のうち最も小さい値によって、メタデータ104内の時刻を更新する(すなわち、[“現時刻”−“最も小さいファイルアクセス相対時刻間隔]にする)ように構成されてもよい。一方、いずれのノード101もファイルアクセス無しを応答した場合は、サーバ部103は、自身が保持するメタデータ104中の該当ファイル時刻を、そのまま使用する。
続いて、サーバ部103は、決定したメタデータ104中のファイル時刻を、read権の時刻トークンを要求したクライアント部102に応答する(図10のステップ1007)。
最後に、サーバ部103は、要求元のクライアント部102にread権の時刻トークンを渡したことをサーバ部103の主記憶中に記憶する(図10のステップ1008)。
その後、サーバ部103は、図5及び図6のメイン動作フローチャートの処理ループに戻る。
6)サーバ部103でのwrite 権の時刻トークンの応答処理
任意のノード101において、クライアント部102が、前述した図3のステップ304及び図8のread操作処理又は図3のステップ306及び図8のwrite操作処理を実行することにより、サーバ部103にwrite 権の時刻トークンを要求すると、サーバ部103が、それを受け取ることにより(図5のステップ504の判定がYES)、write 権の時刻トークンの応答処理を実行する(図5のステップ505)。図11は、サーバ部103が実行する図5のステップ505の応答処理の動作フローチャートである。
サーバ部103は、クライアント部102からwrite 権の時刻トークンの獲得要求を受信すると、まずその時刻トークンに対応するread権の時刻トークンを保持するクライアント部102が存在するかどうかを調べる(図11のステップ1101)。
この判定がYESの場合は、クライアント部102は、上記read権の時刻トークンを保持する要求クライアント部102を除く全てのクライアント部102に、そのread権の時刻トークンの回収要求を発行し、全てのクライアント部102からの応答を待つ(図11のステップ1101−>1102,ステップ1103−>1104−>1103の処理ループ)。なお、タイムアウト時には、サーバ部103は、エラー処理を実行し(図11のステップ1104−>1105)、その後、図5及び図6のメイン動作フローチャートの処理ループに戻る。
これに対して、各クライアント部102では、要求されたread権の時刻トークンの回収処理を実行する(図3のステップ309−>310)。具体的には、各クライアント部102は、要求されたread権の時刻トークンを無効化し、サーバ部103に応答を返す。
サーバ部103は、ステップ1101の判定がNOであった場合、又は上記read権の時刻トークンを保持する全てのクライアント部102からの応答を受信した場合に、write 権の時刻トークンを、要求クライアント部102に応答する(図11のステップ1106)。
最後に、サーバ部103は、要求元のクライアント部102にwrite 権の時刻トークンを渡したことをメタデータ104中に記憶する(図11のステップ1107)。
その後、サーバ部103は、図5及び図6のメイン動作フローチャートの処理ループに戻る。上述の2)〜6)で示したように、本実施の形態では、ユーザプログラム202がファイル105のread操作処理又はwrite 操作処理を実行するときには、該当クライアント部102はそのファイル105についてのwrite 権の時刻トークンを使用する。この際、クライアント部102はそのファイル105についてのwrite 権の時刻トークンを保持していなければサーバ部103にそれを要求する。これに応答してサーバ部103は、他のノード101からそのファイル105に対応するread権の時刻トークンは回収するが、write 権の時刻トークンは回収しない。従って、クライアント部102は、ユーザプログラム202が1つのファイル105に連続アクセスするような場合において、そのファイル105への最終的なアクセスが終了するまでwrite 権の時刻トークンを返却する必要も、またアクセスの有無をサーバ部103に通知する必要もなく、他のノード101との間でそのファイル105のファイル時刻の同期をとる必要がなくなる。このため、システム全体の性能を向上させることが可能となる。
なお、上述の制御によると、write 権の時刻トークンは、ユーザプログラム202がファイル105のファイル時刻を明示的に要求し、該当クライアント部102からサーバ部103にそのファイル105についてのread権の時刻トークンが要求された場合に回収されることになるが、これだけだと、ファイル時刻の要求が発生しない限り、ファイル105のファイル時刻がいつまでたってもサーバ部103側で確定しないことになる。これを防ぐために、例えば、クライアント部102は、ユーザプログラム202がファイル105をクローズしたタイミングで、サーバ部103にファイルアクセスの有無を通知し、サーバ部103はそれを受けてメタデータ104中の該当ファイル時刻を更新するように構成することができる。
7)サーバ部103でのデータトークンの応答処理
任意のノード101において、クライアント部102が、前述した図3のステップ304及び図8のread操作処理又は図3のステップ306及び図8のwrite操作処理を実行することにより、サーバ部103にデータトークンを要求すると(図8のステップ803)、サーバ部103が、それを受け取ることにより(図5のステップ506の判定がYES)、データトークンの応答処理を実行する(図5のステップ507)。図12は、サーバ部103が実行する図5のステップ507の応答処理の動作フローチャートである。
サーバ部103は、クライアント部102からデータトークンの獲得要求を受信すると、まずその要求に矛盾するデータトークンを保持するクライアント部102が存在するかどうかを調べる(図12のステップ1201)。
この判定がYESの場合は、クライアント部102は、上記データトークンを保持する全てのクライアント部102に、そのデータトークンの回収要求を発行し、全てのクライアント部102からの応答を待つ(図12のステップ1201−>1202,ステップ1203−>1204−>1203の処理ループ)。なお、タイムアウト時には、サーバ部103は、エラー処理を実行し(図12のステップ1204−>1205)、その後、図5及び図6のメイン動作フローチャートの処理ループに戻る。
これに対して、各クライアント部102では、要求されたデータトークンの回収処理を実行する(図3のステップ309−>310)。具体的には、各クライアント部102は、要求されたデータトークンを無効化し、サーバ部103に応答を返す。また、回収を要求されたデータトークンがwrite 権のデータトークンである場合には、各クライアント部102は、そのwrite 権のデータトークンで示されるファイル105の範囲で自身が更新したデータをキャッシュからディスク上に書き戻し、新たにそのファイル105に割り当てたエクステント情報を、上記応答に付加する。
サーバ部103は、上述のデータトークンを保持する全てのクライアント部102からの応答を受信した場合に、上記応答がwrite 権のデータトークンに関するものであるならば、応答されたファイル105のエクステント情報を、自身が保持するメタデータ104に反映させる(図12のステップ1203−>1206)。
その後、サーバ部103は、要求元のクライアント部102から指定された範囲のエクステント情報が付加されたデータトークンを、上記クライアント部102に応答する(図12のステップ1207)。
一方、クライアント部102からのデータトークンの獲得要求に矛盾するデータトークンを保持するクライアント部102が存在せずステップ1201の判定がNOで、かつファイル全体のデータトークンを応答しても競合が発生せずステップ1208の判定もNOである場合には、サーバ部103は、ファイル全体のエクステント情報とファイル全体のデータトークンを、要求元のクライアント部102に応答する(図12のステップ1201−>1208−>1209)。
上記競合が発生する場合には、サーバ部103は、要求元のクライアント部102から指定された範囲のエクステント情報が付加されたデータトークンを、上記クライアント部102に応答する(図12のステップ1207)。
ステップ1207又は1209の処理の後、サーバ部103は、図5及び図6のメイン動作フローチャートの処理ループに戻る。サーバ部103からデータトークンを取得したクライアント部102は、前述した図4のステップ405又は図8のステップ807の処理において、自身が該当ファイル105に対応するデータトークンを保持していること、及び応答されたエクステント情報を、メモリ内のキャッシュ領域に記憶する。そして、クライアント部102は、それ以降のユーザプログラム202からの要求に基づくファイルアクセス処理(図8のステップ802)は、上記エクステント情報で示される、ディスク上のブロックに対して実行する。
上述したように、データトークンの応答時に、ファイル105のエクステント情報も同時に応答される。このため、複数のノード101は、ディスク装置内のファイル105に、LAN106経由ではなく直結された制御・データ線を介してアクセスすることが可能となる。
8)サーバ部103におけるサイズトークンの応答処理
サーバ部103は、クライアント部102からサイズトークンを要求された場合には、その要求と矛盾するサイズトークンを他のクライアント部102から回収した上で、要求されたサイズトークンにファイルサイズを付加して要求元のクライアント部102に応答する(図5のステップ506−>507)。その後、サーバ部103は、図5及び図6のメイン動作フローチャートの処理ループに戻る。
9)サーバ部103における属性トークンの応答処理
サーバ部103は、クライアント部102から属性トークンを要求された場合には、その要求と矛盾する属性トークンを他のクライアント部102から回収した上で、要求された属性トークンにファイル属性を付加して要求元のクライアント部102に応答する(図5のステップ508−>509)。その後、サーバ部103は、図5及び図6のメイン動作フローチャートの処理ループに戻る。
10)エクステント管理の詳細
次に、サーバ部103及びクライアント部102におけるエクステント(ディスク領域)の管理の詳細について説明する。
まず、サーバ部103は、複数のディスクボリュームを管理することができ、メタデータ104として、ファイル105の属性データ、各ディスクボリューム毎の空きエクステントに関する情報(空きスペース情報)、及びクライアント部102に貸し出したエクステントに関する情報(リザーブスペース情報)を保持している。
空きスペース情報とリザーブスペース情報は、図13に示されるように、空きスペースBツリー1301として管理され、そのうち空きスペース情報は空きスペースキュー1302からアクセスでき、リザーブスペース情報はリザーブスペースキュー1303からアクセスできる。
空きスペースキュー1302は、ディスクボリューム毎に、空きスペースBツリー1301に接続されている使用可能エクステント(使用中でもリザーブ中でもないエクステント)を管理する。
リザーブスペースキュー1303は、クライアント部102毎に、そのクライアント部102にリザーブされ空きスペースBツリー1301に接続されているエクステントを管理する。
また、サーバ部103は、使用中のエクステントは、iノードBツリー1304によって管理する。一方、クライアント部102は、サーバ部103に要求することによりリザーブしたエクステントを、リザーブキュー1305によって管理する。
クライアント部102は、主記憶上にキャッシュを持ち、ユーザプログラムが要求したディスク上のデータをキャッシュする。サーバ部103内の空きスペーアスキュー1302とクライアント部102内のリザーブキュー1305は、ディスクボリューム毎に予め決められた個数分のヘッダを有しており、各ヘッダがエクステントのサイズに対応している。例えば、ヘッダの個数を4個とすると、各ヘッダが、1〜4KB(キロバイト)、4〜16KB、16〜64KB、64〜256KBの各サイズ範囲のエクステント群(空きスペースBツリー1301)を管理する。ヘッダの個数と各ヘッダが表すサイズは、各ディスクボリュームのファイルシステムを作成したときに決定される。
図14は、1つのノード101(図1参照)内において、ユーザプログラム202(図2参照)が、ファイル105へのデータ書き込み(write 要求)を依頼したときのエクステント管理のシーケンスを示す図である。このシーケンスにおいて、クライアント部102が実行する処理は、図3のステップ306のwrite操作処理における図8のステップ807の処理の一部である。また、サーバ部103が実行する処理は、図5のサーバ部103のメイン動作フローチャート内の特には図示しない一部の処理である。
図14において、ユーザプログラム202がファイル105に対するwrite 要求を発行すると、クライアント部102は、キャッシュにデータを保持する。ユーザプログラム202がファイル105をクローズし、又はキャッシュが一杯になり、或いはサーバ部103からデータトークンの回収を要求される(図12のステップ1202参照)ことにより、キャッシュされているデータをディスクに書き出す必要が発生した場合に、クライアント部102は、サーバ部103から受け取っていたファイル105のエクステント情報(図4のステップ405参照)を調べ、その要求が既にディスク領域が割り当てられているファイル領域に対するものであるか否かを認識し、ファイル105毎にキャッシュ内でエクステントが割り当てられていない領域で隣接するものをまとめる(このまとめられたファイル領域を書出し対象領域と呼ぶ)。次に、クライアント部102は、書出し対象領域のサイズを調べると共に、その領域の性質に従って、以下の何れかの処理を実行する。
■書出し対象領域に隣接する(直前の)領域に、同じファイル105に関するエクステントが既にサーバ部103から割り当てられている場合:クライアント部102は、割り当てられているエクステントのブロックアドレスと書出し対象領域のサイズを指定して、それに続くエクステントのリザーブ(貸し出し)をサーバ部103に依頼し、応答されたエクステントにデータを書き込む。なお、サーバ部103は、依頼されたエクステントが既に割当て済みの場合には、他のエクステントを返す。
■書出し対象領域に隣接する(直前の)領域に、同じファイル105に関するエクステントがいまだサーバ部103から割り当てられていない場合:クライアント部102は、書出し対象領域のサイズに対応するリザーブキュー1305の先頭に接続されているエクステントにデータを書き出す。クライアント部102は、リザーブキュー1305から、そのエクステントを取り除く。
以上の動作の後、クライアント部102は、サーバ部103に書出し完了を通知する。この際、クライアント部102は、使用したエクステント(リザーブスペース)のアドレスと、書出し対象領域のサイズを通知する。
サーバ部103は、通知されたエクステント(リザーブスペース)のアドレスと、書出し対象領域のサイズとから、メタデータ104内の対象ファイル105に関する属性データを更新し、リザーブスペースキュー1303及び空きスペースBツリー1301上から、クライアント部102から通知されたエクステントを取り除き、そのエクステントをIノードBツリー1304に接続する。書き出されたエクステントのサイズが使用されたリザーブスペースよりも小さい場合には、サーバ部103は、残りのエクステントを、空きスペースとして空きスペースキュー1302の当該エクステントのサイズに対応するヘッダに接続する。
11)エクステント群のリザーブ制御処理
クライアント部102は、一定時間が経過するごとに、エクステント群リザーブ要求処理を実行する(図3のステップ311−>312)。この処理では、クライアント部102は、自身がリザーブキュー1305にリザーブしているエクステント群を調べ、リザーブ量が一定値以下になった場合に、サーバ部103に一定個数のエクステント群のリザーブを要求する。この処理は、各サイズのヘッダ毎に行われ、不足が発生したヘッダ以外についても、各リザーブ量が所定値以上となるように、各ヘッダに対して上記リザーブ処理が実行される。
サーバ部103は、エクステント群のリザーブ要求を受信すると、エクステント群のリザーブ処理を実行する(図6のステップ512−>513)。この処理では、サーバ部103は、空きスペースキュー1302に接続されている空きスペースBツリー1301中から、使用可能なエクステント群を探し、それらを空きスペースキュー1302からリザーブスペースキュー1303に繋ぎ替えた後に、そのリザーブしたエクステント群をクライアント部102に応答する。その後、サーバ部103は、図5及び図6のメイン動作フローチャートの処理ループに戻る。
クライアント部102は、図3のステップ312において、サーバ部103から応答されたエクステント群をリザーブキュー1305に繋ぎ、ステップ312を終了して、図3のメイン動作フローチャートの処理ループに戻る。
サーバ部103は、自身に対してmount を行っているクライアント部102の障害を検出した場合、又はクライアント部102からunmount 要求を受信した場合には、そのクライアント部102に対してリザーブしていたリザーブスペースキュー1303中のエクステント群の解放処理を実行して、それらを空きスペースキュー1302に繋ぎ替える(図5のステップ514−>515)。その後、サーバ部103は、図5及び図6のメイン動作フローチャートの処理ループに戻る。
上述のように、本実施の形態では、空きエクステント群がリザーブされることにより、クライアント部102は、サーバ部103に問い合わせることなく、キャッシュを活用して新たなエクステントをファイル105に割り当てることが可能となる。このため、クライアント部102とサーバ部103との間の通信回数を削減でき、システム全体の性能を向上させることが可能となる。
また、新たに割り当てられたエクステントは、データが書き込まれた後のクライアント部102からサーバ部103への応答によって初めて、そのファイル105のメタデータ104として記憶される。このため、悪意をもってデータを覗くことを防止することが可能となる。
12)主サーバと従サーバの同期処理
主サーバであるノード101(#1)内のサーバ部103(#1)は、例えば図7、図10、図11、図12などにおいて、メタデータ104(#1)を更新する場合は、従サーバであるノード101(#2)内のサーバ部103(#2)に対して、メタデータ変更分と時刻データを送信し、従サーバがそれらを受信したことを確認した後に、クライアント部102に応答を返す。
従サーバであるノード101(#2)内のサーバ部103(#2)は、上述のメタデータ変更分と時刻データを受信すると、メタデータ変更分を自身のメタデータ104(#2)に反映させると共に、送られてきた時刻データを記憶する(図6のステップ516−>517)。その後、サーバ部103(#2)は、図5及び図6のメイン動作フローチャートの処理ループに戻る。
13)主サーバにおける障害発生時の、従サーバへの切替処理
従サーバであるノード101(#2)内のサーバ部103(#2)は、主サーバであるノード101(#1)内のサーバ部103(#1)の障害を監視しており、その障害を検出した場合には、サーバ切替処理を実行する(図6のステップ518−>519)。このとき、サーバ部103(#2)は、最後に主サーバであるサーバ部103(#1)から送られてきた時刻を過ぎるまで、自身の時刻の待ち合せを実行する。その後、サーバ部103(#2)は、図5及び図6のメイン動作フローチャートの処理ループに戻る。
上述の制御により、サーバ切替時にも、矛盾のないファイル時刻の付与が可能となる。次に、上述したようなノード間ファイル共用管理システムにおいて、分散ファイルシステムの耐故障性を高めるためのログ制御機構を実現するための実施の形態について説明する。
図15は、ログ制御機構を実装したノード間ファイル共用管理システムの基本構成図である。共用ファイル管理装置1501(図1のサーバ部103を有するノード101に対応する)は、共用されるファイルの「属性」や「実ディスク上での格納位置」などの、ファイルごとに存在する制御情報(ファイル情報と呼ぶ)と、実ディスクの空き領域などを示す制御情報(ディスク情報と呼ぶ)を保持している。これら2つの管理情報を総称してメタデータ1502(図1のメタデータ104に対応する)と呼び、障害に備えディスク上に格納されている。

共用ファイル管理装置1501は、データを共用する#1〜#nの各ノード1503(クライアント部102を有するノード101に対応する)からの要求に従い、メタデータ1502をディスクから読み込み或いは更新し、ファイル情報を応答として返す。この際、異なる複数のメタデータブロックがアクセスされる可能性がある。
各ノード1503は、返されたファイル情報をメモリ上にキャッシュし、それ以降必要が生ずるまで、共用ファイル管理装置1501と通信することなく、キャッシュされたメモリ上のファイル情報のみを用いて処理を実行する。
各ノード1503がそれぞれのキャッシュ上に保持するファイル情報相互間の一貫性を保証するために、トークンが使用される。トークンは、ファイル情報がノード1503に返される際に共用ファイル管理装置1501によりそのノード1503に対して発行され、共用ファイル管理装置1501が或るノード1503から矛盾する要求を受け付けたときに共用ファイル管理装置1501によって必要なノード1503から回収される。
回吸を指示されたノード1503は、トークンによって指示されるキャッシュデータを無効化し、他ノード1503に伝えられるべき自身が行なったファイル情報の変更を応答する。
応答を受けた共用ファイル管理装置1501は、通知された変更をメタデータ1502に反映した後に、要求に基づく処理を再開し、要求元に対して結果を応答すると共にトークンを発行する。
共用ファイル管理装置1501が各ノード1503からの要求を処理するためには、メタデータ1502へのアクセスが必要となる。この場合に、毎回ディスクをアクセスしていたのでは性能が悪くなる。このため、ディスク上のデータを保持するバッファキャッシュ1504が共用ファイル管理装置1501内に設けられ、ディスクアクセスが削減される。バッファキャッシュ1504は、ディスク上の各ブロックに対応したエントリを持ち、各エントリにそのエントリのロックの有無を表示するためのロックワードが用意されることにより、或るスレッドが更新中のデータを他の要求を処理している他のスレッドが参照することが抑止される。
メタデータ1502の実ディスクへの反映は、要求処理が全て正常に終了した時点、いわゆるトランザクション完了時まで遅らされる。トランザクションが正常に終了すると、バッファキャッシュ1504上に保持されている更新データが一括してログファイル1505に書き出され、その後、更新データのディスクへの反映タイミングがスケジュールされる。
ログファイル1505はサイクリックに使用され、実ディスクへの書き込みが完了するたびに、書出しが完了した変更を保持するログ領域は空き領域に戻される。従って、実ディスクへの書出しがまだ完了していない、成功した要求に伴うメタデータの変更は必ずログファイル1505上に存在するので、共用ファイル管理装置1501で障害が発生しても、メタデータ1502の復旧は容易にかつ高速に行なえるという特徴を有する。
次に、本実施の形態に係る上記基本構成に基づくロック継承制御処理につき、図16の説明図に基づいて説明する。尚、複数のクライアントから発行れる同一ファイルに対する操作要求を逐次化するためのファイル管理装置1501はファイル毎に用意するファイルロックを使用する。
本実施の形態では、1つのノード1503からの要求を処理するために共用ファイル管理装置1501上で実行される第1の実行単位(スレッド)は、他のノード1503に発行しているトークンを回収する場合に、トークン処理の対象となっているファイルを示す情報を保持したトークン回収制御表1602をトークン回収待ちキュー1601につなぎ、該当するノード1503に対してトークン回収要求を送信した後、トークン回収完了メッセージの到着を待ち合わせる。
トークンを保持しているノード1503におけるキャッシュの無効化が完了しそこから共用ファイル管理装置1501(図15)にトークン回収完了メッセージが通知されると、トークン回収完了メッセージを処理するために共用ファイル管理装置1501上で実行される第2の実行単位(スレッド)が、トークン回収待ちキュー1601を調べ、そのメッセージに対応するトークン回収制御表1602がキュー上に存在するならば、その制御表に「ロック縫承中」を表示した上で、メタデータ1502(図15)の更新処理及びトークンの解放処理を実行する。
トークン回収完了メッセージの到着を待ち合わせていた第1の実行単位の待ちは、第2の実行単位によるトークン解放処理の結果解かれる。各ノード1503は、共用ファイル管理装置1501からの要求に基づかずに自律的に、トークン回収完了メッセージを共用ファイル管理装置1501に通知することもできる。従って、トークン回収完了メッセージが共用ファイル管理装置1501に到着した際に、トークン回収待ちキュー1601に該当するトークン回収制御表1602がつながっていない場合が起こり得る。このようなときには、上記第2の実行単位は、通常のファイルロック獲得処理を実行し、この結果他の実行単位がファイルロックを保持していればファイルロックの解放を待ち合わせ、ファイルロックがはずれたらメタデータの更新処理及びトークン解放処理を実行する。
上記第1の実行単位は、複数のノード1503に対してトークン回収要求を送信する可能性がある。このような場合には、共用ファイル管理装置1501は、複数のノード1503からトークン回収完了メッセージを相次いで受信する可能性がある。上記第2の実行単位は、第1番目のトークン回収完了メッセージを受信した時点で該当するトークン回収制御表1602にロック継承中を表示する。そして、第2番目以降のトークン回収完了メッセージを受信した他の各実行単位は、対応するトークン回収制御表1602にロック継承中が表示されていた場合には、継承中表示がオフとなるのを待ち合わせ、待ちが解けた時点でメタデータの更新処理及びトークン解放処理を実行する。このように、ロックの継承を行うことのできる実行単位は1つに制限される。
以上のロック継承制御により、トークン制御において、デッドロックの発生を回避することのできる効率的なファイルロック制御が実現される。次に、本実施の形態に係る図15に示される基本構成に基づくデッドロック検出処理について、図17の説明図に基づき説明する。
共用ファイル管理装置1501(図15)は、各ファイルを管理するファイル制御表1701に、ファイルロックワード1701aに対応して、そのファイルロックを保持している実行単位(スレッド)を示すオーナ1701bを設定し、また、各バッファキャッシュ1504(図15)のエントリを管理するバッファキャッシュ制御表1702に、バッファキャッシュロックワード1702aに対応して、そのバッファキャッシュロックを保持している実行単位(スレッド)を示すオーナ1702bを設定する。
また、共用ファイル管理装置1501は、各実行単位(スレッド)を管理するスレッド制御表1703に、その実行単位が待ち合わせしている対象を特定する情報である待ちリソース1703aと、その待ち合わせの原因を示す情報であるタイプ1703bを設定する。待ちリソース1703aとタイプ1703bには下記の何れかの設定が行われる。
1.ファイルロックの解放を待ち合わせる場合:
・タイプ1703bには、ファイルロック待ちを設定。
・待ちリソース1703aには、該当するファイル制御表1701内の
ファイルロックワード1701aを指示する情報を設定。
2.バッファキャッシュロックの解放を待ち合わせる場合:
・タイプ1703bには、バッファキャッシュロック待ちを設定。
・待ちリソース1703aには、該当するバッファキャッシュ制御表1702内のバッファキャッシュロックワード1702aを指示する情報を設定。
3.トークン回収を待ち合わせる場合:
・タイプ1703bには、トークン回収待ちを設定。
・待ちリソース1703aには、該当するファイルを指示する情報を設定。
以上の情報を使い、各スレッド(実行単位)は、以下のようにデッドロックを検出する。
<スレッド(以下、スレッドAという)がファイルロックを要求した場合>
ステップ1:スレッドAは、ファイルロックの解放待ちに入る前に、そのファイルに対応するファイル制御表1701内のファイルロックワード1701aとオーナ1701aとから、そのファイルロックを保持しているスレッド(以下、スレッドBという)に対応するスレッド制御表1703を取得する。
ステップ2:スレッドAは、そのスレッド制御表1703内の待ちリソース1703aとタイプ1703bとから、スレッドBが待ち合わせている資源を求める。スレッドBが待ち合わせている資源がないかスレッドBがトークン回収を待ち合わせているならば、スレッドAは、デッドロックは発生していないと判定し、ファイルロックの解放待ちに入る。
ステップ3:スレッドBがトークン回収の待ち合わせ以外の待ち合わせをしている場合には、スレッドAは、スレッドBが待ち合わせている資源に対するロックを保持しているスレッドを求める。
ステップ4:スレッドAは、ステップ3で求めたスレッドがスレッドA自身ならば、デッドロックが発生したと判定し、スレッドA自身が実行しているトランザクションをキャンセルする。そうでなければ、スレッドAは、ステップ2の処理を繰り返す。
<スレッドAがバッファキャッシュロックを要求した場合>
ステップ1:スレッドAは、バッファキャッシュロックの解放待ちに入る前に、そのバッファキャッシュエントリに対応するバッファキャッシュ制御表1702内のバッファキャッシュロックワード1702aとオーナ1702bとから、そのバッファキャッシュロックを保持しているスレッドBに対応するスレッド制御表1703を取得する。
ステップ2:スレッドAは、そのスレッド制御表1703内の待ちリソース1703aとタイプ1703bとから、スレッドBが待ち合わせている資源を求める。スレッドBが待ち合わせている資源がないならば、スレッドAは、デッドロックは発生していないと判定し、バッファキャッシュロックの解放待ちに入る。
ステップ3:スレッドAは、スレッドBが待ち合わせている資源がトークン回収待ちという資源で且つトークン回収待対象ファイルのファイルロックをスレッドAが保持しているならば、デッドロックが発生したと判定する。
ステップ4:スレッドAは、スレッドBが待ち合わせている資源に対するロックを保持しているスレッドを求める。
ステップ5:スレッドAは、ステップ4で求めたスレッドがスレッドA自身ならば、デッドロックが発生したと判定し、スレッドA自身が実行しているトランザクションをキャンセルする。そうでなければ、スレッドAは、ステップ2の処理を繰り返す。
以上説明したデッドロックの検出処理により、トークンに基づいてトランザクション制御されているメタデータ1502等の更新処理におけるデッドロックの発生を適切に検出することができる。
次に、本実施の形態に係る図15に示される基本構成に基づくログファイルの2次キャッシュ制御処理につき、図18の説明図に基づいて説明する。2次キャッシュ1801は、ログファイル1505(図15)には書出しが完了しているが、ディスクへの反映は完了していないメタデータ1502を保持するキャッシュで、トランザクションキャンセル時の性能劣化の防止、通常処理での性能向上を図るために、共用ファイル管理装置1501上に設けられる。
トランザクションが正常終了した場合、バッファキャッシュ1504上で更新されたデータは2次キャッシュ1801に送られ、変更表示がオンされる。ログファイル1505の空き領域が不足してくると、2次キャッシュ1801上の変更表示がオンになっているデータが実ディスクに書き出され、変更表示がリセットされる。
バッファキャッシュ1504から2次キャッシュにデータが移動させられる際に、2次キャッシュ1801の空き領域がなければ、変更表示がオンされていない2次キャッシュ領域が再使用される。
もし、全てのページの変更表示がオンされているならば、一定の量の変更されたページが実ディスクに書き出され、変更表示がオフにさせられた後に再使用される。
必要なメタデータ1502がバッファキャッシュ1504上に存在しない場合には、2次キャッシュ1801にデータが存在するならばそのデータが2次キャッシュ1801からバッファキャッシュ1504にコピーされる。必要なデータが2次キャッシュ1801にも存在しない場合には、そのデータがディスクからバッファキャッシュ1504に読み込まれる。
以上説明した2次キャッシュ制御処理により、バッファキャッシュ1504の変更内容を実ディスク上に書き出すログフラッシュ処理を、実行中のトランザクションと独立して行うことが可能となり、システム性能の向上が実現される。
続いて、本実施の形態に係る図15に示される基本構成に基づく、ログデータ量を削減できるログ制御処理につき、図19の説明図に基づいて説明する。メタデータ1502がバッファキャッシュ1504上で更新された場合に、スレッドごとに存在するログキュー1901に、更新されたメタデータ1502の範囲を示す情報を記憶したログ制御表1902が追加される。この情報は、図19に示されるように、バッファキャッシュ1504上のエントリを指示するエントリIDと、そのエントリに属する範囲の始点アドレスstartと終点アドレスendとからなる。
この際、ログキュー1901がサーチされ、ログキュー1901上に、更新されたメタデータ1502の範囲に対してオーバラップするか隣接する範囲を表すログ制御表1902が既に存在するならば、旧制御表1902の範囲が変更させられるだけで、新しいログ制御表1902は作成されない。
トランザクションが正常に終了した場合、ログキュー1901上のログ制御表1902から、変更されたメタデータ1502が認識され、それがログファイル1505にログデータとして書き出される。書出しが完了したら、該当するバッファキャッシュ1504のエントリに対するロックが解放される。
トランザクションが失敗に終った場合には、ログキュー1901から更新されたメタデータ1502が認識され、該当するバッファキャッシュ1504上のエントリが無効化される。
以上説明したログ制御処理により、ログファイル1505に書き出されるログデータ量の削減が実現される。最後に、本実施の形態に係る図15に示される基本構成に基づく、トランザクションキャンセル時におけるメモリ常駐制御表のリストア制御処理につき、図20の説明図に基づいて説明する。
トランザクション処理の途中でデッドロック条件が検出されたり要求元のエラーなどが検出されることによりトランザクションがキャンセルされる場合には、バッファキャッシュ1504(図15)の無効化が行なわれる。これと共に、スレッドごとに存在するファイルロックキュー2001に接続されている各ファイル制御表2002がサーチされることにより、トランザクションの過程で獲得され解放されていないファイルロックが、全て解放させられる。
ここで、ファイル制御表2002には、ファイルロックの獲得に伴って、共用ファイル管理装置1501(図15)内のメモリ上に存在する常駐制御表2003が書き換えられた場合に、その更新を示す制御表更新フラグが設定される。なお、1つのファイル制御表2002には、複数の常駐制御表2003に対応する複数の制御表更新フラグを、制御表更新マップとして設定することができる。
今、トランザクションのキャンセルに伴いファイルロックが解除される際に、それに対応するファイルロックワードが設定されていたファイル制御表2002において何れかの制御表更新フラグがオンになっている場合には、ファイルロックの再獲得時にその制御表更新フラグに対応する常駐制御表2003のリロードが必要なことを示すリロードインジケータ(複数可)が表示された上で、ファイルロックが解放させられる。
トランザクションがデッドロック検出等によりキャンセルされた場合には、その後、そのトランザクションに対応する要求が始めからから再試行される。そして、ファイルロックの再獲得時に、それに対応するファイルロックワードが設定されていたファイル制御表2002に何れかのリロードインジケータが表示されているならば、ファイルロックの獲得後に上記リロードインジケータによって指示される常駐制御表2003が、メタデータ1502(図15)の情報を使ってメモリ上に再構築される。
以上説明したリストア制御処理により、トランザクションのキャンセルに伴う常駐制御表2003の高速なリストアが実現される。ここで、本発明は、コンピュータにより使用されたときに、上述の本発明の実施の形態によって実現されるクライアント部102の機能又はサーバ部103の機能と同様の機能をコンピュータに行わせるためのコンピュータ読出し可能記録媒体として構成することもできる。この場合に、例えばフロッピィディスク、CD−ROMディスク、光ディスク、リムーバブルハードディスク等の可搬型記録媒体や、ネットワーク回線経由で、本発明の実施の形態の各種機能を実現するプログラムが、ノードを構成するコンピュータの本体内のメモリ(RAM又はハードディスク等)にロードされて、実行される。
本発明の実施の形態のシステム構成図である。 ノード内のソフトウェア構成図である。 クライアント部のメイン動作フローチャートである。 クライアント部のopen操作処理の動作フローチャートである。 サーバ部のメイン動作フローチャート(その1)である。 サーバ部のメイン動作フローチャート(その2)である。 サーバ部のopen操作処理の動作フローチャートである。 クライアント部のread/write操作処理の動作フローチャートである。 クライアント部のファイル時刻操作処理の動作フローチャートである。 サーバ部でのread権の時刻トークンの応答処理の動作フローチャートである。 サーバ部でのwrite 権の時刻トークンの応答処理の動作フローチャートである。 サーバ部でのデータトークンの応答処理の動作フローチャートである。 エクステント管理の詳細を示す図である。 エクステント管理のシーケンス図である。 ログ制御機構を実装したノード間ファイル共有管理システムの基本構成図である。 ロック継承制御処理の説明図である。 デッドロック検出処理の説明図である。 ログファイルの2次キャッシュ制御の説明図である。 ログデータ量を削減できるログ制御処理の説明図である。 トランザクションキャンセル時におけるメモリ常駐制御表のリストア処理の説明図である。
符号の説明
101、1503 ノード
102 クライアント部
103 サーバ部
104、1502 メタデータ
105 ファイル
106 LAN
201 オペレーティングシステム(OS)
202 ユーザプログラム
1501 共用ファイル管理装置
1504 バッファキャッシュ
1505 ログファイル
1601 トークン回収待ちキュー
1602 トークン回収制御表
1701、2002 ファイル制御表
1701a、1702a ファイルロック
1701b、1702b オーナ
1702 バッファキャッシュ制御表
1703 スレッド制御表
1703a 待ちリソース
1703b タイプ
1801 2次キャッシュ
1901 ログキュー
1902 ログ制御表
2001 ファイルロックキュー

Claims (7)

  1. ユーザプログラムからのファイル操作要求を受けて、1つのノード内のクライアント装置がそれと同一の又は他のノード内のサーバ装置からトークンを獲得した上で該ファイル操作要求を処理することにより、複数のノードからの同一ファイルの共用を可能とするノード間共用ファイル制御方法であって、
    前記サーバ装置において、前記クライアント装置から要求された処理であるトランザクションを実行し、該サーバ装置内のキャッシュに格納された、ファイル又はディスクに関する属性情報であるキャッシュデータを、該クライアント装置からの要求に応じて更新する過程と、
    前記サーバ装置において、前記クライアント装置からのトークン回収完了メッセージの受信時に、該メッセージに対応するトークン回収の契機となった要求を処理している実行単位が保持していたファイルロックを継承して処理を実行することによりデッドロックを回避する過程と、
    前記トークン回収の待ち状態を資源として記憶し、他の資源の獲得待ち状態との関係から、デッドロック状態を検出する過程と、
    前記デッドロック状態が検出されると該状態の原因となっているトランザクションをキャンセルして、更新されたキャッシュデータの無効化を行う過程と、
    を含むことを特徴とするノード間共用ファイル制御方法。
  2. 請求項1に記載の方法であって、
    前記ロックの継承を行える実行単位を1つに制限する過程を更に含む、
    ことを特徴とするノード間共用ファイル制御方法。
  3. 請求項1に記載の方法であって、
    デッドロック状態の発生に備え、前記属性情報の更新を前記キャッシュ上でのみ行い、ディスクへの書き込みが、前記要求された処理の完了まで遅延させられるトランザクション制御において、キャッシュデータの更新時に更新されたキャッシュ位置を記録する過程と、トランザクションの完了時に、前記記録から必要最小限の変更データのみをログファイルに書き出すことによりログデータ量を削減する過程と、
    を含むことを特徴とするノード間共用ファイル制御方法。
  4. 請求項3に記載の方法であって、
    更新されたキャッシュ位置を記録する際に、該記録と先行する記録とをマージすることにより、ログファイルに書き出すログデータ量を最小化する過程を更に含む、
    ことを特徴とするノード間共用ファイル制御方法。
  5. 請求項3に記載の方法であって、
    前記キャッシュは2次キャッシュを含む、
    ことを特徴とするノード間共用ファイル制御方法。
  6. ユーザプログラムからのファイル操作要求を受けて、1つのノード内のクライアント装置がそれと同一の又は他のノード内のサーバ装置からトークンを獲得した上で該ファイル操作要求を処理することにより、複数のノードからの同一ファイルの共用を可能とするノード間共用ファイルシステムを構成する当該サーバ装置であるコンピュータにより使用されたときにそれによって読み出されるプログラムを記録した記録媒体であって、
    前記クライアント装置から要求された処理であるトランザクションを実行し、前記サーバ装置内のキャッシュに格納された、ファイル又はディスクに関する属性情報であるキャッシュデータを、該クライアント装置からの要求に応じて更新する機能と、
    前記クライアント装置からのトークン回収完了メッセージの受信時に、該メッセージに対応するトークン回収の契機となった要求を処理している実行単位が保持していたファイルロックを継承して処理を実行することによりデッドロックを回避する機能と、
    前記トークン回収の待ち状態を資源として記憶し、他の資源の獲得待ち状態との関係から、デッドロック状態を検出する機能と、
    前記デッドロック状態が検出されると該状態の原因となっているトランザクションをキャンセルして、更新されたキャッシュデータの無効化を行う機能と、
    を前記コンピュータに行わせるためのプログラムを記録したコンピュータ読出し可能記録媒体。
  7. 請求項6に記載のコンピュータ読出し可能記録媒体であって、
    前記プログラムは、
    デッドロック状態の発生に備え、前記属性情報の更新を前記キャッシュ上でのみ行い、ディスクへの書き込みが、前記要求された処理の完了まで遅延させられるトランザクション制御において、キャッシュデータの更新時に更新されたキャッシュ位置を記録する機能と、トランザクションの完了時に、前記記録から必要最小限の変更データのみをログファイルに書き出すことによりログデータ量を削減する機能と、
    を前記コンピュータに行わせることを特徴とするコンピュータ読出し可能記録媒体。
JP2006253341A 1998-11-18 2006-09-19 ノード間共用ファイル制御方法 Expired - Fee Related JP4286857B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006253341A JP4286857B2 (ja) 1998-11-18 2006-09-19 ノード間共用ファイル制御方法

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP32846398 1998-11-18
JP6358999 1999-03-10
JP2006253341A JP4286857B2 (ja) 1998-11-18 2006-09-19 ノード間共用ファイル制御方法

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP14350299A Division JP3866448B2 (ja) 1998-11-18 1999-05-24 ノード間共用ファイル制御方式

Publications (2)

Publication Number Publication Date
JP2006351040A JP2006351040A (ja) 2006-12-28
JP4286857B2 true JP4286857B2 (ja) 2009-07-01

Family

ID=37646733

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006253341A Expired - Fee Related JP4286857B2 (ja) 1998-11-18 2006-09-19 ノード間共用ファイル制御方法

Country Status (1)

Country Link
JP (1) JP4286857B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8886796B2 (en) 2008-10-24 2014-11-11 Microsoft Corporation Load balancing when replicating account data
US8255373B2 (en) 2008-10-24 2012-08-28 Microsoft Corporation Atomic multiple modification of data in a distributed storage system
US9996572B2 (en) 2008-10-24 2018-06-12 Microsoft Technology Licensing, Llc Partition management in a partitioned, scalable, and available structured storage

Also Published As

Publication number Publication date
JP2006351040A (ja) 2006-12-28

Similar Documents

Publication Publication Date Title
US9519589B2 (en) Methods to perform disk writes in a distributed shared disk system needing consistency across failures
CN101567805B (zh) 并行文件系统发生故障后的恢复方法
US7930278B2 (en) Methods to perform disk writes in a distributed shared disk system needing consistency across failures
US7065540B2 (en) Managing checkpoint queues in a multiple node system
US7865485B2 (en) Multi-threaded write interface and methods for increasing the single file read and write throughput of a file server
US7555504B2 (en) Maintenance of a file version set including read-only and read-write snapshot copies of a production file
US8635193B2 (en) Cluster-wide read-copy update system and method
JP3593366B2 (ja) デ−タベ−ス管理方法
JP5007350B2 (ja) ハードウェアベースのファイルシステムのための装置および方法
CN110998557A (zh) 通过分布式存储器的高可用性数据库
US20100174802A1 (en) Super master
KR20150129839A (ko) 분산 데이터 시스템들을 위한 전 시스템에 미치는 체크포인트 회피
CN110750507B (zh) 面向dfs的全局命名空间下的持久客户端缓存方法及系统
US7899794B2 (en) Optimizing lock acquisition on transaction logs
CN102073739A (zh) 带有快照功能的分布式文件系统中的数据读与数据写方法
US20230099664A1 (en) Transaction processing method, system, apparatus, device, storage medium, and program product
AU2002248570B2 (en) Managing checkpoint queues in a multiple node system
JP4286857B2 (ja) ノード間共用ファイル制御方法
JP2685530B2 (ja) 共用データの管理方法
JP3866448B2 (ja) ノード間共用ファイル制御方式
EP1366420B1 (en) Disk writes in a distributed shared disk system
CN116401313A (zh) 一种共享存储数据库集群信息同步方法
JPH04130936A (ja) ファイル同時アクセス制御方式

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080826

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081015

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081216

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090204

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: 20090324

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: 20090325

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

Free format text: PAYMENT UNTIL: 20120403

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20120403

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20130403

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20140403

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees