DMAKE(1)

名前
dmake - 分散メーク(DistributedMake)

形式
dmake [-c dmake-rcfile] [ -g dmake-group ] [ -j dmake-max-jobs ] [-m {serial | parallel | distributed | grid} ] [-o dmake-odir]

機能説明
注: このマニュアルページは、Solaris の make ユーティリティの マニュアルページを補完するものです。 dmake ユーティリティは Linux オペレーティングシステムでも動作しますが、 dmake のオプションは他の make ユーティリティと比べて独自のものです。

分散メーク (dmake) はメークファイルを解析して、並行して 構築可能なターゲットを特定し、設定された多数のホストに の構築作業を分散します。

標準の make ユーティリティを使用している場合、dmake へ移行する際に必要なメークファイルの変更は、(あったとしても) ほとんどありません。 dmake は make ユーティリティのスーパーセットです。make を 入れ子にするときは、一番上の makefile が make を呼び出す場合に $(MAKE) を使用しなければなりません。

分散メークは、"dmake ホスト" で実行され、"ジョブ"を"構築サーバー"に分散します。 ジョブは dmake ホストにも分散できます。この場合は、dmake ホストも 構築サーバーになります。dmake は、ユーザーのメークファイルの内容を 解析し、並行して構築できると判断したターゲットごとにジョブを分散させます。

次の要件を満たしていれば、どのマシンも構築サーバーとして使用できます。

-   dmake ホスト (使用中のマシン) から、rsh を使用して構築サーバー 上でコマンドをリモートで実行できる。このとき、パスワードの入力 を求めるプロンプトは表示されないこと。 次の例は、Solaris オペレーティングシステムを実行しているマシンの場合の dmake に対する which コマンドの使用結果を示しています。

         demo% rsh <分散メークを行うマシン名> which dmake
         /opt/SUNWspro/bin/dmake

    rsh を実行した時に、不要な出力があってはいけません。

-   dmake ソフトウェアがインストールされている bin ディレクトリ に、構築サーバーからアクセス可能でなければなりません。デフォルトで、dmake は、 構築サーバー上の dmake 実行可能ファイルへの論理パスが dmake ホスト上と同じであると仮定します。この仮定を変更するには、 実行時構成ファイルのホストエントリの属性としてパス名を指定します。

dmake ホストから、使用する構築サーバー、および、各構築サーバーに割り当てる dmake ジョブ数を指定することができます。 特定の構築サーバー上で実行することができる dmake ジョブ数の制限 は、そのサーバーにも適用されます。

オプション

-c dmake-rcfile
実行時構成ファイルを指定します。デフォルトの 実行時構成ファイルは ~/.dmakerc です。

-g dmake-group
ジョブの分散先にする構築サーバーグループの名前を指定します。サーバーグループ は実行時構成ファイルに定義してください。デフォルトのサーバーグループ は、実行時構成ファイル中の最初のグループです。

-j dmake-max-jobs
実行時構成ファイル中の構築サーバーの指定グループに分散される 最大ジョブ総数を指定します。デフォルトの最大ジョブ数 は、構築サーバーグループに指定されるジョブの総数です。ジョブ は、実行時構成ファイルの中で出現する順に 1 つずつホストから 減算、またはホストに加算されます。たとえば、実行時構成ファイル に指定されるジョブの総数が 8 で、

     host earth { jobs = 3 }
     host mars  { jobs = 5 }

<分散する最大ジョブ数> を 11 と指定する場合、dmake は 次のようにして、現在の最大ジョブ総数 (8) にさらに 3 つのジョブを加算します。

     host earth { jobs = 5 }
     host mars  { jobs = 6 }

また、<分散する最大ジョブ数> を 4 と指定する場合、dmake は 次のようにして、元のジョブ数 8 から 4 つのジョブを減算します。

     host earth { jobs = 1 }
     host mars  { jobs = 3 }

