レンタルサーバ + Webシステム開発 = E-business

■レンタルサーバご利用参考資料
サーバご利用の参考にJF Project によるJF (Japanese FAQ)を掲載しています。

Linux JF(Japanese FAQ)Project.
JF は, Linux に関する解説文書・FAQ などを作成・収集・配布するプロジェクトです.

グリーンネット・トップページへ戻る


一覧に戻る
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.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

索引

一覧に戻る
グリーンネット・トップページへ戻る

http://www.green.ne.jp/