(57)【要約】【課題】ファイルストライピングとブロックストライピングとの入出力性能を効果的に利用できる分散ファイルシステムを提供する。【解決手段】ファイルを格納する記憶領域として、ファイル単位で格納するファイルストライピングによる第1の記憶領域と、ファイルをブロックに分割し、分割したブロック単位で格納するブロックストライピングによる第2の記憶領域と、格納するファイルのファイルサイズと予め定めてあるファイルサイズの閾値とを比較し、格納するファイルのファイルサイズが閾値未満のとき、格納するファイルをファイルストライピングにより第1の記憶領域に格納し、格納するファイルのファイルサイズが閾値以上のとき、格納するファイルをブロックストライピングにより第2の記憶領域に格納するファイルサイズ予測部を有する。【選択図】図１
2010191903.tif 000002
【特許請求の範囲】
【請求項１】
ファイルを格納する記憶領域として、前記ファイルをファイル単位で格納するファイルストライピングによる第1の記憶領域と、及び前記ファイルをブロックに分割し、前記分割したブロック単位で格納するブロックストライピングによる第2の記憶領域とを有する分散ファイルシステムのストライピング選択方法であって、
格納するファイルのファイルサイズと予め定めてあるファイルサイズの閾値とを比較し、
前記格納するファイルのファイルサイズが前記閾値未満のとき、前記格納するファイルを前記ファイルストライピングにより前記第1の記憶領域に格納し、
前記格納するファイルのファイルサイズが前記閾値以上のとき、前記格納するファイルを前記ブロックストライピングにより前記第2の記憶領域に格納することを特徴とする分散ファイルシステムのストライピング種別選択方法。
【請求項２】
前記格納するファイルのファイルサイズとして、前記格納するファイルのプロファイル要素と類似するプロファイル要素を含むプロファイルデータに含まれるファイルサイズの予測値を用いることを特徴とする請求項１記載の分散ファイルシステムのストライピング種別選択方法。
【請求項３】
前記予測値は、前記格納するファイルのプロファイル要素と類似するプロファイル要素を含むプロファイルデータの中の類似度の高い前記プロファイルデータに含まれるファイルサイズの予測値であることを特徴とする請求項２記載の分散ファイルシステムのストライピング種別選択方法。
【請求項４】
前記格納するファイルのプロファイル要素と類似するプロファイル要素を含むプロファイルデータがないとき、前記第1の記憶領域及び前記第2の記憶領域とは異なる記憶領域であるバッファに前記格納するファイルを書き込み、前記バッファに書き込んだファイルサイズが前記閾値を超える前に前記書き込みを終了したとき、前記バッファに書き込んだ前記格納するファイルを前記ファイルストライピングにより前記第1の記憶領域に格納し、前記バッファに書き込んだファイルサイズが前記閾値を超えてから前記書き込みを終了したとき、前記バッファに書き込んだ前記格納するファイルを前記ブロックストライピングにより前記第2の記憶領域に格納することを特徴とする請求項２記載の分散ファイルシステムのストライピング種別選択方法。
【請求項５】
前記閾値をファイルサイズとするダミーファイルを生成し、前記ダミーファイルを前記ファイルストライピングにより前記第1の記憶領域に格納する時間と、前記ダミーファイルを前記ブロックストライピングにより前記第2の記憶領域に格納する時間とを比較し、前記比較結果に応じて、前記閾値を更新することを特徴とする請求項１記載の分散ファイルシステムのストライピング種別選択方法。
【請求項６】
ファイルを格納する記憶領域として、前記ファイルをファイル単位で格納するファイルストライピングによる第1の記憶領域、
及び前記ファイルをブロックに分割し、前記分割したブロック単位で格納するブロックストライピングによる第2の記憶領域、及び
格納するファイルのファイルサイズと予め定めてあるファイルサイズの閾値とを比較し、
前記格納するファイルのファイルサイズが前記閾値未満のとき、前記格納するファイルを前記ファイルストライピングにより前記第1の記憶領域に格納し、前記格納するファイルのファイルサイズが前記閾値以上のとき、前記格納するファイルを前記ブロックストライピングにより前記第2の記憶領域に格納するファイルサイズ予測部を有することを特徴とする分散ファイルシステム。
【請求項７】
前記ファイルサイズ予測部は、前記格納するファイルのファイルサイズとして、前記格納するファイルのプロファイル要素と類似するプロファイル要素を含むプロファイルデータに含まれるファイルサイズの予測値を用いることを特徴とする請求項６記載の分散ファイルシステム。
【請求項８】
前記予測値は、前記格納するファイルのプロファイル要素と類似するプロファイル要素を含むプロファイルデータの中の類似度の高い前記プロファイルデータに含まれるファイルサイズの予測値であることを特徴とする請求項７記載の分散ファイルシステム。
【請求項９】
前記ファイルサイズ予測部は、前記格納するファイルのプロファイル要素と類似するプロファイル要素を含むプロファイルデータがないとき、前記第1の記憶領域及び前記第2の記憶領域とは異なる記憶領域であるバッファに前記格納するファイルを書き込み、前記バッファに書き込んだファイルサイズが前記閾値を超える前に前記書き込みを終了したとき、前記バッファに書き込んだ前記格納するファイルを前記ファイルストライピングにより前記第1の記憶領域に格納し、前記バッファに書き込んだファイルサイズが前記閾値を超えてから前記書き込みを終了したとき、前記バッファに書き込んだ前記格納するファイルを前記ブロックストライピングにより前記第2の記憶領域に格納することを特徴とする請求項７記載の分散ファイルシステム。
【請求項１０】
前記閾値をファイルサイズとするダミーファイルを生成し、前記ダミーファイルを前記ファイルストライピングにより前記第1の記憶領域に格納する時間と、前記ダミーファイルを前記ブロックストライピングにより前記第2の記憶領域に格納する時間とを比較し、前記比較結果に応じて、前記閾値を更新する閾値決定部をさらに有することを特徴とする請求項６記載の分散ファイルシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイルを複数ディスクに分散して格納する分散ファイルシステムにおいて、ファイルをストライピングする種別を選択する方法に関する。
【背景技術】
【０００２】
分散ファイルシステムは、複数ファイルを複数ディスクに分散格納することで、大容量ファイルの入出力を高速に実現する。複数ファイルを複数ディスクに分散格納する方法の一つは、ファイルの種別や属性に対応付けられたディスクにファイル単位で格納する方法である。他の方法としては、特許文献1に記載されるように、一つのファイルを所定のサイズ(ブロック)単位に分割して、分割したブロック単位で異なるディスクに格納する方法がある。
【０００３】
従来の分散ファイルシステムは、上記のいずれか一方のファイル格納方法を提供するものであった。また、サーバが両者の方法の分散ファイルシステムを提供し、そのサーバに接続するクライアントがいずれかの格納方法を選択できるものもある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００２−１８２９５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ここでは、上記の複数のディスクにファイルを格納する方法のうち、前者のファイル単位で格納する方法をファイルストライピング、後者のブロック単位で格納する方法をブロックストライピングとそれぞれ呼ぶ。
【０００６】
上述したように、ファイルの格納方法としてファイルストライピングとブロックストライピングとのいずれかをクライアントに選択させる方法であっても、分散ファイルシステム中にそれらの格納方法が独立して用意されているものである。
【０００７】
分散ファイルシステムは、ファイルの記憶領域への高速な入出力を図るためのものであるが、ファイルストライピングとブロックストライピングとでは、ファイルのサイズによって、入出力性能(入出力時間)に差異を生じる。
【０００８】
そこで、ユーザから見ると、ファイルストライピングとブロックストライピングとの入出力性能を効果的に利用できる分散ファイルシステムが望まれる。
【課題を解決するための手段】
【０００９】
本発明は、次のような態様のストライピング種別選択方法及びその分散ファイルシステムである。ファイルを格納する記憶領域として、ファイル単位で格納するファイルストライピングによる第1の記憶領域と、ファイルをブロックに分割し、分割したブロック単位で格納するブロックストライピングによる第2の記憶領域と、格納するファイルのファイルサイズと予め定めてあるファイルサイズの閾値とを比較し、格納するファイルのファイルサイズが閾値未満のとき、格納するファイルをファイルストライピングにより第1の記憶領域に格納し、格納するファイルのファイルサイズが閾値以上のとき、格納するファイルをブロックストライピングにより第2の記憶領域に格納するファイルサイズ予測部を有する。
【００１０】
本発明の他の態様は、ファイルサイズ予測部は、格納するファイルのファイルサイズとして、格納するファイルのプロファイル要素と類似するプロファイル要素を含むプロファイルデータに含まれるファイルサイズの予測値を用いる。
【００１１】
本発明のさらに他の態様は、予測値は、格納するファイルのプロファイル要素と類似するプロファイル要素を含むプロファイルデータの中の類似度の高いプロファイルデータに含まれるファイルサイズの予測値である。
【００１２】
本発明のさらに他の態様は、ファイルサイズ予測部は、格納するファイルのプロファイル要素と類似するプロファイル要素を含むプロファイルデータがないとき、第1の記憶領域及び第2の記憶領域とは異なる記憶領域であるバッファに格納するファイルを書き込み、バッファに書き込んだファイルサイズが閾値を超える前に書き込みを終了したとき、バッファに書き込んだ格納するファイルをファイルストライピングにより第1の記憶領域に格納し、バッファに書き込んだファイルサイズが閾値を超えてから書き込みを終了したとき、バッファに書き込んだ格納するファイルをブロックストライピングにより第2の記憶領域に格納する。
【００１３】
本発明のさらに他の態様は、閾値をファイルサイズとするダミーファイルを生成し、ダミーファイルをファイルストライピングにより第1の記憶領域に格納する時間と、ダミーファイルをブロックストライピングにより第2の記憶領域に格納する時間とを比較し、その比較結果に応じて、閾値を更新する閾値決定部をさらに有する。
【発明の効果】
【００１４】
本発明によれば、ファイルストライピングとブロックストライピングとの入出力性能を効果的に利用できる分散ファイルシステムを実現できる。
【図面の簡単な説明】
【００１５】
【図１】本実施形態の構成の概要図である。
【図２】ファイルのストライピングの概要図である。
【図３】ファイルストライピングとブロックストライピングの性能特性図である。
【図４】３要素プロファイルによるプロファイル別予測テーブルの例である。
【図５】２要素プロファイルによるプロファイル別予測テーブルの例である。
【図６】２要素プロファイルによるプロファイル別予測テーブルの例である。
【図７】１要素プロファイルによるプロファイル別予測テーブルの例である。
【図８】ファイルサイズ予測部の処理のフローチャートである。
【図９】プロファイル別予測テーブルからプロファイルを検索する処理のフローチャートである。
【図１０】ストライピング種別を決定する処理のフローチャートである。
【図１１】バッファへ読み込んだファイルのストライピング種別を決定する処理のフローチャートである。
【図１２】バッファへ読み込んだファイルと閾値との比較の概要図である。
【図１３】プロファイル別予測テーブルの更新処理のフローチャートである。
【図１４】閾値決定部の処理のフローチャートである。
【図１５】ファイルの書き込みのシミュレーションのフローチャートである。
【発明を実施するための形態】
【００１６】
図１は、本実施形態の分散ファイルシステム１とそれを使用するクライアントコンピュータ２を含む構成の概要図を示す。図示を省略するが、分散ファイルシステム１はサーバ上に構築され、クライアントコンピュータ２はそのサーバにネットワークを介して接続される。クライアントコンピュータ２で実行されているユーザプログラム20がファイル21を分散ファイルシステム１へ書き込む様子を示している。分散ファイルシステム１は前述のようにメモリ11とCPU10を具備するサーバ上に構築され、メモリ11にはプロファイル別予測テーブル110とファイルサイズ予測部111と閾値決定部112を保持し、バッファ113を備えている。ファイルサイズ予測部111と閾値決定部112は、CPU10により実行されるプログラムである。
【００１７】
記憶装置12には、たとえばディレクトリと呼ばれるファイルの格納構造や格納位置などの管理情報を格納するマスタファイル120と、ファイルの実体をファイルストライピングにより格納するファイルストライピングサブファイル121と、ファイルの実体をブロックストライピングにより格納するブロックストライピングサブファイル126とを設ける。なお、ディレクトリは複数あってもよく、各ディレクトリごとにマスタファイルを用意する。複数のディレクトリの各々は、ディレクトリ名などにより、そのルートノードが識別される。
【００１８】
マスタファイル120は、ファイルストライピング及びブロックストライピングのいずれかによるファイルを纏めて管理するので、格納されているファイルがファイルストライピング及びブロックストライピングのいずれによりストライピングされているかを示すストライピング種別情報を各格納ファイルの識別情報に対応付けている。ファイルストライピングサブファイル121はディスク122、123に格納され、ブロックストライピングサブファイル126はディスク127、128に格納される。
【００１９】
マスタファイル120を含めて各ファイルを格納するディスクは、物理的なディスク(物理ディスク)に限らず、記憶領域を持つ論理的なディスク(論理ディスク)でよい。論理ディスクは一つの物理ディスクを論理的に分割した記憶領域を持つものであっても、複数の物理ディスクを論理的に統合した記憶領域を持つものであっても、一つの物理ディスクと対応した記憶領域を持つものであっても良い。
【００２０】
ファイルも、論理ファイルとして分散ファイルシステム１上に作成される仮想的なファイルでよい。論理ファイルの実体は、マスタファイル120に格納される論理ファイルの管理情報とサブファイル121、126に格納される論理ファイルのデータ部分から構成される。
【００２１】
図2は、ファイルがストライピングされて記憶装置12に格納される概要を示す。図2は、論理ファイルA〜Cの各々がファイルストライピングにより格納され、論理ファイルD、Eの各々がブロックストラピイングにより格納されている状態を示す。
【００２２】
マスタファイル120にある論理ファイルAの管理情報Amには、論理ファイルAのストライピング種別（ここでは、ファイルストライピング）および論理ファイルAの実体の格納情報（ファイルストライピングサブファイル121内の格納アドレスやサイズ）を含む。図示するように、ファイルストライピングサブファイル121が二つのディスク122、123で構成されている場合、論理ファイルAの実体の格納アドレスはディスク122の識別子とディスク122内の格納アドレスで表しても良い。論理ファイルB、Cの管理情報Bm、Cmも、論理ファイルAの管理情報Amと同様である。
【００２３】
マスタファイル120にある論理ファイルDの管理情報Dmには、論理ファイルDのストライピング種別（ここでは、ブロックストライピング）および論理ファイルDの実体の格納情報（ブロックストライピングサブファイル126内の論理ファイルDのブロックごとのアドレスや論理ファイルDのサイズ）を含む。一般に、ブロックストライピングの場合のブロックサイズは固定長であるので、論理ファイルDのサイズをブロック数で表しても良い。図2では、論理ファイルDの実体はｎブロックに分割され、奇数番目のブロックがブロックストライピングサブファイル126を構成するディスク127に格納され、偶数番目のブロックがブロックストライピングサブファイル126を構成するディスク128に格納されている。この場合の論理ファイルDの管理情報Dmには、ストライピング種別としてのブロックストライピングと、各ブロックごとにその格納アドレス（ディスクの識別子とそのアドレスでも良い）を含んでいる。論理ファイルEの管理情報Emも、論理ファイルDの管理情報Dmと同様である。
【００２４】
図3は、ファイルストライピングの場合とブロックストライピング場合との、ファイルサイズと性能（クライアント2のユーザプログラム20から見た入出力時間の逆数）の関係を表した性能特性図を示す。ファイルストライピングの場合は、ファイルストライピングサブファイル121を構成する複数のディスク122、123のいずれかのディスクに1つの論理ファイルを直列的（シーケンシャル）に入出力する。ブロックストライピングの場合は、1つの論理ファイルを複数のブロックに分割して、ブロックストライピングサブファイル126を構成する複数のディスク127、128に並列的に入出力する。
【００２５】
したがって、小さいサイズの論理ファイルの場合は、ファイルストライピングの方が性能が良く、大きいサイズの論理ファイルの場合はブロックストライピングの方が性能が良い。小さいサイズのファイルにブロックストライピングを適用すると、出力（分散システムへの書き込み）時のブロックへの分割や入力（分散システムからの読み出し）時のブロックの統合に要する時間がファイル入出力時間全体の中で占める割合が大きくなる。一方、ファイルストライピングを適用すると、分割・統合の時間が不要であり、全体としてのファイル入出力時間が小さくなるので、ファイルサイズが小さい場合はファイルストライピングの方が高い性能が得られる。
【００２６】
大きいサイズのファイルにファイルストライピングを適用するとシーケンシャルな入出力時間が大きくなり、ブロックストライピングを適用するとブロックヘの分割・統合に要する時間の割合が、ディスクごとに並列実行される入出力時間に対して小さくなるので、ファイルサイズが大きい場合はブロックストライピングの方が高い性能が得られる。
【００２７】
このような特性により、図3に示すように、ファイルストライピングとブロックストライピングとの性能の優劣が反転する閾値が存在する。この閾値未満のファイルサイズのファイルにはファイルストライピングを適用し、閾値を超えるファイルサイズのファイルにはブロックストライピングを適用することが望ましい。この閾値は、サーバや記憶装置12の性能や複数の論理ファイルに関する入出力処理の並列実行の有無など、分散ファイルシステム1の動作状況及びその時間的変化に伴って変化する。また閾値近傍のファイルサイズでは、ファイルストライピングとブロックストライピングとの性能差は小さいので、閾値を厳密に求める必要はなく、ストライピング種別を選択する目安となればよい。なお、閾値はメモリ11に格納されている。
【００２８】
ストライピング種別を選択する機会は、新規にファイルを作成して分散ファイルシステム1の記憶装置12に格納する（書き込む）ときである。クライアント2で新規に作成したファイルを格納する場合、分散ファイルシステム1から見ると、そのファイルのサイズは分からない。そこで、すでに格納してあるファイルに関する情報を参考にして、ストライピング種別を選択する。すでに格納してあるファイルに関する情報（プロファイル要素）は、プロファイル別予測テーブル110としてメモリ11に格納してある。プロファイル別予測テーブル110を、図4〜図7に予測テーブルとして示す。
【００２９】
図4は、プロファイル要素として、ユーザ名、プログラム名、ディレクトリ名の３つを使った予測テーブル400を示す。予測テーブル400は、ユーザ名401、プログラム名402、ディレクトリ名403の３つをセットとして、セット毎に予測値404、予測回数405、エラー回数406、エラー率407、データ数408を保持する。
【００３０】
図5は、プロファイル要素として、ユーザ名、プログラム名の２つを使った予測テーブル500を示す。予測テーブル500は、ユーザ名501、プログラム名502の２つをセットとして、セット毎に予測値503、予測回数504、エラー回数505、エラー率506、データ数507を保持する。
【００３１】
図６は、プロファイル要素として、ユーザ名、ディレクトリ名の２つを使った予測テーブル600を示す。予測テーブル600は、ユーザ名601、ディレクトリ名602の２つをセットとして、セット毎に予測値603、予測回数604、エラー回数605、エラー率606、データ数607を保持する。
【００３２】
図7は、プロファイル要素として、ユーザ名を使った予測テーブル700を表す。ユーザ名701毎に予測値702、予測回数703、エラー回数704、エラー率705、データ数706を保持する。
【００３３】
図4〜図7に示す、各々の予測値、予測回数、エラー回数、エラー率、データ数に関しては、これらを用いる処理の説明の中で後述する。
【００３４】
図8は、ファイルサイズ予測部111の処理のフローチャートを示す。ファイルサイズ予測部111は、ユーザプログラム20によりファイル21の書込み開始によって、処理を開始する。ファイル21の書込みプロセスのユーザ名、プログラム名、ディレクトリ名のプロファイルを取得する（ステップ800）。このプロファイルをプロファイル別予測テーブル110（予測テーブル400、500、600、700）から検索し（ステップ805）、プロファイルが一致するプロファイルデータが有るかどうかを判定する（ステップ810）。
【００３５】
図9は、プロファイル別予測テーブル110から一致するプロファイルを検索する処理（図8のステップ805）のフローチャートを示す。この処理は、一致するプロファイルがない場合は「なし」を、一致するプロファイルがある場合は、そのプロファイルデータ（図4〜図7の1行分のデータ）を検索結果として得る。予測テーブル400から、ユーザ名、プログラム名、ディレクトリ名が一致するプロファイルを検索する（ステップ900）。一致するプロファイルデータがある場合は、検索結果として一致するプロファイルデータを得る（ステップ905）。一致するプロファイルデータがない場合は、予測テーブル500から、ユーザ名、プログラム名が一致するプロファイルを検索する（ステップ910）。一致するプロファイルデータがある場合は、予測テーブル600から、ユーザ名、ディレクトリ名が一致するプロファイルを検索する（ステップ915）。一致するプロファイルデータがない場合は、予測テーブル500の一致するプロファイルデータを検索結果として得る（ステップ920）。一致するプロファイルデータがある場合は、予測テーブル500の一致するプロファイルデータと予測テーブル600の一致するプロファイルデータとの各エラー率506と606とを比較し、エラー率が低いプロファイルデータを検索結果とする（ステップ925）。
【００３６】
ステップ910で一致するプロファイルデータがない場合は、予測テーブル600から、ユーザ名、ディレクトリ名が一致するプロファイルを検索する（ステップ930）。一致するプロファイルデータがある場合は、予測テーブル600の一致するプロファイルデータを検索結果として得る（ステップ935）。一致するプロファイルデータがない場合は、予測テーブル700から、ユーザ名が一致するプロファイルを検索する（ステップ940）。一致するプロファイルデータがある場合は、予測テーブル700の一致するプロファイルデータを検索結果として得る（ステップ945）。一致するプロファイルデータがない場合は、検索結果を「なし」とする（ステップ950）。
【００３７】
例として、ファイル21の書込みプロセスのユーザ名、プログラム名、ディレクトリ名の各々をuserB、programB1、directoryB3として、図9の検索処理を実行すると、ステップ910で予測テーブル500の一致するプロファイルデータ＃3が得られ、ステップ915で予測テーブル600の一致するプロファイルデータ＃4とが得られるので、ステップ925でそれぞれのエラー率e23/n23とe34/n34とを比較し、エラー率が低いプロファイルデータが検索結果として得られる。
【００３８】
他の例として、ファイル21の書込みプロセスのユーザ名、プログラム名、ディレクトリ名の各々をuserX、programX、directoryXとして、図9の検索処理を実行すると、検索結果として「なし」が得られる。
【００３９】
以上の予測テーブルから一致するプロファイルを検索する処理は、ファイル21の書込みプロセスに類似したファイルのサイズを、ファイル21のファイルサイズと仮定するものである。図9に示した処理は、3つから、2つ、一つのプロファイル要素による検索順序を示し、類似度の高いプロファイルデータほど、ユーザプログラム20による処理内容の類似度も高く、その処理によるファイルのファイルサイズがファイル21のファイルサイズ近い値を示すことを前提に、より類似度の高いプロファイルデータの検索を試みている。たとえば、ファイル21を、分散ファイルシステム1にすでに格納してあるファイルをコピーし、ファイル名称を変えることにより作成することがある。このような場合は、ファイル21のプロファイル要素としてのユーザ名、プログラム名、ディレクトリ名は、コピー元としたファイルのプロファイルデータに一致する可能性が高い。コピーしたことにより、それらのファイルサイズも一致する可能性が高い。
【００４０】
図8の説明に戻り、ステップ805の検索結果として一致するプロファイルデータがあるならば（ステップ810）、得られたプロファイルデータのエラー率が許容値以下である場合に（ステップ815）、得られたプロファイルデータに含まれるファイルサイズの予測値をファイルサイズの閾値と比較して、ストライピング種別を決定する（ステップ820）。
【００４１】
エラー率とは、後述するように、予測値を用いたストライピング種別の決定に誤りを生じた割合である。また許容値は、予め定められ、メモリ11に格納されている。
【００４２】
一方、ステップ805の検索結果として一致するプロファイルデータがない場合、およびステップ815で得られたプロファイルデータのエラー率が許容値を超えている場合は、ファイル21をバッファ113へ読み込み、読み込んだファイル21のファイルサイズとファイルサイズの閾値とを比較してストライピング種別を決定する（ステップ825）。ステップ820及びステップ825のいずれかでストライピング種別を決定後、プロファイル別予測テーブル110（予測テーブル400、500、600、700）を更新する（ステップ830）。
【００４３】
以下、ステップ820の得られたプロファイルデータに含まれるファイルサイズの予測値をファイルサイズの閾値と比較して、ストライピング種別を決定する処理、ステップ825の、読み込んだファイル21のファイルサイズとファイルサイズの閾値とを比較してストライピング種別を決定する処理、ステップ830のプロファイル別予測テーブル110（予測テーブル400、500、600、700）を更新する処理、さらに閾値決定部112の処理を順に説明する。
【００４４】
図10は、予測テーブルのプロファイルデータから得たファイルサイズの予測値とファイルサイズの閾値とを比較し、比較結果に応じてストライピング種別を決定する処理（図8のステップ820）のフローチャートを示す。プロファイルデータに含まれる予測値とファイルサイズの閾値とを比較する（ステップ1000）。比較の結果、予測値が閾値未満であれば、ファイル21をファイルストライピングして、その管理情報をマスタファイル120に書き込むとともに、ファイル21の実体をファイルストライピングサブファイル121に書き込む（ステップ1005）。図1または図2において、ファイル21の実体をディスク122及びディスク123のいずれに書き込むかは、マスタファイル120に格納されているディレクトリの構造及びその内容によって決定される。
【００４５】
一方、比較の結果、予測値が閾値以上であれば、ファイル21をブロックストライピングして、その管理情報をマスタファイル120に書き込むとともに、ファイル21の実体をブロックストライピングサブファイル126に書き込む（ステップ1010）。ファイル21の実体は、たとえば図2に示したようにディスク127及びディスク128にブロック単位で並列的に書き込まれる。
【００４６】
なお、閾値は前述のように目安であるので、ステップ1000における判定は未満/以上の判定でなく、以下/超の判定でも良い。
【００４７】
図11は、ファイル21をバッファ113へ読み込み、読み込んだファイル21のファイルサイズとファイルサイズの閾値とを比較してストライピング種別を決定する処理（図8のステップ825）のフローチャートを示す。クライアント2からの書き込みに応じて、ファイル21をバッファ113へ蓄積する。ファイル21のバッファ113への書込みサイズをファイルサイズの閾値と比較する（ステップ1105）。比較は、ファイル21のバッファ113への書込みのクローズ（ファイルの最後の検知）が、ファイルサイズの閾値に達する前後によって判定する。ファイルサイズの閾値に達する前にクローズすれば、ファイル21のファイルサイズは閾値より小さいので、ファイル21をファイルストライピングして記憶装置12に書き込む（ステップ1110）。、ファイルサイズの閾値を超えても書込みがクローズしなければ、ファイル21のファイルサイズは閾値より大きいので、ファイル21をブロックストライピングして記憶装置12に書込む（ステップ1115）。ステップ1110及びステップ1115において、ファイル21はバッファ113にすでに書き込み、蓄積してあるので、バッファ113から記憶装置12へのファイル21の書き込みとなる。
【００４８】
なお、ステップ1110とステップ1115の処理の詳細は、図10のステップ1005とステップ1010の処理と同様であり、閾値との比較の厳密さに関しても、図10の説明と同様である。
【００４９】
図12に、図11の閾値との比較の概要図を示す。バッファ113に蓄積されているファイル（file1）の書き込みは、閾値に達する前にクローズしているので、ストライピング種別としてファイルストライピングをこのファイル（file1）に適用する。バッファ113に蓄積されている他のファイル（file2）の書き込みは、閾値に達してもクローズしていないので、ストライピング種別としてブロックストライピングをこのファイル（file2）に適用する。
【００５０】
図13は、プロファイル別予測テーブル110の更新処理（図8のステップ830）のフローチャートを示す。ファイルストライピングサブファイル121またはブロックストライピングサブファイル126に書き込んだファイル21のファイルサイズを取得し、その値を実測値Sとする（ステップ1300）。取得するファイル21のファイルサイズの値は、マスタファイル120にファイル21の識別しに対応付けて格納されている。
【００５１】
ファイル21のプロファイルが一致するプロファイルデータが、プロファイル別予測テーブル110にある否かを判定する（ステップ1305）。この判定のために図9の検索処理を再実行する必要はなく、図8のステップ805で実行した検索結果をメモリ11に記憶しておき、その検索結果を参照して判定する。検索結果としてプロファイルデータが格納されている場合は、一致するプロファイルデータが存在することを表し、検索結果として「なし」が格納されている場合は、一致するプロファイルデータが存在しないことを表している。一致するプロファイルデータが存在しないならば（ステップ1305）、プロファイルデータをプロファイル別予測テーブル110に新規に登録する（ステップ1310）。たとえば、プロファイル別予測テーブル110の中の予測テーブル400への登録の場合、ファイル21のプロファイル要素であるユーザ名、プログラム名、ディレクトリ名、予測値としてファイル21のファイルサイズの実測値S、予測回数０、エラー回数０、データ数１を格納する。プロファイル別予測テーブル110の中の他の予測テーブルへの登録の場合、ファイル21のプロファイル要素であるユーザ名、プログラム名、ディレクトリ名のいずれか1つまたは2つを用い、予測値、予測回数、エラー回数、データ数に関しては予測テーブル400への登録の場合と同じである。
【００５２】
一致するプロファイルデータが存在するならば（ステップ1305）、そのプロファイルデータに含まれる予測値を正誤判定する（ステップ1315）。予測値の正誤判定は、そのプロファイルデータに含まれるプロファイル要素がファイル21のプロファイルと一致したときに、ファイル21のファイルサイズとしてその予測値を用いることが適切であったか否かを検証することである。具体的には、予測値と実測値Sとが共に閾値以上、または共に閾値未満である場合は正判定、そうでないとき、すなわち予測値と実測値Sとのいずれか一方が閾値以上であり、他方が閾値未満である場合は誤判定とする。誤判定の場合は、正誤判定したプロファイルデータのエラー回数e（たとえば、予測テーブル500の＃3のプロファイルデータであればe23）をプロファイル別予測テーブル110（予測テーブル400、500、600、700）上で更新（＋1）する（ステップ1320）。
【００５３】
ファイル21をストライピングして書き込む際に用いたプロファイルデータに含まれる予測値Pを更新する（ステップ1325）。予測値Pを(Pp×N+S)/(N+1)により求める。ここで、Ppはプロファイルデータに含まれる更新前の予測値（たとえば、予測テーブル500の＃3のプロファイルデータであればP23）、Nはプロファイルデータに含まれるデータ数たとえば、予測テーブル500の＃3のプロファイルデータであればN23）である。次に予測回数n（たとえば、予測テーブル500の＃3のプロファイルデータであればｎ23）を更新（＋1）する（ステップ1330）。新たに、エラー率（たとえば、予測テーブル500の＃3のプロファイルデータであればe23/ｎ23）をe/ｎにより求め、プロファイルデータに含まれるエラー率を更新する（ステップ1335）。
【００５４】
以上のステップ1325〜1335は、ファイル21をストライピングして書き込む際に用いたプロファイルデータの更新であるが、次にこのプロファイルデータに関連するプロファイルデータのデータ数Nを更新する（ステップ1340）。関連するプロファイルデータのデータ数Nを例を用いて説明する。ファイル21をストライピングして書き込む際に用いたプロファイルデータが予測テーブル500の＃3のプロファイルデータであり、図9のステップ915において予測テーブル600にはファイル21のプロファイル要素に対応するプロファイルデータが存在しなかったとする。この場合、前述したように類似度の高いプロファイルデータから順に検索するように予測テー部は構成されているので、ファイル21のプロファイル要素に対応するプロファイルデータが予測テーブル600に存在する可能性がある。予測テーブル500の＃3のプロファイルデータのプロファイル要素は、ユーザ名userB、プログラム名programB1であるので、予測テーブル700の＃2のプロファイルデータがユーザ名userBで一致する。したがって、関連するプロファイルデータは予測テーブル700の＃2のプロファイルデータであり、そのデータ数NはN42である。他の例として、ファイル21をストライピングして書き込む際に用いたプロファイルデータが予測テーブル400の＃3のプロファイルデータである場合は、データ数Nを更新すべき関連するプロファイルデータは、予測テーブル500の＃3、予測テーブル600の＃2、および予測テーブル700の＃2の各プロファイルデータである。
【００５５】
図14に、閾値決定部112の処理のフローチャートを示す。閾値決定部112の処理は、分散ファイルシステム1が低負荷な時間帯に、または定期的にファイルサイズ予測部111の処理のバックグランドで実行される。メモリ11に格納されている現在の閾値Aを取得し（ステップ1400）、ファイルサイズAのファイルの書込みのシミュレーションを実行する（ステップ1405）。
【００５６】
図15に、ファイルの書込みのシミュレーションのフローチャートを示す。ファイルサイズAのダミーファイルをバッファ113に生成する（ステップ1500）。生成するダミーファイルの内容（ファイルデータ）は任意である。生成したダミーファイルをファイルストライピングして、記憶装置12に書き込む（ステップ1505）。。ファイルストライピングによる書き込み時間Fを取得する（ステップ1510）。書き込み時間Fは、ステップ1905の実行開始時にタイマをセットし、実行終了時にタイマの値を読み取ることで得る。記憶装置12に書き込んだダミーファイルを削除する（ステップ1515）。次に、バッファ113に生成したダミーファイルをブロックストライピングにより記憶装置12に書き込む（ステップ1520）。ブロックストライピングによる書き込み時間Bを取得する（ステップ1525）。書き込み時間Bの取得方法は、ステップ1510の書き込み時間Fの取得方法と同様である。記憶装置12に書き込んだダミーファイルを削除し（ステップ1530）、バッファ113に生成したダミーファイルを削除する（ステップ1535）。
【００５７】
図14の説明に戻る。書き込みシミュレーション（図15）で取得した書き込み時間Fと書き込み時間Bとを比較する（ステップ1410）。比較の結果、書き込み時間Fが書き込み時間B以下、つまりファイルストライピングの方が、ブロックストライピングより書込み時間が短い場合は、ダミーファイルのファイルサイズを所定値a減らし（ステップ1415）、書き込みシミュレーションを実行する(ステップ1420)。書き込みシミュレーションで取得した書き込み時間Fと書き込み時間Bとを比較する（ステップ1425）。比較の結果、書き込み時間Fが書き込み時間Bより大でなければ、つまりファイルストライピングの方が、ブロックストライピングより書込み時間が短い場合は、ステップ1415からの処理を繰り返す。比較の結果、書き込み時間Fが書き込み時間Bより大いならば、ファイルサイズAを境にストライピングの種別による性能(書き込み時間)の優位性が入れ替わるので、ファイルサイズAを閾値として、メモリ11に格納する(ステップ1445)。
【００５８】
一方、ステップ1410の比較の結果、書き込み時間Fが書き込み時間Bより大きい、つまりブロックストライピングの方が、ファイルストライピングより書込み時間が短い場合は、ダミーファイルのファイルサイズを所定値a増やし(ステップ1430)、書き込みシミュレーションを実行する(ステップ1435)。書き込みシミュレーションで取得した書き込み時間Fと書き込み時間Bとを比較する（ステップ1440）。比較の結果、書き込み時間Fが書き込み時間B以下でなければ、つまりファイルストライピングの方が、ブロックストライピングより書込み時間が長い場合は、ステップ1430からの処理を繰り返す。比較の結果、書き込み時間Fが書き込み時間B以下ならば、ファイルサイズAを境にストライプ種別による性能の優位性が入れ替わるので、ファイルサイズAを閾値として、メモリ11に格納する(ステップ1445)。
【００５９】
以上説明した閾値の決定方法により、たとえば記憶装置12を性能の異なる他の記憶装置にリプレースした場合にも適切な閾値を得ることができる。また、分散システム1を新規に構築する場合は、ダミーファイルのファイルサイズAをたとえば10MBとして、閾値決定部112の処理を実行すると、適切な閾値に収束する。適切な閾値であるが、その厳密さは要求されないので、ステップ1415及びステップ1430で用いる所定値aの値は粗い値(たとえば、100KB)でよい。所定値aの値として、小さい値（たとえば、100B）を使用すると、シミュレーションの繰返し回数が多くなり、分散システム1に負荷をかけることになるので、粗い値を用いることが望ましい。
【００６０】
本実施形態によれば、ファイルストライピングとブロックストライピングとの入出力性能を効果的に利用できる分散ファイルシステムが実現できる。
【符号の説明】
【００６１】
1：分散ファイルシステム、２：クライアントコンピュータ、２０：ユーザプログラム、２１：ファイル、１０：ＣＰＵ、１１：メモリ、１２：記憶装置、１１０：プロファイル別予測テーブル、１１１：ファイルサイズ予測部、１１２：閾値決定部、１１３：バッファ、１２０：マスタファイル、１２１：ファイルストライピングサブファイル、１２６：ブロックストライピングサブファイル。
【図１】
2010191903.tif 000003
【図２】
2010191903.tif 000004
【図３】
2010191903.tif 000005
【図４】
2010191903.tif 000006
【図５】
2010191903.tif 000007
【図６】
2010191903.tif 000008
【図７】
2010191903.tif 000009
【図８】
2010191903.tif 000010
【図９】
2010191903.tif 000011
【図１０】
2010191903.tif 000012
【図１１】
2010191903.tif 000013
【図１２】
2010191903.tif 000014
【図１３】
2010191903.tif 000015
【図１４】
2010191903.tif 000016
【図１５】
2010191903.tif 000017