%%include default.mgp %default 1 leftfill, size 2, fore white, xfont times-medium-i %default 2 size 7, vgap 20, prefix " ", vfont goth %default 3 size 2, bar gray70 4, vgap 10 %default 4 size 5, vgap 30, prefix " ", vfont min %tab 1 size 5, vgap 40, prefix " ", icon box green 50 %tab 2 size 4, vgap 40, prefix " ", icon arc yellow 50 %tab 3 size 3, vgap 40, prefix " ", icon arc white 40 %%%%% %page %nodefault %%bgrad %size 8, fore yellow, vfont goth %center Java スレッドの永続化、移送と 移動エージェントへの応用 %size 4, fore orange, vfont min 早稲田大学 理工学部 首藤一幸 村岡洋一 %size 5, fore white, left, %prefix " " 従来研究 応用 手法と実装 実行コンテクストを扱う際の問題 システム 性能評価 まとめ %%%%% %page スレッド移送システム %fore yellow 実行コンテクスト %cont, fore white を含めて移送 スレッドのディスク等への保存が可能 移送スレッドのクラス定義を自動転送 移送先へのインストールが不要 %fore yellow 非均質環境 %cont, fore white で動作 プロセッサ, OS を選ばない JVM の機種非依存性による 動作環境 Java Development Kit (JDK) 1.1 UNIX 互換 OS で動作 %%%%% %page 従来研究 Object Migration 実行コンテクストは移送しない プロセス移送 同一のプロセッサ、OS 間で移送 OS のサポートが必要 Java用移動エージェント 移動先で実行を継続できない 既存システム* は、移動の際に実行コンテクストを捨てる * Voyager, Aglets Workbench, Kafka, odysssey %%%%% %page 応用 スレッド移送の応用 移動エージェントの記述 ローカルに動作するコードとほぼ同じ記述法 プログラムの耐故障性向上 実行中の状態を保存するコードを書く必要がない 負荷分散 メカニズム (API, place の CUI) を提供 ポリシーは提供していない Disconnected operation %%%%% %page 応用 : 移動エージェントの記述 プログラミングインタフェースを比較 Voyager 1.0 - Agent enhanced ORB 移動 : %cont, fore yellow moveTo() %cont, fore white メソッド 移動先、移動先で呼び出したいメソッド名が引数 %size 3, prefix " " public class MobileAgent extends Agent { public void %cont, fore yellow callback %cont, fore white (Object arg) { System.out.println((String)arg); } public void go (String address) { %fore yellow moveTo(address, "callback", "Hello."); %fore white System.out.println("This statement is never executed."); } } %size 4, prefix "" %center, vfont goth 実行が継続されないため ローカルに動作するコードとは記述法が異なる %%%% %page 応用 : 移動エージェントの記述 MOBA - スレッド移送システム Thread クラスの代わりに %cont, fore yellow MobaThread %cont, fore white クラスを使用 スレッドの生成 %size 4, prefix " " Thread t = new MobaThread(...); t.start(); %size 4, prefix "" スレッド自身による移動 %prefix " " … %size 4, fore yellow MobaThread.goTo(移動先計算機); %fore white … %size 4, prefix "" %center, vfont goth 移動先で実行が継続されるため 移動を意識せずに記述できる %%%%% %page システム構成 クラスライブラリと place から成る %center %image "../fig/place.gif" %%%%% %page place のサブシステム %prefix " ", size 4 スレッド移送系 クラスロード系 コマンドシェル系 - 利用者からのコマンド(移送,永続化,…)を受ける %prefix "" %center %image "../fig/placeelem.gif" %%%%% %page 手法 : 要素技術 %center %image "../fig/mobatech.gif" %%%%% %page スレッド移送 スレッドの状態の転送 スレッドを外部化, 転送, 内部化 移送先へのクラス定義の転送 移送先で実行を継続するために %cont, fore yellow, vfont goth コードの移動 %cont, fore white, vfont min が必要 %%%%% %page スレッド外部化 %vfont goth, fore yellow 外部化 %cont, vfont min, fore white - スレッドの状態のバイト列化 %vfont goth, fore yellow 内部化 %cont, vfont min, fore white - JVM内への再構成 手順 前処理 自身の外部化のためには別スレッドを起動 排他制御, 一時停止 対象スレッドのモニタを取得 バイト列化 %%%%% %page スレッド外部化 バイト列化 %center %image "../fig/extproc.gif" %%%%% %page Object Marshaling オブジェクト群 (のグラフ) のバイト列化 問題 : %cont, fore yellow, vfont goth 位置依存 %cont, fore white, vfont min のオブジェクト ファイル記述子など、単純な外部化、内部化では問題あり 無効化や修整が必要 クラスの分類が必要 位置非依存 位置依存 同一スレッドによる marshal, unmarshal では対処不要 常に対処が必要 %size 5 現在 %center 一部のクラスに対する無効化処理が実装されている %%%%% %page クラス定義の転送 必要に応じて (動的に) 自動的に転送される あらかじめ移送先へインストールしておく必要がない 実行に必要なクラス定義が移送先でも得られることを保証 移動エージェント向き 一貫したクラス名空間 クラス定義はスレッド生成元からロード クラス名空間が移送先に依存しない 今後 静的な転送による最適化 %%%%% %page 実行コンテクストを扱う際の問題 Java 仮想計算機 (JVM) 上の実行コンテクストを 永続化、移送する際の問題 バイトコードから機械語への変換系 JIT コンパイラ, static コンパイラ, … ネイティブメソッド 実行コンテクストへのアクセスに必要 %%%%% %page 機械語への変換系 %size 4 高速実行のために、仮想計算機のコードから プロセッサの機械語へ変換する実行系が増えている 例) JIT コンパイラ : クラスのロード時 static コンパイラ : 実行前 %center %size 5 JVM 中立な永続化のためには %fore yellow, vfont goth 実行コンテクストの機種非依存表現 %cont, fore white, vfont min が必要 プロセッサネイティブなコードの実行中、 JVM の %cont, fore yellow, vfont goth プログラムカウンタ(PC) %cont, fore white, vfont min は機械語の命令列を指す ↓ %fore yellow, vfont goth 機種非依存表現を得られない %%%%% %page 機械語への変換系 対策 PC をバイトコード上のオフセットに変換する JVM の JIT インタフェースとして用意されていない バイトコードと機械語命令は 1対1 対応しない スレッドごとに変換の可否を制御 JVM に手を入れる必要がある JVM ごと変換を抑制する 現状の解決策 実行性能に難あり %%%%% %page ネイティブメソッド Java ではなく C や C++ で記述されたメソッド Java 言語では実行コンテクストにアクセスできない JVM 内へのアクセスに %cont, fore yellow, vfont goth ネイティブメソッドが必要 %fore white, vfont min %size 5 利用のデメリット 機種依存するので実行形式の可搬性が損なわれる インストール時にコンパイルが必要 アプレットから利用しづらくなる %size 5 既存の移動エージェント 既存システムはネイティブメソッドを使用していない 移動の際に実行コンテクストを捨てる %%%%% %page 性能評価 移送遅延 MOBA Voyager 1.0.1 - Agent enhanced ORB スループット MOBA と ORB 2種 RMI HORB 1.3.b1 (RMI と同等のバッファリングをする unofficial 版) %size 5 実験環境 マシン1: Sun (UltraSPARC 168MHz) マシン2: Sun (UltraSPARC 167MHz) JVM: JDK 1.1.5, Sun の JIT コンパイラ ネットワーク: 100Mbps Ethernet, リピータ1台経由 %%%%% %page 性能評価 : 移送遅延 移動エージェントを往復させ、片道の移動時間を算出 MOBA : 219 msec Voyager : 454 msec %center %image "../fig/lt-color.gif" %%image "../fig/lt.gif" %%%%% %page 性能評価 : スループット ORB 2種 double型配列を引数に遠隔メソッド呼び出し MOBA 配列を保持して移動 %center %image "../fig/tp-color.gif" %%%%% %page まとめ %fore yellow, vfont goth 実行コンテクスト %cont, fore white, vfont min を含めたJavaスレッドの移送を実現 ローカルに動作するコードと変わらない 移動エージェントの %cont, fore yellow, vfont goth 透過的な記述 %fore white, vfont min 各種応用 移動エージェント, 負荷分散, 耐故障性向上 実行コンテクストを扱う際の問題を明らかにした 小さい移送遅延、高いスループット 公開済み %cont, size 4 http://www.shudo.net/moba/ %size 5 課題 オブジェクトは単純にコピーしていることによる問題の解決 機械語への変換系との同時動作