以下は JE2BWM ほかが作成した翻訳 です。 原文は University of California より GFDL で配付されており、 この翻訳も GFDL に従います。
原文: Hierarchical upload/download directories   (翻訳対象の更新日付は 7:59 PM UTC, April 04 2006 です)。

階層化した アップロード・ダウンロード用 ディレクトリ

boinc.gif
(英語のみ)

大きなプロジェクトでは、データサーバが何十万ファイル、 何百万ファイルという数のファイルを常時蓄えることがあります。 これらを、単純に小数のディレクトリ(project/download および project/upload) に納めてしまうと、そのデータサーバでは、 ディレクトリ内でファイルを探すためだけに多くの CPU 時間を使ってしまいます。 CPU の負荷平均が高く、かつ、カーネルモードで多くの時間を使っているようでしたら、 おそらく上記の状況になっていると思います。

これを解決するには、 階層化したアップロード・ダウンロード用ディレクトリ を使います。 そうするには、下記の行

<uldl_dir_fanout>1024</uldl_dir_fanout>
config.xml ファイル に含めてください(特に指定せずに新しいプロジェクトを作れば、こうなります)。

これで BOINC は、 階層化したアップロード・ダウンロード用ディレクトリを使うようになります。 この両方のディレクトリには、0〜3ff という名前をもつ 1024 個のサブディレクトリが置かれます。 ファイルは(そのファイル名でハッシュした値をもとに) これらのサブディレクトリに分けて配置します。

階層構成は入力ファイルと出力ファイルだけに適用されます。 実行可能ファイルと他のアプリケーションの版のファイルは、 ダウンロード用ディレクトリのトップレベルに置かれます。

この変更は、プロジェクト固有コードにいくつかの点で影響を与えます。 1つは、仕事の生成をする work generator プログラムです。 create_work() 関数を呼ぶ前に、 入力ファイルを適切な[サブ] ディレクトリに置いておかねばなりません。 この作業のために、関数

int dir_hier_path(
    const char* filename, const char* root, int fanout, char* result,
    bool make_directory_if_needed=false
);
を使うことができます。 この関数は、引数に入力ファイル名とダウンロード階層の絶対パス (典型的な値は、 config.xml ファイル中の download_dir 要素の値です) をとり、その階層ディレクトリの中に置くファイルの絶対パスを返します。 新しいプロジェクトでは、引数 newhash に true を設定するべきです。 この引数は、最終的には消え去るものです。 というのも、 枝分かれさせたディレクトリ名を求めるハッシュ関数に、 初めて実装したとき良いものを選ばなかったので、 その変更の影響を回避するために設けた引数だからです。 一般に、引数 make_directory_if_needed もまた、true に設定するべきです。 この指定で、特定のファイルを収容するのに必要なときに、 枝分かれしたディレクトリを生成します。

2つめは、validator と assimilator が階層構成の中で出力ファイルのパスを知るために、 下記の関数を呼ばねばならないということです。

int get_output_file_path(RESULT const& result, string& path);
アプリケーションが複数の出力ファイルを扱うものであるなら、 この関数をより一般化して、そのプロジェクトに適合させなければなりません。

以下のユーティリティ・プログラムが提供されます。

dir_hier_move src_dir dst_dir fanout
dir_hier_path filename
dir_hier_move は、非階層構造の src_dir にあるすべてのファイルを (指定した数 fanout の枝を持つ)dst_dir へ移動します。 dir_hier_path のほうは、与えたファイル名に対応して、 階層構成の中にそのファイルを置くときの完全パス名を出力します。

非階層構成から階層化ディレクトリへの移行方法

すでに非階層構成のディレクトリでプロジェクトを運用されている場合、 以下の手順で階層構成へ移行できます。

 


BOINCの訳のメインページに戻る | (原文のメインページに戻る)
 

最終更新時刻 00:48:50, 2006年08月12日(JST)
Copyright © 2009 University of California. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.
Copyright © 2009 Komori Hitoshi(je2bwm at jarl.com). Japanese translation from English web pages on BOINC. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.