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

使用

特殊な目的のターゲット

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 ジョブの実行は許可されません。