Sun Studio 12: 分散メイク (dmake)

第 1 章 分散メイク (dmake)

形式

dmake [-c dmake_rcfile] [-g dmake_group] [-j dmake_max_jobs] [-m serial | parallel | distributed] [-o dmake_odir]

機能説明

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

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

分散メイクは、「dmake ホスト」で実行され、「ジョブ」を「構築サーバー」に分散します。

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

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


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

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

dmake ホストから、使用する構築サーバー、および、各構築サーバーに割り当てる dmake ジョブ数を指定することができます。

特定の構築サーバー上で実行することができる dmake ジョブ数の制限は、そのサーバーにも適用されます。

オプション

-c dmake_rcfile

実行時構成ファイルを指定します。

デフォルトの実行時構成ファイルは $(HOME)/.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}

次のいずれかのキーワードを指定します。

-o dmake_odir

dmake が一時出力ファイルを書き込みおよび読み取りできる共通物理ディレクトリを指定します。使用されるディレクトリは $(HOME)/.dmake です。このディレクトリと指定したディレクトリは、すべての構築サーバーから認識される必要があります。

このオプションは、ユーザーのローカルホスト上の $(HOME) ディレクトリとユーザーのすべての遠隔ホスト上の $(HOME) ディレクトリが、異なる物理 $(HOME) ディレクトリである場合にだけ使用してください。

たとえば、このオプションはスーパーユーザーが使用します。


注 –

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


優先順位は次のとおりです。

使用

特殊な目的のターゲット

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

.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 は、実行を開始すると、実行時構成ファイルを検索して、ジョブを分散する場所を調べます。

一般に、このファイルは dmakerc という名前で、dmake ホスト上のユーザーのホームディレクトリにあります。

dmake は、次の場所と順序で実行時構成ファイルを検索します。

  1. -c オプションを使ってコマンド行で指定されたパス名

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

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

  4. $(HOME)/.dmakerc

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

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

次は、単純な実行時構成ファイルの例です。


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

falconhawkeagleheronavocet の各エントリが構築サーバーとして一覧表示されています。

各構築サーバーに分散したいジョブ数を指定することができます。デフォルトのジョブ数は 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 ファイルは、構築サーバーのファイルシステム中に置かれています。

このファイルは、次の内容を指定するために使用します。

次に dmake.conf ファイルの例を示します。


max_jobs: 8
nice_prio: 5

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


注 –

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


環境変数/マクロ

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

DMAKE_RCFILE

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

DMAKE_GROUP

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

DMAKE_MAX_JOBS

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

例については、このマニュアルページの -j オプションを参照してください。

DMAKE_ADJUST_MAX_JOBS

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

DMAKE_MODE

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

DMAKE_ODIR

dmake が一時出力ファイルを書き込みおよび読み取りできる共通の物理ディレクトリを定義します。

この環境変数やマクロは、ローカルホスト上のホームディレクトリとすべてのリモートホスト上のホームディレクトリが同じ物理ホームディレクトリでない場合にだけ使用します。

たとえば、このオプションはスーパーユーザーが使用します。

DMAKE_OUTPUT_MODE

ログファイルの形式を定義します。次のキーワードのどれか 1 つを含むことができます。


host1 --> 1 個のジョブ
echo "Done host1"
host2 --> 1 個のジョブ
echo
"Done host2"
host1 --> ジョブ出力
echo "Done host1"
Done host1
host2 --> ジョブ出力
echo "Done host2"
Done host2

これは dmake のデフォルトです。


echo "Done host1"
Done host1
echo "Done host2"
Done host2

ファイル

関連項目

HTML ブラウザで次の URL を指定して、完全な Sun Studio 12 マニュアルセットにアクセスできます。/opt/SUNWspro/docs/ja/index.html (Solaris の場合)/opt/sun/sunstudio12/docs/ja/index.html (Linux の場合)

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

更に詳しい情報は、次のマニュアルページを参照してください。