(58)【調査した分野】(Int.Cl.,DB名)
前記ディレクトリエントリ参照/更新部は、前記クライアント装置から、ディレクトリ階層における直下のディレクトリの名前を入力されると、前記メタデータ記憶装置に格納されているディレクトリから、入力された名前のFHとファイルタイプを取得して出力する、請求項1乃至請求項2の何れか1項のサーバー装置と、
まず、1)上位のディレクトリを管理する前記サーバー装置の前記ディレクトリエントリ参照/更新部に、直下のディレクトリの名前を入力して、直下のディレクトリのFHとファイルタイプを取得することを、前記パス名に名前が含まれるディレクトリについて、ルートディレクトリを管理する予め定められた前記サーバー装置を起点に、上位から順に繰り返すディレクトリ探索を実行して、パス名中の最下位ディレクトリのFHとファイルタイプを取得し、次に、2)最下位ディレクトリのFHが包含するサーバーIDの前記サーバー装置の前記ディレクトリエントリ参照/更新部に、2-1)ファイルのFH、および、ファイルタイプにたいする要求、並びに、2-2)ファイル詳細情報にたいする要求の2つの要求をまとめたリクエストを送信して、a)前記パス名のファイルのFH、ファイルタイプ、および、ファイル詳細情報を取得する、または、b)前記パス名のファイルのFH、および、ファイルタイプを取得するメタデータ問い合わせ部と、
前記メタデータ問い合わせ部がファイル詳細情報を取得できなかったとき、前記メタデータ問い合わせ部が取得した前記パス名のファイルのFHを、改めてファイルを管理する前記サーバー装置に送信して、ファイル詳細情報を取得するファイル詳細情報要求部と、を備える前記クライアント装置と、を包含する分散ファイルシステム。
前記サーバー装置が、前記クライアント装置から、ディレクトリ階層における直下のディレクトリの名前を受信すると、前記メタデータ記憶装置に格納されているディレクトリから、入力された名前のFHとファイルタイプを取得して出力し、
前記クライアント装置が、まず、1)上位のディレクトリを管理する前記サーバー装置に、直下のディレクトリの名前を入力して、直下のディレクトリのFHとファイルタイプを取得することを、前記パス名に名前が含まれるディレクトリについて、ルートディレクトリを管理する予め定められた前記サーバー装置を起点に、上位から順に繰り返すディレクトリ探索を実行して、パス名中の最下位ディレクトリのFHとファイルタイプを取得し、次に、2)最下位ディレクトリのFHが包含するサーバーIDの前記サーバー装置に、2-1)ファイルのFH、および、ファイルタイプにたいする要求、並びに、2-2)ファイル詳細情報にたいする要求の2つの要求をまとめたリクエストを送信して、a)前記パス名のファイルのFH、ファイルタイプ、および、ファイル詳細情報を取得し、または、b)前記パス名のファイルのFH、および、ファイルタイプを取得し、
最下位ディレクトリのFHが包含するサーバーIDの前記サーバー装置から、ファイル詳細情報を取得できなかったとき、当該サーバー装置から取得した前記パス名のファイルのFHを、改めてファイルを管理する前記サーバー装置に送信して、ファイル詳細情報を取得する、請求項6乃至請求項7の何れか1項の分散ファイルシステム制御方法。
【発明の概要】
【発明が解決しようとする課題】
【0008】
特許文献1が開示するファイルやディレクトリの分散管理方法には、以下の問題がある。
【0009】
第1に、キャッシュ蓄積部(メタデータキャッシュ)は、ストレージサーバー装置にしか存在しない(
図22)。このため、指定されたパス名の中のすべてのディレクトリ、ファイルのメタデータがキャッシュされている場合でも、ユーザ端末装置(クライアント)とストレージサーバー装置の間で通信が最低1回は発生する。
【0010】
第2に、各ストレージサーバー装置は、各ユーザの利用できるディレクトリ配下についてそれぞれキャッシュを持つことになると考えられる。このため、ストレージサーバー装置のキャッシュ蓄積部には、多数のユーザが同時に利用するマルチユーザ環境において、ユーザ数を考慮した大容量の記憶域が必要になる。したがって、システム価格が増加する、あるいは、キャッシュの容量不足により期待した効果が得られない可能性が考えられる。
【0011】
第3に、パス名中にディレクトリが複数ある場合、ユーザ端末装置が応答を得るまでに複数回のストレージサーバー装置間の通信が必要になり、OneHop方式(段落0028)とは言えない。
【0012】
第4に、段落0021には、ユーザ利用ファイル名に分割されたデータファイルの番号が付加され、データファイルの番号に対応したデータファイルのファイル名を出力する旨、及び、ユーザ利用ファイルを複数のデータファイルに分割して複数のストレージサーバー装置において分散して記憶する旨が記載されている。この方法では、ユーザ利用ファイル名がユーザによって変更された場合、データファイルは各ストレージサーバー装置に分散されているため、新たな名前を反映させるために複数回のサーバー間通信が必要となると考えられる。
【0013】
第5に、段落0084以降の記載によると、read/writeのリクエストの処理の延長で、パス検索を行うと解釈できる。つまり、ファイルのオープンにおいて行われるパス検索の処理がread/write処理に含まれるため、その分I/O性能に影響する。また、read/writeシステムコールのインターフェースが規格と異なるため、POSIX(Portable Operating System Interface for UNIX)に準拠していないと考えられる。
【0014】
最後に、ユーザ端末装置がリクエストを送信する際、どのストレージサーバー装置へ送信するかをどのように決定するのかが不明瞭である。このため、以前に検索を実行しキャッシュが存在するストレージサーバー装置があったとしても、そのストレージサーバー装置以外のストレージサーバー装置へリクエストを送信し、最初からパス検索することが必要になる可能性があり、有効にキャッシュが機能するとは限らない。
【0015】
特許文献2が開示する分散ファイルシステムのディレクトリ管理方法は、ディレクトリ名称(識別名)によって保存先の計算機を決める。この方法では、段落0020のようなハッシュや名前の代わりにID(Identification)を利用する方法などを加味しても、分散のされ方に偏りが出る可能性を否定できない。特に、段落0015、0021のような名称の最初の一文字で保存先の計算機を決める分散方法では、分散のされ方に偏りが出る可能性が高い。例えば、分散方法が、アルファベットa〜mで始まる名称を有するディレクトリは計算機11aに配置するという場合、abc1, abc2, …, abc1000という名称に同時にアクセスされると、すべて同一の計算機11aに要求が集中するという不都合が起きる。
【0016】
また、ディレクトリ名称の変更において、不都合が生じたり、煩雑な処理が必要となったりすることが考えられる。
【0017】
さらに、特許文献2の方法は、計算機が要求されたディレクトリ情報を記憶していない場合には、該ディレクトリ情報をサーバーに問い合わせる(段落0013、
図4)。この方法は、同一サーバーに処理が集中する可能性が有るだけではなく、ファイルシステムを構成するサーバーと計算機の合計台数が多くなりコスト高となる。
【0018】
非特許文献1が開示するハッシュによる分散方法は、以下のような問題点がある。
【0019】
まず、非特許文献1には、ファイル名が変更された場合、新たな名前に基づくハッシュ値から決まるサーバーにポインターファイルを置き、実際にファイルのデータが存在するサーバーを指し示すとある。つまり、ファイル名変更後は、該ファイルへのアクセス時に通常とは異なる処理が必要となり、その分余計なオーバーヘッドが生じることになる。ファイル名の変更は、エンドユーザが通常行う操作であり、処理効率低下、処理遅延が懸念される。
【0020】
さらに、ハードリンク(異なる名前で同一ファイルにアクセスするためのリンク機構)への対応が困難であり、また多数のファイルの生成において、ある範囲のハッシュ値が多数出現する可能性もある。
【0021】
特許文献3が開示するI/O処理プロセスの増減は、プロセスの生成、終了という比較的重いとされる処理を伴うため、この処理によりCPU(Central Processing Unit)資源を使用することで、本来のクライアントから要求された処理を邪魔してしまう可能性が有る。
【0022】
上記の問題に対処するために、本発明にかかるファイルシステムは、ファイルのデータだけではなく、ファイルの位置情報などファイルシステムを管理するメタデータも複数のサーバー配下に分散させて配置することでメタデータサーバーを用いない構成とする。そのうえで、計算ノード(ファイルシステムのクライアント)が、複数のサーバーの中からアクセス対象のファイルが存在するサーバーを特定する為の手段を備える。
【0023】
ただし、このシステムにはメタデータサーバーのようなサーバーが存在しないため、クライアントは特定のサーバーに問い合わせることはできない。このため、ファイルシステムの最上位のディレクトリを管理するルートサーバーを設定する。そして、例えばファイルのオープン処理(open システムコール)に際して、指定されたパス名に基づき、クライアント主導で、パス名中の各ディレクトリを管理するサーバーを、ルートサーバーから順に辿って特定することとした。
【0024】
従って、本発明にかかるシステムにおいては、クライアントが、如何に効率的にアクセス対象のファイルやディレクトリが格納されているサーバーを特定できる手段を用意するかが最初の課題となる。特に、ディレクトリ名や、ファイル名を元にした(ハッシュなどの)方法によりサーバーを特定するのではなく、より偏りが起き難い方法で各サーバーへ分散させる場合であっても、効率的にアクセス対象のファイルやディレクトリが格納されているサーバーを特定することが課題となる。
【0025】
一方、多数の計算ノードがあると、ファイルオープンの処理などにおいて、ほぼ同時にディレクトリ配下のファイルにアクセスが集中することで、特定のサーバーにリクエストが集中し、クライアントへの応答が遅延してTAT(Turn Around Time)が増大する可能性がある。したがって、多数のリクエストが特定のサーバーに集中した際の効率化がさらなる課題となる。
【課題を解決するための手段】
【0026】
本発明にかかる分散ファイルシステム等は、ファイルを多数のクライアント装置がほぼ同時にオープンする場合、1)対象ファイルが存在するディレクトリを管理するサーバー装置へのオープン対象ファイルのファイルハンドルなどのリクエストと、対象ファイルを管理するサーバーへのファイル詳細情報のリクエストを1つにまとめる。これにより、サーバー装置が、両リクエストを同時に処理できるようにする。この際、2)ファイル詳細情報を対象ファイルが存在するディレクトリを管理するサーバーのメモリ上にキャッシュすることで、サーバー装置間の通信を削減する。
【0027】
さらに、同一ディレクトリ配下の異なるファイルのオープンの場合で、3)ほぼ同時に所定閾値以上のリクエストを受信した場合は、処理待ちが発生してTATが悪化することを防ぐため、上記1)のようにリクエストを1つにまとめて処理することを止める。この場合は、クライアント装置が、個別にファイル詳細情報のリクエストを、ファイルを管理するサーバー装置に送信することで効率化する。
【0028】
以上、1)乃至3)を反映して、本発明の実施の形態のサーバー装置等は、以下のように構成される。
【0029】
本発明の1実施の形態のサーバー装置は、
ファイルを記憶するファイルデータ記憶装置と、ディレクトリ階層における直下のディレクトリ、または、ファイルの、a)識別子であって、当該ディレクトリ、または、当該ファイルを管理するサーバー装置の識別情報であるサーバーIDを含むファイルハンドル(以降、FHと略記)、b)名前、および、c)ファイルまたはディレクトリの区別を示すファイルタイプを関連付けて記憶するディレクトリ、および、前記ファイルデータ記憶装置に記憶されているファイルのファイル詳細情報を記憶するメタデータ記憶装置と、に接続され、
ファイル詳細情報のキャッシュ用メモリ領域であるファイル詳細情報表と、
クライアント装置、若しくは、他の前記サーバー装置から処理リクエストを受信、または、他の前記サーバー装置にリクエストを送信するとともに、処理中または送信中のリクエスト数をカウントする通信部と、
ファイルのFHを入力されると、FHが包含するサーバーIDの前記サーバー装置にファイル詳細情報を要求するリクエストを送信して、ファイル詳細情報を受信するファイル詳細情報問い合わせ部と、
クライアント装置から、ディレクトリ階層における直下のファイルの名前を含む、1)ファイルのFH、および、ファイルタイプにたいする要求、並びに、2)ファイル詳細情報にたいする要求の2つの要求をまとめたリクエストが受信されたとき、a)前記メタデータ記憶装置に格納されているディレクトリから、入力された名前のファイルのFHとファイルタイプを取得し、b1)前記通信部がカウントしたリクエスト数が所定閾値を超えておらず、c1)受信された名前のファイルのファイル詳細情報が前記ファイル詳細情報表にキャッシュされていれば、キャッシュされているファイル詳細情報を取得し、c2)前記ファイル詳細情報表にキャッシュされていなければ、取得したファイルのFHを前記ファイル詳細情報問い合わせ部に入力してファイル詳細情報を取得して、前記ファイル詳細情報表にキャッシュし、取得したファイルのFH、ファイルタイプとファイル詳細情報とを前記クライアント装置に返信し、b2)前記通信部がカウントしたリクエスト数が所定閾値を超えている場合は、入力されたリクエストを変更してファイル詳細情報の出力を中止し、取得したファイルのFH、ファイルタイプを前記クライアント装置に返信し、
また、前記サーバー装置から返信されたファイルのFHを、改めてファイルを管理する前記サーバー装置に送信する前記クライアント装置から、または、他の前記サーバー装置の前記ファイル詳細情報問い合わせ部から、前記ファイルデータ記憶装置に記憶されているファイル、のFHを含むリクエストが受信されると、前記メタデータ記憶装置から、入力されたFHを識別子とするファイルのファイル詳細情報を取得して返信するディレクトリエントリ参照/更新部と、を備える。
【0030】
また、本発明の1実施の形態の分散ファイルシステムの制御方法は、
ファイルを記憶するファイルデータ記憶装置と、
ディレクトリ階層における直下のディレクトリ、または、ファイルの、a)識別子であって、当該ディレクトリ、または、当該ファイルを管理するサーバー装置の識別情報であるサーバーIDを含むファイルハンドル(以降、FHと略記)、b)名前、および、c)ファイルまたはディレクトリの区別を示すファイルタイプを関連付けて記憶するディレクトリ、および、前記ファイルデータ記憶装置に記憶されているファイルのファイル詳細情報を記憶するメタデータ記憶装置と、に接続され、ファイル詳細情報のキャッシュ用メモリ領域であるファイル詳細情報表を備える前記サーバー装置が、
クライアント装置、若しくは、他の前記サーバー装置から処理リクエストを受信、または、他の前記サーバー装置にリクエストを送信するとともに、処理中または送信中のリクエスト数をカウントし、
クライアント装置から、ディレクトリ階層における直下のファイルの名前を含む、1)ファイルのFH、および、ファイルタイプにたいする要求、並びに、2)ファイル詳細情報にたいする要求の2つの要求をまとめたリクエストを受信すると、a)前記メタデータ記憶装置に格納されているディレクトリから、入力された名前のファイルのFHとファイルタイプを取得し、b1)カウントしたリクエスト数が所定閾値を超えておらず、c1)受信された名前のファイルのファイル詳細情報が前記ファイル詳細情報表にキャッシュされていれば、キャッシュされているファイル詳細情報を取得し、c2)前記ファイル詳細情報表にキャッシュされていなければ、取得したファイルのFHを含むリクエストを、当該FHが包含するサーバーIDの前記サーバー装置に送信してファイル詳細情報を取得して、前記ファイル詳細情報表にキャッシュし、取得したファイルのFH、ファイルタイプとファイル詳細情報とを前記クライアント装置に返信し、b2)カウントしたリクエスト数が所定閾値を超えている場合は、入力されたリクエストを変更してファイル詳細情報の出力を中止し、取得したファイルのFH、ファイルタイプを前記クライアント装置に返信し、
また、ファイルのFHを、改めてファイルを管理する前記サーバー装置に送信する前記クライアント装置から、または、他の前記サーバー装置から、前記ファイルデータ記憶装置に記憶されているファイル、のFHを含むリクエストを受信すると、前記メタデータ記憶装置から、入力されたFHを識別子とするファイルのファイル詳細情報を取得して返信する。
【0031】
また、本発明の1実施の形態のプログラムは、
ファイルを記憶するファイルデータ記憶装置と、
ディレクトリ階層における直下のディレクトリ、または、ファイルの、a)識別子であって、当該ディレクトリ、または、当該ファイルを管理するコンピュータの識別情報であるサーバーIDを含むファイルハンドル(以降、FHと略記)、b)名前、および、c)ファイルまたはディレクトリの区別を示すファイルタイプを関連付けて記憶するディレクトリ、および、前記ファイルデータ記憶装置に記憶されているファイルのファイル詳細情報を記憶するメタデータ記憶装置と、に接続され、ファイル詳細情報のキャッシュ用メモリ領域であるファイル詳細情報表を備える前記コンピュータに、
クライアント装置、若しくは、他の前記コンピュータから処理リクエストを受信、または、他の前記コンピュータにリクエストを送信するとともに、処理中または送信中のリクエスト数をカウントし、
クライアント装置から、ディレクトリ階層における直下のファイルの名前を含む、1)ファイルのFH、および、ファイルタイプにたいする要求、並びに、2)ファイル詳細情報にたいする要求の2つの要求をまとめたリクエストを受信すると、a)前記メタデータ記憶装置に格納されているディレクトリから、入力された名前のファイルのFHとファイルタイプを取得し、b1)カウントしたリクエスト数が所定閾値を超えておらず、c1)受信された名前のファイルのファイル詳細情報が前記ファイル詳細情報表にキャッシュされていれば、キャッシュされているファイル詳細情報を取得し、c2)前記ファイル詳細情報表にキャッシュされていなければ、取得したファイルのFHを含むリクエストを、当該FHが包含するサーバーIDの前記コンピュータに送信してファイル詳細情報を取得して、前記ファイル詳細情報表にキャッシュし、取得したファイルのFH、ファイルタイプとファイル詳細情報とを前記クライアント装置に返信し、b2)カウントしたリクエスト数が所定閾値を超えている場合は、入力されたリクエストを変更してファイル詳細情報の出力を中止し、取得したファイルのFH、ファイルタイプを前記クライアント装置に返信し、
また、ファイルのFHを、改めてファイルを管理する前記コンピュータに送信する前記クライアント装置から、または、他の前記コンピュータから、前記ファイルデータ記憶装置に記憶されているファイル、のFHを含むリクエストを受信すると、前記メタデータ記憶装置から、入力されたFHを識別子とするファイルのファイル詳細情報を取得して返信する、処理を実行させる。
【発明の効果】
【0032】
本発明にかかるサーバー装置は、メタデータも複数のサーバー装置に分散配置されている分散ファイルシステムにおいて、クライアント装置による効率的なアクセス対象サーバー装置の特定、および、多数のリクエストが特定のサーバー装置に集中した際の効率的なアクセスを可能とする。
【発明を実施するための形態】
【0034】
<第1の実施の形態>
<概要>
図1は、本実施の形態にかかる分散ファイルシステム5の概要を示す構成図である。分散ファイルシステム5においては、
図1が示すように、例えば複数の計算ノードであるクライアント装置1(以降、クライアント1と略記)が相互結合ネットワーク3に接続されており、ユーザのジョブを実行する。また、例えば複数のサーバー装置2(以降、サーバー2と略記)も同じ相互結合ネットワーク3に接続されており、任意のクライアント1とサーバー2の間、及び、任意のサーバー2同士間の通信が可能となっている。各サーバー2の配下には少なくとも1台の外部記憶装置4が接続される。
【0035】
分散ファイルシステム5は、システム内のファイルを管理する為に、階層的なファイルディレクトリを用いる。
【0036】
仮に、分散ファイルシステム5に、メタデータサーバーと呼ばれるような、システム全体のメタデータを管理するサーバー2があると、メタデータを更新する処理、例えばファイルやディレクトリの生成や削除、が同時に多数発生した場合、メタデータサーバーにアクセスが集中し、分散ファイルシステム5のボトルネックになる可能性がある。この問題を避けるため、分散ファイルシステム5は、ファイルのデータだけではなく、ファイルの位置情報などファイルを管理するメタデータも複数のサーバー2に分散させて配置する。すなわち、分散ファイルシステム5は、メタデータサーバーを用いない構成を採用している。
【0037】
分散ファイルシステム5は、メタデータサーバーは用いないが、ファイルシステムのルートディレクトリを管理するサーバー2(ルートサーバーと呼称)を用いる。ルートディレクトリとは、マウント対象のファイルシステムの先頭のディレクトリを指す。分散ファイルシステム5のシステム構築時にシステム管理者が、ルートサーバーを決めておく。
【0038】
なお、以降の説明において、あるディレクトリを管理するサーバー2は、当該ディレクトリを記憶し、クライアント1や他のサーバー2の要求に応じて当該ディレクトリに格納されている下位のディレクトリやファイルに関するデータを出力するサーバー2を指す。また、あるファイルを管理するサーバー2とは、当該ファイルおよび当該ファイルに関する詳細情報を記憶し、クライアント1や他のサーバー2の要求に応じて当該ファイルのデータを出力するサーバー2を指す。一台のサーバー2が、あるディレクトリを管理すると同時に、あるファイルを管理することも有る。
【0039】
ファイル、ディレクトリの生成の際に、上位ディレクトリを管理するサーバー2が、新たに生成するファイル、ディレクトリを管理するサーバー2を、後述するサーバー情報表211に登録されているサーバー2から選定する。この際のサーバー2の選定は、ファイルやディレクトリの名前、またはそれらに付される一意のID(IDentification)などに依存しない方法を用いて行われる。この方法は、例えば、ラウンドロビンや一様乱数に基づく選定方法である。
【0040】
選定されたサーバー2の識別子であるサーバーIDは、選定されたサーバー2から選定元のサーバー2に返されるFH(File handle)に含まれる。FHは、生成されたファイル、ディレクトリの名称、ファイルタイプと共にメタデータとして、上位ディレクトリ毎に選定元のサーバー2が保持する。
【0041】
ここで、FHは、ファイル、ディレクトリを分散ファイルシステム5内で一意に識別するための識別子であり、サーバーIDの他にサーバー2内で一意の数値も含む。また、ファイルタイプは、ファイルかディレクトリかの区別情報である。
【0042】
この結果、各サーバー2は、自装置が管理する各ディレクトリ配下にあるファイル、ディレクトリの名とそれらの位置情報であるサーバーIDの一覧をディレクトリエントリとして持つことができる。
【0043】
分散ファイルシステム5においては、各サーバー2がクライアント1からのリクエスト毎にそれぞれ独立してこのファイル、ディレクトリの生成処理を行うので、システム全体としての排他制御などは不要である。さらに、各サーバー2が、サーバー2の選定に際してラウンドロビンや一様乱数に基づく方法で行うので、ファイル、ディレクトリの名前、及びディレクトリ構造とは関係なく、ディレクトリ、ファイルをシステム内でほぼ均等に配置できる。例えば、サーバー2が3台ある場合、1番目のサーバー2は2、3、1番目、2番目のサーバー2は3、1、2番目、3番目のサーバー2は1、2、3番目のサーバー2の順で割り当てる方法により、ディレクトリ、ファイルをシステム内でほぼ均等に配置できる。
【0044】
ファイル名を変更する場合は、その上位ディレクトリのディレクトリエントリ内の名前を書き換えるだけでよい。さらに、ハードリンクは、例えばディレクトリエントリ内に名前は異なるが同一のFH、ファイルタイプを持つエントリを作り、対象となるファイルを管理するサーバー2で該ファイルのファイル詳細情報のリンク数に1を加算することで実現可能となる。
【0045】
運用中に新たに、分散ファイルシステム5にサーバー2を追加した場合でも、既存のファイル、ディレクトリの配置は変わらないので、特別な処理は不要である。
【0046】
なお、ルートサーバーは、ファイルシステムの先頭のディレクトリのみを管理するのではなく、他のサーバー2同様にサーバー2選定の対象にもなるため、データ、メタデータの管理に関して他のサーバー2との違いはない。
【0047】
ファイル、ディレクトリの生成に際して選定されたサーバー2は、生成したファイル、ディレクトリのFH毎のディレクトリエントリを設け、更新/参照時刻、パーミッションなどの詳細情報を保持する。さらにファイルを生成した場合は、ファイルのサイズ、チャンクサイズ、並列数などをファイル詳細情報に含めて記憶する。
【0048】
これにより、分散ファイルシステム5の各サーバー2は、ルートサーバーを頂点とした、例えば、
図3に示すような階層的なツリー構造を作る。
a)ファイルシステムの最上位のディレクトリを管理するルートサーバーは、自装置が記憶するルートディレクトリの中に、そのディレクトリ配下にある「子ディレクトリ」を管理するサーバー2を特定できる情報を記憶している。
b)子ディレクトリを管理するサーバー2は、自装置が記憶する子ディレクトリの中に、そのディレクトリ配下にある「孫ディレクトリ」を管理するサーバー2を特定できる情報を記憶している。
c)孫ディレクトリを管理するサーバー2は、自装置が記憶する孫ディレクトリの中に、そのディレクトリ配下にあるアクセス対象のファイルを管理するサーバー2を特定できる情報を記憶している。
【0049】
上記構造に基づき、クライアント1は、ファイルシステムをマウントする際、そのマウント先としてルートサーバーを指定し、ルートサーバーからルートディレクトリのFHとファイルシステムを構成している全サーバー2のサーバーIDとIPアドレスの対応表を受け取る。
【0050】
次に、クライアント1は、ファイルのオープン処理などにおいてディレクトリ探索を行う。すなわち、クライアント1は、指定されたパス名の中の最上位ディレクトリの直下にあるディレクトリを管理するサーバー2をルートサーバーに問い合わせ、さらにその下のディレクトリを管理するサーバー2を問い合わせることを繰り返す。クライアント1は、このディレクトリ探索により、指定されたパス名のファイルを管理するサーバー2のサーバーIDを取得する。
【0051】
図4乃至
図6は、ファイルのオープン、リードにおけるディレクトリ探索、リード要求の送信/応答の様子を示す。
【0052】
図4において、ユーザがクライアント1で実行するAP(Application Program)が、マウントポイントが“/mnt”であって、パスが“/mnt/home/user1/file1”であるファイルをオープンするシステムコールを発行したとする。クライアント1は、ルートサーバーにマウント時に受け取ったルートディレクトリのFHと共に配下のディレクトリ“home”を「名前」として送信して問い合わせ、ディレクトリ“home” のFHを受け取る(
図4中のa)。さらに、クライアント1は、受け取ったFHに含まれるサーバーIDから“home”を管理するサーバー2を特定してそのサーバー2にディレクトリ“user1”を「名前」として送信して問い合わせ、ディレクトリ“user1” のFHを受け取る(図中のb)。最後に クライアント1は、同様に“file1” を問い合わせ、ファイル“file1”のFHを受け取る(
図4中のc)。
【0053】
この結果、クライアント1は、APが発行したファイル“file1”に対するリード要求を、当該ファイルを管理するサーバー#4に送信することが出来る(
図5中のd)。
【0054】
なお、この操作は、漸化式a
i+1 = f(g(a
i), a
i, 名前)で表すことができる。ここで、a
i はパス名中のi番目の名前に対応するFH、初期値a
0 はマウント時にルートサーバーから返されたルートディレクトリのFHである。さらに、gはFHに対応するディレクトリを管理するサーバー2のサーバーIDを返す関数、fはサーバーID、FH、名前から、その名前に対応するFHを返す関数である。また、iはi = 0,…,n-1 (nは、パス名中の名前の数)の整数である。
【0055】
また、この過程において、クライアント1は、途中で受信したディレクトリを管理するサーバー2の情報をメタデータキャッシュ(
図4乃至
図6のクライアント1を参照)に保持する。このメタデータキャッシュは、後述するクライアント1のメタデータ記憶部110に格納される。そして後刻、上記のディレクトリ“user1”配下の他のファイル、例えば“file2”、のオープン処理において、既に問い合わせ済みのディレクトリ名がパス名中に含まれる場合は、このメタデータキャッシュを参照することでサーバー2との通信回数を削減する。すなわちクライアント1は、サーバー#1、#2との通信を省略し、サーバー#3からファイル“file2”のFHを受け取ることが出来る(
図6中のa)。
【0056】
なお、特許文献2は、頻繁にディレクトリ内容が書き換えられる場合、上記メタデータキャッシュについての不都合を指摘している(段落0007、0008)。しかし、ファイルシステムの上位のディレクトリは、システム管理者でなければ書き換えはできないことが通常であり、またエンドユーザが書き換え可能なディレクトリであっても、上位のディレクトリほど書き換えの頻度は少ない。このため、少なくとも上位のディレクトリについてはメタデータキャッシュが有効に機能する。
【0057】
また、ディレクトリ探索を実施する場合でも、その探索は比較的下位のディレクトリのみを対象とするため、ルートサーバーなどへ探索要求が集中することはなく、各サーバー2へ適度に負荷分散できる。
【0058】
次に、多数のクライアント1が同一ディレクトリ配下のファイルをオープンする場合の2つのケースについて、分散ファイルシステム5におけるI/Oの効率化方法を示す。
【0059】
ケース1:
同一ファイルへの並列I/Oなどの目的で、多数のクライアント1が同一ファイルをオープンする場合
ケース2:
多数のクライアント1が同一ディレクトリ配下の異なるファイルをオープンする場合
ここで、効率化の前提となる事項について説明する。
【0060】
ファイルのオープン処理において、ディレクトリ探索の最後の処理が、オープン対象のファイルのメタデータを取得することである。この際、クライアント1は、該ファイルのファイル詳細情報も必要としている。このファイル詳細情報は、例えば、ファイルのサイズ、更新/参照時刻、ファイルのチャンクサイズ、使用するサーバー数である。クライアント1は、この問い合わせを、該ファイルが存在するディレクトリを管理するサーバー2に対して行うが、これらファイル詳細情報は、もともと該ファイルを管理するサーバー2が保持している。
【0061】
このため、ファイル詳細情報をクライアント1が得る手段として下記2つの方法がある。
【0062】
(ア)該ファイルが存在するディレクトリを管理するサーバー2は、FHとファイルタイプのみをクライアント1へ返却する。その後、クライアント1は、返却されたFHから該ファイルを管理するサーバー2を特定し、そのサーバー2へファイル詳細情報を要求する。
【0063】
(イ)該ファイルが存在するディレクトリを管理するサーバー2が、該ファイルを管理するサーバー2へファイル詳細情報を問い合わせるサーバー2間通信(例えば、
図6のa’)を実施し、その結果をファイルのFHなどと共にクライアント1へ返す。つまり、本来は(ア)のように2つの要求であるものを1つの要求にまとめる。
【0064】
ここで、上述した2つのケースについて、I/Oの効率化方法を説明する。
【0065】
ケース1:
多数のクライアント1がほぼ同時期に上記(ア)によりファイル詳細情報を得る場合、クライアント1がサーバー2と通信する回数が、クライアント1毎に1回増える。クライアント1が512台あれば、クライアント1がサーバー2と通信する回数が512回となる。さらに、該ファイルを管理するサーバー2にもファイル詳細情報の要求が集中する可能性がある。ファイル詳細情報はデータ量が多少多くなるので、通信回数だけではなくサーバー2のI/OやCPU等の負荷の面からも好ましくない。
【0066】
このため、サーバー2間通信を行う(イ)の方法を基にして、該ファイルを管理するサーバー2から受け取った(例えば、
図6中のa‘)ファイル詳細情報を、該ファイルが存在するディレクトリを管理するサーバー2にキャッシュする。つまり、当該サーバー2は、該ファイルのFHと紐づくファイル詳細情報表212をキャッシュとしてメモリ上に持ち、ディレクトリエントリから参照可能とする。そして、当該サーバー2は、ファイル詳細情報表212にFHに対応するエントリがあれば、それを参照することで、ファイル詳細情報をクライアント1に出力する(例えば、
図6中のa)。これにより、分散ファイルシステム5は、サーバー2間の通信回数(例えば、
図6中のサーバー#3と#5の間)を削減し、さらに該ファイルを管理するサーバー2(例えば、
図6中のサーバー#5)へのI/OやCPU等の負荷を減らす。
【0067】
ケース2
対象ファイルがクライアント1毎にそれぞれ異なるため、(イ)の場合、サーバー2間通信は対象ファイルごとに必要になる。ただ、サーバー2ではケース1かケース2かの判別はできない。すなわち、次に来るリクエストが何であるかはそれを受け取るまでわからない。このため、サーバー2は、次に述べるデーモン数の範囲内では、ケース1と同様に(イ)の方法を選択する。
【0068】
(イ)の方法を使った場合、サーバー2間通信の間、ファイルが存在するディレクトリを管理するサーバー2上(例えば、
図6中のサーバー#3)のデーモンが対象ファイルごとに1つブロックされる。ここで、デーモンとは、クライアント1からのリクエストを処理するプロセスである。
【0069】
多数のクライアント1からのアクセスが集中し、デーモン数よりもクライアント1からのリクエスト数が多い場合は、デーモンが空くまでキューイングされて待たされることになり、その分TAT(Turn Around Time)が悪化することになる。ある特定のクライアント1のTATの悪化は、そのクライアント1を含むマルチノードジョブ全体のTATの悪化につながる。
【0070】
このため、サーバー2がリクエストを受信した際、デーモンがすべて処理中である場合は、サーバー2は、クライアント1のファイル詳細情報取得方法を、(イ)から(ア)の方法に切り替える。つまり、ファイルが存在するディレクトリを管理するサーバー2は、自装置が保持しているディレクトリエントリ内の情報であるFH、ファイルタイプのみをクライアント1に返す。クライアント1は、返されたFHから、オープン対象のファイルを管理するサーバー2を特定し、特定したサーバー2へ直接ファイル詳細情報を要求する。オープン対象の各ファイルは、それぞれ各サーバー2に分散配置されているため、このリクエストの送信先もクライアント1毎に分散されることになる。これにより、TATの悪化を軽減することが可能となる。
【0071】
<構成>
図2は、本実施の形態にかかるクライアント1、サーバー2、および、外部記憶装置4の内部構成を示す図である。
【0072】
クライアント1は、通信部101、マウント要求部102、メタデータ参照/更新部103、サーバー情報表更新部104、メタデータ問い合わせ部105、パス名解析部106、ファイル/ディレクトリ生成要求部107、ファイル詳細情報要求部108、サーバー情報表109、および、メタデータ記憶部110を包含する。通信部101は、リクエスト作成部101−1、および、サーバー特定部101−2を包含する。
【0073】
サーバー2は、通信部201、マウント応答部202、サーバー選定部203、ファイル/ディレクトリ生成要求部204、ディレクトリエントリ参照/更新部205、ファイル/ディレクトリ生成部206、FH生成部207、サーバー内FH検索部208、ファイル詳細情報問い合わせ部209、I/O発行部210、サーバー情報表211、ファイル詳細情報表212、および、メタデータ一時記憶表213を包含する。通信部201は、リクエスト作成部201−1、リクエスト応答部201−2、リクエスト受信部201−3、リクエスト内容変更部201−4、リクエスト処理デーモン数判別/更新部201−5、リクエスト処理デーモン数カウンタ201−6、リクエスト内容判別部201−7、および、サーバー特定部201−8を包含する。
【0074】
外部記憶装置4は、メタデータ記憶装置401、および、ファイルデータ記憶装置402を包含する。
【0075】
なお、
図2中で各部を結ぶ矢印は、結ばれる両者間の主要な指示/情報の流れを示すものであるが、各部間の指示/情報の流れは、これらに限られるものではない。
【0076】
図2中の各部は、それぞれ概略次のように動作する。最初に、クライアント1に含まれる各部の概略動作について説明する。
【0077】
通信部101は、送信デーモン、受信デーモンを包含する。そして、通信部101は、サーバー2に対してリクエストを送信する際は、例えば、メタデータ問い合わせ部105から渡された要求を通信プロトコルにあった形式に変換して、リクエスト作成部101−1を用いてリクエストを作成する。また、この際に、通信部101は、FHを基に、サーバー特定部101−2を用いて宛先のサーバー2のIPアドレスを得る。
【0078】
リクエスト作成部101−1は、TCP/IPなど使用する通信プロトコルに沿った形式のパケットを作成する。
【0079】
FHにはこれに対応するファイル、ディレクトリを管理するサーバー2のサーバーIDが含まれている。サーバー特定部101−2は、FHを基にサーバーIDを抽出し、サーバー情報表109を参照して、宛先サーバー2のIPアドレスを得る。
【0080】
マウント要求部102は、クライアント1がファイルシステムを利用可能にするための処理を行う。マウントに際して、あらかじめシステム管理者が、ルートサーバーのIPアドレス若しくはマシン名、及び、マウントポイントを指定しておく必要がある。
【0081】
mountコマンドなどによりマウント処理が開始されると、クライアント1からルートサーバーにマウント要求が通信部101を介して送信される。その応答として、サーバー情報、および、ファイルシステムの先頭のディレクトリのFHがルートサーバーからクライアント1に返される。ここで、サーバー情報は、ファイルシステムを構成している全サーバー2のサーバーIDとそのIPアドレスの対応表、および、各サーバー2配下のデバイス情報を包含する。
【0082】
サーバー情報は、クライアント1において、サーバー情報更新部104によりサーバー情報表109に記録され、FHはルートディレクトリのFHとして、メタデータ参照/更新部103によりメタデータ記憶部110に記録される。
【0083】
メタデータ参照/更新部103は、メタデータ記憶部110の参照と更新を行う。
【0084】
サーバー情報表更新部104は、サーバー情報表109更新を行う。
【0085】
メタデータ問い合わせ部105は、最初に、パス名解析部106により、指定されたパス名中のより上位の名前を1つ抽出する。例えば、マウントポイントが “/mnt”、パス名が “/mnt/home/user1/file1” である場合、まず “home” が抽出される。メタデータ問い合わせ部105は、それをメタデータ参照/更新部103により、ルートディレクトリ配下にこの名前がメタデータ記憶部110に既に登録されているかどうかを調べる。
【0086】
記憶されていない場合、メタデータ問い合わせ部105は、マウント時にルートサーバーから取得したルートディレクトリのFHとその配下の名前(“home”)の組み合わせをルートサーバーに送信して、送信した名前に対応するFHを要求する。応答として、指定した名前に対応するFHとファイルタイプが返される。メタデータ問い合わせ部105は、これをメタデータ参照/更新部103により、メタデータ記憶部110に登録する。
【0087】
その後、メタデータ問い合わせ部105は、パス名解析部106により、パス名中からその1つ下の名前(“user1”)を抽出し、その上位のディレクトリ(“home”)のFHからそれを管理するサーバー2を特定し、上記と同様にそのFHと名前(“user1”)に対応するFHを要求する。メタデータ問い合わせ部105は、応答として返された名前に対応するFHとファイルタイプをメタデータ参照/更新部103により、メタデータ記憶部110に登録する。メタデータ問い合わせ部105は、同様に処理を繰り返す。
【0088】
なお、パス名の末端の名前(“file1”)は、オープンシステムコールから呼ばれている場合、ファイル名であるので、サーバー2からは名前に対応するFHと共にファイル詳細情報が返される(
図4中のc)。
【0089】
前述の
図4は、メタデータ問い合わせ部105が関連モジュールを用いながら、ディレクトリ探索を経て、パス名に対応するファイルのFHとファイル詳細情報を取得する流れを示す。
【0090】
パス名解析部106は、与えられたパス名から文字列操作により、名前を1つ抽出する。
【0091】
ファイル/ディレクトリ生成要求部107は、与えられたパス名の最後の名前で、ファイルまたはディレクトリの作成を該当するサーバー2に要求する。与えられたパス名の最後の名前は、例えば、パス名が“/mnt/home/user1/file1”なら、名前“file1”である。ただし、作成するファイル、ディレクトリの上位ディレクトリのFHがメタデータ記憶部110に登録されていない場合は、先にメタデータ問い合わせ部105により上位ディレクトリのFHの問い合わせを行う。
【0092】
メタデータ問い合わせ部105の処理において、オープンシステムコールによりファイルをオープンする際、与えられたパス名の末端の名前に対応したFHの問い合わせでファイル詳細情報が返されず、FHとファイルタイプのみが返される場合が有る。すなわち、
図4中のcにおいて、ファイル詳細情報が返されない場合が有る。
【0093】
ファイル詳細情報要求部108は、この場合、このFHに基づいて該当するサーバー2、例えば、
図4のサーバー#4、へ直接ファイル詳細情報を要求し、それをメタデータ参照/更新部103によりメタデータ記憶部110に登録する。
【0094】
サーバー情報表109は、ファイルシステムを構成している全サーバー2のサーバーIDとそのIPアドレスの対応表と各サーバー2配下のデバイス情報をクライアント1に記憶するメモリ領域である。
【0095】
メタデータ記憶部110は、メタデータをクライアント1にキャッシュするためのメモリ領域である。メタデータ記憶部110は、オープンシステムコールなどで指定されるパス名中の各ディレクトリ名、またはファイル名をファイルディレクトリの上位から順に記憶し、それに対応するディレクトリ、ファイルのFHとファイルタイプを記憶する。さらに、ファイルの場合は、メタデータ記憶部110はファイル詳細情報も記憶する。
【0096】
クライアント装置1内の各部の機能分担は、適宜変更して実装しても良い。例えば、メタデータ問い合わせ部105は、パス名解析部106、および、メタデータ参照/更新部103の機能を包含しても良い。
【0097】
次に、サーバー2に含まれる各部の概略動作について説明する。
【0098】
通信部201は、受信デーモンと送信デーモンとして動作し、リクエストの受信とその応答及びサーバー2間通信の際のリクエストの作成を行う。
【0099】
さらに、通信部201は、動作中/待ち状態のリクエスト処理デーモンの数を管理している。クライアント1からファイル詳細情報を要求された際、待ち状態のリクエスト処理デーモン数が1個以下の場合、通信部201はファイル詳細情報を返却せずに、当該ファイルのFHとファイルタイプを返却するようにリクエストの内容を変更する。なお、通信部201は、動作中/待ち状態のリクエスト処理デーモンの数を管理する代わりに、ファイル詳細情報取得のため入出力について、現在進行中の入出力数と発行可能な最大多重度と現在進行中の入出力数との差分、を管理しても良い。
【0100】
リクエスト作成部201−1は、サーバー2間通信の際に宛先のサーバー2を指定し、必要なパラメータの設定などをしてリクエストを作成し、送信デーモンに渡す。
【0101】
リクエスト応答部201−2は、クライアント1、またはサーバー2間通信でのリクエストに対する応答に必要なデータを設定し、送信デーモンに渡す。
【0102】
リクエスト受信部201−3は、受信デーモンが受信したリクエストをリクエスト処理デーモンに渡す。なお、この際、リクエストがFH、ファイルタイプ、ファイル詳細情報を要求し、かつ、待ち状態のリクエスト処理デーモン数が1個以下であれば、リクエスト内容変更部201−4によりリクエストをFHとファイルタイプのみのリクエストに置き換える。
【0103】
リクエスト内容変更部201−4は、リクエスト内容の書き換えを行う。
【0104】
リクエスト処理デーモン数判別/更新部201−5は、処理中のリクエスト処理デーモンの数をリクエスト処理デーモン数カウンタ201−6に保持する。すなわち、リクエスト処理デーモン数判別/更新部201−5は、リクエスト処理デーモンの処理の開始/終了時に、リクエスト処理デーモン数カウンタ201−6のカウント値に1を加算/減算する。また、リクエスト処理デーモン数判別/更新部201−5は、受信デーモンがファイル詳細情報のリクエストを受信した際にリクエスト処理デーモン数カウンタ201−6のカウント値を参照する。
【0105】
リクエスト処理デーモン数カウンタ201−6は、処理中のリクエスト処理デーモンの数を持つカウンタであり、メモリ上にその領域を確保される。
【0106】
リクエスト内容判別部201−7は、クライアント1または他のサーバー2から受信したリクエストの種別を調べる。
【0107】
FHには、これに対応するファイル、ディレクトリを管理するサーバー2のサーバーIDが含まれている。サーバー特定部201−8は、FHからサーバーIDを抽出し、サーバー情報表211を参照して宛先サーバー2のIPアドレスを特定する。
【0108】
マウント応答部202は、クライアント1から、ファイルシステムのマウントを要求するリクエストを受信する。そして、マウント応答部202は、同クライアント1に対し、サーバー情報表211に記録されている該ファイルシステムのルートディレクトリのFHと、該ファイルシステムを構成するサーバー2のサーバーIDとIPアドレスを返却する。さらに、マウント応答部202は、各サーバー2配下のデバイスに関する情報を返す。なお、同リクエストを受信したサーバー2がルートサーバーではない場合は、マウント応答部202は、同クライアント1へエラーを返す。
【0109】
サーバー選定部203は、ファイル、ディレクトリの生成を要求された際、サーバー情報表211を参照して、ファイル、ディレクトリの名前に依存しない方法、例えば、ラウンドロビンや一様乱数に基づき、サーバー2を一つ選定する。
【0110】
ファイル/ディレクトリ生成要求部204は、サーバー選定部203が選定したサーバー2に対してファイル、ディレクトリの生成を要求する。
【0111】
ディレクトリエントリ参照/更新部205は、ファイル、ディレクトリを生成した際、その上位ディレクトリを管理するサーバー2において、メタデータ記憶装置401内の上位ディレクトリのディレクトリエントリに、生成されたファイル、ディレクトリのエントリを追加する。また、ディレクトリエントリ参照/更新部205は、参照要求を受けて、ディレクトリエントリ内の指定された名前に一致するエントリ、あるいはディレクトリエントリの各エントリのFHとファイルタイプを返す。
【0112】
ファイル/ディレクトリ生成部206は、ファイル、ディレクトリの生成要求をサーバー2間通信により受け取って、メタデータ記憶装置401内に該当するエントリが有るかどうかをチェックする。無ければ、ファイル/ディレクトリ生成部206は、FH生成部207によりFHを新たに生成し、ファイルの場合はファイルの構成情報や、ファイルタイプと共に新たなエントリを記録する。
【0113】
FH生成部207は、ファイル、ディレクトリを生成する際に起動されて、当該サーバー2のサーバーIDとサーバー2内でユニークな数値を組み合わせて、ファイルシステム全体でユニークなFHを生成する。
【0114】
サーバー内FH検索部208は、I/O発行部210を介して、メタデータ記憶装置401内を検索し、指定されたFHを検索する。
【0115】
ファイル詳細情報問い合わせ部209は、クライアント1がオープンしようとする、自装置が管理するディレクトリ配下のファイルのファイル詳細情報を、当該ファイルを管理するサーバー2に問い合わせる。
【0116】
I/O発行部210は、メタデータ記憶装置401、及びファイルデータ記憶装置402に対して、指定されたメモリ上のデータを書き込む、あるいは、指定されたデータをメモリ上に読み込む。この際、I/O発行部210は、メタデータの場合は同時にメタデータ一時記憶表213にも登録し、さらに読み込みに際してはメタデータ一時記憶表213に当該メタデータがあればその値を返す。
【0117】
サーバー情報表211は、ファイルシステムを構成するサーバー2のサーバーIDとIPアドレスの対応、及びルートディレクトリのFHを格納するメモリ上に確保された領域である。また、メタデータ記憶装置401には、サーバー情報表211と同じデータが格納されており、サーバー2を起動させた際にサーバー情報表211に読み込まれる。
【0118】
ファイル詳細情報表212は、ファイル詳細情報を格納するためのメモリ上に確保された領域である。
【0119】
メタデータ一時記憶表213は、メタデータをキャッシュするためのメモリ上に確保された領域である。
【0120】
サーバー装置1内の各部の機能分担は、適宜変更して実装しても良い。例えば、ディレクトリエントリ参照/更新部205は、サーバー内FH検索部208の機能を包含しても良いし、ファイル/ディレクトリ生成部206は、FH生成部207の機能を包含しても良い。
【0121】
最後に、外部記憶装置4に含まれる各部が記憶する情報について説明する。
【0122】
メタデータ記憶装置401は、ディレクトリエントリ、ファイル、ディレクトリの詳細情報、及びサーバー情報表211と同じサーバー2の構成情報などのファイルシステムの管理情報、いわゆるメタデータを記憶する記憶媒体である。
【0123】
ファイルデータ記憶装置402は、ファイルのデータを記憶する記憶媒体である。なお、ファイルデータ記憶装置402とメタデータ記憶装置401は、物理的に別の媒体でも同一の媒体でも良い。
【0124】
なお、クライアント1やサーバー2は、ファイル、ディレクトリの削除、属性情報の取得などのファイルシステムが通常持っている他の機能も備えているが、他の処理から容易に想到し得るため、ここでは説明を割愛する。
【0125】
ここで、クライアント1における、通信部101、マウント要求部102、メタデータ参照/更新部103、サーバー情報表更新部104、メタデータ問い合わせ部105、パス名解析部106、ファイル/ディレクトリ生成要求部107、および、ファイル詳細情報要求部108は、論理回路で構成される。各部は、適宜、クライアント1が備える図示されない半導体メモリにアクセスする。サーバー情報表109、およびメタデータ記憶部110は、クライアント1が備える図示されない半導体メモリ上に設けられる。
【0126】
また、サーバー2における、通信部201、マウント応答部202、サーバー選定部203、ファイル/ディレクトリ生成要求部204、ディレクトリエントリ参照/更新部205、ファイル/ディレクトリ生成部206、FH生成部207、サーバー内FH検索部208、ファイル詳細情報問い合わせ部209、および、I/O発行部210は、論理回路で構成される。各部は、適宜、サーバー2が備える図示されない半導体メモリにアクセスする。サーバー情報表211、ファイル詳細情報表212、およびメタデータ一時記憶表213は、サーバー2が備える図示されない半導体メモリに記憶される。
【0127】
外部記憶装置4は、例えば、HDD(Hard-Disk Drive)やSSD(Solid State Drive)である。
【0128】
また、クライアント1、およびサーバー2は、それぞれ、プログラム43を備えるコンピュータ装置40で実現することも出来る。
【0129】
図16は、コンピュータ装置40の構成図である。コンピュータ装置40は、バス45で相互に接続されたプロセッサ41、主記憶部42、外部記憶装置44を備える。ここで、例えば、主記憶部42は半導体記憶装置、外部記憶装置44はHDDやSDDである。主記憶部42はプログラム43を記憶している。
【0130】
クライアント1が記憶しているプログラム43は、クライアント1として用いられるコンピュータ装置40において、プロセッサ41で実行されることにより、プロセッサ41を通信部101、マウント要求部102、メタデータ参照/更新部103、サーバー情報表更新部104、メタデータ問い合わせ部105、パス名解析部106、ファイル/ディレクトリ生成要求部107、および、ファイル詳細情報要求部108として機能させる。主記憶部42は、サーバー情報表109、および、メタデータ記憶部110を格納する。
【0131】
さらに、サーバー2が記憶しているプログラム43は、サーバー2として用いられるコンピュータ装置40において、プロセッサ41で実行されることにより、プロセッサ41を通信部201、マウント応答部202、サーバー選定部203、ファイル/ディレクトリ生成要求部204、ディレクトリエントリ参照/更新部205、ファイル/ディレクトリ生成部206、FH生成部207、サーバー内FH検索部208、ファイル詳細情報問い合わせ部209、および、I/O発行部210として機能させる。主記憶部42は、サーバー情報表211、ファイル詳細情報表212、およびメタデータ一時記憶表213を格納する。
【0132】
サーバー2において、外部記憶装置44または主記憶部42は、メタデータ記憶装置401、および、ファイルデータ記憶装置402として機能する。
【0133】
<動作>
次に、本発明の実施例の動作について詳細に説明する。なお、説明にあたって、クライアント1、サーバー2は、コンピュータ装置40を用いて実現されていると仮定する。クライアント1、サーバー2のオペレーティングシステムは、UNIX(登録商標)や Linux(登録商標)であると仮定する。また、クライアント1、サーバー2は、EtherNet(登録商標)、InfiniBand(登録商標)など一般に利用可能なネットワークインターフェースを持ち、相互結合ネットワーク3を介して接続される。これにより、クライアント1は任意のサーバー2と通信可能であり、サーバー2はそのサーバー2以外の任意のサーバー2と通信可能である。
【0134】
1.ファイルのオープン処理
図7乃至
図11は、ファイルオープン処理の動作例のフローチャートである。
図7及び
図8はクライアント1側、
図9乃至
図11はサーバー2側の動作フローチャートである。なお、これらのフローチャートは、クライアント1が、ファイルディレクトリを検索して、オープン対象のファイルのFHとファイル詳細情報を取得するまでの流れを示しており、その後のオープン処理については割愛されている。その後のオープン処理は、公知技術で実現できる。
【0135】
1.a.ファイルのオープン処理(クライアント1側)
クライアント1の動作は、メタデータ問い合わせ部105が中心となる。クライアント1上で動作するAPから、分散ファイルシステム5内のファイルに対してオープンシステムコールが呼び出されると、オペレーシングシステムのカーネルからメタデータ問い合わせ部105が起動されて、
図7の処理が開始される。
【0136】
最初に、メタデータ問い合わせ部105は、パス名解析部106により、指定されたパス名中の上位の名前を1つ抽出する(ステップ1)。パス名の末端、すなわち文字列としての終端、もしくは、作成対象の名前を検出した場合(ステップ2でYES)、メタデータ問い合わせ部105は、
図8の処理に進む。
【0137】
パス名の末端、もしくは作成対象の名前以外を検出した場合(ステップ2のNO)、メタデータ問い合わせ部105は、抽出した名前がメタデータ記憶部110に既に登録されているかどうかを、メタデータ参照/更新部103により調べる(ステップ3)。登録されている場合は(ステップ4でYES)、メタデータ問い合わせ部105はステップ1に戻る。
【0138】
登録されていない場合は(ステップ4でNO)、メタデータ問い合わせ部105は、まず、上位ディレクトリのFHから問い合わせ先のサーバー2を特定し(ステップ5)、該サーバー2へ上位ディレクトリのFH、問い合わせ対象の名前を送信する(ステップ6)。メタデータ問い合わせ部105は、問い合わせ先のサーバー2からFHとファイルタイプを受信すると、それらを名前と共にメタデータ参照/更新部103によりメタデータ記憶部110に登録する(ステップ7)。
【0139】
図7のステップ2でYESとなり、
図8の処理に進んだ場合、メタデータ問い合わせ部105は、ファイル詳細情報要求部108により、オープン対象のファイルの名前のファイル詳細情報、及びFHを、そのファイルの上位ディレクトリを管理するサーバー2へ問い合わせる。
【0140】
図8において、メタデータ問い合わせ部105は、メタデータ参照/更新部103により、オープン対象のファイルの名前が既にメタデータ記憶部110に登録されているかを調べ(ステップ11)、既に登録されている場合(ステップ12でYES)、動作を終了する。登録されていない場合(ステップ12でNO)、メタデータ問い合わせ部105は、上位ディレクトリのFHより問い合わせ先のサーバー2を特定し(ステップ13)、オープン対象ファイルの名前に相当するFH、及びファイル詳細情報を含む問い合わせを該サーバー2へ送信する(ステップ14)。なお、この問い合わせは、1)上位ディレクトリを管理するサーバー2が保持するオープン対象ファイルの名前に相当するFH、及び、ファイルタイプの問い合わせと、2)オープン対象ファイルを管理するサーバー2が保持するファイル詳細情報の問い合わせの2つの問い合わせをまとめた問い合わせである。
【0141】
FH、ファイルタイプと共にファイル詳細情報を受信した場合(ステップ15でYES)、メタデータ問い合わせ部105は、ステップ9の実施後動作を終了する。ファイル詳細情報は返されず、FHとファイルタイプが返された場合(ステップ15でNO)、メタデータ問い合わせ部105は、返されたFHとファイルタイプをメタデータ参照/更新部103により一旦メタデータ記憶部110に登録する(ステップ16)。さらに、メタデータ問い合わせ部105は、ファイル詳細情報要求部108により、返されたFHを基にオープン対象ファイルを管理するサーバー2を特定し(ステップ17)、該サーバー2へFHを指定してオープン対象のファイルのファイル詳細情報を問い合わせる(ステップ18)。その後、メタデータ問い合わせ部105は、ファイル詳細情報要求部108が受信した該ファイル詳細情報を、FH、名前と共にメタデータ参照/更新部103によりメタデータ記憶部110に登録する(ステップ19)。
【0142】
メタデータ問い合わせ部105による
図8の動作が終了すると、クライアント1上では、メタデータ記憶部110上のファイルの名前、FH、ファイル詳細情報を用いて、オープンシステムコールの処理が続行される。
【0143】
1.b.ファイルのオープン処理(サーバー2側)
図9乃至11は、
図7のステップ6、
図8のステップ14、およびステップ18においてサーバー2への問い合わせをクライアント1が行った際のサーバー2側の処理の例を示す。クライアント1からの当合わせはサーバー2において、通信部201により受信される。
【0144】
図9において、通信部201は、受信されたクライアント1からのリクエスト(問い合わせ)を、リクエスト内容判別部201−7により何のリクエストかを調べる。そのリクエストがFHで示されたディレクトリ配下のファイルのファイル詳細情報とFH、ファイルタイプを要求するものであった場合(ステップ21でYES)、通信部201は、リクエスト処理デーモン数判別/更新部201−5によりリクエスト処理デーモン数カウンタ201−6を参照し、待ち状態の同デーモンの数を確認する(ステップ22)。
【0145】
同デーモン数が2個以上である場合(ステップ23でNO)、通信部201は、
図11のファイルのFH、ファイルタイプ、及び、ファイル詳細情報取得処理に進む。1個以下である場合(ステップ23でYES)、通信部201は、リクエスト内容変更部201−4により、リクエストの内容を該ファイルのFHとファイルタイプの問い合わせのみに書き換える(ステップ24)。次に、通信部201は、そのリクエストをリクエスト処理デーモンに渡し(ステップ25)、
図10のファイルのFHとファイルタイプ取得処理に進む。
【0146】
なお、受信したリクエストがFHで示されたディレクトリ配下のファイルのFHとファイルタイプを要求するものであった場合(ステップ21でNO)、通信部201は、そのリクエストをリクエスト処理デーモンに渡し(ステップ25)、
図10のファイルのFHとファイルタイプ取得処理に進む。
【0147】
図9でステップ25を実施した場合は、
図10において、ディレクトリエントリ参照/更新部205は、サーバー内FH検索部208により、受信したFHをキーとして該当するディレクトリを特定する(ステップ31)。ディレクトリエントリ参照/更新部205は、さらにそのディレクトリから、名前をキーとして該当するエントリを特定することで、名前に対応するFHとファイルタイプを抽出し、要求元のクライアント1へ送信し(ステップ32)、処理を終了する。
【0148】
図9で、リクエスト処理デーモン数が2個以上である場合(ステップ23でNO)、
図11において、ディレクトリエントリ参照/更新部205は、サーバー内FH検索部208により、受信したFHをキーとして該当するディレクトリを特定する(ステップ41)。ディレクトリエントリ参照/更新部205は、さらにそのディレクトリから、名前をキーとして該当するエントリを特定することで、名前に対応するFHとファイルタイプを抽出する(ステップ42)。
【0149】
続いてディレクトリエントリ参照/更新部205は、ファイル詳細情報表212を検索し、該ファイルのファイル詳細情報が登録されているかどうかを確認する(ステップ43)。
【0150】
登録されていた場合(ステップ43でYES)、ディレクトリエントリ参照/更新部205は、FHとファイルタイプと共に該ファイル詳細情報を要求元のクライアント1へ返却し(ステップ44)、処理を終了する。登録されていない場合(ステップ43でNO)、該ファイルのファイル詳細情報をファイル詳細情報問い合わせ部209が、該ファイルを管理するサーバー2へ問い合わせる(ステップ45)。このとき、サーバー特定部201−8が、該ファイルのFHからサーバー2を特定する。
【0151】
問い合わせ先の該サーバー2、すなわち、該ファイルを管理するサーバー2からファイル詳細情報を受信すると、ディレクトリエントリ参照/更新部205は、これをファイル詳細情報表212へ登録し(ステップ46)、要求元のクライアント1へFH、ファイルタイプと共に該ファイル詳細情報を送信し(ステップ47)、処理を終了する。
【0152】
なお、問い合わせ先のサーバー2では、ディレクトリエントリ参照/更新部205が問い合わせ元のサーバー2(該ファイルが存在するディレクトリを管理するサーバー2)が送信したFH受信する。そして、ディレクトリエントリ参照/更新部205が、サーバー内FH検索部208により、メタデータ一時記憶表213またはメタデータ記憶装置401を検索し、受信したFHに対応するファイル詳細情報を読み出して、問い合わせ元のサーバー2へ返却する。
【0153】
2. ファイル、ディレクトリの生成処理
図12および
図13は、サーバー2におけるファイル、ディレクトリ生成処理の動作例のフローチャートである。
【0154】
クライアント1上で動作するAPから、create/openシステムコール、または、mkdirシステムコールが呼び出されると、オペレーシングシステムのカーネルからメタデータ問い合わせ部105が起動されて、当該システムコールにおいて指定されたパス名を基に、生成するファイル、ディレクトリを作成するディレクトリのFHを取得する。その後、ファイル/ディレクトリ生成要求部107が起動され、該当するサーバー2へその生成を要求する。
【0155】
図12は、ファイル、ディレクトリを作成するディレクトリを管理するサーバー2側、
図13は、ファイル、ディレクトリを生成するサーバー2側の動作フローチャートである。ここで、ファイル、ディレクトリを作成するディレクトリとは、新たに生成されたファイル、ディレクトリの上位ディレクトリとなるディレクトリである。
【0156】
2.a.ファイル、ディレクトリの生成処理(上位ディレクトリを管理するサーバー2側)
図12において、クライアント1から生成要求を受信すると、ファイル/ディレクトリ生成要求部204が起動される。ファイル/ディレクトリ生成要求部204は、サーバー選定部203により新たに生成するファイル、ディレクトリを管理するサーバー2を選定し(ステップ51)、選定したサーバー2へファイル、ディレクトリの作成要求としてファイルタイプと名前、ファイル、ディレクトリのパーミッションに関する情報を送信する(ステップ52)。
【0157】
ファイル/ディレクトリ生成要求部204は、作成要求先のサーバー2から、生成したファイル、ディレクトリのFHを、ファイルの場合はファイル詳細情報も、受信する。ディレクトリエントリ参照/更新部205は、受信したFHとファイルタイプ及び名前をI/O発行部210を経てメタデータ一時記憶表213、及びメタデータ記憶装置401へ新たなディレクトリエントリとして登録する(ステップ53)。
【0158】
また、ファイルを生成した場合は(ステップ54でYES)、ディレクトリエントリ参照/更新部205は、さらに、受信したファイル詳細情報をファイル詳細情報表212に登録する(ステップ55)。この後、通信部201が、受信したファイル、ディレクトリのFHを、ファイルを生成した場合はそのファイルのファイル詳細情報も、要求元のクライアント1へ送信して(ステップ56)、処理を終了する。
【0159】
2.b.ファイル、ディレクトリの生成処理(作成するサーバー2側)
図12のステップ52でファイル、ディレクトリの生成要求を受信したサーバー2は、
図13のフローチャートのように動作する。
【0160】
生成要求を受信したファイル/ディレクトリ生成部206は、FH生成部207により自サーバー2のサーバーIDと自サーバー2内で一意な番号を組み合わせることで、ファイルシステム内で一意なFHを生成する(ステップ61)。次に、ファイル/ディレクトリ生成部206は、このFHと共にファイル、ディレクトリの詳細情報としてファイルのパーミッション、生成時刻などをI/O発行部210を経て、メタデータ一時記憶表213及びメタデータ記憶装置401に登録する(ステップ62)。
【0161】
この後、ファイル/ディレクトリ生成部206は、要求元のサーバー2へこれら情報を返して(ステップ63)、処理を終了する。
【0162】
3. マウント処理
図14および
図15は、マウント処理の動作例のフローチャートである。
図14はクライアント1側、
図15はサーバー2側の動作フローチャートである。
【0163】
3.a.マウント処理(クライアント1側)
図14において、クライアント1のユーザがmountコマンドを入力、または、クライアント1上のAPがマウントシステムコールを呼び出すと、マウント要求部102がオペレーティングシステムから起動される。mountコマンド、または、mountシステムコールは、ルートサーバーであるサーバー2を指定しており、マウント要求部102は、指定されているサーバー2へマウント要求を送信する(ステップ71)。
【0164】
マウント要求部102は、該サーバー2から、ルートディレクトリのFH、ファイルシステムを構成する全サーバー2のサーバーIDとIPアドレスの対応表を含む応答を受信し(ステップ72)、同対応表を、サーバー情報更新部104によりサーバー情報表109に登録する(ステップ73)。マウント要求部102は、ルートディレクトリのFHをメタデータ参照/更新部103によりメタデータ記憶部110に登録して(ステップ74)、処理を終了する。
【0165】
3.b.マウント処理(サーバ2側)
図15において、マウント応答部202は、サーバー情報表211を参照し、ファイルシステムを構成する全サーバー2のサーバーIDとIPアドレスの対応表、及びルートディレクトリのFHの値を読み出し(ステップ81)、要求元のクライアント1へ送信して(ステップ82)、処理を終了する。
【0166】
なお、サーバー2での各リクエストの処理において、リクエスト処理デーモン数判別/更新部201−5は、リクエスト処理デーモン数カウンタ201−6の値をリクエストの処理開始時に1増加させ、リクエストの処理終了時に1減少させる。
【0167】
<効果>
本実施の形態にかかるファイル分散システム5の効果は以下の通りである。
【0168】
第1の効果は、多数のクライアント1での同一ファイルへのオープン処理により、そのリクエストが対象ファイルを管理するサーバー2とその上位ディレクトリを管理するサーバー2に集中した場合において、サーバー2間の通信回数を削減できることである。
【0169】
その理由は、上位ディレクトリを管理するサーバー2が、当該ファイルの詳細情報を、ファイルを管理するサーバー2から最初に取得した際に、ファイル詳細情報表212に保持するからである。このため、2度目以降のリクエストにおいては、上位ディレクトリを管理するサーバー2とファイルを管理するサーバー2との間の通信が不要となる。
【0170】
第2の効果は、多数のクライアント1での同一ディレクトリ配下の異なるファイルへのオープン処理により、そのリクエストが当該ディレクトリを管理するサーバー2に集中した場合において、当該サーバー2がボトルネックになるのを防止できることである。
【0171】
その理由は、当該ディレクトリを管理するサーバー2のI/O多重度が高くなり、デーモンがすべて使用中になった場合、該サーバー2がディレクトリエントリ内に保持しているFH、及びファイルタイプのみをクライアント1へ返すからである。その後そのFHを基にクライアント1が、オープン対象のファイルを管理するサーバー2を特定し、そのサーバー2に問い合わせを行う。オープン対象の各ファイルは、それぞれ各サーバー2に分散配置されているため、このリクエストの送信先もクライアント1毎に分散されることになる。このため、アクセスが集中するディレクトリを管理するサーバー2のデーモンがすべて使用中であったとしても待ちが発生せず、クライアント1に対するTATが悪化しない。
【0172】
第3の効果は、ファイルへのread/write処理だけではなく、ファイルのオープン処理などのメタデータアクセス処理も複数のサーバー2で分散処理できることである。つまり、多数のクライアント1が同一ファイルシステムにアクセスする場合でも、read/write処理、メタデータ処理の両面において負荷分散できる。
【0173】
その理由は、ファイルのデータだけではなく、ファイル/ディレクトリの詳細情報やディレクトリエントリ等のメタデータもファイル、ディレクトリ毎に複数のサーバー2に分散して配置することが可能だからである。
【0174】
第4の効果は、ファイル、ディレクトリの生成の際に行われる、生成対象ファイル、ディレクトリを管理するサーバー2の選定において、システム全体として管理する情報の更新や排他制御により、システム全体のスループットを妨げないことである。
【0175】
その理由は、その上位ディレクトリを管理するサーバー2が、生成対象ファイル、ディレクトリを管理するサーバー2を、サーバー情報表211から選定するからである。このため、サーバー2の選定に際して、システム全体として管理する情報の更新や排他制御が不要となる。
【0176】
第5の効果は、同一ディレクトリ配下に多数のファイル、ディレクトリを生成しても、特定のサーバー2配下にこれらファイルデータ、メタデータが偏って配置されることはなく、容量、負荷の両面において適正に分散させることが可能なことである。
【0177】
その理由は、上位ディレクトリを管理するサーバー2が、新たに生成するファイル、ディレクトリを管理するサーバー2をサーバー情報表211から選定する際、名前に依存しない、例えば、ラウンドロビンや一様乱数などに基づく方法を取るからである。
【0178】
第6の効果は、クライアント1が、2度目以降の同一ディレクトリ配下へのファイルのオープン処理などメタデータアクセスを伴う処理において、サーバー2との通信回数を削減できることである。
【0179】
その理由は、ファイルを管理するサーバー2を特定する際、クライアント1上にメタデータをキャッシュするからである。例えば、オープン処理で同じディレクトリ配下の複数のファイルを同一クライアント1が続けてアクセスすることは、決して少なくない。メタデータのキャッシュにより、ファイルアクセスの都度、ルートサーバーからファイルを管理するサーバー2を辿る処理は不要になる。このため、処理効率が大幅に向上する。
【0180】
第7の効果は、名前に関する問題が軽減され、エンドユーザが通常行うファイル名変更やハードリンク利用の操作の処理が煩雑にならないことである。
【0181】
その理由は、ファイル名を変更する場合は、その上位ディレクトリのディレクトリエントリ内の名前を書き換えるだけでよいからである。また、ハードリンクは、例えばディレクトリエントリ内に名前は異なるが同一のFH、ファイルタイプを持つエントリを作り、対象となるファイルを管理するサーバー2で該ファイルのファイル詳細情報のリンク数をカウントアップすることで実現可能となる。このため、本実施の形態にかかるファイル分散システム5は、特許文献1、2、または、非特許文献1のシステム等において発生するような問題を生じない。
【0182】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。