-m {serial | parallel | distributed | grid}
次のいずれかのキーワードを指定します。

    serial
        dmake を標準の make と同じように逐次動作させます。

    parallel
        ジョブを dmake ホストにだけ分散させます。

    distributed
        dmake を完全な分散モードで動作させます。 これは dmake のデフォルトです。

    grid
        構築ジョブの分散に SGE (Sun Grid Engine) を使います。

-o dmake-odir
dmake が一時出力ファイルを書き込みおよび読み取りできる 共通物理ディレクトリを指定します。使用されるディレクトリは $(HOME)/.dmake です。このディレクトリと指定したディレクトリは、 すべての構築サーバーから見えなければなりません。このオプションは、 ユーザーのローカルホスト上の $(HOME) ディレクトリとユーザーの すべての遠隔ホスト上の $(HOME) ディレクトリが、異なる物理 $(HOME) ディレクトリである場合にだけ使用してください。たとえば、このオプションは スーパーユーザーが使用します。

Note:
    これらのオプションと環境変数、およびこのマニュアルページで 後述するメークファイルのマクロによって、同じ動作が変更されます。 優先順位は次のとおりです。

    1.  コマンド行オプション

    2.  メークファイルのマクロ

    3.  環境変数

    4.  dmake のデフォルト

使用

  特殊な目的のターゲット
dmake を使うと、構築サーバー上でターゲットを並行して 構築できます。並行して処理を行うと、大規模なシステムやプロジェクトを 構築するのに要する時間を大幅に短縮できます。dmake は、並行処理と タイミングを制御するために .PARALLEL 、 .NO_PARALLEL 、 LOCAL 、 .WAIT という、特殊なメークファイルターゲットを使用します。

.NO_PARALLEL:
    このターゲットは、逐次処理を行うターゲットを指定するために使用します。

.PARALLEL:
    このターゲットは、並行処理を行うターゲットを指定するために使用します。

.LOCAL:
    このターゲットは、ローカルホスト上で逐次処理を行うターゲットを 指定するために使用します。

.WAIT
    依存関係リストにこのターゲットを指定すると、dmake は、並行処理の場合 でも、この前の依存関係の処理が終了するまで待機してから、 次の依存関係を処理します。

このようなターゲットを使って記述してあるメークファイルは、Solaris 1.x と Solaris 2.x で配布される標準 make でも互換性を 保っています。標準の make はこれらのターゲットを許容し、エラー を出しません (処理も行いません) 。

  dmake ジョブの制御
dmake ジョブの分散は、次の 2 つの方法で制御されます。

1. dmake ホスト上の dmake ユーザーは、構築サーバーとして使用
    したいマシンと各構築サーバーに分散したいジョブ数を指定することができます。

2. 構築サーバーの所有者（
    /etc/opt/SPROdmake/dmake.conf ファイルを変更できるユーザー）は、その構築サーバーに分散可能 な dmake ジョブの最大総数を制御することができます。

  dmake ホスト

dmake は、実行を開始すると、実行時構成ファイルを検索して、ジョブを 分散する場所を調べます。一般に、このファイルは dmake ホスト上の ユーザーのホームディレクトリに置いて、.dmakerc という名前を付けます。 dmake は、次の場所と順序で実行時構成ファイルを検索します。 1. -c オプションを使ってコマンド行で指定されたパス名

2.  DMAKE_RCFILE というメークファイルのマクロを使って指定されたパス名

3.  環境変数 DMAKE_RCFILE を使って指定されたパス名

4.  ~/.dmakerc

実行時構成ファイルが見つからない場合は、dmake は並行モードに 切り替え、(デフォルトの) 2 つのジョブを dmake ホストに分散します。-j オプションまたは DMAKE_MAX_JOBS を使用してこの設定を変更することもできます。

実行時構成ファイルには、構築サーバーのリストと、各構築サーバーに 分散したいジョブ数を含めることができます。 次は、単純な実行時構成ファイルの例です。

     # 自分のマシン。このエントリにより dmake はこのマシンにジョブを分散します。
     falcon { jobs = 1 }
     hawk
     eagle { jobs = 3 }
     # マネージャーのマシン。マネージャーはいつも会議中です。
     heron { jobs = 4 }
     avocet

