Mogulにおける

Mogulにおける
ホスト透過性とプログラミング透過性について
慶應義塾大学
政策・メディア研究科
中澤 仁
研究の概要
• ホスト間を移送可能なJavaアプリケー
ションを構築可能なライブラリの開発
– 既存のアプリケーションに対する変更が不要
– アプリケーションのホスト透過的な動作
• 以上を実現するためのホスト透過型オブジェ
クト移送モデルを提案
• 同モデルを動的メソッドリダイレクション機
構により実装した。
発表の概要
• アプリケーション移送時の諸問題
– ホスト透過性について
• 既存の解決手法
– プロセスマイグレーション、Java RMI、Voyager
• ホスト透過型オブジェクト移送モデル(設計)
• 動的メソッドリダイレクション(実装)
• 基本性能評価と今後の課題
– プログラミング透過性とセマンティクスの維持、
性能の両立について
アプリケーション移送時の諸問題
• ホスト依存性
– 移送元ホスト上のファイル、ソケット等にアクセ
スするアプリケーション
– アプリケーションが連続移送される場合
– アプリケーションが受動的に移送される場合
– アプリケーションが能動的に移動していく場合
(モバイルエージェント)
プロセスマイグレーションでは
• ホスト依存性に関して
– システムコールをホームノードへリダイレクト
(ホスト透過性の確保)
– 移送先ノード上のファイル参照、ソケット作成を
回避
 障害発生点をホームノードと動作ノードに限定
• アプリケーションコードの変更が不要
• 特定のOS、ハードウエアに依存
Java Serialization、RMI、Voyager
では
• 複雑な片付けによるプログラミング
Java RMI
– java.io.Serializableインタフェース
– java.rmi.Remoteインタフェース
Voyager
– igenコマンドで生成したインタフェース
– virtual referenceクラスの定義
• ユーザは既存のアプリケーションをそのまま
移送できない
本研究では
• アプリケーションを構築するオブジェクトを
以下の2つに分類
– ホスト依存オブジェクト(移送不可能)
– 移送対象オブジェクト
• 複雑な型付けが不要
– ホスト依存オブジェクトに関しては、スタブオブ
ジェクトを動的に生成し、移送する
• プログラマは簡単に移送可能アプリケーショ
ンを構築できる
• ユーザは既存のアプリケーションを移送可能
アプリケーション移送時の動作
ユーザインタフェースオブジェクトに対する
移送/複製操作
ホスト依存オブジェクトと移送対象オブジェ
クトを分離
ホスト依存オブジェクトのスタブオブジェク
トの生成(動的コード生成/コンパイルによる)
移送対象オブジェクトおよびスタブオブジェ
クトを移送
スタブオブジェクトから移送元ノードへ
Socketによる接続を確立
動的メソッドリダイレクション
• 移動および複製の操作
– java.awt.Componentクラスにmove, copyメソッ
ドを追加
– 全サブクラスで上記メソッドを利用可能
Component
オブジェクトの移送と
ホスト依存オブジェクトの分離
• Java Serialization機能を用いたオブ
ジェクトの移送
– java.io.Serializableインタフェースを実装
したクラスは「移送対象オブジェクト」
– それ以外は「ホスト依存オブジェクト」
• java.io.ObjectOutputStreamを拡張し
て上記2オブジェクトを機械的に分離
writeObject(obj)
[no]
スタブクラスが
キャッシュに存在する
“Obj”は
Serializableの
サブクラス
[yes]
[no]
スタブクラスが
ファイルシステ
ム上にある
[yes]
Load
Wrapper Class
[no]
スタブクラスの
コード生成
スタブクラスを
コンパイル
スタブクラスから
インスタンス作成
obj = スタブ
[no]
オブジェクトを
移送
オブジェクトが
まだ残っている
[yes]
スタブオブジェクトの生成
• Java Reflection機能と独自コンパイラ
• スタブクラスは対象となるクラスの
– サブクラスとして構築される
– 全てのメソッドをオーバーライドする
– java.io.Serializableを実装する
• 制約
– 引数なしコンストラクタを持たない
– staticイニシャライザを持つ
上記の特性を持つホスト依存オブジェクトからは
スタブクラスを生成できない
スタブオブジェクトの例
public class Hello{
public void hello(){
System.out.println(“Hello”);
}
}
public class Hello_Wrapper
extends Hello
implements DMR_Wrapper{
public void
hello(){
if(!DMR_CONNECTED)
return;
Class types[] = new Class[0];
Object args[] = new Object[0];
Object DMR_reply;
DMR_reply=DMR_callRemoteMethod
("hello", args, types);
}
対象となるクラス
}
スタブクラス(抜粋)
actionPerformed()
:HelloWindow
:Hello_Wrapper
hello()
:WrapperOutputStream
:WrapperInputStream
:Hello
callRemoteMethod()
writeObject
(MethodRequest)
MethodRequest
:MethodWrapper
invoke()
hello()
MethodReply
動的メソッドリダイレクションの特徴
• アプリケーション移送時に
– アプリケーション中のホスト依存オブジェクトを
機械的に検知する
– ホスト依存オブジェクトからスタブオブジェクト
を機械的に生成する
– メソッド呼出しのリダイレクションが機械的に行
なわれる
プログラマは上記を考慮せずにすむ
ユーザは既存のアプリケーションを移送可能
(ただし制約の範囲内で)
基本性能評価①
700
600
(msec)
500
400
RMI
DMR
300
200
100
0
0
1
2
3
Number of Parameters
4
5
基本性能評価②
700
600
メソッド呼出しコスト
(ms)
500
400
ネットワークコスト
300
リダイレクションコス
ト
200
100
0
1
2
3
4
引数の数
5
6
今後の課題と方向性
• 課題①
– 移送時にスタブオブジェクトが動的に生成
されるため、プログラマの意図と無関係に
メソッド呼出しのセマンティクスが変わる
– 対策
• 動的生成機能は残しておく(本システムの特性と
して「コードの変更を伴わずに」があるため)
• プログラマに対して正確な型付けによるプログ
ラミングインタフェースを提供する
今後の課題と方向性
• 課題②
– 性能の向上と多機能化
• コードの最適化によって性能を向上
• 同期/非同期メソッド呼出し
• 方向性
– 応用アプリケーションの構築
• 情報家電機器制御
• 協調作業支援システム
まとめ
• アプリケーション移送時の諸問題
– ホスト透過性について
• 既存の解決手法
– プロセスマイグレーション、Java RMI、Voyager
• ホスト透過型オブジェクト移送モデル(設計)
• 動的メソッドリダイレクション(実装)
• 基本性能評価と今後の課題
– プログラミング透過性とセマンティクスの維持、
性能の両立について