The openMosix HOWTO Live free() or die()−free()であり続けるか、それとも die()か Kris Buytaert buytaert@x-tend.be and Others Revision History Revision v1.0 11 may 2003 ついに完成 Revision v1.0 RC 1 07 may 2003 大幅な清書 Revision v0.95 04 april 2003 ClumpOS を PlumpOS に置き換え Revision v0.94 25 february 2003 Mirko Caserta 氏によるパッチ適用 Revision v0.93 16 february 2003 追加機能と修正 Revision v0.92 21 january 2003 Revision v0.91 27 september 2002 Revision v0.90 03 september 2002 Revision v0.71 26 August 2002 スペルの修正 Revision v0.70 22 August 2002 未記載部分を排除。Mosixview を openMosixView に置き換え Revision v0.50 6 July 2002 openMosix HOWTO 第一版 Revision v0.20 5 July 2002 Mosix HOWTO としては最後(今のところ) Revision v0.17 28 June 2002 Revision v0.15 13 March 2002 Revision v0.13 18 Feb 2002 Revision ALPHA 0.03 09 October 2001 "ある課題に精通するには、それについて本を書くこと。それがベストです" (Benjamin Disraeli) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table of Contents I. はじめに 1. はじめに 2. openMosix とは何か II. openMosix のインストール 3. 要件と計画 4. ディストリビューション別インストール 5. 自動探索(Autodiscovery) 6. クラスタのインストール III. openMosix の管理 7. openMosix の管理 8. Mosix のチューニング 9. openMosixview 10. openMosix 関連のその他のプログラム 11. 共通の問題 12. ヒントと TIPS 集 13. インストール済み openMosixの(負荷)テスト IV. openMosix でアプリケーションを動かす 14. コンパイルの性能を上げるには 15. openMosix を利用した画像処理 16. バイオインフォマテックスと openMosix V. openMosix の開発 17. openMosix の内部を見る A. 更に情報が必要な場合 A.1. IRC A.2. さらに知るには A.3. 翻訳 A.4. リンク A.5. メーリングリスト A.6. 日本語版謝辞 B. クレジット C. GNU Free Documentation License 0. PREAMBLE 1. APPLICABILITY AND DEFINITIONS 2. VERBATIM COPYING 3. COPYING IN QUANTITY 4. MODIFICATIONS 5. COMBINING DOCUMENTS 6. COLLECTIONS OF DOCUMENTS 7. AGGREGATION WITH INDEPENDENT WORKS 8. TRANSLATION 9. TERMINATION 10. FUTURE REVISIONS OF THIS LICENSE How to use this License for your documents 索引 List of Tables 2-1. openMosix の長所 2-2. openMosix の短所 4-1. その他のディレクトリ 7-1. /proc/hpc パラメタの変更 7-2. /proc/hpc/admin/ 7-3. /proc/hpc/decay/ にあるファイルに 1 を書き込む 7-4. その他のノードについての情報 7-5. ローカルプロセスについての追加情報 7-6. 詳細 7-7. mosrun の追加オプション 9-1. 起動方法 I. はじめに Table of Contents 1. はじめに 1.1. openMosix HOWTO 1.2. はじめに 1.3. おことわり 1.4. 配布規定 1.5. このドキュメントの最新版 1.6. フィードバック 2. openMosix とは何か 2.1. クラスタリングについて−ちょっとした説明 2.2. これまでのこと 2.3. 稼動中の openMosix の例 2.4. 構成 2.5. openMosix を試しに動かす 2.6. openMosix の長所 2.7. openMosix の弱点 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 1. はじめに 1.1. openMosix HOWTO 初めに Mosix が、それから openMosix が登場しました。これはとても興味深 いプロジェクトだと思います。技術的な面だけではなく、ライセンスが好まし いという点からもです。この HOWTO では Mosix ではなく、openMosix に焦点 を当てることに決めました。その主な理由は openMosix がユーザ数で勝ってい るからです。(Moshe Bar 氏によれば、旧 Mosix コミュニティのおよそ 97 % が openMosix に移行した、としています)(2002 年 7 月 5 日)。上記の理由で 、情報の多くは Mosix と openMosix 両ユーザに役立つと思います。私は HOWTO を分けようと決めました。Mosix HOWTO の最新版は Mosix と OpenMosix 両者について触れられていて、0.20 になっています。openMosix に焦点を当て ることが目的ですが、Mosix ユーザを軽視するつもりはありません。詳しいこ とは http://howto.ipng.be/Mosix-HOWTO/ にあります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2. はじめに このドキュメントは、openMosix というソフトウェアパッケージの概要の解 説で、 openMosix はネットワークで繋がっている複数の GNU/Linux コンピュ ータを 1 つのコンピュータクラスタに変身させます。解説中では openMosix の機能をフルに使ったプログラムを導入するのに当たっての簡単な説明をする とともに、並列処理の背景についても説明します。この HOWTO では、背景とな る情報を提供するドキュメントについてさらに詳しく述べ、様々なディストリ ビューションが持つ癖についても論じます。 Mosix チームの何人かが openMosix を開発し(詳しくは後程)、この HOWTO を 作成しました。したがってはじめのころは openMosix も Mosix も論じていま した。情報の多くが Mosix、openMosix ユーザどちらにも役立つにもかかわら ず、HOWTO を分けることにしました。Mosix HOWTO の最新版は Mosix と OpenMosix 両者について触れられていて、0.20 になります。 http:// howto.ipng.be/Mosix-HOWTO/Mosix-HOWTO/ にあります。 Scot Stevenson 氏がドキュメント作成を誰か代わりにする人がいないかと探し ていた時、Kris Buytaert が関わりを持つことになりました。それは 2002 年 の 2 月でした。当初は Mosix と openMosix 両者を論じていましたが、この版 の HOWTO では主に openMosix を扱います。ただ注意して欲しいのは、このド キュメントには openMosix とすべきなのにもかかわらず、まだ Mosix に言及 しているところがある点です。 本来まじめであるべき見出しが、そうなっていないものがあるのに気付かれ るでしょう。Scot 氏は HOWTO を軽い調子で書こうとしていました。それは世 間 (ゲップをしているペンギンがマスコットになっているような界隈でさえ)が うんざりするような技術文献であふれているからです。そんなわけで、コメン トがある部分がまだあります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3. おことわり このドキュメントに記述されている情報は、自己責任で利用してください。私 はこのドキュメントの内容について責任を持ちません。考え方、例を含むもろ もろのドキュメントの内容は、必ず自己責任で利用してください。 すべての著作権は、特に断りが無い限りそれぞれの所有者が保持しています。 このドキュメントに含まれる用語は、どのトレードマークやサービスマークが 持つ合法性に影響をあたえるものとはみなされません。openMosix は Moshe Bar 氏が著作権を保持しています。Mosix は Amnon Barak 氏が著作権を保持し ています。 Linux は Linus Torvalds 氏が Registered Trademark を保持して います。 openMosix は Free Software Foundation が発行している GNU General Public License の第二版に基づいています。 特定の製品やブランド名は承認されたとみなされません。 インストールをする前にバックアップを取り、かつ定期的にバックアップをと ることを強く推奨します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4. 配布規定 Copyright (c) 2002 by Kris Buytaert and Scot W. Stevenson. This document may be distributed under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the appendix entitled "GNU Free Documentation License". 【訳註:配布規定については、原文をそのまま載せます。GNU Free Documentation License については、日本語訳である GNU フリー文書利用許諾 契約書 を参照してく ださい】 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5. このドキュメントの最新版 このドキュメントの公式な最新版は、下記の Web サイトにあります。 the Linux Documentation Project ドラフトもしくはβ版 については howto.ipng.be のサブフォルダにあります。このドキュメントの変更については、openMosix メーリングリストで議論されるのが普通です。openMosix を見てください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6. フィードバック 現在このドキュメントは Kris Buytaert がメンテナンスしています。HOWTO に対する意見や更新については、彼とコンタクトを取ってください。 openMosix もしくは Mosix 自体についての技術的な質問は、該当のメーリン グリストに投稿するようにお願いします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 2. openMosix とは何か 2.1. クラスタリングについて−ちょっとした説明 コンピュータは大部分の時間空いています。xload や top のようなシステム の利用状況をモニタするプログラムを動かせば、恐らくプロセッサのロードの 平均が 1.0 にさえも届かないことがわかるでしょう。コンピュータが 2 台以 上あるなら、どんな時でも少なくとも 1 台は何もしていない公算が大きいでし ょう。残念なことに、本当に CPU パワーが必要となる時には− C++ をコンパ イルしている時や Ogg Vorbis の音楽ファイルをエンコードしている時−同時 にもっとたくさんの CPU が必要です。クラスタリングの背景にあるアイディア は利用できるすべてのコンピュータに負荷をばらまき、他のマシンで空いてい るリソースを使うことです。 クラスタの基本構成は、単独のコンピュータです。これは「ノード」とも呼ば れます。クラスタはさらにマシンを追加することで拡張−「サイズ」や「スケ ール」という表現をとります−が可能です。クラスタは概して個々のマシンが 速いほど、マシン間の接続速度が高速なほど、パワフルになります。さらにク ラスタのオペレーティングシステムは、状況変化に応じて利用可能なハードウ ェアを最大限に活用しなければいけません。クラスタが様々なコンピュータの タイプから構成される場合(「異種」クラスタ)やクラスタの構成が不用意に変 化し(マシンがクラスタに出たり入ったりする)負荷が事前に予測できないと、 最大限に活用するのにはいっそう多くの困難が伴います。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.1. クラスタリングについて−ちょっとした前置き 2.1.1.1. HPC vs フェイルオーバー vs ロードバランシング クラスタは 3 タイプあります。フェイルオーバーとロードバランシングとハイ パフォーマンスコンピューティングです。既設の大部分は、恐らくフェイルオ ーバーとロードバランシングです。 ・ フェイルオーバークラスタはネットワーク接続した 2 台以上のコンピュー タで、独立したハートビート接続を 2 ホスト間で結んでいます。 2 ホス ト間でのハートビート接続は、全サービスが利用可能かどうかをモニタす るのに利用します。1 つのマシンでサービスが落ちると、別のマシンがサ ービスを引き継ごうとします。 ・ ロードバランシング・クラスタのコンセプトは、例えば Web サーバにリク エストが来ると、クラスタが最も暇なマシンをチェックして、そのリクエ ストを該当するマシンに送るというものです。現実にはロードバランシン グ・クラスタはフェールオーバークラスタにロードバランシング機能を追 加し、さらに多くのノードを伴うケースが多くあります。 ・ 最後に挙げるクラスタは、ハイパフォーマンス・コンピューティングのク ラスタです。マシンはデータセンターが必要とする高い性能に見合うよう に、特別にチューニングされています。Beowulf は研究施設で求められる 計算速度を得るのに焦点を当て、開発されました。このタイプのクラスタ は、ロードバランシング機能も持っています。異なるプロセスをより多く のマシンに分散させることで性能を得ています。しかし結局はプロセスは 並列化され、独立して動作できるルーチンはお互いに終了を待つことなく 異なるマシンに分散されています。 ロードバランシングとフェイルオーバータイプのクラスタの例として広く知ら れているのは、Web システムやデータベース、ファイアーウォールです。この サービスには 99.99999 % の稼動率が要求されています。インターネットは年 中無休で動いており、もうオフィスが閉まるとサーバを落とすという時代では ありません。 CPU サイクルが必要な場合、ダウンタイムを予定に入れても差し支えないでし ょう。しかしそれは必要な時に最大限のマシンパワーが手に入るケースです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.1.2. スーパーコンピュータ vs. クラスタ これまでスーパーコンピュータは、限られたベンダーによってのみ構築されて きました。スーパーコンピュータのような性能を必要としている企業や組織は 、巨額の資金を準備できなければいけませんでした。大学の多くは自力でスー パーコンピュータのコストを賄えませんでした。そこで他の手段を検討しまし た。まず異なるジョブをより多くのコンピュータに分散し、ジョブの結果のデ ータを集めてこようとしたことから、クラスタという発想が生まれました。も っと安価で誰もが利用できる一般的なハードウェアによって、これまでただあ こがれていただけだったスーパーコンピュータと同じ結果が得られます。しか し PC プラットフォームはさらに進化し、スーパーコンピュータと複数のパー ソナルコンピュータで組んだクラスタ間の性能差は縮まって行きます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.1.3. クラスタモデル[(N)UMA, PVM/MPI] 並列処理にはやり方がいくつかあります。(N)UMA、DSM、PVM、MPI がそれで、 様々な並列処理手法をとっています。ハードウェアで実装されているものもあ れば、ソフトウェアによるもの、またはその両者によるものもあります。 (N)UMA ((Non-)Uniform Memory Access)は、コードの実行を共有メモリ上で行 えるマシンの例です。Linux カーネルには NUMA の実装が入っており、異なる 場所にあるメモリへのアクセスタイムに修正を施してあります。CPU に最も近 いメモリを使用するのはそれを使っているカーネルの役目です。 DSM、つまり分散共有メモリ(Distributed Shared memory)は、ソフトウェア、 ハードウェア両者で実現しています。分散している物理メモリに対して、仮想 レイヤを提供するのがコンセプトです。 PVM と MPI は GNU/Linux ベースの Beowulf を語る時に頻繁に使われるツール です。 MPI はメッセージパッシングインタフェース(Message Passing Interface)の略 称です。メッセージパッシングライブラリの標準規格です。 MPICH は MPI の 実装の中で一番利用されている実装です。MPICH の次によく見かけるのが LAM です。MPI ベースの別実装で、ライブラリがフリーでリファレンス実装されて います。 PVM(Parallel Virtual Machine)は MPI の同系統で、Beowulf を構築するツー ルとしてよく利用されています。PVM はユーザ空間で動きますので、カーネル に特別な修正を施す必要はありません。ユーザが十分な権限を持っていれば PVM は動作します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.1.4. openMosix の位置づけ openMosix ソフトウェアパッケージを使えば、ネットワークに接続している GNU/Linux が動作しているコンピュータを、1 つのクラスタに変えられます。 クラスタに所属するノード間で自動的に負荷分散します。そしてサービスを中 断することなく、ノードが動作中のクラスタに出たり入ったりできます。接続 速度や CPU 速度に応じて、負荷をノード間に分散します。 openMosix はカーネルの一部であり、Linux と完全互換であるようにメンテ ナンスされています。したがってユーザのプログラムやファイルその他のリソ ースは、何も変更することなく動作します。一般ユーザは 1 台の Linux と openMosix システムの区別がつかないでしょう。一般ユーザにとって、クラス タ全体が 1 台の(高速な)GNU/Linux システムとして機能するからです。 openMosix は IA32 互換のプラットフォームで動く標準的な Linux と完全互換 なカーネルパッチとして用意されます。内部のロードバランシング・アルゴリ ズムによって透過的にプロセスを他のクラスタのメンバーにマイグレートしま す。長所はノード間でロードバランシングがうまく働くことです。クラスタ自 身が稼働率を常時最適化しています(システム管理者は、手動で動作中の自動ロ ードバランシングを設定変更できます)。 この透過的なプロセス・マイグレーション機能は、クラスタ全体をクラスタ・ ノードで利用できるだけのプロセッサを搭載した 1 つの「大きな」 SMP シス テムのように見せます(X 台なら X 個プロセッサを積んだシステムになります 。例えばデュアル、クワッドシステムというように)。openMosix は HPC 向け に最適化されたファイルシステム(oMFS)も用意しています。NFS とは異なり、 キャッシュやタイムスタンプ、リンクの整合性があります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2. これまでのこと 2.2.1. 開発史 Rumours 氏は Mosix が Moshe Unix から生まれたと述べています。当初 Mosix は BSD/OS 3.0 で動くアプリケーションとしてはじまりました。 Announcing MO6 for BSD/OS 3.0 Oren Laadan (orenl@cs.huji.ac.il) Tue, 9 Sep 1997 19:50:12 +0300 (IDT) こんにちは。 うれしいお知らせです。MO6 Version 3.0 Release 1.04 (beta-4)が利用可能に なりました。BSD/OS 3.0 互換でパッチレベルは K300-001 から M300-029 に なります。 MO6 は 6 プロセッサ・バージョンで、PC クラスタ用に BSD/OS を強化した MOSIX マルチコンピュータです。2 〜 6 台の PC を LAN 接続し、MO6 拡張 による真のマルチコンピューティング環境を享受できます。 MO6 の配布について -------------------- MO6 は「ソース」も「バイナリ」も配布しています。BSD/OS に対するパッチ としてインストールされ、インストールには対話形式のスクリプトを使用します。 MO6 は http://www.cnds.jhu.edu/mirrors/mosix/ もしくは 私のサイトである http://www.cs.huji.ac.il/mosix/ から入手できます。 今回のリリースの目玉 -------------------------------------- - プロセス・マイグレーションによるメモリの先読み(消費防止)(?) - インストール方法を改善 - マイグレーションの制御強化 - 管理ツールの改善 - ユーザ用ユーティリティの追加 - ドキュメントと man の追加 - 動的な設定 フィードバックやコメントは mosix@cs.huji.ac.il までお願いします。 ------------------- 1999 年はじめに Mosix M06 Beta が Linux 2.2.1 向けにリリースされました 。 2001 年終わりから 2002 年の初めに openMosix が Mosix のフリーバージ ョンとして生まれました(詳細は次の節で)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.2. openMosix openMosix は mosix.org にあるものすべてに対する補強です。素晴らしい Mosix プロジェクトにおける Barak 教授のリーダーシップに深く感謝するとと もに敬意を払います。 Moshe Bar 氏は何年もの間 Mosix プロジェクト(www.mosix.org)にかかわって きました。また Mosix プロジェクトの共同プロジェクトマネージャであり、商 用 Mosix を扱う企業のゼネラルマネージャーでもありました。 Mosix の商用利用についての見解の相違から、Moshe Bar 氏は新しいクラスタ の企業 Qlusters, Inc. を立ち上げました。そして Barak 教授はこのベンチャ ー企業にさしあたりは加わらないことに決め(しかし参加することを真剣に検討 しました)、投資家と長期に渡る交渉を持ちました。もはや Mosix は GPL プロ ジェクトとしてオープンにサポートされないことはあきらかです。かなりのユ ーザが Mosix から去ったので(全世界のインストールベースでおよそ 1000)、 Moshe Bar 氏は Mosix プロジェクトの開発とサポートを新しい名称で継続する ことに決定しました。 openMosix は GPL2 ライセンスに準拠しています。以前 の Mosix プロジェクト由来のすべてのコードには Copyright 2002 by Amnon Barak が、新しいコードすべてには Copyright 2002 by Moshe Bar がついてい ます。 openMosix の将来のバージョンでは、アーキテクチャが大幅に変更されるでし ょう。 openMosix のメーリングリストにおいて、自動設定、ノード探索、ユー ザ空間の新たなツールのコンセプトについて議論されています。新しい機能の 大半はすでに実装されていますが、DSM(Distributed Shared Memory。分散共有 メモリ)他、まだこのドキュメントを書いている時点(2003 年 3 月)では開発中 のものもあります。 標準化と今後の互換性に取り組むために、proc インタフェースが /proc/mosix から /proc/hpc へと変更になりました。/etc/mosix.map も /etc/hpc.map に 変更されました。最近になって設定ファイルの統一のため、/etc/ openmosix.map が置かれました(最初の設定ファイルである /etc/init.d/ openmosix スクリプトがこのファイルの存在を仮定しているというのが真相で す)。openMosix 用に変更されたコマンドラインベースのユーザ空間ツールは、 すでにプロジェクトのWeb サイトで利用可能です。 openmosix.map 設定ファイルは、omdiscd(openMosix auto DISCovery Daemon) というノード自動探索システムで置き換え可能です。これについては後で論じ ます。 openMosix は世界各地で共同作業している有能な人々によってサポートされて います(openmosix.sourceforge.net を見てください)。プロジェクトの主目的 は、 HPC アプリケーションすべてに役立つ、標準化されたクラスタ環境です。 openMosix にはプロジェクトの Web サイト http:// openMosix.sourceforge.net もあります。開発者向けに CVS ツリーとメーリン グリストとともにユーザ向けのメーリングリストもあります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.3. 現状 アクティブなオープンソースプログラムの大半と同様に、openMosix の変更度 合いは、ドキュメントを維持する人々の能力を超えてしまっています。 この部分を書いている 2003 年の 2 月では、openMosix 2.4.20 が利用でき、 openMosix のユーザ空間ツールは v0.2.4 が利用可能です。これには自動探索 ツールが入っています。 もっと最近の開発状況は openMosix website を 見てください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.4. 動くアプリケーションは openMosix で動作するアプリケーションをすべてリストにするのは不可能です 。しかしコミュニティは migrate でマイグレートするアプリケーションをきちんと 整理しようとしています。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.3. 稼動中の openMosix の例 openMosix クラスタの構成はいろいろです。これを明らかにするために、あ る仮定をします。あなたが学生で、寄宿舎で金持ちのコンピュータサイエンス おたくと同居しており、彼とは openMosix クラスタを構成するコンピュータと してリンクしているとします。そしてあなたは今、国が認めている私的利用目 的で CD から音楽ファイルを Ogg Vorbis に変換しているとします。ルームメ ートは C++ を使ったプロジェクトで活動しており、このプロジェクトは世界に 平和をもたらすと言っているとします。しかしこの瞬間彼はバスルームで口に 出せないような行為をしているとすると、彼のコンピュータは暇なのです。 そこであなたは bladeenc のようなプログラムを動かして、Bach の XXX を .wav フォーマットから .ogg に変換すると、あなたのコンピュータ上の openMosix ルーチンは両ノードの負荷を比較します。そしてあなたの Pentium-233 から彼の Athlon XP にプロセスを送れば、より早く処理が終わる と判断します。これは自動的に行われます。スタンドアローンのマシンでして いるのと同様に、ただあなたはコマンドを入力するか、クリックするかのどち らかだけです。 2 つ以上エンコードをすると、ことが運ぶのが大変早くなり、 反応時間も遅くならないことに気づくだけです。 あなたが、まだ XXXX と入力している間にルームメートが戻ってきました。 カフェテリアの食事に出るレッドチリペッパーについて何かぶつぶつ言いなが ら。彼は「pmake」と呼ばれる「make」に並列実行の最適化をほどこしたプログ ラムを使ってテストを再開します。彼が何をしても CPU 時間を食い潰すので、 openMosix はあなたのマシンにサブプロセスを送り込み、負荷のバランスを取 ります。 この設定は、「single-pool」と呼ばれています。すべてのコンピュータは 1 つのクラスタとして利用されます。あなたのコンピュータが共同体(pool) の一 部であるということが、長所にもなり短所にもなります。あなたの処理は他の コンピュータで実行され、他の処理があなたのコンピュータで動きます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4. 構成 2.4.1. プロセス・マイグレーション openMosix を利用してあるマシンでプロセスを動かすと、実際はクラスタに属 する別のマシンで動いているのがわかります。各プロセスには、そのプロセス がどこで作成されたのかを示す Unique Home Node (UHN)が付けられます。 マイグレーションすると、プロセスはユーザ部分とシステム部分の 2 つに分 割されます。システム部分が UHN にあり続けるとユーザ部分が移動します。こ のシステム部分は代理プロセスと言われる場合もあります。このプロセスが大 半のシステムコールの面倒を見て、実行を割り振ります。 openMosix はこれら 2 つのプロセス間のやり取りを仕切ります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4.2. The openMosix File System (oMFS) oMFS は openMosix の機能の 1 つで、ローカルにマウントしているかのように クラスタ内のリモートファイルシステムにアクセスできるようになります。他 のノードのファイルシステムは、/mfs でマウントできます。たとえばノード 3 の /home にあるファイルは、各マシンから /mfs/3/home で見られます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4.3. Direct File System Access (DFSA) Mosix も openMosix もクラスタにまたがったファイルシステム(MFS)を DFSA (Direct File-System Access)オプションで用意しています。この機能を使えば 、Mosix と openMosix に属するノードが持つローカル、リモート両ファイルシ ステムにアクセスできます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.5. openMosix を試しに動かす openMosix のサポートの中には、専攻学生である Chai Mee Joon 氏が OM ユー ザに対して、フリーのトライアル・アカウントをネットワーク上にある彼の openMosix クラスタで提供しているというものがあります。ここでユーザは openMosix をテストしたり、実験したりできます。 このネットワーク上の openMosix が利用できることで、初心者ユーザに対して は openMosix の設定において出食わす問題を切り抜けられ、アプリケーション の開発や移植をしている openMosix のユーザに対しては、高い計算能力を提供 します。 このクラスタのユーザ ID とパスワードを得るには、 http:// www.mosixcluster.com/trial.php を見てください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.6. openMosix の長所 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table 2-1. openMosix の長所 ┌─────────────────────────────────┐ │追加パッケージ不要。 │ ├─────────────────────────────────┤ │ユーザアプリケーションのコード変更不要。 │ ├─────────────────────────────────┤ │インストールや設定が簡単。 │ ├─────────────────────────────────┤ │Red Hat ベースのシステムもしくはディストリビューションなら、 │ │openMosix をインストールするには # rpm -Uvh openMosix*.rpm と入力 │ │するだけ。 │ ├─────────────────────────────────┤ │DSM はまもなくリリース(2003 年 3 月末)。 │ ├─────────────────────────────────┤ │openAFS と親和性が高い。 │ ├─────────────────────────────────┤ │IA-64 も AMD-64 も移植中。 │ ├─────────────────────────────────┤ │oMFS は素の MFS をより進化させた。 │ ├─────────────────────────────────┤ │10 個以上のツールを備えたクラスタ・プラットフォームである。 │ │openMosixView、openMosixWebView、openMosixApplet、RxLinux、PlumpOS│ │、 K12LTSP、LTSP 他多数。 │ ├─────────────────────────────────┤ │openMosix はユーザ自身が開発した成果である。したがって当然ながらユ│ │ーザと緊密な関係にある。 │ ├─────────────────────────────────┤ │自動探索デーモンやフェイルオーバー・デーモンは、マルチキャストメッ│ │セージを使ってユーザ空間ツールとして実装済み。 │ ├─────────────────────────────────┤ │複数インタフェースを備えたホストのエイリアスに対応。 │ ├─────────────────────────────────┤ │ルーティング機能対応(マルチキャストが望ましくないケースあり)。 │ ├─────────────────────────────────┤ │クラスタをマスクすることでプロセスが移動するノードを指定可能。 │ └─────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7. openMosix の弱点 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table 2-2. openMosix の短所 ┌─────────────────────────────────┐ │カーネル依存。 │ ├─────────────────────────────────┤ │共有メモリ問題(DSM のαリリースが 2003 年 3 月後半に予定)。 │ ├─────────────────────────────────┤ │複数スレッドが性能を発揮できない問題。 │ ├─────────────────────────────────┤ │単一プロセスで動作させた時に性能が得られない。例えば、 openMosix │ │クラスタ上で Web ブラウザを動作させた場合。プロセスはクラスタに分 │ │散しない。もちろんプロセスがより高性能なマシンにマイグレートする場│ │合は除く。 │ └─────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ II. openMosix のインストール Table of Contents 3. 要件と計画 3.1. ハードウェアの要件 3.2. ハードウェア設定ガイドライン 3.3. ソフトウェアの要件 3.4. クラスタの設計 3.5. 教室 4. ディストリビューション別インストール 4.1. openMosix のインストール 4.2. openMosix を取ってくる 4.3. openMosix の一般的な利用上の注意 4.4. Red Hat と openMosix 4.5. Suse と openMosix 4.6. Debian と openMosix 4.7. openMosix と Gentoo 4.8. その他のディストリビューション 5. 自動探索(Autodiscovery) 5.1. 簡単な設定 5.2. 自動探索のコンパイル 5.3. 自動探索のトラブルシューティング 6. クラスタのインストール 6.1. クラスタのインストール 6.2. DSH(Distributed Shell) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 3. 要件と計画 3.1. ハードウェアの要件 基本構成のクラスタをインストールするには、最低でも 2 台のネットワークに 繋がったマシンが必要になります。ネットワークカード間をクロスケーブルで 繋ぐか、スイッチングハブやダムハブを使って接続します(スイッチングハブの 方が望ましいのですが、お金が少し余分にかかります)。もちろんネットワーク カードが速ければ、それだけクラスタの性能を上げるのが簡単になります。 今では Fast Ethernet (100 Mbps)が普通です。複数ポートをマシンに付けるの は難しくはありませんが、速度を上げるために物理的に別のネットワークに接 続するのには注意が必要です。Gigabit Ethernet は日に日に安くなっています が、あせって販売店に行き、お金を使うのは待ってください。まず実際に複数 の 100 Mbit カードで設定をテストして、本当にさらにネットワーク帯域が必 要なのかをよく考えてください。Gigabit カードを付けることになったら、一 緒に別の 100Mbit カードを組み合わせたくなるかもしれません。もっと安価な 選択肢として Firewire があります。この論文 で議論していますので参照してください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.2. ハードウェア設定ガイドライン 大規模なクラスタを設定するには、検討が必要です。どこにマシンを置くのか 。どこかテーブルの下では駄目なのか、それとも私が望んでいるオフィスの真 ん中なのか。ちょっとしたテストだけがしたいなら十分です。しかし N ノード のクラスタを設置する予定なら、マシンが十分に稼動できる環境にしなければ いけません。 これから説明するのは、1 つ以上の 19 インチラックにマシンを設置し、直接 単独で接続するか、それともすべてのノード間を 1 対 1 でクロス接続するか というネットワーク・トポロジーを適切に設定する話です。またマシンをまか なうのに十分な電力と負荷に耐えられる空調装置もあわせて確認する必要があ ります。また停電に備えて、UPS がきちんとシステムを shutdown するのかも 確認してください。マシンのコンソールに簡単にアクセスするために、KVM (キ ーボード、ビデオ、マウス)スイッチにお金を使う必要があるかもしれません。 ところでそのような投資に見合った規模のノードがない場合でも、個々のノー ドに簡単にアクセスできるようにしてください。マシンの CPU ファンが故障し たり、ハードディスクが故障したりした時に困らないように。つまりトラブル が発生してクラスタをシャットダウンして、一番下のマシンに手を届かせるの に多量のマシンをどかさなければならないようでは駄目だ、ということです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3. ソフトウェアの要件 使おうとしているシステムには Linux の基本的なインストールをする必要があ ります。お好みで Red Hat、Suse、Debian、Gentoo 等ありますが、どれを使っ ても結構です。大切なのは、カーネルが少なくとも 2.4 レベルであること、ネ ットワークカードが正しく設定されていることで、次にスワップ空間を十分に とることが大切です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.4. クラスタの設計 サーバ群と(個人用)ワークステーション群から構成されている openMosix クラ スタを設定する際には、それぞれが持つ長所、短所によって別々のオプション が設定できます。 ・ Single-pool 設定では、すべてのサーバとワークステーションが単一のク ラスタとして扱われます。個々のマシンはクラスタの一部でプロセスはク ラスタに属する他のノードにマイグレートできます。つまり、ワークステ ーションはプール(まとまりの単位)の一部となります。 ・ Server-pool と呼ばれる環境では、サーバはクラスタの一部になりますが 、ワークステーションはクラスタに属さず、openMosix のカーネルも持ち ません。アプリケーションをクラスタで動かしたいなら、サーバ群にわざ わざログインする必要があります。自分のワークステーションは何も影響 を受けず、リモートプロセスがマイグレートしてくることもありません。 ・ 3 番目は Adaptive-pool と呼ばれる設定です。この設定ではサーバは共有 されますが、ワークステーションはクラスタに入ったり、出たりします。 昼間は自分でワークステーションを使っています。しかし夕方になってロ グアウトするとすぐ、スクリプトがワークステーションにクラスタに参加 するように通知し、どんどん処理をはじめます。そんなイメージです。自 分が必要でない時に利用されることになります。マシンのリソースが必要 になれば、openMosix を停止させるスクリプトを走らせるだけで、クラス タから抜けだせます。その逆も同じです。 実際は mosctl を使ってマシンの役割を変更できます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.5. 教室 教室を夜には openMosix クラスタにしてしまうのは良い考えですが、エンドユ ーザに再び利用しようと思った時にマシンの電源スイッチをいじらないように 教えておかなければいけません。最近のマシンは、電源ボタンを押すと自動的 にシャットダウンできるようになっています。しかし古いマシンでは、実際に その状況になるとデータを無くすケースがあります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 4. ディストリビューション別インストール 4.1. openMosix のインストール この章では、様々なディストリビューションで openMosix をインストールする 方法を扱います。可能な組み合わせすべてを網羅するリストにはなっていませ ん。しかしこの章を通じて、ご自分の環境に openMosix をインストールする方 法について、十分な情報が得られるはずです。 openMosix を複数のマシンにインストールする方法は次の章で論じます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2. openMosix を取ってくる 最新版の openMosix は下記からダウンロードできます。 http:// sourceforge.net/project/showfiles.php?group_id=46729. UP(ユニプロセッ サ)もしくは SMP(対称型マルチプロセッサ)用にコンパイル済みバイナリ(rpm もあります)およびソースを選べます。カーネルパッチ及びバイナリとユーザ空 間のツールが必要になります。 CVS バージョンも取得できます。 cvs -d:pserver:anonymous@cvs.openmosix.sourceforge.net:/cvsroot/openmosix login cvs -z3 -d:pserver:anonymous@cvs.openmosix.sourceforge.net:/cvsroot/openmosix co linux-openmosix cvs -z3 -d:pserver:anonymous@cvs.openmosix.sourceforge.net:/cvsroot/openmosix co userspace-tools パスワードを促すプロンプトが出たなら、anonymous でログインするので、エ ンターを押してください。注意してもらいたいのは、CVS ツリーは時折「休止 」することがありますので、openMosix をインストールする方法として簡単で はないということです ;-) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3. openMosix の一般的な利用上の注意 4.3.1. カーネルのコンパイル openMosix 用カーネルをコンパイルするには、 http://www.kernel.org/ から 基本機能だけを備えた素のカーネルソースをいつも利用するようにしてくださ い。そばにあるミラーサイトを利用して、カーネルをダウンロードするように してください。そしてカーネルソース全部をダウンロードするのではなく、最 新のカーネルソースに対するパッチをダウンロードしてください。こうするこ とで、Linux コミュニティに歓迎され、オタクなカルマを大いに積めるでしょ う ;-) カーネルバージョンにマッチした正しい openMosix のパッチを必ず使 ってください。これを書いている時点では、2.4 カーネルの最新版は 2.4.20 です。したがって、 openMosix-2.4.20-x.gz パッチをダウンロードするように してください。「x」の部分はリビジョンに該当します(つまりリビジョン番号 が大きくなる程、新しくなります)。 Linux ディストリビューション付属のカ ーネルは使わないようにしてください。恐らく動かないでしょう。ディストリ ビューションの作成者が多量にカーネルソースにパッチを当てています。その ようなカーネルに openMosix のパッチを適用すると間違いなく失敗するでしょ う。私はあれこれやってきました。信じてください ;-) 実際に openMosix パッチをダウンロードしたら、カーネルソースのあるディレ クトリに移してください(たとえば、/usr/src/linux-2.4.20)。カーネルソース のディレクトリが「/usr/src/linux-[version_number]」という形式でなければ 、少なくとも「/usr/src/linux-[version_number]」にシンボリックリンクを張 ってください。 root ユーザなら gzip されたパッチはホームディレクトリに ダウンロードしています。patch ユーティリティ(何だと思います?)を使って パッチを当ててください。 mv /root/openMosix-2.4.20-2.gz /usr/src/linux-2.4.20 cd /usr/src/linux-2.4.20 zcat openMosix-2.4.20-2.gz | patch -Np1 まれにシステムで「zcat」が無い場合があります。その時は下記のようにして ください。 mv /root/openMosix-2.4.20-2.gz /usr/src/linux-2.4.20 cd /usr/src/linux-2.4.20 gunzip openMosix-2.4.20-2.gz cat openMosix-2.4.20-2 | patch -Np1 もっと変な環境だとシステムに「cat」がありません! mv /root/openMosix-2.4.20-2.gz /usr/src/linux-2.4.20 cd /usr/src/linux-2.4.20 gunzip openMosix-2.4.20-2.gz patch -Np1 < openMosix-2.4.20-2 「patch」コマンドは、カーネルソースに当てるパッチファイルの一覧を表示す るはずです。自分が大胆な方だと思うなら、カーネル設定ファイルにある openMosix 関連のオプションを有効にしてください。 ... CONFIG_MOSIX=y # CONFIG_MOSIX_TOPOLOGY is not set CONFIG_MOSIX_UDB=y # CONFIG_MOSIX_DEBUG is not set # CONFIG_MOSIX_CHEAT_MIGSELF is not set CONFIG_MOSIX_WEEEEEEEEE=y CONFIG_MOSIX_DIAG=y CONFIG_MOSIX_SECUREPORTS=y CONFIG_MOSIX_DISCLOSURE=3 CONFIG_QKERNEL_EXT=y CONFIG_MOSIX_DFSA=y CONFIG_MOSIX_FS=y CONFIG_MOSIX_PIPE_EXCEPTIONS=y CONFIG_QOS_JID=y ... しかし Linux カーネル設定ツールのどれかを使えば、上記のオプションの設定 はとても簡単になります。 make config | menuconfig | xconfig 上記は「config」、「menuconfig」、「xconfig」のどれかを選ぶという意味で す。これは好みの問題です。ただ「config」はどんなシステムでも動作します 。「menuconfig」は curses ライブラリがインストールされていることが必要 で、「xconfig」は X Window System の環境に TCL/TK ライブラリとそのイン タプリタが必要になります。 では、コンパイルしてみましょう。 make dep bzImage modules modules_install コンパイルが終わったら、新しいカーネルに openMosix のオプションをつけて ブートローダに設定してください。例えば /etc/lilo.conf に新しいカーネル のエントリを入れて、lilo を実行します。 リブートすれば openMosix クラスタのノードが起動します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.2. /etc/openmosix.map ファイルの書き方 openMosix を動かす前に /etc/openmosix.map 設定ファイルがなければいけま せん。このファイルはどのノードでも共通でなければいけません。 標準的な場所は /etc/openmosix.map です。/etc/mosix.map と /etc/hpc.map は以前の標準でした。しかし CVS バージョンのツールでは、下位互換から / etc/openmosix.map、/etc/mosix.map、/etc/hpc.map(この順序で)を検索します 。 openmosix.map ファイルには、空白で区切られたフィールドが 3 つあります。 openMosix-Node_ID IP-Address(or hostname) Range-size openmosix.map ファイルの例はこのようになります。 1 node1 1 2 node2 1 3 node3 1 4 node4 1 もしくは 1 192.168.1.1 1 2 192.168.1.2 1 3 192.168.1.3 1 4 192.168.1.4 1 もしくは範囲指定を利用すれば、上記と下記は同じになります。 1 192.168.1.1 4 openMosix は openMosix-Node_ID を元に、ノードの IP アドレスの最終バイト を数え上げます。1 より大きな範囲指定をするなら、当たり前ですがホスト名 のかわりに IP アドレスを使わなければいけません。 ノードに複数のネットワークインタフェースがあるなら、範囲指定のオプショ ンを入れるフィールドに ALIAS オプションを使って設定を入れられます(範囲 指定に 0 を設定したのと同じです)。 1 192.168.1.1 1 2 192.168.1.2 1 3 192.168.1.3 1 4 192.168.1.4 1 4 192.168.10.10 ALIAS この図で openMosix-Node_ID が 4 のノードは、ネットワークインタフェース を 2 つ持っていて(192.168.1.4 と 192.168.10.10)、このインタフェースは openMosix から両者とも見えます。 openMosix のバージョンは同じバージョンにすること、そしてクラスタに属す るノードの設定も同じにすること、いつも必ずこうしてください。 「setpe」ユーティリティを使って openMosix を各ノードで起動してください 。 setpe -w -f /etc/openmosix.map openMosix クラスタに属するすべてのノードで、このコマンド(後ほどこの HOWTO で説明します)を実行してください。 一方、ユーザ空間で動くツールがあるディレクトリに存在する「openmosix」ス クリプトを利用する手もあります。/etc/init.d ディレクトリにコピーし、 chmod 0755 してから root になって下記のコマンドを使ってください。 /etc/init.d/openmosix stop /etc/init.d/openmosix start /etc/init.d/openmosix restart これでインストールは終了です。クラスタが立ち上がり、動作しています :) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.3. oMFS まずカーネル設定にある CONFIG_MOSIX_FS オプションを有効にしなければいけ ません。現在のカーネルがこのオプションなしにコンパイルしてあるなら、オ プションを有効にしてから再コンパイルしてください。 クラスタに属する各ノードにあるファイルシステムの UID(ユーザ ID)と GID (グループ ID)は同じでなければいけません。これを実現するために、openldap を使うのもいいかもしれません。カーネルの CONFIG_MOSIX_DFSA オプションは オプションですが、DFSA を使うのならもちろん必要です。クラスタ上の oMFS をマウントするには、各ノードの /etc/fstab に項目を追加する必要がありま す。 DFSA を有効にするには、 mfs_mnt /mfs mfs dfsa=1 0 0 DFSA を無効にするには、 mfs_mnt /mfs mfs dfsa=0 0 0 fstab のエントリの書き方は、 [device_name] [mount_point] mfs defaults 0 0 です。各ノードのマウントポイントである /mfs をマウントすると、各ノード のファイルシステムは /mfs/[openMosix-Node_ID]/ ディレクトでアクセス可能 です。 シンボリックリンクを利用すれば、クラスタに属する全てのノードから同じデ ータをアクセスできるようになります。例えば node1 の /work は下記のよう になります。 on node2 : ln -s /mfs/1/work /work on node3 : ln -s /mfs/1/work /work on node3 : ln -s /mfs/1/work /work ... これで /work に対してどのノードからでも読み書きができます。 下記の特殊ファイルは oMFS からは外されています。 ・ /proc ディレクトリ ・ 通常ファイルやディレクトリではないスペシャルファイル。もしくは、シ ンボリックリンク(例えば /dev/hda1) リンクを張るには、 ln -s /mfs/1/mfs/1/usr もしくは、 ln -s /mfs/1/mfs/3/usr が正しいやり方です。 下記のシステムコールをサポートしています。マイグレートされたプロセス (このシステムコールをそのホーム(リモート)ノードで実行する)をホームノー ドに戻さなくても結構です。 read, readv, write, writev, readahead, lseek, llseek, open, creat, close, dup, dup2, fcntl/fcntl64, getdents, getdents64, old_readdir, fsync, fdatasync, chdir, fchdir, getcwd, stat, stat64, newstat, lstat, lstat64, newlstat, fstat, fstat64, newfstat, access, truncate, truncate64, ftruncate, ftruncate64, chmod, chown, chown16, lchown, lchown16, fchmod, fchown, fchown16, utime, utimes, symlink, readlink, mkdir, rmdir, link, unlink, rename DFSA でマウントしたファイルシステム上で、システムコールがうまく動かない ケースを挙げます。 ・ クラスタに属するノードで mfs や dfsa の設定が異なる。 ・ dup2 で 2 番目のファイルポインタが DFSA ではない場合。 ・ chdir や fchdir をして、親ディレクトリが DFSA でない場合。 ・ DFSA ファイルシステムではないパス名。 ・ システムコールを実行するプロセスがトレースされている。 ・ システムコールを実行するプロセスに対して、待ち状態のリクエストがあ る。 /mfs/1/、/mfs/2/ と続くファイルの他にも、さらにディレクトリが存在します 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table 4-1. その他のディレクトリ ┌────┬────────────────────────────┐ │/mfs/ │プロセスが動作している現在のノード。 │ │here │ │ ├────┼────────────────────────────┤ │/mfs/ │ホームノード。 │ │home │ │ ├────┼────────────────────────────┤ │/mfs/ │「create」システムコール(もしくは「open」で「O_CREAT」オ│ │magic │プション使う)が使った現在のノード。もしくは、oMFS マジッ│ │ │クファイルの作成に成功した最新のノード(テンポラリファイ │ │ │ルを作成してすぐ削除するのに便利)。 │ ├────┼────────────────────────────┤ │/mfs/ │プロセスが「execve」システムコールを最後に成功させたノー│ │lastexec│ド。 │ ├────┼────────────────────────────┤ │/mfs/ │プロセス自身もしくはその親プロセス(このプロセスを fork │ │selected│する前) が選択したノード。「/proc/self/selected」に番号 │ │ │を書く。 │ └────┴────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ マジックファイルは、すべて「プロセス単位」である点を忘れないでください 。つまりどのプロセスがオープンしているかによって、中身が変わります。 最後に openMFS についてではないのですが、このファイルシステム上で "df" を動かした時に、失敗するバージョンが存在することをお伝えします。そのシ ステムで突如 1.3 TB 使えるようになっても、あわてないでください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.4. Red Hat と openMosix RedHat 7.2、7.3、8.0 バージョンを動かしているなら、Mosix 系のインストー ルはこれまでで一番楽なはずです。該当する openMosix の RPM を sourceforge から選んでください。この RPM はコンパイル済みのカーネル(こ れを書いている時点は 2.4.20)で滞りなく動きます。PCMCIA カードがついたラ ップトップや SCSI ディスクが付いたサーバを含む何台かのマシンで既にテス ト済みです。 grub ユーザなら、カーネルの RPM は grub.conf も修正します 。したがってしなければいけないのは、RPM を 2 つインストールすることだけ です。 rpm -Uvh openmosix-kernel-2.4.20-openmosix2.i686.rpm openmosix-tools-0.2.4-1.i386.rpm それから /etc/openmosix.map を修正してください。問題が多々ありそうなの で、別の例を見て行きましょう。マシンを 3 台持っているとします。IP アド レスは、192.168.10.220、192.168.10.78、192.168.10.84 です。 openmosix.map が下記のようになっているでしょう。 [root@oscar0 root]# more /etc/openmosix.map # openMosix CONFIGURATION # =================== # # Each line should contain 3 fields, mapping IP addresses to openMosix node-numbers: # 1) first openMosix node-number in range. # 2) IP address of the above node (or node-name from /etc/hosts). # 3) number of nodes in this range. # # Example: 10 machines with IP 192.168.1.50 - 192.168.1.59 # 1 192.168.1.50 10 # # openMosix-# IP number-of-nodes # ============================ 1 192.168.10.220 1 2 192.168.10.78 1 3 192.168.10.84 1 新しくインストールしたカーネルを使って、各マシンをリブートしてください 。クラスタの動作にまた一歩近づきました。 RedHat 系の大部分ではインストールするのに当たり、追加で修正が必要になり ます。下記のエラーが出るケースがしばしばあるからです。 [root@inspon root]# /etc/init.d/openmosix start Initializing openMosix... setpe: the supplied table is well-formatted, but my IP address (127.0.0.1) is not there! このエラーは /etc/hosts に openmosix.map と同じ IP アドレスでホスト名が 載っていないことを意味しています。omosix1.localhost.org というマシンが ホストファイルに下記のように載っているかもしれません。 127.0.0.1 omosix1.localhost.org localhost /etc/hosts を下記のように修正すれば、openMosix がスタートする際にトラブ ルが少なくなります。 192.168.10.78 omosix1.localhost.org 127.0.0.1 localhost [root@inspon root]# /etc/init.d/openmosix start Initializing openMosix... [root@inspon root]# /etc/init.d/openmosix status This is openMosix node #2 Network protocol: 2 (AF_INET) openMosix range 1-1 begins at 192.168.10.220 openMosix range 2-2 begins at inspon.localhost.be openMosix range 3-3 begins at 192.168.10.84 Total configured: 3 できたてのパッチを適用したいなら、ソースの RPM を選んで rpmbuild を動か し、再構築してください。ソースがインストールされたら、初期設定ファイル を作成してください。そこからさらに openMosix へのパッチを適用することに なります。 新しい RedHat のバージョンが登場すれば、そのバージョンもサポートすると 思います。遠慮なく作者に連絡して、この情報の更新を手伝ってあげてくださ い。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5. Suse と openMosix RPM は RedHat ベースの環境で作成されていますが、RPM ベースの他のシステ ムでも大半は利用可能です。 しかし Suse は /sbin/mk_initrd を /sbin/mkinitrd へのリンクとしていて、 20-2 より前のリリースではうまくいきません。新しいバージョンでは修正され ているはずです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6. Debian と openMosix 「Debian 流」に openMosix をインストールするのは下記の通り簡単です。 まずパッケージをインターネットからダウンロードします。このドキュメント を書いている時点では 2.4.20 用が利用できなかったため、2.4.19 用のパッチ を使わなければいけませんでした。必要になる Debian の設定は下記の通りで す。 http://packages.debian.org/unstable/net/openmosix.html, http:// packages.debian.org/unstable/net/kernel-patch-openmosix.html, http:// packages.debian.org/unstable/misc/kernel-package.html, http:// packages.debian.org/unstable/devel/kernel-source-2.4.19.html. apt-get でもインストールできます ;) 次は、openMosix が利用可能なカーネルの作成方法です。 通常は下記の手順を踏みます。 cd /usr/src apt-get install kernel-source-2.4.19 kernel-package \ openmosix kernel-patch-openmosix tar vxjf kernel-source-2.4.19.tar.bz2 ln -s /usr/src/kernel-source-2.4.19 /usr/src/linux cd /usr/src/linux ../kernel-patches/i386/apply/openmosix make menuconfig make-kpkg kernel_image modules_image cd .. dpkg -i kernel-image-*-openmosix-*.deb この時点で /etc/openmosix.map を修正する必要があります。修正方法は、こ の HOWTO の「/etc/openmosix.map ファイルの書き方」にある手順にしたがっ てください。 openMosix 用のカーネルと設定済みの /etc/openmosix.map でリブートすれば 、マシンが互いにやり取りし、プロセスをマイグレートする openMosix クラス タが手に入るはずです。 下記のちょっとしたスクリプトを動かしてテストもできます。 awk 'BEGIN {for(i=0;i<10000;i++)for(j=0;j<10000;j++);}' しばらく「mosmon」を使って動作を観察していると、負荷がノード間に広がっ ていくのがわかるでしょう。 Debian マシンでも openMosixView を設定できます。 apt-get install openmosixview openMosixView を実際に利用するには、別ノードに root でログインしている ユーザが openMosixView を実行しないければいけません。ssh 経由でこの設定 をすることをお勧めします。ssh と ssh2 は実装が違う点に注意してください 。 identity.pub ファイルが用意されているなら、ssh は authorized_keys を チェックします。id_dsa.pub があるなら、authorized_keys2 が必要になりま す。 openMosixView のインタフェースは快適で、様々なマシンの負荷を表示し、手 動でプロセスをマイグレートする機能を備えています。 openMosixView についての詳しい話は、このドキュメントの別のところに書い てあります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.7. openMosix と Gentoo まず Gentoo Linux をインストールしてください。 Gentoo をインストールしたら、openMosix をインストールします。「emerge sys-apps/openmosix-user」と入力してください。こうすると /usr/src/linux に openMosix のカーネルソースとともに openMosix のユーザ空間ツールがイ ンストールされます。 現在 Michael Imhof 氏(別名 tantive)が、Gentoo の openMosix 最新版を管理 しています。 Daniel Robbins 氏は Gentoo Technologies, Inc の代表取締役兼 CEO で、 Gentoo Linux の作者でもあります。「はじめに」で openMosix についての彼 の論文を使わせていただきました。 【訳註:Gentoo については次の日本語サイトを参考にしてみてください。 Gentooを用いたopenMosixクラスター環境構築 】 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.8. その他のディストリビューション その他のディストリビューションでも、これまでの説明で openMosix をインス トールできるはずです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 5. 自動探索(Autodiscovery) 5.1. 簡単な設定 自動探索デーモン(omdiscd)は、openMosix クラスタを自動的に設定する手段を 用意し、/etc/mosix.map やそれと似た手動による設定を不要にしました。自動 探索は、その他のノードに対してマルチキャスト方式を使って、自分が openMosix のノードであることを通知します。この方法でノードを mosix クラ スタに追加するには、マシン上で omdiscd を起動しさえすれば OK です。そう すればそのノードがクラスタに参加します。 しかしちょっとした条件があります。openMosix クラスタはどれも、ネットワ ーク設定を正しく行う必要があります。主にルーティングです。デフォルトル ートがなければ、omdiscd に -i オプションをつけてインタフェースを指定し なければいけません。そうしないと、omdiscd は下記のようなエラーを出して exit します。 Aug 31 20:41:49 localhost omdiscd[1290]: Unable to determine address of default interface. This may happen because there is no default route configured. Without a default route, an interface must be: Network is unreachable Aug 31 20:41:49 localhost omdiscd[1290]: Unable to initialize network. Exiting. 正しいルーティングの例は下記のようになります。 [root@localhost log]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 10.0.0.99 0.0.0.0 UG 0 0 0 eth0 こうなっていれば、基本的にすべてうまくいきます。ここで omdiscd と起動してください。ログファイルを見れば、下記と似たようなログが見られ るはずです。 Sep 2 10:00:49 oscar0 kernel: openMosix configuration changed: This is openMosix #2780 (of 6 configured) Sep 2 10:00:49 oscar0 kernel: openMosix #2780 is at IP address 192.168.10.220 Sep 2 10:00:49 oscar0 kernel: openMosix #2638 is at IP address 192.168.10.78 Sep 2 10:00:49 oscar0 kernel: openMosix #2646 is at IP address 192.168.10.86 Sep 2 10:00:49 oscar0 kernel: openMosix #2627 is at IP address 192.168.10.67 Sep 2 10:00:49 oscar0 kernel: openMosix #2634 is at IP address 192.168.10.74 おめでとうございます。openMosix クラスタが動き出しました。 omdiscd には、その他にも利用できるオプションがあります。 omdiscd はデー モンとしても動かせますし(デフォルト)、omdiscd -n としてフォアグラウンド で出力をスクリーン(標準出力)に出しても動かせます。インタフェースを指定 するには -i オプションを使います。 では、その他のツールももう少し見てみましょう。まず showmap です。この ツールは自動的に新規作成された openMosix map を表示します。 [root@oscar0 root]# showmap My Node-Id: 0x0adc Base Node-Id Address Count ------------ ---------------- ----- 0x0adc 192.168.10.220 1 0x0a4e 192.168.10.78 1 0x0a56 192.168.10.86 1 0x0a43 192.168.10.67 1 0x0a4a 192.168.10.74 1 自動探索には、ここでは挙げていないその他の機能もあります。たとえば、ク ラスタが複数のネットワークにまたがっている場合、それをルーティングする 機構です。さらに詳しい情報については、ユーザ空間用ツールのソースツリー にある README と DESIGN ファイルを見てください。 つい最近の openMosix のバージョンでは、 rc スクリプトが自動設定を使う前 に /etc/openmosix.map やその他同様のファイルをチェックするようになって います。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.2. 自動探索のコンパイル ソースから自動探索をコンパイルするなら、openmosix.c をちょっと修正する 必要があります。はじめの行に、 #define ALPHA とありますが、これをコメントしてください。さらにログが取りたいなら、 main.c を下記のように編集してください。 log_set_debug(DEBUG_TRACE_ALL); (84 行あたり) これで動作します。 % make clean % make ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.3. 自動探索のトラブルシューティング 自動探索が思ったように機能しない場合もあります。例えば、ノードが他のノ ードからのマルチキャスト通信を捕捉しないケースです。この現象は PCMCIA イーサネットドライバで発生する場合があります。下記に述べる通り、インタ フェースをプロミスキャスモードやマルチキャストモードにするという解決方 法があります。 Aug 31 20:45:58 localhost kernel: openMosix configuration changed: This is openMosix #98 (of 1 configured) Aug 31 20:45:58 localhost kernel: openMosix #98 is at IP address 10.0.0.98Aug 31 20:45:58 localhost omdiscd[1627]: Notified kernel to activate openMosix Aug 31 20:45:58 localhost kernel: Received an unauthorized information request from 10.0.0.99 こうなっていたなら、ぜひ手動で NIC を強制的にプロミスキャスモードやマル チキャストモードにしてみてください。 ifconfig ethx promisc or ifconfig ethx multicast 下記のようにしても OK です。 tcpdump -i eth0 ether multicast ifconfig と同じ効果があり、かつ自身のパケットも見られるようになります。 Aug 31 22:14:43 inspon omdiscd[1422]: Simulated notification to activate openMosix [root@inspon root]# showmap My Node-Id: 0x0063 Base Node-Id Address Count ------------ ---------------- ----- 0x0063 10.0.0.99 1 [root@inspon root]# /etc/init.d/openmosix status OpenMosix is currently disabled [root@inspon root]# simulated というログを見つけたなら、恐らく #define ALPHA をコメントし忘れています。 自動探索は FireWire ベースのネットワークカードでうまく動作しないことも 付け加えておきます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 6. クラスタのインストール 6.1. クラスタのインストール この章では openMosix 自体のインストールは扱わず、openMosix を利用して複 数のマシンにインストールする方法について触れます。自動もしくは半自動で 多量にインストールします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2. DSH(Distributed Shell) これを書いている時点(2003 年 3 月)では、最新の DSH のリリースは http:// www.netfort.gr.jp/~dancer/software/downloads/ から取得できます。パッケ ージについての詳しい情報は、 http://www.netfort.gr.jp/~dancer/software/ dsh.html にあります。ダウンロード可能な最新バージョンは、0.23.6 です。 libdshconfig-0.20.8.tar.gz と dsh-0.23.5.tar.gz も必要です。 libdshconfig をインストールしてみましょう。 ./configure make make install dsh パッケージも同様なやり方をしてください。 いくつかのノードからなる小規模なクラスタを持っているとします。楽をする ためにコマンドは一度だけ入力し、それぞれのノードで実行させます。 $HOME /.dsh/group/clusterwname というファイルを作成して、クラスタの IP アドレ スをリストしなければいけません。 [root@inspon root]# cat .dsh/group/mosix 192.168.10.220 192.168.10.84 例としてそれぞれのマシンで ls を動かしてみます。mosix グループで実行す るために、-g を付けます(この方法で、別の設定を用いてグループのサブセッ トを作成できます)。 [root@inspon root]# dsh -r ssh -g mosix ls 192.168.10.84: anaconda-ks.cfg 192.168.10.84: id_rsa.pub 192.168.10.84: install.log 192.168.10.84: install.log.syslog 192.168.10.84: openmosix-kernel-2.4.17-openmosix1.i686.rpm 192.168.10.84: openmosix-tools-0.2.0-1.i386.rpm 192.168.10.220: anaconda-ks.cfg 192.168.10.220: id_dsa.pub 192.168.10.220: id_rsa.pub 192.168.10.220: openmosix-kernel-2.4.17-openmosix1.i686.rpm 192.168.10.220: openmosix-tools-0.2.0-1.i386.rpm 192.168.10.220: oscar-1.2.1rh72 192.168.10.220: oscar-1.2.1rh72.tar.gz どのマシンでもパスワードを要求されない点に注意してください。カウント間 で RSA 認証を済ませてあるからです。複数のパラメタをコマンドに渡したけれ ば、コマンドを引用符(")で囲む必要があります。 [root@inspon root]# dsh -r ssh -g mosix "uname -a" 192.168.10.84: Linux omosix2.office.be.stone-it.com 2.4.17-openmosix1 #1 Wed May 29 14:32:28 CEST 2002 i686 unknown 192.168.10.220: Linux oscar0 2.4.17-openmosix1 #1 Wed May 29 14:32:28 CEST 2002 i686 unknown もしくは、-c -- オプションを使ってください。同じ結果になります。 [root@inspon root]# dsh -r ssh -g mosix -c -- uname -a 192.168.10.220: Linux oscar0 2.4.17-openmosix1 #1 Wed May 29 14:32:28 CEST 2002 i686 unknown 192.168.10.84: Linux omosix2.office.be.stone-it.com 2.4.17-openmosix1 #1 Wed May 29 14:32:28 CEST 2002 i686 unknown III. openMosix の管理 Table of Contents 7. openMosix の管理 7.1. 管理の基本 7.2. 設定 7.3. ユーザ空間のツール 7.4. クラスタにマスクをかける 8. Mosix のチューニング 8.1. はじめに 8.2. 「マスター」ノードの作成 8.3. Mosix の最適化 8.4. Channel Bonding を簡単に 8.5. Updatedb 8.6. openMosix と FireWire 9. openMosixview 9.1. はじめに 9.2. openMosixview vs Mosixview 9.3. インストール 9.4. openMosixview の使用 9.5. openMosixprocs 9.6. openMosixcollector 9.7. openMosixanalyzer 9.8. openMosixmigmon 9.9. openmosixview FAQ 9.10. openMosixview + ssh: 10. openMosix 関連のその他のプログラム 10.1. はじめに 10.2. openMosixView 10.3. openMosixapplet 10.4. wmonload 10.5. openMosixWebView 11. 共通の問題 11.1. はじめに 11.2. プロセスがマイグレートしない 11.3. ノードが何も見えません 11.4. よく「No such process」というエラーがでます。 11.5. DFSA ? MFS ? 11.6. Python のトラブル 12. ヒントと TIPS 集 12.1. ロックされたプロセス 12.2. プロセスの選択 12.3. Java と openMosix 12.4. openMosix とハイパースレッディング 12.5. openMosix とファイアーウォール 13. インストール済み openMosixの(負荷)テスト 13.1. ちょっとしたテストスクリプト 13.2. Charles Nadeau 氏による Perl のプログラム 13.3. openMosix の負荷テスト ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 7. openMosix の管理 7.1. 管理の基本 openMosix は、プロセス・マイグレーションという長所を HPC アプリケーショ ンに加えます。管理者はユーザ空間で動くツールもしくは、/proc/hpc インタ フェースを使って openMosix クラスタの設定とチューニングが行えます。詳細 を説明していきましょう。 openMosix バージョン 2.4.16 までは、/proc インタフェースは /proc/mosix でした。openMosix バージョン 2.4.17 になって /proc/hpc となりました。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.2. 設定 /proc/hpc/admin ディレクトリに並んだファイルの値は、クラスタの現在の設 定を表しています。管理者はこの値自身をこれらのファイルに書き込むことで 、動作中に設定を変更できます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table 7-1. /proc/hpc パラメタの変更 ┌──────────┬──────────────────────┐ │echo 1 > /proc/hpc/ │リモートからのプロセスをブロックする。 │ │admin/block │ │ ├──────────┼──────────────────────┤ │echo 1 > /proc/hpc/ │マイグレートしているプロセスをすべてホームノ│ │admin/bring │ードに持ってくる。 │ └──────────┴──────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table 7-2. /proc/hpc/admin/ ┌─────┬───────┬───────────────────┐ │(binary │config │メイン設定ファイル(setpe ユーティリテ │ │files) │ │ィが作成) │ ├─────┼───────┼───────────────────┤ │(flat │block │リモートからのプロセスの許可・禁止 │ │files) │ │ │ ├─────┼───────┼───────────────────┤ │ │bring │マイグレート済みのプロセスすべてをホー│ │ │ │ムノードに持ってくる │ ├─────┼───────┼───────────────────┤ │ │dfsalinks │現状のシンボリック DFSA リンク │ ├─────┼───────┼───────────────────┤ │ │expel │ゲストプロセスをホームノードに送る │ ├─────┼───────┼───────────────────┤ │ │gateways │ゲートウェイの最大数 │ ├─────┼───────┼───────────────────┤ │ │lstay │ローカルプロセスはマイグレートしない │ ├─────┼───────┼───────────────────┤ │ │mospe │openMosix のノード ID が入る │ ├─────┼───────┼───────────────────┤ │ │nomfs │MFS の有効・無効 │ ├─────┼───────┼───────────────────┤ │ │overheads │チューニング用 │ ├─────┼───────┼───────────────────┤ │ │quiet │負荷分散情報の収集を停止 │ ├─────┼───────┼───────────────────┤ │ │decay-interval│負荷分散情報の収集の間隔 │ ├─────┼───────┼───────────────────┤ │ │slow-decay │デフォルトは 975 │ ├─────┼───────┼───────────────────┤ │ │fast-decay │デフォルトは 926 │ ├─────┼───────┼───────────────────┤ │ │speed │Pentium III/1GHz との相対速度 │ ├─────┼───────┼───────────────────┤ │ │stay │自動マイグレーションの有効・無効 │ └─────┴───────┴───────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table 7-3. /proc/hpc/decay/ にあるファイルに 1 を書き込む ┌───┬─────────────────────────┐ │clear │分散統計データのクリア │ ├───┼─────────────────────────┤ │cpujob│openMosix にプロセスが CPU を掴んでいることを通知 │ ├───┼─────────────────────────┤ │iojob │openMosix にプロセスが IO を掴んでいることを通知 │ ├───┼─────────────────────────┤ │slow │openMosix に統計を取る間隔を遅くするように通知 │ ├───┼─────────────────────────┤ │fast │openMosix に統計を取る間隔を早くするように通知 │ └───┴─────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table 7-4. その他のノードについての情報 ┌─────────────────┬───────────────┐ │/proc/hpc/nodes/[openMosix_ID]/ │そのノードが持っている CPU の │ │CPUs │数 │ ├─────────────────┼───────────────┤ │/proc/hpc/nodes/[openMosix_ID]/ │このノードの opeMosix の負荷 │ │load │ │ ├─────────────────┼───────────────┤ │/proc/hpc/nodes/[openMosix_ID]/mem│openMosix が使用可能なメモリ │ ├─────────────────┼───────────────┤ │/proc/hpc/nodes/[openMosix_ID]/ │Linux が使用可能なメモリ │ │rmem │ │ ├─────────────────┼───────────────┤ │/proc/hpc/nodes/[openMosix_ID]/ │Pentium III/1GHz との相対速度 │ │speed │ │ ├─────────────────┼───────────────┤ │/proc/hpc/nodes/[openMosix_ID]/ │ノードの状態 │ │status │ │ ├─────────────────┼───────────────┤ │/proc/hpc/nodes/[openMosix_ID]/ │利用可能メモリ │ │tmem │ │ ├─────────────────┼───────────────┤ │/proc/hpc/nodes/[openMosix_ID]/ │ノードの稼働時間 │ │util │ │ └─────────────────┴───────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table 7-5. ローカルプロセスについての追加情報 ┌────────────┬────────────────────┐ │/proc/[PID]/cantmove │プロセスがマイグレートしない理由 │ ├────────────┼────────────────────┤ │/proc/[PID]/goto │プロセスがマイグレートするはずのノード │ ├────────────┼────────────────────┤ │/proc/[PID]/lock │プロセスがホームノードにロックされている│ │ │か │ ├────────────┼────────────────────┤ │/proc/[PID]/nmigs │プロセスがマイグレートした回数 │ ├────────────┼────────────────────┤ │/proc/[PID]/where │現在プロセスが演算をしているところ │ ├────────────┼────────────────────┤ │/proc/[PID]/migrate │リモートプロセスと同じ │ ├────────────┼────────────────────┤ │/proc/hpc/remote/from │プロセスのホームノード │ ├────────────┼────────────────────┤ │/proc/hpc/remote/ │プロセスについての追加情報 │ │identity │ │ ├────────────┼────────────────────┤ │/proc/hpc/remote/statm │プロセスのメモリ統計データ │ ├────────────┼────────────────────┤ │/proc/hpc/remote/stats │プロセスの CPU 統計データ │ └────────────┴────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.3. ユーザ空間のツール 下記のツールを使うと、openMosix クラスタの管理が楽になります。 migrate :プロセスにマイグレートするように指示を出します。 書式: migrate [PID] [openMosix_ID] mon :ncurses ベースの端末タイプのモニター。棒グラフを表示して 現在の状況についての情報を表示します。 mosctl :は、openMosix のメインの設定ユーティリティです。 書式: mosctl [stay|nostay] [lstay|nolstay] [block|noblock] [quiet|noquiet] [nomfs|mfs] [expel|bring] [gettune|getyard|getdecay] mosctl whois [openMosix_ID|IP-address|hostname] mosctl [getload|getspeed|status|isup|getmem|getfree|getutil] [openMosix_ID] mosctl setyard [Processor-Type|openMosix_ID||this] mosctl setspeed interger-value mosctl setdecay interval [slow fast] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table 7-6. 詳細 ┌────┬────────────────────────────┐ │stay │自動的にプロセスをマイグレートしません。 │ ├────┼────────────────────────────┤ │nostay │自動的にプロセスをマイグレートします(デフォルト)。 │ ├────┼────────────────────────────┤ │lstay │ローカルプロセスのままにしておきます。 │ ├────┼────────────────────────────┤ │nolstay │ローカルプロセスをマイグレートします。 │ ├────┼────────────────────────────┤ │block │ゲストプロセスの受け入れを拒否します。 │ ├────┼────────────────────────────┤ │noblock │ゲストプロセスを受け入れます。 │ ├────┼────────────────────────────┤ │quiet │負荷分散情報の収集を無効にします。 │ ├────┼────────────────────────────┤ │noquiet │負荷分散情報の収集を有効にします。 │ ├────┼────────────────────────────┤ │nomfs │MFS を無効にします。 │ ├────┼────────────────────────────┤ │mfs │MFS を有効にします。 │ ├────┼────────────────────────────┤ │expel │ゲストプロセスを送り出します。 │ ├────┼────────────────────────────┤ │bring │マイグレートしたプロセスをすべてホームノードに持ってきま│ │ │す。 │ ├────┼────────────────────────────┤ │gettune │現状のオーバーヘッドパラメタを表示します。 │ ├────┼────────────────────────────┤ │getyard │現在の基準を表示します。 │ ├────┼────────────────────────────┤ │getdecay│現在の分散パラメタを表示します。 │ ├────┼────────────────────────────┤ │whois │クラスタの openMosix ID、IP アドレス、ホスト名 │ ├────┼────────────────────────────┤ │getload │(openMosix)の負荷を表示します。 │ ├────┼────────────────────────────┤ │getspeed│(openMosix)の速度を表示します。 │ ├────┼────────────────────────────┤ │status │現在の状況と設定を表示します。 │ ├────┼────────────────────────────┤ │isup │ノードの稼動・停止(openMosix の ping のようなもの) │ ├────┼────────────────────────────┤ │getmem │論理メモリの空きを表示します。 │ ├────┼────────────────────────────┤ │getfree │物理メモリの空きを表示します。 │ ├────┼────────────────────────────┤ │getutil │稼働率を表示します。 │ ├────┼────────────────────────────┤ │setyard │新しい基準値を設定します。 │ ├────┼────────────────────────────┤ │setspeed│新しい(openMosix)の速度を設定します。 │ ├────┼────────────────────────────┤ │setdecay│分散間隔を設定します。 │ └────┴────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ mosrun 選択したノードで設定コマンドを動かします。 書式: mosrun [-h|openMosix_ID| list_of_openMosix_IDs] command [arguments] mosrun コマンドは、コマンドラインのオプションをさらにいくつか付けて実行 できます。簡単に実行できるように、設定済みの起動スクリプトがあります。 設定用途別に (openMosix)ジョブを実行します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table 7-7. mosrun の追加オプション ┌─────┬───────────────────────────┐ │nomig │マイグレートして欲しくないプロセスのコマンドを実行しま│ │ │す。 │ ├─────┼───────────────────────────┤ │runhome │ホームノードにロックされるコマンドを実行します。 │ ├─────┼───────────────────────────┤ │runon │あるノードにすぐマイグレートし、そこにロックされるコマ│ │ │ンドを実行します。 │ ├─────┼───────────────────────────┤ │cpujob │openMosix クラスタにプロセスが CPU 固定であることを通 │ │ │知します。 │ ├─────┼───────────────────────────┤ │iojob │openMosix クラスタにプロセスが IO 固定であることを伝え│ │ │ます。 │ ├─────┼───────────────────────────┤ │nodecay │コマンドを実行し、クラスタに負荷分散の状態をリフレッシ│ │ │ュするように通知します。 │ ├─────┼───────────────────────────┤ │slowdecay │分散間隔を遅くしてコマンドを実行し、負荷分散の状態を収│ │ │集します。 │ ├─────┼───────────────────────────┤ │fastdecay │分散間隔を速くしてコマンドを実行し、負荷分散の状態を収│ │ │集します。 │ └─────┴───────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ setpe マニュアルでノードを設定するユーティリティ。 書式: setpe -w -f [hpc_map] setpe -r [-f [hpc_map]] setpe -off -w ファイルから openMosix の設定ファイルを読み込みます(通常は /etc/hpc.map)。 -r 現在の openMosix の設定をファイルに書き込みます(通常は /etc/hpc.map)。 -off 現状の openMosix 設定を無効にすします。 tune openMosix の調整と最適化用ユーティリティ。 (詳しい情報は、tune の man を見てください) /proc インタフェースとコマンドラインベースの openMosix ユーティリティ (/proc インタフェースを利用する)に加えて、パッチを当てた「ps」と「top」 が利用できます(「mps」と「mtop」と呼ばれています)。これは、openMosix の ノード ID が列に加わります。特定のプロセスが現在どこで演算されているの か見つけるのに便利です。 コマンドラインで使うツールを手短に説明してきましたが、openMosixview も 見ておきましょう。よく使う管理作業向けに GUI を利用したツールです。この 後の章で論じるつもりです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.4. クラスタにマスクをかける (Moshe Bar 氏著) openMosix にある機能を求める人々がいます。その機能とは、あるプロセスを 特定のノードに処理させること、そしてその子プロセスをマイグレートさせた り、ノードによってはそれができないようにしたりする機能です。 Simone Ettore 氏は CVS に新しいパッチをコミットして、まさにこの機能を可 能にしました。 どのように動くかここで挙げてみます。 ・ /proc/[pid]/migfilter はマイグレーションのフィルタを有効・無効にし ます。 ・ /proc/[pid]/mignodes はノードのビット形式のリストです。あるノードの ビット位置は 2^(PE-1) で計算されます。PE はノード番号です。 ・ /proc/[pid]/migpolicy はフィルタの規則です。 0=DENY は mignodes の 対応するビットが 1 でなければ、プロセスはすべてのノードでマイグレー ト可能です。 1=ALLOW は mignodes の対応するビットが 1 であるすべて のノードでプロセスがマイグレート可能です。 まもなくシンプルなユーザ空間のツールをリリースします。そのツールを使え ばノードにマスクがかけられます。しかし openMosix 2.4.20-3 としてリリー スされる前に、すぐにでも先の方法を試してみてください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 8. Mosix のチューニング 8.1. はじめに これからの説明には、以前の Mosix HOWTO からの引用部分がまだ含まれていま す。時と共に openMosix の該当部分へと置き換わっていきますが、それでもま だ同じ部分があるでしょう。場合によりけりですが。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.2. 「マスター」ノードの作成 openMosix のアーキテクチャではマスターノードを必要としません。しかしプ ロセスを立ち上げるところとして、ヘッドノードがあった方が良いかもしれま せんし、ユーザがクラスタにログインするところとして、マルチホームノード が必要になるかもしれません。プロセスがマイグレートするようにマシンを設 定する必要があります。 ノードをだまして、周りのノードの中で最も遅いノードと思わせなければいけ ません。そうすると、すべてのプロセスはより速いノードにマイグレートする ことになります。 「遅く」するには下記のようにします。 mosctl setspeed [n] n は他のノードの速度よりも小さくします。そうするとプロセスが素早く移動 もしくはマイグレートします。ノードの速度は下記でわかります。 mosctl getspeed ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.3. Mosix の最適化 編集上のコメント: openMosix のバージョンをチェックすること。 root で普通の端末からログインしてください。まず、 setpe -r と入力してください。これでうまくいけば、/etc/mosix.map がリストされます 。うまく行かないなら、 setpe -w -f /etc/mosix.map としてみてください。ノードを設定するには、次のように入力してください。 cat /proc/$$/lock これで子プロセスがノードでロックされているのか(1)、マイグレートしている のか(0)ががわかります。何らかの理由でプロセスがロックされていれば、下記 のようにして変更できます。 echo 0 > /proc/$$/lock 問題を解決するまで。設定方法はすべて復唱して、次のコンピュータに備えて ください。プログラムの tune_kernel と prep_tune は Mosix が個々のノード を調整するのに使いますが、SuSE ディストリビューションでは動作しません。 しかしどうにかできます。まずチューニングしたいコンピュータと Mosix がイ ンストールしてある別のコンピュータをシングルユーザモードに落とします。 下記を root になって入力してください。 init 1 ネットワーク上にあるその他すべてのコンピュータをできるだけ落としてくだ さい。どちらのマシンでも下記のコマンドを動かしてください。 /etc/init.d/network start /etc/init.d/mosix start echo 1 > /proc/mosix/admin/quiet こうすると prep_tune と tune_kernel の最初の部分をだませます。PCMCIA タ イプのネットワークカードが付いたラップトップなら、下記のようにしなけれ ばいけません。 /etc/init.d/pcmcia start これは「/etc/init.d/network start」の代わりです。チューニングしたいコン ピュータ上で、tune_kernel を動かして下記の手続きを踏んでください。マシ ンにもよりますが、これには時間がかかります。犬を飼っているなら、いつも の長い長い散歩と同じぐらいかかります。 tune_kernel は「pg」というテスト 目的のプログラムを /root に作成します。これは無視してください。チューニ ングが終わったら、/tmp/overheads の中身を /etc/overheads にコピーしてく ださい(カーネルを再構築してください)。各コンピュータでチューニングの手 続きを繰り返してください。そしてリブートして、Mosix を使ってください。 友人に新しいクラスタを自慢することもお忘れなく。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.4. Channel Bonding を簡単に Contributed by Evan Hisey Channel bonding はきわめて簡単です。この課題についてのドキュメントがな いことがそれを表しています。bonded network はアプリケーションにとっては 通常のネットワークに見えます。サブネット上のマシンすべては、同じ手段で 統合されていなければいけません。Bonded and non-bonded なマシンは、実際 はお互いうまく通信ができません。 Channel bonding は物理的なサブネットを最低限必要としますが、さらに増や すことが可能です(私は tri-bonded クラスタを持っています)。bonding を有 効にするには Channel Bonding のコードをカーネルに組み込むもしくはモジュ ール(bonding.o)にする必要があります。2.4.x ではカーネルの標準オプション になっています。ネットワークカードの設定は普通にしてかまいませんが、「 ifconfig」を使って bond する最初のカードを初期化する必要があります。「 ifenslave」は bonded 接続を行う残りのカードを初期化するコマンドです。「 ifenslave」は、 linux/Documentation/network/ ディレクトリにあります。こ れは .c ファイルとしてコンパイルする必要があります。基本的な使用方法は 、 ifenslave ... です。Channel bonded ネットワークは、channel bonding をサポートして いるルータもしくはブリッジ経由で通常のネットワークに接続できます (私の 場合はヘッドノードで追加のネットワークカードとポートフォワーディングを 使っています)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.5. Updatedb updatedb と mfs を組み合わせると問題が発生する恐れがあります。したがっ て、 PRUNEFPATHS に /mfs を追加するか、/etc/updatedb.conf の PRUNEFS に mfs を追加して、updatedb がこのマウントポイントの索引付けをしないように してください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6. openMosix と FireWire openMosix は他のタイプのネットワークデバイスを使って性能を稼いでいます 。 openMosix and FireWire に説明があります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 9. openMosixview 9.1. はじめに openMosixview は Mosixview の次バージョンで、一から書き直してあります 。 openMosix クラスタ向けのクラスタ管理用の GUI を持ち、誰でも好きにダ ウンロードして使用できます(自己責任で)。 openMosixview には 5 つの便利 なアプリケーションがあり、openMosix クラスタを監視したり、管理したりで きます。 openMosixview メインの監視・管理アプリケーション。 openMosixprocs プロセス管理するプロセス・ボックス。 openMosixcollector クラスタとノードの情報をロギングする情報収集デーモン 。 openMosixanalyzer openMosixcollector が収集したデータを解析する。 openMosixhistory クラスタのプロセス履歴。 メインアプリケーションの画面からすべてが操作可能になっています。マウ スを何回かクリックすれば、主要な openMosix のコマンドが実行できます。拡 張実行ダイアログ(advanced execution dialog)を使えば、クラスタ上でアプリ ケーションが楽に起動できます。個々のノードの「Priority-sliders」は、手 動もしくは自動で負荷分散を容易にします。 openMosixview は、openMosix の 自動探索に対応していて、openMosix の /proc インタフェースから設定情報を すべて収集しています。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.2. openMosixview vs Mosixview openMosixview は openMosix クラスタにターゲットを絞って設計してあります 。 Mosixview の Web サイト(とそのミラー)は今後もそのままですが、今後の 開発はすべて openMosixview で継続します。新しいドメインは www.openmosixview.com です。 質問、この先欲しい機能、インストールに当たっての問題、コメント、情報交 換等があれば、遠慮なく Matt Rechenburg にメールするか、openMosix/ Mosixview メーリングリストに参加して、メールを投げてください。 変更(Mosixview 1.1 に対して) Mosixview をスクラッチから書き直したのが 、openMosixview です。機能は同じですが、ソースコードのあらゆる部分を根 本的に変更したのが openMosixview です。クラスタの構成を何度も変更しなが ら(openMosix の自動探索が必須です)テストしてあります。バグだらけの部分 は削除され、書き直されています。より安定して動いています (そのはずです ;)。 openMosix の自動探索に対応している。 /etc/mosix.map もしくは cluster-map ファイルをもう使用していない。 バグだらけの map-file パーサを削除。 C++ インタフェースの全体に対する部品、機能、メソッドをすべて書き直し。 ディスプレイにあったちょっとしたバグを修正。 MosixMem+Load を openMosixanalyzer に置き換え。 さらに多くの変更。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3. インストール 必要条件 QT root の権限 クラスタノードすべてに対してパスワードなしで rlogin と rsh (もしくは ssh)ができ、openMosix のユーザ空間ツールである mosctl、migrate、 runon 、iojob、cpujob 等が使える(www.openmosix.org サイトからダウンロードして ください)。 RH 8.0 では、次の RPM が最低限必要となります。qt-3.0.5-17、libmng-1.0.4 、 XFree86-Mesa-libGLU-4.2.0、glut-3.7 等です。 openMosixview についてのドキュメント。どのパッケージにも HTML 形式で openMosixview のドキュメントがすべて入っています。openMosixview をイン ストールするディレクトリには、ドキュメントの最初の頁があります。 openmosixview/openmosixview/docs/en/index.html がそれです。 RPM パッケージをインストールするディレクトリは /usr/local/ openmosixview です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3.1. RPM 形式のディストリビューションをインストールする openMosixview の最新の RPM パッケージをダウンロードしてください。ダウ ンロードしたら、下記のように実行してください。 rpm -i openmosixview-1.4.rpm これでバイナリはすべて /usr/bin にインストールされます。アンインストー ルするには、下記のようにしてください。 rpm -e openmosixview ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3.2. ソース形式のディストリビューションでのインストール openMosixview の最新版をダウンロードして、ソースを unzip+untar します 。 tarball を /usr/local 等にコピーしてください。 gunzip openmosixview-1.4.tar.gz tar -xvf openmosixview-1.4.tar ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3.3. 自動設定スクリプト openMosixview のディレクトリに cd して、下記を実行してください。 ./setup [your_qt_2.3.x_installation_directory] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3.4. 自分でコンパイルする QT ディストリビューションに合うように QTDIR 変数を設定してください。 export QTDIR=/usr/lib/qt-2.3.0 (for bash) or setenv QTDIR /usr/lib/qt-2.3.0 (for csh) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3.5. ヒント集 (openMosixview や Mosixview を色々な Linux ディストリビューションでコン パイルしてくれたテスターからの情報です。あらためて感謝します) ln -s /usr/local/qt-2.3.0 /usr/lib/qt としたら、QTDIR 環境変数に下記を設定しなければいけません。 export QTDIR=/usr/lib/qt (for bash) もしくは、 setenv QTDIR /usr/lib/qt (for csh) こうすれば後は問題なく行きます。 ./configure make 同様なことをサブディレクトリである openmosixcollector、 openmosixanalyzer、 openmosixhistory、openmosixviewprocs で行ってくださ い。バイナリはすべて /usr/bin にコピーしてください。 cp openmosixview/openmosixview /usr/bin cp openmosixviewproc/openmosixviewprocs/mosixviewprocs /usr/bin cp openmosixcollector/openmosixcollector/openmosixcollector /usr/bin cp openmosixanalyzer/openmosixanalyzer/openmosixanalyzer /usr/bin cp openmosixhistory/openmosixhistory/openmosixhistory /usr/bin そして openmosixcollector の初期化スクリプトを初期化ディレクトリに入れ てください。例えば下記のように。 cp openmosixcollector/openmosixcollector.init /etc/init.d/openmosixcollector or cp openmosixcollector/openmosixcollector.init /etc/rc.d/init.d/openmosixcollector openmosixprocs バイナリをクラスタの各ノードに /usr/bin/openmosixprocs としてコピーしてください。 rcp openmosixprocs/openmosixprocs your_node:/usr/bin/openmosixprocs これで mosixview が実行できます。 openmosixview ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4. openMosixview の使用 9.4.1. メインのアプリケーション これがメインのアプリケーションのウインドウです。機能については下記で説 明します。 [omview1] openMosixview には一列にランプ、ボタン、スライダー、電卓書体の数値、2 つのプログレスバー、クラスタの各メンバーを表すラベルが並んでいます。左 側のライトは、openMosix の ID とクラスタノードの状態を表しています。赤 はダウン、緑が利用可能です。 あるノードの IP アドレスを表すボタンをクリックすると、設定画面がポップ アップします。頻繁に使用する「mosctl」コマンドを実行するボタンを表示し ています。 (この HOWTO の後半で説明します) 「速度スライダー」を使って、 openMosix の速度を各ホストに対して設定できます。現在の速度は電卓書体の 数値で表示されています。 これらの値をいじると、クラスタ全体の負荷分散を調整できます。 openMosix クラスタにおけるプロセスは、速度が遅いノードよりも速いノードへとすぐに マイグレートします。これは設定可能な物理的な速度ではなく、openMosix が ノードに対して「判断」した速度になります。例えば、クラスタ全体の中で遅 いと設定したノードで CPU を集中的に利用するジョブを実行すると、実行する のに適したプロセッサを検索し、すぐにマイグレートします。 真ん中にあるプログレスバーは、各クラスタメンバーの負荷の全体像を表示し ています。パーセント表示をしていますので、/proc/hpc/nodes/x/load (openMosix による)に書き込まれている負荷をそのまま表していませんが、全 体像は掴めるはずです。 次のプログレスバーはノードが使っているメモリです。ホスト上の利用可能な メモリの内、現状どれだけ使用済みかをパーセント表示しています(右に表示し てあるラベルが利用可能なメモリです)。クラスタにいくつの CPU があるのか は、右側のボックスに表示してあります。メインウインドウの最初の行には、 「全ノード用」設定ボタンがあります。このオプションを使えば、ノードすべ てに対して同じ設定が可能になります。 どのくらい負荷分散がうまく行っているのかは、上側の左のプログレスバーに 表示してあります。 100% が良好で、すべてのノードがほとんど同じ負荷にな っていることを表します。 openMosixcollector を管理し、openMosixanalyzer を開くには、収集 (collector)と分析(analyzer)メニューを使ってください。openMosixview アプ リケーションの一部であるこの 2 つを使えば、長期間に渡ってクラスタ全体を 見ていくのに役立ちます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.2. 設定ウインドウ このダイアログは「cluster-node」ボタンをクリックするとポップアップしま す。 [omview2] 各ホストの openMosix の設定が簡単に変更できるようになりました。すべて のコマンドは「rsh」か「ssh」経由でリモートホストで実行されるので (ロー カルノード上であっても)、「root」が「rsh」(もしくは「ssh」)をパスワード を求めるプロンプトを表示することなく実行できなければいけません (この点 については、Beowulf のドキュメントに分かりやすく書いてあります。またど のように設定するかについては、この頁にあるその HOWTO に書いてあります) 。 コマンドは下記の通り。 openMosixprocs がリモートのクラスタノードに正しくインストールしてあれば 、「remote proc-box」ボタンをクリックして openMosixprocs(proc-box) をリ モートから開いてください。 xhost とホスト名を設定すれば、ディスプレイを ローカルホストに向けられます。クライアントは「rsh」もしくは「ssh」を使 ってリモートで実行されます (openmosixprocs のバイナリは、クラスタに属す る各ホストにコピーしなければいけません(例えば /usr/lbin に)。 openMosixprocs は、プログラム管理用の process-box にあります。プログラ ムを起動して、リモートノード上でローカルに実行するのに便利です。この HOWTO の後半で説明します。 リモートのワークステーションからクラスタにログインしているなら、ローカ ルのホスト名を「remote proc-box」下の edit-box に入力してください。そう すれば、自分のワークステーション上に openMosixprocs が表示されます。ロ グインしてるクラスタメンバー上ではなく(おそらくワークステーション上で「 xhost +clusternode」設定する必要があります)。 combo-box には履歴情報が ありますので、ホスト名は一度だけ書けば大丈夫です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.3. 上級向けの実行方法 ジョブをクラスタ上で開始したいなら、「advanced execution」ダイアログが 便利です。 [omview3] プログラムを選んで、「run-prog」ボタンを使って開始してください(ファイ ルをオープンするアイコン)。ジョブがどのような方法で、何処で開始させるの かは execution ダイアログで指定できます。説明が必要なオプションがいくつ かあります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.4. コマンドライン ウインドウ最上部の行編集ウィジットに、コマンドラインへの引数を追加指定 できます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table 9-1. 起動方法 ┌─────┬───────────────────────────┐ │-no │マイグレートしたくないジョブをローカルで開始。 │ │migration │ │ ├─────┼───────────────────────────┤ │-run home │ローカルでジョブを開始。 │ ├─────┼───────────────────────────┤ │-run on │「host-chooser」で指定したノードでジョブを開始。 │ ├─────┼───────────────────────────┤ │-cpu job │(host-chooser で指定した)ノードで演算中心のジョブを開 │ │ │始。 │ ├─────┼───────────────────────────┤ │-io job │(host-chooser で指定した)ノードで IO 中心のジョブを開 │ │ │始。 │ ├─────┼───────────────────────────┤ │-no decay │(host-chooser で指定した)ノードで分散しないジョブを開 │ │ │始。 │ ├─────┼───────────────────────────┤ │-slow │(host-chooser で指定した)ノードでゆっくりと分散するジ │ │decay │ョブを開始。 │ ├─────┼───────────────────────────┤ │-fast │(host-chooser で指定した)ノードで素早く分散するジョブ │ │decay │を開始。 │ ├─────┼───────────────────────────┤ │-parallel │(special host-chooser で指定した)ジョブを複数もしくは │ │ │すべてのノードで開始。 │ └─────┴───────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.5. ホストの選択 ローカルではないジョブを動かすには、dial ウイジットでホストを選択するだ けです。ノードの openMosix の ID は電卓書体の数値で表示されています。ク リックをすればジョブがはじまります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.6. 同時にホストを選択 spin ボックスを 2 つ使って、最初と最後のノードを設定できます。そうすれ ば、コマンドは最初と最後のノード間すべてで実行されます。このオプション は指定を逆にしても大丈夫です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.5. openMosixprocs 9.5.1. はじめに この process ボックスは、クラスタでプロセスを走らせ、それを管理するの に非常に便利です。 [omview4] 各クラスタノードにインストールする必要があります。 プロセスリストは何処で何が動いているのか全体を把握できます。二番目のカ ラムは、各プロセスの openMosix のノード ID です。 0 はローカルを指し、0 以外の値はリモートのノードを表します。マイグレートしたプロセスは緑のア イコンで印が付き、移動できないプロセスには錠印が付きます。 一覧にあるプロセスをダブルクリックすると、migrator-window がポップアッ プしてマイグレートするプロセスなどを管理できます。また、リモートプロセ スをマイグレートさせたり、そのプロセスに SIGSTOP や SIGCONT を送ったり 、「renice」させたりできます。 「manage procs from remote」ボタンをクリックすると新しいウインドウ (remote-procs ウインドウ)が出て、現在このホストにマイグレートされたプロ セスを表示します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.5.2. マイグレーター・ウインドウ(migrator-window) このダイアログは、プロセス・ボックスにあるプロセスがクリックされるとポ ップアップします。 [omview5] マイグレーター・ウインドウは、openMosix クラスタにあるすべてのノードを 表示します。このウインドウは 1 つのプロセスの管理用です(状態の情報を追 加して)。プロセス一覧からあるホストをダブルクリックすると、プロセスがこ のホストにマイグレートします。しばらくすると、管理されているプロセス・ アイコンが緑になります。これはリモートで動作していることを表します。 「home」ボタンはプロセスをホームノードに送ります。「best」ボタンを使う と、プロセスはクラスタ中で利用可能な最適のノードに送られます。マイグレ ーションは、負荷、速度、CPU、そして openMosix がそれぞれのノードを「判 断」した結果によって左右されます。最も CPU があり、最速なホストもしくは そのどちらかを持つホストにマイグレートするかもしれません。「kill」ボタ ンを使うと、プロセスをすぐに kill できます。 プログラムを一時停止するには「SIGSTOP」ボタンをクリックしてください。 継続するなら「SIGCONT」ボタンをクリックしてください。下部の renice スラ イダーを使うと、現在管理しているプロセスを renice できます。 (-20 はと ても速く、0 は通常、20 はとても遅くなります) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.5.3. リモートからプロセスを管理する このダイアログは process ボックスの真下にある「manage procs from remote」ボタンをクリックするとポップアップします。 [omview6] そのプログラムはクラスタに属する他のノードから来たもので、 openMosixview が動いているホスト上で現在演算を行っています。 migrator ウインドウにある 2 つのボタンと同様に、「goto home node」ボタンを使えば そのプロセスはホームノードに送られ、「goto best node」ボタンを使えば、 利用するのに最適なノードに送られます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.6. openMosixcollector openMosixcollector はクラスタメンバーの 1 つで動かした方が良いデーモン です。各ノードの openMosix の負荷を /tmp/openmosixcollector/* ディレク トリにログ取りします。この履歴ログファイルを openMosixanalyzer(後で説明 します)が解析し、クラスタの負荷、メモリ、プロセスの概況を随時表示します 。メインのログファイルは /tmp/openmosixcollector/cluster です。このディ レクトリにはデータが書き込まれているファイルがもっとあります。 起動時に openMosixcollector はその PID(プロセス ID)を /var/run/ openMosixcollector.pid に書き込みます。 openMosixcollector デーモンは 12 時間おきに再起動し、現在の履歴を /tmp /openmosixcollector[date]/* に保存します。このバックアップは自動的に行 われますが、手動でも開始できます。 履歴にチェックポイントを書き込むオプションがあります。 openMosixanalyzer でログファイルの履歴を分析すると、チェックポイントが 図上に青い縦線で印が付けられています。例えば、クラスタであるジョブを開 始した時にチェックポイントを設定し、別のジョブを最後に設定すると... これが、コマンドラインの引数で可能なものの説明になります。 openmosixcollector -d //デーモンとして collector を開始。 openmosixcollector -k //collector を停止。 openmosixcollector -n //チェックポイントに履歴を書く。 openmosixcollector -r //現状の履歴を保存し新しい履歴を開始。 openmosixcollector //簡単なヘルプを表示。 このデーモンは初期化スクリプトの /etc/init.d もしくは /etc/rc.d/init.d で起動できます。シンボリックリンクを適当なランレベルに張って自動的に起 動するようにしてください。 作成済みのログファイルの解析方法は、openMosixanalyzer の章に解説してあ ります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7. openMosixanalyzer 9.7.1. 負荷について この図は負荷の概況を openMosixanalyzer で表示したものです(クリックする と大きくなります) [omview7] openMosixanalyzer を使えば、openMosix クラスタの履歴を継続してとること ができます。履歴ログファイルは openMosixcollector が作成し、図で表示さ れます。つまりクラスタで何が起こり、起こっているのかを長時間に渡って眺 められます。 openMosixanalyzer は現在「オンライン」のログファイルを解析 しますが、古いバックアップをファイルメニューから選択すれば、履歴の解析 も可能になっています。ログファイルは、/tmp/openmosixcollector/*(バック アップは /tmp/openmosixcollector[date]/*)にあり、「cluster」というメイ ンのログファイルだけをオープンして、古い負荷情報を見なければいけません (ログファイルにあるバックアップディレクトリの「date」は履歴が保存された 日付けになっています)。開始時間は先頭に表示され、openMosixanalyzer で一 日分(12時間分)が見られます。 「オンライン」のログファイル(現在の履歴)を見るのに、openMosixanalyzer を使うなら、「refresh」チェックボックスを有効にしてください。そうすれば 、自動でリフレッシュされます。 通常負荷を示すラインは黒です。負荷が 75 よりも増えれば、ラインは赤で表 示されます。これらの値は openMosix 自身の情報です。openMosixanalyzer は 、 /proc/hpc/nodes/[openMosix ID]/* からこれらの情報を集めてきます。 各ノードの「Find-out」ボタンは、便利な統計値を計算します。クリックする と小さなウインドウが開き、そこで指定したノードもしくはクラスタ全体の負 荷平均とメモリ値や、その他の静的・動的な情報がわかります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.2. クラスタノードについての固定情報 [omview9] openMosixcollector が負荷履歴にチェックポイントを書いていれば、縦線で 青が表示されます。ある時間の負荷値を比較するのがさらに簡単になります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.3. メモリの状況 [omview8] この図は openMosixanalyzer によるメモリの状態を表示しています。 openMosixanalyzer にあるメモリ状態を見れば、負荷と同様に継続してメモリ の履歴が分かります。履歴ログファイルは openMosixcollector が作成し、図 形式で表示しますので、クラスタで過去や現在起こっている状況をを長時間に 渡って見られます。現在「オンライン」のログファイルを解析しますが、古い バックアップをファイルメニューから選択すれば、履歴の解析も可能です。 表示された値は、openMosix の情報です。openMosixanalyzer はこれらの情報 を下記のファイルから収集します。 /proc/hpc/nodes/[openMosix-ID]/mem. /proc/hpc/nodes/[openMosix-ID]/rmem. /proc/hpc/nodes/[openMosix-ID]/tmem. openMosixcollector がメモリ履歴にチェックポイントを書いていれば、青の 縦線で表示されます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.4. openMosixhistory [omview10] はこれまでのプロセス一覧を表示します。 openMosixhistory はプロセスがどのノードで動作していたかについて、詳細な 状態を表します。 openMosixcollector は openMosixcollector が動作してい るホストから、プロセス一覧を保存しますので、openMosixhistory を使ってロ グデータが見られます。見る時間を変更するのは簡単で、openMosixhistory の time スライダーを使用します。 openMosixhistory は現在「オンライン」のログファイルを解析できますが、 古いバックアップをファイルメニューから選択して、履歴の解析も可能になっ ています。 ログファイルは、/tmp/openmosixcollector/*(バックアップは /tmp/ openmosixcollector[date]/*)にあり、「cluster」というメインのログファイ ルだけをオープンして、古い負荷情報を見なければいけません(ログファイルに あるバックアップディレクトリの「date」は履歴が保存された日付けになって います)。開始時間は先頭の右に表示され、openMosixhistory で 12 時間分見 られます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.8. openMosixmigmon 9.8.1. 一般 [ommigmon2] openMosixmigmon は openMosix クラスタのマイグレーションを監視します。ノ ードすべてを小さなペンギンが輪になって座っている図で表します。 → nodes-circle. 中央のペンギンは、openMosixmigmon が動いているノードで、その周りにノー ドが並びます。またプロセスも小さな黒四角で円形に表示されています。 →メインプロセスの円 プロセスがノードのどれかにマイグレートすると、そのノードはプロセスの円 を持ちます。そして、そのプロセスが中央のプロセスを表す円からリモートの プロセスを表す円に移動します。そのプロセスは緑の印が付き、元々のところ から移動した場所へと線が引かれてマイグレーションが起こったことを表しま す。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.8.2. ツールチップス集: マウスをプロセス上に置くと、プロセスの PID を表示して、小さなツールチッ プウインドウにコマンドラインが付きます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.8.3. ドラック&ドロップ openMosixmigmon は完璧にドラック&ドロップ対応になっていいます。プロセ スのどれを掴んで(ドラッグして)も、どのノード(ペンギン)へもドロップでき ます。そうするとプロセスはそこのノードへ移動します。リモートノードのプ ロセスをダブルクリックすると、ホームノードへすぐに送られます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.9. openmosixview FAQ 9.9.1. openMosixview が私のシステムでコンパイルできません。 9.9.2. openMosixview は SSH で使えますか 9.9.3. openMosixview を起動しましたが、スプラッシュ・スクリーンが出た だけでした。どこが悪いのでしょう。 9.9.4. openMosixviewprocs や mosixview_client が動きません。 9.9.5. openMosixview 設定ダイアログのボタンがあらかじめ選択されていな いのはなぜ? 9.9.1. openMosixview が私のシステムでコンパイルできません。 まず QT は 2.3.x 以上が必要です。 QTDIR 環境変数は、QT をインストールし たディレクトリを設定していなければいけません。これと同じような説明が INSTALL ファイルにあります。バージョン 0.6 より新しいなら、「make clean 」をして /openmosixview/Makefile、 /openmosixview/config.cache の 2 つ のファイルを削除してください。そうしてから、再コンパイルしてみてくださ い。古いバージョンのバイナリとオブジェクトファイルがそのままになってい るからです。その他何か問題があるなら、その問題を openMosixview のメーリ ングリストへポストしてください(もしくは直接私宛に)。 9.9.2. openMosixview は SSH で使えますか もちろんです。バージョン 0.7 までは組み込みで SSH をサポートしていまし た。 ssh がクラスタのノードそれぞれに対して、パスワード無しで実行できる ようにする必要があります(rsh を使う場合もまったく同様です)。 9.9.3. openMosixview を起動しましたが、スプラッシュ・スクリーンが出ただ けでした。どこが悪いのでしょう。 openMosixview は & を付けて(例えば openMosixview &)、fork してバックグ ラウンドにしないでください。 root ユーザがパスワードなしで各ノードに rsh も ssh(どちらを使うかはユーザ次第) ができないのかもしれないのでは? root で「rsh hostname」を試してください。パスワードを求めるプロンプトが 表示されずそのままログインシェルになるはずです。 (ssh を使っているなら 、root で「ssh hostname」としてください) クラスタ上では root になる必要 があります。というのは、openMosixview が実行する管理用コマンドには root の権限が必要だからです。 openMosixview はデフォルトでは「rsh」を使いま す。クラスタに ssh しかインストールされていないなら、/root /.openMosixview ファイルを修正(もしくは作成)して、その中に「1111」を入 力してください。このファイルは openMosixview のメイン設定ファイルで、最 後の「1」は「rsh の代わりに ssh を使う」という意味になります。これで openMosixview は「ssh」を起動時から使うようになります。 9.9.4. openMosixviewprocs や mosixview_client が動きません。 openMosixview-client は rsh 経由でリモートホスト上で実行します(チェック ボックスに設定をすれば ssh になります)。rsh か ssh が各ノードの /usr/ bin にインストールされていなければいけません。 rsh を使うなら、「xhost +hostname」「rsh hostname /usr/bin/openMosixview_client -display your_local_host_name:0.0」 ssh を使うなら、「xhost +hostname」「ssh hostname /usr/bin/openMosixview_client -display your_local_host_name: 0.0」としてください。これが動作すれば、openMosixview も動きます。 openMosixview が「segmentation fault」してしまう。 mosix.map (openMosixview ではこのファイルは削除されています) をパースする際に、古 いバージョンの openMosixview や Mosixview を使っていませんか (openMosixview 1.2 もしくは Mosixview > 1.0 が安定版です)。 9.9.5. openMosixview 設定ダイアログのボタンがあらかじめ選択されていない のはなぜ? (automigration on/off, blocking on/off......) 私もあらかじめ選択させた いです。問題はノードから情報を取得するところにあります。各クラスタノー ドにログインしてください。これらの情報はクラスタ全体で共通ではないから です(私見です)。各ノードの状態は、各ノードの /proc/hpc/admin ディレクト リに保存してあります。これらの情報を取得するうまい方法について知りたい 方は、私にメールをください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.10. openMosixview + ssh: (この HOWTO は SSH2 用です) rsh に代わって ssh を使うべき理由は、毎日の ように新聞で目にします(また新たにスクリプトキディーが安全でないシステム やネットワークに侵入した時に)。 ssh を選択すれば間違いありません。 自由×セキュリティ=一定 (セキュリティのニュースグループから) ssh の設定が多少手が込んでいるのはこのためです。ssh はパスワードを求め るプロンプト無しにログインする目的で使用しても安全です。ここではその設 定方法(の一つ)を挙げます。 まず、ssh デーモンをリモートサイトで動かす必要があります。まだインスト ールしていないなら、インストールしてください。 (rpm -i [sshd_rpm_packeage_from_your_linux_distribution_cd]) まだ動作していない なら、下記のように動かしてください。 /etc/init.d/ssh start ここで sshーkeygen を使って、ローカルマシンで ssh の鍵ペアを作成しなけ ればいけません。 ssh-keygen 鍵ペア用にパスフレーズを入れるためのプロンプトがでます。普通パスフレー ズはパスワードより長くして、文章にするようです。鍵ペアはパスフレーズに よって暗号化されて下記に保存されます。 /root/.ssh/identity //プライベート鍵 and /root/.ssh/identity.pub //公開鍵 プライベート鍵は誰にも渡さないこと。リモートホスト上で /root/.ssh/ identity.pub の内容を /root/.ssh/authorized_keys にコピーしてください (公開鍵は一行にするように)。 (/root/.ssh/identity.pub をローカルホスト 上の /root/.ssh/authorized_keys にもリモートホストでした様にコピーして ください。openMosixview はパスワード無しでローカルノードにログインでき る必要があるからです) このリモートホストに ssh すると公開鍵のパスフレーズを要求されます。正 しいパスフレーズを入力すればログインできます。 本当の利点は何でしょうか。パスフレーズは、パスワードよりもずっと長いの が普通ですが。 ssh-agent を使うとメリットが得られます。 ssh でのログインでパスフレー ズの管理を行います。 ssh-agent これで ssh-agent が起動し、設定が必要な環境変数が 2 つできました(まだ設 定していなければ)。下記のように入力すれば、 echo $SSH_AUTH_SOCK と echo $SSH_AGENT_PID この環境変数が正しくシェルにエクスポートされているかわかります。正しく なければ、端末からカット&ペーストしてください。 bash なら、 SSH_AUTH_SOCK=/tmp/ssh-XXYqbMRe/agent.1065 export SSH_AUTH_SOCK SSH_AGENT_PID=1066 export SSH_AGENT_PID csh なら、 setenv SSH_AUTH_SOCK /tmp/ssh-XXYqbMRe/agent.1065 setenv SSH_AGENT_PID 1066 です。これらの環境変数を使って、リモートの sshd がローカルの ssh-agent と通信を /tmp のソケットファイル(この例だと /tmp/ssh-XXYqbMRe/ agent.1065)を使って行います。これで ssh-agent はパスフレーズをリモート ホストにソケット経由で渡せます (もちろん通信を暗号化して)。 公開鍵を ssh-add コマンドを使って ssh-agent に登録する必要があります。 ssh-add これで、ssh を使ってパスワード入力無しでリモートホストにログインできる ようになったはずです。 ssh-agent と ssh-add コマンドをログインのプロファイルに入れてもよいで しょう。 eval `ssh-agent` ssh-add これでローカルのワークステーションにログインすれば、起動します。とうと うやりました。安全なログインができますように。 openMosixview openMosixview のメニューに rsh か ssh を選択する項目があ ります。これを有効にすれば安全ではないネットワーク環境でも openMosixview を利用できます。この設定も保存してください(現在の設定を保 存する機能は、バージョン 0.7 で追加されました)。理由は rsh もしくは ssh (設定によります) を使って、スレーブから初期化データを取得するからです。 正しくインストールされていないサービスを選択すれば、openMosixview は動 きません。 (例えば、パスワードを入力するプロンプト無しにスレーブに rsh できなければ、 rsh で openMosixview は使えません。パスワードを入力する プロンプト無しにスレーブに ssh できなければ、ssh で openMosixview は使 えません)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 10. openMosix 関連のその他のプログラム 10.1. はじめに openMosix を監視したり管理したりするアプリケーションがいくつかあります 。この章では簡単にそれらを解説します。詳細は省きます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.2. openMosixView openMosixview は openMosix の管理に当たって最も利用され、知れ渡っている アプレットです。さらに詳しいことは openMosix の管理の章を見てください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.3. openMosixapplet openMosixApplet で openMosix の負荷をリアルタイムに見られます。ローカル にデーモンがいて、アプレットが通信するのを監視しています。アプレットは chart2D ライブラリを使っているので、見栄えがよくなっています。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.4. wmonload wmonload はシンプルですが、手軽で小さなドックアプリケーションです。小規 模な openMosix ベースのクラスタでノードの負荷を表示します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.5. openMosixWebView openMosixWebView は Web で openMosix の監視結果を図で表示します。 openMosixWebView は PHP スクリプトを使って Web で openMosix クラスタを 監視します。 openMosixview の openMosixCollector ログを利用しています。 最新版は下記からダウンロードできます。 openmosixwebview-0.2.12.tar.gz (16 Feb 2003) openMosixWebView のスクリーンショットを見るだけでなく、動かしてみてくだ さい :-) GNU General Public License (GPL) でリリースしています。README と FAQ を見てください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 11. 共通の問題 11.1. はじめに この章にある課題の大部分は、FAQ としても成り立ちます。FAQ は手短に "ど のように解決するか"に対する回答です。しかしここではもっと細に入り、なぜ 問題が生じるのかを説明した上で、それをどのように解決するのかを説明しま す。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.2. プロセスがマイグレートしない 助けてください。プロセス XYZ がマイグレートしません下記で Moshe Bar 氏 はなぜプロセスにマイグレートするもの、しないものがあるのかを説明してい ます。いつものように /proc/$pid/ を見る前に、 cantmoveを見てください。 該当プロセスがなぜマイグレートできないのかわかるでしょう。 プロセスをロックすることもできますが、プロセスがロックされていないかど うかもチェックできます。 cat /proc/$PID/lock $PID は問題のプロセスのプロセス ID です。 では、Moshe 氏自身がこの件について述べたことを挙げます。 よくあるのは、同じカーネルを使ってはいるが、RedHat と Debian が混在して いるといったようなディストリビューションに相違があるケースです。ディス トリビューションが異なると、rc スクリプトが異なるやり方で openMosix を 起動する傾向にあります。ある実装では /etc/inittab をすっかり書き換えて デーモンすべて(とその子供も)を mosrun -h で起動しています。そのように起動するとマイグレートしません。したがって プロセスを動かすと、これらのプロセスすべては /proc/pid/lock が 1 になり ます。強制的にマイグレートさせるためには、このファイルに 0 を記述します 。 それでは、下記の単純なプログラムをローカルの CPU 数より多く起動して、 常にマイグレートさせてみましょう。2-way SMP システムでは、このプログラ ムを 3 回起動し、クラスタ内にあるノードがローカルのシステムと似たような 速度を持っていれば、マイグレートします。 int main() { unsigned int i; while (1) { i++; } return 0; } Pentium 800Mhz という CPU では、オーバーフローするまでに多少時間がかか ります。 下記のような内容を持つサンプルプログラムは、決してマイグレートしませ ん。 #include #include #include ... key_t key; /* key to be passed to shmget() */ int shmflg; /* shmflg to be passed to shmget() */ int shmid; /* return value from shmget() */ int size; /* size to be passed to shmget() */ ... key = ... size = ... shmflg) = ... if ((shmid = shmget (key, size, shmflg)) == -1) { perror("shmget: shmget failed"); exit(1); } else { (void) fprintf(stderr, "shmget: shmget returned %d\n", shmid); exit(0); } ... 下記のようなパイプを使ったプログラムは、うまくマイグレートします。 int pdes[2]; pipe(pdes); if ( fork() == 0 ) { /* child */ close(pdes[1]); /* not required */ read( pdes[0]); /* read from parent */ ..... } else { close(pdes[0]); /* not required */ write( pdes[1]); /* write to child */ ..... } pthread を使うように修正されたプログラムは、バージョン 2.4.17 からマイ グレートはしませんが、segmentation fault はしなくなりました。 // // Very simple program demonstrating the use of threads. // // Command-line argument is P (number of threads). // // Each thread writes "hello" message to standard output, with // no attempt to synchronize. Output will likely be garbled. // #include #include // has exit(), etc. #include // has usleep() #include // has pthread_ routines // declaration for function to be executed by each thread void * printHello(void * threadArg); // ---- Main program ------------------------------------------------- int main(int argc, char* argv[]) { if (argc < 2) { cerr << "Usage: " << argv[0] << " numThreads\n"; exit(EXIT_FAILURE); } int P = atoi(argv[1]); // Set up IDs for threads (need a separate variable for each // since they're shared among threads). int * threadIDs = new int[P]; for (int i = 0; i < P; ++i) threadIDs[i] = i; // Start P new threads, each with different ID. pthread_t * threads = new pthread_t[P]; for (int i = 0; i < P; ++i) pthread_create(&threads[i], NULL, printHello, (void *) &threadIDs[i]); // Wait for all threads to complete. for (int i = 0; i < P; ++i) pthread_join(threads[i], NULL); // Clean up and exit. delete [] threadIDs; delete [] threads; cout << "That's all, folks!\n"; return EXIT_SUCCESS; } // ---- Code to be executed by each thread --------------------------- // pre: *threadArg is an integer "thread ID". // post: "hello" message printed to standard output. // return value is null pointer. void * printHello(void * threadArg) { int * myID = (int *) threadArg; cout << "hello, world, "; // pointless pause, included to make the effects of // synchronization (or lack thereof) more obvious usleep(10); cout << "from thread " << *myID << endl; pthread_exit((void* ) NULL); } プログラムがソケットを含む色々なファイルディスクリプタを使うと、マイグ レートします(プロセスとともにソケットはマイグレートしませんが、oMFS や DFSA を使用していればファイルはマイグレートされます)。 (上記のコードは Moshe 氏によるものです。Moshe Bar 氏個人によるもの、も しくは Qlusters, Inc. の CTO としての Moshe 氏のどちらかの立場です)。 openMosix の man も参照してください。プロセスがどうしてマイグレートしな いかについて、それなりに説明してあります。 何らかの理由で、意図せずにプロセスがロックしたままになってしまった場合 、ロックされたプロセスをマイグレートするには、下記の記述を # tell shells to allow subprocs to migrate to other nodes echo 0 > /proc/self/lock "/etc/profile" に単に追記するだけです。注意:こうすると自分が望んだもの だけでなく、すべてのプロセスがマイグレート可能になります。特定のプロセ スだけをマイグレートさせたいなら「mosrun -l」を使ってマイグレートさせた いプロセスだけをさせてください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3. ノードが何も見えません まず各マシンで同じバージョンのカーネルを使っているか見てください。「同 じカーネル」とはバージョンを意味しています。同じソースバージョンからハ ードウェアやソフトウェアの都合によって、各ノードで別々のカーネルを構築 しても大丈夫です。しかしクラスタに openMosix をインストールした時には、 マシンにはすべて openmosix-x.x.x-y カーネルが入っていなければいけません 。openmosix-x.x.z-x があったり、openmosix-x.x.x-y があったり、openmosix x.x.x-z があったり等々ではいけません。 mosmon を動かして t を押すと、稼動中のマシンすべてが見られます。mosmon が mosix が動いていないと警告しますか。 警告するなら、まずマシンの IP アドレスが /etc/mosix.map にあるか確認し てください(127.0.0.1 は使わないでください。使っていたなら、恐らく DHCP 関連で問題があります)。mosix が停止していると警告しないなら、どのマシン が見えているかを見てください。自分のマシンしか見えていませんか。 自分のマシンしか見えないなら、自分のマシンでファイアーウォールが動いて いる可能性が高くなります。ファイアーウォールが openMosix を遮っています 。 他のマシンも見えるなら、見えないマシンの問題である可能性が高くなります 。もう一つ。ノードにネットワークカードが 2 枚ありませんか。そうなら / etc/hosts ファイルをいじって、下記の書式で行を追加してください。 non-cluster_ip cluster-hostname.cluster-domain cluster-hostname もしかすると経路テーブルを設定する必要があるかもしれませんが、また別の 課題です。 各マシンでカーネルパラメタを別々に設定していませんか。特に「Support clusters with a complex network topology」オプションを使っている場合、 似たようなオプションである「Maximum network-topology complexity support 」を各マシンで同じ値にしてください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.4. よく「No such process」というエラーがでます。 bash: child setpgid (4061 to 4061): No such process というエラーがよく出ます。これはどういう意味でしょう。 上記の行は、使っているシェルが実際に他のノードにマイグレートしたことを 意味するのでしょうか。この bash からの出力は、openmosix の古いバージョ ンのバグによって起こります。既に修正されてコミット済みです(Muli Ben-Yehuda mulix@actcom.co.il)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.5. DFSA ? MFS ? 混乱がよく見られます。それは MFS と DFSA が正確には何なのかについてです 。以前どのように MFS するのかで論じた通り、MFS とはリモートにあるファイ ルシステムをローカルにマウントしているようにみせる openMosix の機能を指 します。通常 /mfs でマウントされます。よくある誤解が openMosix を使うの には MFS が必要だ、というものです。これは正しくありませんが、MFS が openMosix を使いやすくするのは事実です。 DFSA が有効だと、プロセスをマイグレートしてホームノードに戻すこと無しに システムコールがリモートにあるノードで実行されます。この動作(direct filesystem access)は、プロセスがデータをマイグレートしてその逆(これが普 通) はないということです。DFSA が MFS を有効にしていなければ、「ただの 」キャッシュ無しのネットワークファイルシステムになります。 大まかに言えば、DFSA を有効にしないと、I/O はすべてホームノードで実行 されます。DFSA を有効にすると、ノードにプロセスもファイルも存在していれ ば、そのノードで I/O がローカルに行われます。 ありがちな間違いは、カーネルで DFSA の有効・無効を混在させてしまうこと です。そこで DFSA が実際に有効になっているのかを知る方法が必須になりま す。この情報は次のように入力すればわかります。 cat /proc/hpc/admin/version ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.6. Python のトラブル Python 関連のトラブルが報告されるケースもあります。よくよく調べてみると 、 openMosix に問題があるわけではなく、glib に関連した問題でした。しか し openMosix の問題であるかのごとく見えました。 /lib/i686/lib* をマシンから削除し、アプリケーションを動的に /lib/ libpthread 他にリンクしないようにして解決したユーザもいます。しかし新し い glib バージョンではバグが修正されていて、最近の openMosix ではこの問 題は解決したようです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 12. ヒントと TIPS 集 12.1. ロックされたプロセス 何らかの理由でプロセスが常にホームノードにロックされ、その理由がわから ない場合、とりあえずの対策として下記の行を ~/.profile に入れて自動的に マイグレートするようにしてください。 if [ -x /proc/$$/lock ]; then echo 0 > /proc/$$/lock fi しかし問題が何なのかを見つけるように頑張ってください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.2. プロセスの選択 マイグレーションを有効にしたいプログラムを決める前に、設定をテストする 必要があるでしょう。例えば、遅いマシンで KDE2 を動かし、クラスタにかな り速いマシンが存在していたとすると、kmail のようなリソース喰いのプログ ラムがマイグレートされるのがわかるでしょう。それ自体は悪いとは言えませ んが、メールを書いているとスクリーンにすぐ文字が表示されずに、ちょっと 間が空きます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.3. Java と openMosix Green Threads JVM はマイグレーションできます。理由は Java のスレッドは それぞれ独立したプロセスだからです。 Java green thread JVM 以外のスレッ ドは、Linux ではマイグレートできません。 openMosix はスレッドを使うプロ グラムをマイグレートできないからです。 Java アプリケーションのソースを持っているなら、アプリケーションを Java ネィティブにコンパイルすることも可能になるかもしれません。そうなれ ばアプリケーションは別のノードにマイグレートできます。 Gian Paolo Ghilardi 氏は「Consideration on OpenMosix」という論文で、ま さに Java と openMosix に関連した話題について触れています。 http:// www.democritos.it/events/openMosix/papers/crema.pdf < http:// www.democritos.it/events/openMosix/papers/crema.pdf> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.4. openMosix とハイパースレッディング もともと openMosix は、ハイパースレッディングを無効にした上で、現状の Linux スケジューラにおいて性能を発揮します。無効にするにはブートオプシ ョンで「noht」を入力するか、BIOS でハイパースレッディングを無効にしてく ださい。 それでもまだハイパースレッディングに興味があるなら、 Intel の説明 を見てください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.5. openMosix とファイアーウォール openMosix とファイアーウォールについて、質問がよくあります。 Amit 氏が この点について助け船を出してくれました。 from hpc/comm.c: #define MIG_DAEMON_PORT 0x3412 #define INFO_DAEMON_PORT 0x3415 十進数に変換すると、4660 と 5428 になります(3412 ではなく 1234 を変換し てください。ネットワークバイトオーダーで変換するためです。詳しくは IP、 TCP、UDP 関連の RFC を見てください)。 mig_daemon ポートは TCP ポート、info_daemon は UDP ポートです。つまり tcp/4660 と udp/5428 を使用します。Matt 氏がどこかで tcp/723 にも言及し ていました。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 13. インストール済み openMosixの(負荷)テスト 13.1. ちょっとしたテストスクリプト openMosix クラスタを素早くテストするには、下記の内容でスクリプトを作成 してください。 awk 'BEGIN {for(i=0;i<10000;i++)for(j=0;j<10000;j++);}' & 私はこれを test_mosix として保存しておきます。すべてが機能しているのか 見たい時に mosmon を起動して、このスクリプトを数え切れないほど動かしま す。 for i in `ls /etc/` ; do ./test_mosix ; done こうして openMosix が数秒間は活発に動くのを見てください... [howto6] この段階でホームノードで awk を kill して、プロセスをすべて kill してく ださい ;) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.2. Charles Nadeau 氏による Perl のプログラム openMosix クラスタをテストする Perl プログラム ここにあげるのは、私が openMosix クラスタをテストするためにさくっと書 いたプログラムです。openMosix-devel メーリングリストに 2002 年 3 月 6 日に投稿しました。 "Charles 氏はこの小さなプログラム(Perl で書いた)を自 分のクラスタ(3 台の Pentium 200MMX と 1 台の Pentium 166)向けに負荷テス ト目的で書きました。このプログラムはあるポートフォリオに基づいて様々な テストを一定時間内にシミュレートします。コードにはきちんとした解説があ り、簡単にテスト基準を追加・削除できるようになっていて、テスト基準の月 単位の平均処理量と標準偏差を変更できます。ポートフォリオを最適化する問 題は、分析しても解析できません。したがって、ポートフォリオを何回もシミ ュレートして最後に結果を報告します。注意してもらいたい点は、このプログ ラムはテスト項目間の相関関係は考慮していない点です。でもまだ完璧ではあ りませんが、はじめとしてはまずまずだと思います。さらにコードをプログラ ムの最後に追加して、データの報告機能を改善するつもりでいます(SVG (Scalable Vector Graphics)グラフ作成が進行中)。しかしシミュレートする部 分は満足に動きます。 openMosix による並行処理の長所を活かすために、Perl のモジュールである Parallel::?ForkManager(CPAN より)を使います。このモ ジュールでスレッドを広げて openMosix がクラスタ全マシンに割り当てられる ようにしています(統計計算には別のモジュールが必要です。両者とも忘れずイ ンストールしてください。コードのコメントに URL を書いておきます)。まず 見て感想を教えてください。それでは。" #! /usr/bin/perl -w # this mill unlock this process and all tis childs sub unlock { open (OUTFILE,">/proc/self/lock") || die "Could not unlock myself!\n"; print OUTFILE "0"; } unlock; # this will count the nodes sub cpucount { $CLUSTERDIR="/proc/hpc/nodes/"; $howmany=0; opendir($nodes, $CLUSTERDIR); while(readdir($nodes)) { $howmany++; } $howmany--; $howmany--; closedir ($nodes); return $howmany; } my $processes=cpucount; $processes=$processes*3; print("starting $processes processes\n"); #Portfolio.pl, version 0.1 #Perl program that simulate a portfolios for various stock composition for a given period of time #We run various scenarios to find the mix of assets that give the best performance/risk ratio #This method is base on the book "The intelligent asset allocator" by William Bernstein #Can be used to test an OpenMosix cluster #This program is licensed under GPL #Author: Charles-E. Nadeau Ph.D., (c) 2002 #E-mail address: charlesnadeau AT hotmail DOT com use Parallel::ForkManager; #We use a module to parallelize the calculation #Available at http://theoryx5.uwinnipeg.ca/mod_perl/cpan-search?filetype=%20distribution%20name%20or%20description;join=and;arrange=file;download=auto;stem=no;case=clike;site=ftp.funet.fi;age=;distinfo=2589 use Statistics::Descriptive::Discrete; #A module providing statistical values #Available at http://theoryx5.uwinnipeg.ca/mod_perl/cpan-search?new=Search;filetype=%20distribution%20name%20or%20description;join=and;arrange=file;download=auto;stem=no;case=clike;site=ftp.funet.fi;age=;distinfo=2988 srand; #We initialize the random number generator #Initializing constant $NumberOfSimulation=$processes; #Number of simulation to run $NumberOfMonth=100000; #Number of month for wich to run the simulation $NumberOfStock=6; #Number of different stocks in the simulation #Portfolio to simulate #TODO: Read the stock details from a file $Stock[0][0]="BRKB"; #Stock ticker $Stock[0][1]=0.01469184; #Stock average monthly return $Stock[0][2]=0.071724934; #Stock average monthly standard deviation $Stock[1][0]="TEST "; #Stock ticker $Stock[1][1]=-0.01519; #Stock average monthly return $Stock[1][2]=0.063773903; #Stock average monthly standard deviation $Stock[2][0]="SPDR"; #Stock ticker $Stock[2][1]=0.008922718; #Stock average monthly return $Stock[2][2]=0.041688404; #Stock average monthly standard deviation $Stock[3][0]="BRKB"; #Stock ticker $Stock[3][1]=0.01469184; #Stock average monthly return $Stock[3][2]=0.071724934; #Stock average monthly standard deviation $Stock[4][0]="TEST "; #Stock ticker $Stock[4][1]=-0.01519; #Stock average monthly return $Stock[4][2]=0.063773903; #Stock average monthly standard deviation $Stock[5][0]="SPDR"; #Stock ticker $Stock[5][1]=0.008922718; #Stock average monthly return $Stock[5][2]=0.041688404; #Stock average monthly standard deviation my $pm = new Parallel::ForkManager($NumberOfSimulation); #Specify the number of threads to span $pm->run_on_start( sub { my ($pid,$ident)=@_; print "started, pid: $pid\n"; } ); #We initialize the array that will contain the results @Results=(); for $i (0..$NumberOfSimulation-1){ for $j (0..$NumberOfStock+3){ $Results[$i][$j]=0.0; #Equal to 0.0 to start } } for $i (0..$NumberOfSimulation-1){ #Loop on the number of simulation to run $Results[$i][0]=$i; #The first column of each line is the number of the simulation $pm->start and next; #Start the thread $TotalRatio=1; #The sum of the proprtion of each stock #Here we calculate the portion of each investment in the portfolio for a given simulation for $j (0..$NumberOfStock-2){ #We loop on all stock until the second to last one #TODO: Replace rand by something from Math::TrulyRandom $Ratio[$j]=rand($TotalRatio); $Results[$i][$j+1]=$Ratio[$j]; #We store the ratio associated to this stock $TotalRatio=$TotalRatio-$Ratio[$j]; } $Ratio[$NumberOfStock-1]=$TotalRatio; #In order to have a total of the ratios equal to one, we set the last ratio to be the remainder $Results[$i][$NumberOfStock]=$Ratio[$NumberOfStock-1]; #We store the ratio associated to this stock. Special case for the last stock $InvestmentValue=1; #Initially the investment value is 1 time the initial capital amount. my $stats=new Statistics::Descriptive::Discrete; #We initialize the module used to calculate the means and standard deviations for $j (1..$NumberOfMonth){ #Loop on the number of months $MonthlyGrowth[$j]=0.0; #By how much did we grow this month. Initially, no growth yet. #We loop on each stock to find its monthly contribution to the yield for $k (0..$NumberOfStock-1){ $MonthlyGrowth[$j]=$MonthlyGrowth[$j]+($Ratio[$k]*((gaussian_rand()*$Stock[$k][2])+$Stock[$k][1])); #We had the growth for this stock to the stock already calculated for the preceding stocks } $stats->add_data($MonthlyGrowth[$j]); #Add the yield for this month so we can later on have the mean and standard deviation for this simulation $InvestmentValue=$InvestmentValue*(1+$MonthlyGrowth[$j]); #Value of the Investment after this month } $Results[$i][$NumberOfStock+1]=$stats->mean(); #Calculate the average monthly growth $Results[$i][$NumberOfStock+2]=$stats->standard_deviation(); #Calculate the standard deviation of the monthly growth $pm->finish; #Finish the thread } $pm->wait_all_children; #We wait until all threads are finished #Printing the results print "Simulation "; for $j (0..$NumberOfStock-1){ print "Ratio$Stock[$j][0] "; } print " Mean StdDev YieldRatio\n"; for $i (0..$NumberOfSimulation-1){ printf "%10d ", $Results[$i][0]; for $j (1..$NumberOfStock){ printf " %6.2f ",$Results[$i][$j]; } if($Results[$i][$NumberOfStock+2]!=0) { printf "%5.4f %5.4f %5.4f\n", $Results[$i][$NumberOfStock+1], $Results[$i][$NumberOfStock+2], ($Results[$i][$NumberOfStock+1]/$Results[$i][$NumberOfStock+2]); } else { printf "%5.4f %5.4f %5.4f\n", $Results[$i][$NumberOfStock+1], $Results[$i][$NumberOfStock+2], 0; } } #Subroutines #Subroutine to generate two numbers normally distributed #From "The Perl Cookbook", recipe 2.10 sub gaussian_rand { my ($u1, $u2); my $w; my ($g1, $g2); do { $u1=2*rand()-1; $u2=2*rand()-1; $w=$u1*$u1+$u2*$u2; } while ($w>=1 || $w==0); #There was an error in the recipe, I corrected it here $w=sqrt(-2*log($w)/$w); $g2=$u1*$w; $g1=$u2*$w; return wantarray ? ($g1,$g2) : $g1; } ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.3. openMosix の負荷テスト 著者:Matt Rechenburg 氏 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.3.1. 概要 この負荷テストは、openMosix クラスタとカーネル用のテストです。アプリケ ーションをいくつかとカーネルテストを実行し、安定性とopenMosix のその他 の機能(例えば、プロセスのマイグレーション、mfs 等)をチェックします。テ ストをしている間クラスタはほとんど稼動し続けるので、テストをする前に、 その他のアプリケーションを停止してください。テストが終われば、テストし た項目それぞれについて詳細な報告を挙げます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.3.2. 詳細な説明 openMosix の負荷テストは複数のプログラムを動かし、システム全体の機能を チェックします。次にテストアプリケーションについての説明をします。 ・ distkeygen: このアプリケーションは、1024 ビット長の鍵を 4000 個作成 します。fork を使って可能な限りのプロセスを openMosix クラスタにば ら撒きます。 必要になるもの:gcc コンパイラと OpenSSL ライブラリ Copyright (C) 2001 Ying-Hung Chen (GPL) http://www.yingternet.com/mosix ・ portfolio 「portfolio」は Perl プログラムで、決められた時間に様々な テストを行い、ポートフォリオをシミュレートします。この方法は、 William Bernstein 氏著の「The intelligent asset allocator」をベース にしています。 このプログラムのライセンスは GPL です。著者:Charles-E. Nadeau Ph.D., (c) 2002 メールアドレス: charlesnadeau AT hotmail DOT com ・ eatmem : sin と sqrt を 1000000 回単純に計算し、ループ回数をファイ ルに出力します (どんどん大きくなります)。このテストは openMosix ク ラスタで一度にできるだけ多くのプロセスを自動的に起動します。 ・ forkit: 「forkit」テストは「eatmem」テストと似ていますが、fork を使 って複数のプロセスを作成します(3*[openMosixクラスタにあるプロセス 数)。プロセスがファイルに書き込むことはありません。 ・ mfstest 10MB のファイルを作成し、それをすべてのノードにコピーしあい ます。このテストは oMFS の性能をチェックします。 ・ カーネルのシステムコールテスト: Linux Test Project は、SGI、IBM、 OSDL、Bull が参加しているプロジェクトです。プロジェクトの目標はオー プンソースコミュニティへテストパッケージを提供することです。このパ ッケージによって Linux の信頼性と堅牢さ、安定性を確立します。 Linux Test Project では Linux カーネルとカーネルに関連した機能のテスト向 けにツールを集めています。目標はカーネルに対するテストを自動化し、 Linux カーネルを改良することです。オープンソース側で参加したい方は 自由にこのプロジェクトに参加できます。詳しい情報は、http:// ltp.sf.net を見てください。 ・ moving: 「moving.sh」は負荷テストを動かしながら「 start_openMosix_test.sh」をopenMosix クラスタの各ノードへ移動させま す。「start_openMosix_test.sh」はテストをしている間ずっとマイグレー トしています。クラスタでテストをどのくらい続けるかにもよりますが、 20 から 40 倍マイグレートします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.3.3. 負荷テストパッケージのインストール まずソースパッケージか rpm を下記からダウンロードしてください。 http:// www.openmosixview.com/omtest/ ・ ソースパッケージを使って、 例えば /usr/local に下記のコマンドで openMosix の負荷テストを unzip 、 untar してください。 gunzip omtest.tar.gz tar -xvf omtest.gz 次に「cd」して /usr/local/omtest ディレクトに行き、下記を実行してく ださい。 ./compile_tests.sh これで必要な Perl モジュールがインストールされ、テストプログラムが コンパイルされます。これらのモジュールのインストールには、root の権 限が必要です。インストール後は一般ユーザでも openMosix の負荷テスト が行えます。 (/tmp にある root の test-run からテンポラリファイルを 削除しなければいけないでしょう。一般ユーザでは上書きする権限がない からです)。下記のコマンドを使って、テストを開始する準備が整います。 ./start_openMosix_test.sh ・ rpm パッケージを使う omtest.rpm をインストールする際には必要なものがあります。 expect や compat-libstdc++-7.3-2.96.110(RH 8.0 なら)等です。次のコマンドで omtest.rpm をインストールしてください。 rpm -ihv omtest.rpm これで下記のコマンドで openMosix の負荷テストをはじめられます。 start_openMosix_test.sh (rpm パッケージは /usr/local/omtest にインストールされます) (この rpm で perl モジュールもいくつかインストールされることに注意してく ださい)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.3.4. テストをはじめる [root@dhcp51 omtest]# ./start_openMosix_test.sh starting the openMosix stress test now! the results will be saved in : /tmp/openMosix-stress-test-report-03/16/2003-11:27:02.txt oMFS is not mounted at /mfs! oMFS-test will be disabled. Please mount oMFS before running this openMosix-test You will find instructions how to configure and use oMFS at: http://howto.ipng.be/openMosix-HOWTO/x222.htm#AEN243 (return to continue, ctrl-c for cancel) IV. openMosix でアプリケーションを動かす Table of Contents 14. コンパイルの性能を上げるには 14.1. はじめに 15. openMosix を利用した画像処理 15.1. はじめに 15.2. Povray 16. バイオインフォマテックスと openMosix 16.1. はじめに 16.2. Blast ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 14. コンパイルの性能を上げるには 14.1. はじめに このセクションは作成中です。 コンパイル環境として openMosix を利用しようとする人々がたくさんいますが 、失望してしまうケースが多いようです。 HOWTO のこの章では、openMosix を 使ってコンパイルが恩恵を受けられるように、成功レベルをアップする方法を 説明しようと思います。 まず覚えておかなければいけないことが 1 つ。それは openMosix がクラスタ で起動するプロセスをすべてマイグレートするわけではない、ということです 。別のノードにマイグレーションして効果がでるものだけがマイグレートしま す。コンパイルはどうかというと、そのプロセスが十分に長く継続しなければ いけません。カーネルのコンパイルは概して個々があまりにも短いので、マイ グレートするのに十分ではありません。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 15. openMosix を利用した画像処理 15.1. はじめに このセクションは作成中です コンピュータグラフィックは、たくさんの CPU パワーを必要とし続けていま した。今でもその通りです。この章では openMosix がコンピュータグラフィッ クにどれだけ効果があるのか、実例をあげて示したいと思います。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 15.2. Povray Persistence of Vision Raytracer(Povray)は、高品質で完全にフリーな素晴ら しい 3D グラフィックツールです。 レイトレーシングはレンダリング技術の一つで、現実の世界で光線がやってく る過程をシミュレートし、その場面の画像を計算します。しかしこの処理は現 実とは逆方向に行うことになります。現実世界では光線は光源から放たれ、対 象を照らします。光は対象で反射するか、光を通す対象に対しては透過してい きます。この反射した光を眼やカメラのレンズが捕らえます。光線の大部分は 観察者には届きませんので、観察者は場面をトレースするのに時間がかかりま す。 この種のアプリケーションは pvmpovray を使えば簡単に並列処理ができます。 pvmpovray は Beowulf タイプのクラスタ上で動作することを前提にしており、 pvm を使って負荷を他のノードに割り振ります。 openMosix は同じ方法でこれ を行いますが、たった 1 台のマシンで実行し、 openMosix が負荷分散を行っ てくれます。 A GREAT Howto on PVM Povray を読めば pvmpovray の設定方法がわかります。下記がち ょっとした要約です。 $ cd pvmpov3_1g_2 $ tar xfz ../povuni_s.tgz $ tar xfz ../povuni_d.tgz $ ./inst-pvm Trying to apply the patch. Searching for rejected files $ aimk でコンパイルしてください(このスクリプトは pvm の rpm が用意してい るラッパー)。どちらにも恐らくパスは通っていないでしょう(aimk が他のプラ ットフォームのアプリケーションであることを覚えている方もいるかもしれま せん)。 RH 8.0 を使っているなら、libpng と zlib は .notused のような場所に移動 した方が良いでしょう。 libpng と zlib のバージョンが異なることで生じる バージョン問題を避けるためです。 export PATH=$PATH:/usr/share/pvm3/lib export PVMROOt=/usr/share/pvm3 ここで aimk newunix を実行します。そして pvm を起動して、そのままにしま す。これでデーモンがアクティブになったままになります。 最後に pvm の初心者ユーザが知らないことを。pvm は独自のパスを使うので、 pvmpov をパスに含めるか絶対パスを使って起動してください。 [root@dhcp71 povray31]# /usr/local/bin/pvmpov -L /usr/src/povray/pvmpov3_1g_2/povray31/include/ +Iskyvase.pov +Oskyvase.tga +NT16 +NW64 +NH64 +v +w1024 +h768 Persistence of Vision(tm) Ray Tracer Version 3.1g.Linux.gcc This is an unofficial version compiled by: Jakob Flierl - PVMPOV Version 3.1g.2 The POV-Ray Team(tm) is not responsible for supporting this version. Copyright 1999 POV-Ray Team(tm) Never found section in file /usr/src/povray/pvmpov3_1g_2/povray31/include/. Initializing PVMPOV Spawning /usr/local/bin/pvmpov with 16 PVM tasks on 1 hosts... ...16 PVM tasks successfully spawned. Waiting up to 120s for first slave to start... Slave 0 successfully started. Parsing Options Input file: skyvase.pov (compatible to version 3.1) Remove bounds........On Split unions........Off Library paths: /usr/local/lib/povray31 /usr/local/lib/povray31/include Output Options Image resolution 1024 by 768 (rows 1 to 768, columns 1 to 1024). Output file: skyvase.tga, 24 bpp PNG Graphic display.....Off Mosaic preview......Off CPU usage histogram.Off Continued trace.....Off Allow interruption...On Pause when done.....Off Verbose messages.....On Tracing Options Quality: 9 Bounding boxes.......On Bounding threshold: 25 Light Buffer.........On Vista Buffer.........On Antialiasing........Off Radiosity...........Off Animation Options Clock value.... 0.000 (Animation off) PVM Options Block Width.... 64 Block Height... 64 PVM Tasks...... 16 PVM Nice....... 5 PVM Arch....... PVM Slave...... /usr/local/bin/pvmpov PVM WorkingDir. /usr/src/povray/pvmpov3_1g_2/povray31 Redirecting Options All Streams to console..........On Debug Stream to console.........On Fatal Stream to console.........On Render Stream to console........On Statistics Stream to console....On Warning Stream to console.......On Starting frame 0... Slave 1 at dhcp71.office.be.stone-it.com successfully started. Slave 2 at dhcp71.office.be.stone-it.com successfully started. Slave 3 at dhcp71.office.be.stone-it.com successfully started. Slave 4 at dhcp71.office.be.stone-it.com successfully started. Slave 5 at dhcp71.office.be.stone-it.com successfully started. Slave 6 at dhcp71.office.be.stone-it.com successfully started. Slave 7 at dhcp71.office.be.stone-it.com successfully started. Slave 8 at dhcp71.office.be.stone-it.com successfully started. Slave 9 at dhcp71.office.be.stone-it.com successfully started. Slave 10 at dhcp71.office.be.stone-it.com successfully started. Slave 11 at dhcp71.office.be.stone-it.com successfully started. Slave 12 at dhcp71.office.be.stone-it.com successfully started. Slave 13 at dhcp71.office.be.stone-it.com successfully started. Slave 14 at dhcp71.office.be.stone-it.com successfully started. Slave 15 at dhcp71.office.be.stone-it.com successfully started. 0:00:53 86.46 of blocks complete.Not using dhcp71.office.be.stone-it.com for reassignment (77%) 0:00:53 86.98 of blocks complete.Not using dhcp71.office.be.stone-it.com for reassignment (67%) Not using dhcp71.office.be.stone-it.com for reassignment (86%) Not using dhcp71.office.be.stone-it.com for reassignment (85%) 0:00:55 89.06 of blocks complete. 640 of 768 lines finished (in frame 0).Not using dhcp71.office.be.stone-it.com for reassignment (65%) 0:00:56 91.67 of blocks complete.Not using dhcp71.office.be.stone-it.com for reassignment (72%) 0:00:56 92.71 of blocks complete.Not using dhcp71.office.be.stone-it.com for reassignment (80%) 0:00:57 93.75 of blocks complete. Slave at dhcp71.office.be.stone-it.com has exited. 0:00:57 94.79 of blocks complete. Slave at dhcp71.office.be.stone-it.com has exited. Slave at dhcp71.office.be.stone-it.com has exited. 0:00:58 95.83 of blocks complete. Slave at dhcp71.office.be.stone-it.com has exited. 0:00:58 96.35 of blocks complete. 672 of 768 lines finished (in frame 0).Not using dhcp71.office.be.stone-it.com for reassignment (77%) Slave at dhcp71.office.be.stone-it.com has exited. 0:00:58 97.14 of blocks complete. 688 of 768 lines finished (in frame 0). Slave at dhcp71.office.be.stone-it.com has exited. 0:00:59 97.92 of blocks complete. Slave at dhcp71.office.be.stone-it.com has exited. 0:00:60 98.44 of blocks complete. 704 of 768 lines finished (in frame 0). Slave at dhcp71.office.be.stone-it.com has exited. 0:01:03 100.00 of blocks complete. 768 of 768 lines finished (in frame 0). Finishing frame 0...rtw. 768 Waiting for remaining slave stats. PVM Task Distribution Statistics: host name [ done ] [ late ] host name [ done ] [ late ] dhcp71.office.be.stone-it.com [ 5.21%] [ 0.00%]dhcp71.office.be.stone-it.com [ 7.81%] [ 0.07%] dhcp71.office.be.stone-it.com [ 8.85%] [ 1.17%]dhcp71.office.be.stone-it.com [ 4.69%] [ 0.00%] dhcp71.office.be.stone-it.com [ 8.85%] [ 0.98%]dhcp71.office.be.stone-it.com [ 4.17%] [ 0.00%] dhcp71.office.be.stone-it.com [ 5.21%] [ 0.00%]dhcp71.office.be.stone-it.com [ 8.33%] [ 0.52%] dhcp71.office.be.stone-it.com [ 5.21%] [ 0.00%]dhcp71.office.be.stone-it.com [ 5.73%] [ 0.72%] dhcp71.office.be.stone-it.com [ 7.29%] [ 2.73%]dhcp71.office.be.stone-it.com [ 4.17%] [ 0.00%] dhcp71.office.be.stone-it.com [ 5.21%] [ 0.00%]dhcp71.office.be.stone-it.com [ 6.77%] [ 0.13%] dhcp71.office.be.stone-it.com [ 4.69%] [ 0.00%]dhcp71.office.be.stone-it.com [ 7.81%] [ 0.00%] POV-Ray statistics for finished frames: skyvase.pov Statistics (Partial Image Rendered), Resolution 1024 x 768 ---------------------------------------------------------------------------- Pixels: 303104 Samples: 303104 Smpls/Pxl: 1.00 Rays: 1192710 Saved: 0 Max Level: 0/5 ---------------------------------------------------------------------------- Ray->Shape Intersection Tests Succeeded Percentage ---------------------------------------------------------------------------- Cone/Cylinder 1842227 900504 48.88 CSG Intersection 2742731 323346 11.79 CSG Union 1801008 521692 28.97 Plane 20223278 11233348 55.55 Quadric 1801008 1196533 66.44 Sphere 1801008 461786 25.64 Bounding Object 1842227 900504 48.88 ---------------------------------------------------------------------------- Calls to Noise: 1201944 Calls to DNoise: 2108954 ---------------------------------------------------------------------------- Shadow Ray Tests: 2856188 Succeeded: 85620 Reflected Rays: 889606 ---------------------------------------------------------------------------- Smallest Alloc: 9 bytes Largest: 20508 Peak memory used: 5643343 bytes ---------------------------------------------------------------------------- Time For Trace: 0 hours 1 minutes 7.0 seconds (67 seconds) Total Time: 0 hours 1 minutes 7.0 seconds (67 seconds) 見ての通りアプリケーションが複数に分割され、個々に動くことがわかります 。 openMosix は他のマシンに対して、負荷の均衡を取る処理を行っています。 利用できる CPU 数の 2、3 倍の効果という素晴らしい結果になりました。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 16. バイオインフォマテックスと openMosix 16.1. はじめに ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 16.2. Blast この分野で始終利用するアプリケーションに Blast があります。 Blast が支 障なく動作するためにパッチが用意されています。 しかしそれだけが支障なく動く手段ではありません。 まずこのパッチには既知の問題があります。また Blast のバージョンによって は、segmentation fault が起こることがあります。この現象はたいていの場合 、インターネットからダウンロードしてきた作成済みデータベースに起因して います。未処理のデータベースに対して formatdb をかけると、エラーが解消 される場合があります。 blast パッチの次は、たくさんの方々が利用している MPIBlast です。openMosix が MPI を高速化する傾向にある、とい う事実があります。openMosix にこの設定を入れると、素晴らしい結果になる かもしれません。しかしこの事実を確認するには、さらに調査をする必要があ ります。 V. openMosix の開発 Table of Contents 17. openMosix の内部を見る 17.1. はじめに ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 17. openMosix の内部を見る 17.1. はじめに この部分の著者は Amit Shah 氏です。 現状カーネルについてのドキュメントは十分とは言えません。来週にも書けれ ばと思っています。そのようなわけで、ここではソースがどのように構成され ているかを示しておきます。 openMosix のコードの大部分は、hpc/ と include/hpc にあります。arch/i386 ディレクトリからはじまって mm/、fs/ 等、カーネルファイルのあちこちに渡 ってパッチがたくさんあります。興味があるコードを調べ、現状がどうなって いるのか考えてみる必要があります(カーネルをコーディングしたことがあれば 、問題はないはずです)。 ここに挙げるのは、各ソースファイルの中で皆さんが探しているはずのもので す。 ・ hpc/badops.c: 間違った操作を一手に引き受けるファイル。エラーコード を返す場合がほとんど。 ・ hpc/balance.c: 負荷分散のコード(負荷+メモリ使用量+ノード及び全体 の使用量)。 ・ hpc/comm.c: クラスタ内部の通信のセットアップ。 ・ hpc/config.c: openMosix 用の設定コード。起動スクリプトを動かした後 に使用。 ・ hpc/decay.c: 他のノードから収集した情報とその状態を分散させる。 ・ hpc/deputy.c: 代理実行されるコード。リモート上でのシステムコール (つまりプロセスがマイグレートした後)やシグナル等のサービス。 ・ hpc/dfsa.c: Direct File System Access のコード。分散ファイルシステ ムの抽象レイヤ。 ・ hpc/div.c: 小数点除算を行うアルゴリズム。 ・ hpc/export.c: 他のファイルが必要とするシンボルをエクスポート。 ・ hpc/freemem.c: メモリの空きと平均値の情報を記録し、必要に応じて開 放する。 Linux の mm/ コードを大幅に流用。 ・ hpc/hpcadmin.c: openMosix の管理値を調整(/proc/hpc 経由で)。 ・ hpc/hpcproc.c: /proc/hpc のコード。 ・ hpc/info.c: 情報デーモン。負荷とメモリ使用量の状態をクラスタ全体に 渡って送受信(マルチキャスト)する。 ・ hpc/init.c: 初期化コード。デーモンの初期化等。 ・ hpc/kernel.c: 「コア」なコードのほとんど。重要なアルゴリズムのすべ て。 ・ hpc/load.c: ローカルの負荷の演算等。 ・ hpc/mig.c: マイグレーションを扱うコード。このファイルのコードは、 マイグレーションの度に実行される。代理→リモート、リモート→代理、 リモート→リモート。 ・ hpc/prequest.c: プロセスのリクエストを扱う。シグナル、メモリ要求等 。 ・ hpc/remote.c: プロセスがリモートにある時に実行されるコード。システ ムコールをリモートで扱い、代理プロセスに制御を渡す等。 ・ hpc/rinode.c: fs/ に関連した項目。DFSA が利用。 ・ hpc/service.c: デーモンの設定、メモリの確保等。 ・ hpc/syscalls.c: リモートのシステムコールすべてを扱う。 ・ hpc/ucache.c: ucache を扱う。mm/、fs/ が利用。 その他 auto_syscalls.c や alternate.c のようなファイルは、コンパイル時 に作成されます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Appendix A. 更に情報が必要な場合 A.1. IRC openMosix フリークが、助けを求めている人たちにオンラインで IRC に時間を 割いています。#openMosix の irc.freenode.net がそこです。参加して、問題 やアイディア等々を議論しましょう。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.2. さらに知るには ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.3. 翻訳 この HOWTO の一部を翻訳している方々や自国語で平易な openMosix のドキュ メントを書いている方々もいます。 このドキュメントを翻訳しているなら、お知らせください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.3.1. 中国語 Ding Wei 氏がドキュメントを中国語で書いています。下記で読めます。http: //software.ccidnet.com/pub/disp/Article?columnID=732&articleID=25795& pageNO=1 ローカル にコピーした中国語のドキュメントの PDF です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.3.2. スペイン語 Miquel Catal疣 Cothas サ皃ネウリタク、ソ、チ、ヌ。「・ケ・レ・、・ク、 ホヒンフ、、キ、ニ、、、゛、ケ。」 http://w3.akamc2.net/ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.4. リンク ・ openMosix on Sourcefourge ・ the openMosix HOWTO ・ the openMosix FAQ ・ the openMosix WIKI ・ the openMosix Community Contributions ・ openmosixview ・ Mosix Debian HOWTO ・ K12 LTSP Mosix HOWTO ・ Mosix Mandrake Linux Terminal Server Project ・ openMOSIXVIEW, a GUI for managing openMosix-Cluster ・ User Mode openMosix, a virtual openMosix cluster running in User-mode ・ RxLinux, Web Interface for central configuration and management ・ LTSP+OpenMosix: A Mini How-To ・ FuBAR: An openMosix cluster at Texas AM - Corpus Christi ・ Charting the Land of Elliptic Curves using openMosix ・ openMosixWebView ・ Italian experiences with openMosix clusters は、そのカンファレンスでプ レゼンテーションされた論文いくつかへのリンクです。この論文は openMosix のメーリングリストで再三質問されることをカバーしています 。 □ Osservatorio Astronomico Cagliari (pdf)Securing an openMosix cluster in an untrusted networking environment. □ D.T.I. dell'Universit di Milano, Polo didattico e ricerca, Crema (pdf) Experiences with Java and C programs on openMosix. □ Riello Group (pdf) Use of openMosix for parallel I/O balancing on storage (backup) □ INFM & Dept. of Physics University of Napoli (pdf) Documents a number of small to large clusters and their uses. (Includes many references to software and projects.) □ Conecta srl (pdf) Contains more information on Kraken, the openMosix based game server. Included is how they monitor the cluster's temperature via lmsenors and how they improved internode communications using iproute2 queue controls. ・ openMosix with Diskless client ・ Use networked Linux systems to solve your computing challenges by Daniel Robbins ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.5. メーリングリスト ・ openMosix mailing list ・ openmosix-view mailing list ・ ClumpOS mailing list ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.6. 日本語版謝辞 この翻訳をするに当たって次の日本語サイトを参考にさせていただきました。 ・ クラスタ構築のKnowHow (名古屋大の松本さん。51台で openMosix!) 校正にあたって、次の方々にお世話になりました。ありがとうございました。 ・ 境真太郎さん ・ 松本正和さん ・ 武井伸光さん ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Appendix B. クレジット この HOWTO ではクレジットに載る方々のリストが長くなっていますが、実際は ここに載るべき方々すべてがわかっているわけではありません。貢献していた だいた方々のお名前を下記に追加しています。 お名前がここに載っていないと思われた方は、ためらわずに私に連絡してくだ さい。喜んでこのリストに追加させていただきます。 Scot W. Stevenson 私がこの HOWTO を引き継ぐ前に Scot W. Stevenson 氏がされた作業に対して 感謝しなければいけません。まさに彼がこのドキュメントをはじめたからです 。 Assaf Spanier Scott 氏とともにこの HOWTO の構成のドラフトと章立てをしてくれました。ま た、このドキュメントで私を助けてくれると約束してくれました。 Matthias Rechenburg Matthias Rechenburg 氏は openMosixview とそれに付随したドキュメントを作 成してくれました。このドキュメントにはその成果が入っています。 Jean-David Marrow は、Clump/OS の著者で、この HOWTO に彼のドキュメントを載せていただきま した。 Bruce Knox は、openMosix の Web サイトのメンテナーで、あらゆる援助とフィードバック をたくさんしてくれました。 Evan Hisey は、WIKI にドキュメントを次々と追加してくれました。 Charles Nadeau は、WIKI にドキュメントを次々と追加してくれました。 Louis Zechter Moshe Bar 彼が書いたコードについて書いてくれました。彼が返答できる質問に答えるこ とを手伝っていただきました。 Amit Shah openMosix の内部について書きはじめてもらいました。 Mirko Caserta この HOWTO に当てる巨大なパッチを送ってくれました。 Ramon Pons この HOWTO の校正とアドバイスをしていただきました。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Appendix C. GNU Free Documentation License Version 1.1, March 2000 Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or non-commercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3. COPYING IN QUANTITY If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five). C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/ or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements." ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/ copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License". If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 索引