falcon、hawk、eagle、heron、avocet の各エントリが構築サーバー として一覧表示されています。

各構築サーバーに分散したいジョブ数を指定することができます。デフォルト のジョブ数は 2 です。

"#" 文字で始まる行はコメントとして解釈されます。

注:  この構築サーバーの一覧には、dmake ホストでもある falcon が 含まれています。dmake ホストは構築サーバーとしても指定することが できます。実行時構成ファイルに falcon を含めない場合、 falcon には dmake ジョブが分散されません。

実行時構成ファイルには、構築サーバーのグループも構成することが できます。こうすると、状況に応じて、構築サーバーのグループを 簡単に切り替えられるという柔軟性が得られます。たとえば、異なる オペレーティングシステムでの構築用に別々の構築サーバーのグループ を定義したり、特殊なソフトウェアがインストールされている 構築サーバーのグループを定義したりすることができます。 ただし、構築サーバーは、すべて同じアーキテクチャで、同じ SunOS を インストールしている必要があります。

次の実行時構成ファイルには、いくつかのグループが含まれています。

earth                   { jobs = 2 }
mars                    { jobs = 3 }
group lab1 {
			host falcon	{ jobs = 3 }
			host hawk
			host eagle	{ jobs = 3 }
}

group lab2 {
			host heron
			host avocet	{ jobs = 3 }
			host stilt	{ jobs = 2 }

group labs {
			group lab1
			group lab2
}
group sunos5.x {
			group labs
			host jupiter
			host venus	{ jobs = 2 }
			host pluto 	{ jobs = 3 }
}

"group" 命令によって形式上のグループを指定します。グループのメンバー のリストは、中括弧 ({}) で括ります。

グループのメンバーである構築サーバーは、省略可能な "host" 命令によって指定されます。

あるグループが、他のグループのメンバーになっていてもかまいません。

個々の構築サーバーを、構築サーバーのグループを含む実行時構成ファイル に指定することもできます。この場合、dmake はこれらの 構築サーバーを名前の付いていないグループのメンバーとして処理します。

dmake は、次に示すリストで指定される単一のホストのグループ に、1 〜 4 の優先順位でジョブを分散させます。

1.  -g オプションへの引数としてコマンド行に指定されたグループ

2.  DMAKE_GROUP というメークファイルのマクロによって指定されたグループ

3.  環境変数 DMAKE_GROUP によって指定されたグループ

4.  実行時構成ファイルで 1 番目に列挙されている形式上のグループ

実行時構成ファイルに指定するグループとホストの名前は、 二重引用符で囲むことができます。これにより、グループとホストの 名前をより柔軟な文字シーケンスで表現できます。たとえば、 グループの名前が数字で始まる場合、この名前は 二重引用符で囲まなければなりません。

group "123_sparc"

上記のとおり、dmake ソフトウェアがインストールされている bin ディレクトリは、 構築サーバーからアクセス可能でなければなりません。デフォルトでは dmake は、 構築サーバー上の dmake 実行可能ファイルへの 論理パスが dmake ホスト上と同じであると仮定します。 この仮定を変更するには、実行時構成ファイルのホストエントリの 属性としてパス名を指定します。次に例を示します。

group sparc-cluster {
   host wren   { jobs = 10 , path = "/export/SUNWspro/bin" }
   host stimpy { path = "/opt/SUNWspro/bin"                }
}

  構築サーバー
/etc/opt/SPROdmake/dmake.conf ファイルは、構築サーバーの ファイルシステム中に置かれています。このファイルは、次の内容を指定するために使用します。

Required
    該当する構築サーバー上で並行処理できる、すべてのユーザー からの dmake ジョブの最大総数 (必須指定)。

Optional
    すべての dmake ジョブに適用される、 /usr/bin/nice で指定する優先順位 (必要に応じて)。

次に dmake.conf ファイルの例を示します。
     max_jobs: 8
     nice_prio: 5

このファイルは、すべての dmake ユーザーから構築サーバー上で実行が許可される 最大 dmake ジョブ数を 8 に設定します。ジョブを実行する優先順位は、 nice_prio コマンドで変更することができます。詳細は、nice(1) を参照して ください。

注:  /etc/opt/SPROdmake/dmake.conf ファイルが構築サーバー上にない場合には、その サーバー上では dmake ジョブの実行は許可されません。

環境変数 / マクロ

以下は、環境変数またはメークファイルのマクロとして定義することができます。

DMAKE_RCFILE
    実行時構成ファイルを定義します。デフォルトの実行時構成ファイル は ~/.dmakerc です。

DMAKE_GROUP
    ジョブの分散先にする構築サーバーグループの名前を定義します。サーバーグループ は実行時構成ファイルに定義されます。デフォルトのサーバーグループ は、実行時構成ファイルの 1 番目のグループです。

DMAKE_MAX_JOBS
    実行時構成ファイルの中で指定されている構築サーバーグループに分散される 最大ジョブ数を定義します。デフォルトの最大ジョブ数 は、構築サーバーグループに指定されるジョブの総数です。ジョブ は、実行時構成ファイルの中で出現する順に 1 ずつホストから減算、または ホストに加算されます。例については、このマニュアルページの -j オプション を参照してください。

DMAKE_ADJUST_MAX_JOBS
    次のいずれかのキーワードを含めることができます。

YES システムの現在の負荷に応じて、dmake が並列ジョブの制限を調整できるようにします。 システムの負荷が過剰でない場合、dmake はユーザーが定義した制限を使用します。 システムの負荷が過剰な場合、dmake は「現在の」制限を、ユーザーが定義した制限より下に設定します。 この変数が設定されない場合、dmake はシステムの現在の負荷に応じて並列ジョブの 制限を調整します。これは dmake のデフォルトになります。

NO  dmake の自動調整機構をオフに切り替えます。

DMAKE_MODE
    次のいずれかのキーワードを含めることができます。

    serial
        dmake を標準の make と同じように逐次動作させます。

    parallel
        dmake がジョブを dmake ホストにだけ分散するようにします。この動作 は、Sun WorkShop TeamWare 1.x の ParallelMake プログラムと同じです。

    distributed
        dmake を完全な分散モードで動作させます。これは dmake のデフォルトです。

    grid
        構築ジョブの分散に SGE (Sun Grid Engine) を使います。

DMAKE_ODIR
    dmake が一時出力ファイルを書き込む先、もしくは一時出力ファイルを 読み取る元の共通の物理ディレクトリを定義します。この環境変数や マクロは、ローカルホスト上のホームディレクトリとすべての リモートホスト上のホームディレクトリが同じ物理ホームディレクトリ でない場合にだけ使用します。たとえば、スーパーユーザーがこのオプションを 使用します。

ファイル

$(HOME)/.dmakerc
    デフォルトの実行時構成ファイル。構築サーバーと構築サーバーグループの名前が含まれます。

/etc/opt/SPROdmake/dmake.conf
    構築サーバー上にあるこのファイルは、すべての dmake ユーザーによって 構築サーバーに分散することができる最大ジョブ総数を指定するために 使用されます。また、すべての dmake ジョブに適用される /usr/bin/nice で指定する優先順位 を指定するためにも使用されます。

関連項目

HTML ブラウザで以下の URL を指定して、完全な Sun Studio 9 マニュアルセットにアクセスできます。

/opt/SUNWspro/docs/index.html (Solaris の場合)
/opt/sun/sunstudio9/docs/index.html (Linux の場合)

デフォルトの /opt または /usr 以外のディレクトリにコンパイラがインストールされている場合は、 実際のパスをシステム管理者にお尋ねください。

更に詳しい情報は、以下のマニュアルページを参照してください。
make(1)、 rsh(1)、 hosts(4)、 hosts.equiv(4)、 attributes(5)、 largefile(5)、 qrsh(1)