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 は、ユーザーのメイクファイルの内容を解析し、並行して構築できると判断したメイクファイルのターゲットごとにジョブを分散させます。
次の要件を満たしていれば、どのマシンも構築サーバーとして使用できます。
dmake ホスト (使用中のマシン) から rsh を使用して、パスワードの入力を求められずに構築サーバー上でコマンドをリモートで実行できることが必要です。
たとえば、次のとおりです。
demo% rsh <分散メイクを行うマシン名> which dmake /opt/SUNWspro/bin/dmake |
rsh を実行した時に、不要な出力があってはいけません。
dmake ソフトウェアがインストールされている bin ディレクトリに、構築サーバーからアクセス可能である必要があります。デフォルトでは dmake は、構築サーバー上の dmake 実行可能ファイルへの論理パスが dmake ホスト上と同じであると仮定します。この仮定を変更するには、実行時構成ファイルのホストエントリの属性としてパス名を指定します。
dmake ホストから、使用する構築サーバー、および、各構築サーバーに割り当てる dmake ジョブ数を指定することができます。
特定の構築サーバー上で実行することができる dmake ジョブ数の制限は、そのサーバーにも適用されます。
実行時構成ファイルを指定します。
デフォルトの実行時構成ファイルは $(HOME)/.dmakerc です。
ジョブの分散先にする構築サーバーグループの名前を指定します。
サーバーグループは実行時構成ファイルに定義してください。
デフォルトのサーバーグループは、実行時構成ファイル中の最初のグループです。
実行時構成ファイル中の構築サーバーの指定グループに分散される最大ジョブ総数を指定します。
デフォルトの最大ジョブ数は、構築サーバーグループに指定されるジョブの総数です。
ジョブは、実行時構成ファイルの中で出現する順に 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 } |
次のいずれかのキーワードを指定します。
serial: dmake を標準の make と同じように逐次動作させます。
parallel: ジョブを dmake ホストにだけ分散させます。
distributed: dmake を完全な分散モードで動作させます。これは dmake のデフォルトです。
dmake が一時出力ファイルを書き込みおよび読み取りできる共通物理ディレクトリを指定します。使用されるディレクトリは $(HOME)/.dmake です。このディレクトリと指定したディレクトリは、すべての構築サーバーから認識される必要があります。
このオプションは、ユーザーのローカルホスト上の $(HOME) ディレクトリとユーザーのすべての遠隔ホスト上の $(HOME) ディレクトリが、異なる物理 $(HOME) ディレクトリである場合にだけ使用してください。
たとえば、このオプションはスーパーユーザーが使用します。
これらのオプションと環境変数、およびこのマニュアルページで後述するメイクファイルのマクロによって、同じ動作が変更されます。
優先順位は次のとおりです。
コマンド行オプション
メイクファイルのマクロ
環境変数
dmake のデフォルト
dmake を使うと、構築サーバー上でターゲットを並行して構築できます。並行して処理を行うと、大規模なシステムやプロジェクトを構築するのに要する時間を大幅に短縮できます。dmake は、並行処理とタイミングを制御するために、次の特殊なメイクファイルターゲットを使用します。
.PARALLEL
.NO_PARALLEL
.LOCAL
.WAIT
このターゲットは、逐次処理を行うターゲットを指定するために使用します。
このターゲットは、並行処理を行うターゲットを指定するために使用します。
このターゲットは、ローカルホスト上で逐次処理を行うターゲットを指定するために使用します。
依存関係リストにこのターゲットを指定すると、dmake は、並行処理の場合でも、この前の依存関係の処理が終了するまで待機してから、次の依存関係を処理します。
このようなターゲットを使って記述してあるメイクファイルは、Solaris 1.x と Solaris 2.x で配布される標準 make でも互換性を保っています。標準の make はこれらのターゲットを許容し、エラーを出しません (処理も行いません)。
dmake ジョブの分散は、次の 2 つの方法で制御されます。
dmake ホスト上の dmake ユーザーは、構築サーバーとして使用したいマシンと各構築サーバーに分散したいジョブ数を指定することができます。
構築サーバーの所有者 (/etc/opt/SPROdmake/dmake.conf ファイルを変更できるユーザー) は、その構築サーバーに分散可能な dmake ジョブの最大総数を制御することができます。
dmake は、実行を開始すると、実行時構成ファイルを検索して、ジョブを分散する場所を調べます。
一般に、このファイルは dmakerc という名前で、dmake ホスト上のユーザーのホームディレクトリにあります。
dmake は、次の場所と順序で実行時構成ファイルを検索します。
-c オプションを使ってコマンド行で指定されたパス名
DMAKE_RCFILE というメイクファイルのマクロを使って指定されたパス名
環境変数 DMAKE_RCFILE を使って指定されたパス名
$(HOME)/.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 の優先順位でジョブを分散させます。
-g オプションへの引数としてコマンド行に指定されたグループ
DMAKE_GROUP というメイクファイルのマクロによって指定されたグループ
環境変数 DMAKE_GROUP によって指定されたグループ
実行時構成ファイルで 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 ジョブの最大総数。
省略可能: すべての dmake ジョブの実行に適用される、/usr/bin/ の優先順位。
次に dmake.conf ファイルの例を示します。
max_jobs: 8 nice_prio: 5 |
このファイルは、すべての dmake ユーザーから構築サーバー上で実行が許可される最大 dmake ジョブ数を 8 に設定します。ジョブを実行する優先順位は、nice_prio コマンドで変更することができます。詳細は、nice(1) を参照してください。
/etc/opt/SPROdmake/dmake.conf ファイルが構築サーバー上にない場合には、そのサーバー上では dmake ジョブの実行は許可されません。
次のものは、環境変数またはメイクファイルのマクロとして定義することができます。
実行時構成ファイルを定義します。デフォルトの実行時構成ファイルは $(HOME)/.dmakerc です。
ジョブの分散先にする構築サーバーグループの名前を定義します。サーバーグループは実行時構成ファイルに定義されます。デフォルトのサーバーグループは、実行時構成ファイルの 1 番目のグループです。
実行時構成ファイルの中で指定されている構築サーバーグループに分散される最大ジョブ数を定義します。デフォルトの最大ジョブ数は、構築サーバーグループに指定されるジョブの総数です。ジョブは、実行時構成ファイルの中で出現する順に 1 ずつホストから減算、またはホストに加算されます。
例については、このマニュアルページの -j オプションを参照してください。
次のいずれかのキーワードを含めることができます。
YES: システムの現在の負荷に応じて、dmake が並列ジョブの制限を調整できるようにします。システムの負荷が過剰でない場合、dmake はユーザーが定義した制限を使用します。システムの負荷が過剰な場合、dmake は「現在の」制限を、ユーザーが定義した制限より下に設定します。
この変数が設定されない場合、dmake はシステムの現在の負荷に応じて並列ジョブの制限を調整します。これは dmake のデフォルトになります。
NO: dmake の自動調整機構をオフに切り替えます。
次のいずれかのキーワードを含めることができます。
serial: dmake を標準の make と同じように逐次動作させます。
parallel: dmake がジョブを dmake ホストにだけ分散するようにします。
distributed: dmake を完全な分散モードで動作させます。これは dmake のデフォルトです。
dmake が一時出力ファイルを書き込みおよび読み取りできる共通の物理ディレクトリを定義します。
この環境変数やマクロは、ローカルホスト上のホームディレクトリとすべてのリモートホスト上のホームディレクトリが同じ物理ホームディレクトリでない場合にだけ使用します。
たとえば、このオプションはスーパーユーザーが使用します。
ログファイルの形式を定義します。次のキーワードのどれか 1 つを含むことができます。
TEXT1: 構築ジョブを開始するたびに、dmake はシステム名とコマンド名をログファイルに出力します。
また、コマンドそのものに出力がある場合は、ジョブが終了するときに、そのコマンド出力とともに、再びシステム名とコマンド名をログファイルに出力します。
例:
host1 --> 1 個のジョブ echo "Done host1" host2 --> 1 個のジョブ echo "Done host2" host1 --> ジョブ出力 echo "Done host1" Done host1 host2 --> ジョブ出力 echo "Done host2" Done host2 |
これは dmake のデフォルトです。
TEXT2: 並列ジョブの出力を直列化します。ログファイルが見やすくなります。このモードでは、 dmake は、1 つのジョブが終了すると、一度だけコマンドを出力し、その直後に、コマンド出力を続けます。
例:
echo "Done host1" Done host1 echo "Done host2" Done host2 |
$(HOME)/.dmakerc: デフォルトの実行時構成ファイル。構築サーバーと構築サーバーグループの名前が含まれます。
/etc/opt/SPROdmake/dmake.conf: 構築サーバー上にあるこのファイルは、すべての dmake ユーザーによって構築サーバーに分散することができる最大ジョブ総数を指定するために使用されます。また、すべての dmake ジョブに適用される /usr/bin/nice で指定する優先順位を指定するためにも使用されます。
HTML ブラウザで次の URL を指定して、完全な Sun Studio 12 マニュアルセットにアクセスできます。/opt/SUNWspro/docs/ja/index.html (Solaris の場合)/opt/sun/sunstudio12/docs/ja/index.html (Linux の場合)
デフォルトの /opt 以外のディレクトリにコンパイラがインストールされている場合は、実際のパスをシステム管理者にお尋ねください。
更に詳しい情報は、次のマニュアルページを参照してください。
make(1)
rsh(1)
hosts(4)
hosts.equiv(4)
attributes(5)
largefile(5)