状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール 理学部 情報科学科 千葉研究室 指導教官 千葉 滋 助教授 01_08648 熊原 奈津子
分散環境実験と例外処理 分散環境での様々な研究のための実験 例外処理は重要 例:サーバマシンの性能改善 マシンの台数が増えると故障率が増加 クライアントマシンの台数によりサーバにかける 負荷をかえてサーバの性能を測定 クライアントマシン故障により想定した負荷がかからず 意図しない実験になる 代替マシンを使用するなどのリカバリ処理で回避
例外処理記述の難点(1) 例)Java言語のtry-catch文 リカバリ可能 try 文は散在 例外が発生しうる場所で 送信失敗 try 文 try { 実験プログラム送信 } catch (送信失敗 e) { マシンを変えて送信 リカバリ可能 try 文は散在 try { 実験結果の回収 } catch (回収失敗 e) { 再試行 回収失敗
例外処理記述の難点(2) 例)Java言語のtry-catch文 リカバリが難しい try 文は1箇所にまとまる 例外処理を怠って 送信失敗 リカバリが難しい try 文は1箇所にまとまる try { 実験プログラムを実行 } catch (送信失敗 e){ ??? catch (回収失敗 e) { ??? 回収失敗
実験支援ツール AOSted 分散環境での実験を支援する統合開発環境 実験プログラムを配布・起動 例外処理をアスペクト指向により分離して記述 ランタイム AOSted コンソール マシンの絵 AOSted ランタイム コンソールマシン 制御 プログラム (Java) 実験 プログラム (Jar) AOSted ランタイム クラスタマシン AOSted ランタイムは rcp で配布、 rsh で起動
制御プログラムと例外処理記述をコンパイル AOStedの操作画面 制御プログラム 進行状況 例外処理プログラム 制御プログラムと例外処理記述をコンパイル 制御プログラムを実行
制御プログラムの例 指定したホストにプログラムを配布 配布したプログラムを起動 プログラムを終了 実験結果を回収
例外処理の記述の分離 例外ハンドラにまとめて記述して登録 制御プログラムからも独立して記述可能 アスペクト指向の応用 例外ハンドラの引数 発生箇所と例外ハンドラの対応を宣言的に細かく指定(実装はまだ未完成) 例外ハンドラの引数 発生した例外の情報を含むオブジェクト リカバリー処理用のメソッドを提供
例外ハンドラの例 ホストを変更して再試行
例外ハンドルのメカニズム 制御プログラム 例外ハンドラ AOStedの内部実装 Load loader = new Load( hosts, port, program, args); loader.setErrorHandler(condition1, new MyLoadErrorHandler()); loader.setErrorHandler(condition2, new YourLoadErrorHandler()); loader.load(); … void setErrorHandler(condition, handler){ ハンドラを登録 } void load(){ try{ … }catch (UnknownHostException e){ FailEvent event = new FailEvent( host, e, …); eventが満たすconditionを検索; 満たせば対応するhandlerを取得; handler.unknownHost(event); 例外ハンドラ 無数の例外の中から選択されたものだけ class MyLoadErrorHandler extends LoadErrorHandler { public void unknownHost(FailEvent event){ //例外処理記述 } class YourLoadErrorHandler extends LoadErrorHandler { public void unknownHost(FailEvent event){ //例外処理記述 } class LoadErrorHandler { public void unknownHost(FailEvent event){ //何もしない }
AspectJとの比較 ライブラリのソースコードを考慮せずに例外処理が記述可能 AOStedでの記述例 AspectJでの記述例 class MyLoadErrorHandler extends LoadErrorHandler{ public void unknownHost(FailEvent e){ if (e.getHostName().equals("node03")){ …. } aspect ExceptionHandling { after(UnknownHostException e): withincode(void Transmitter.run()) && handler(e) { … } ライブラリの内部実装で 使用されているクラス
まとめ 分散環境実験を支援する開発環境 AOSted を開発 関連研究 今後の課題 実験プログラムの配布と起動 例外処理を分離して記述可能 LAM/MPI, FT-MPI, Cuckoo MPI[實本 ‘05] 今後の課題 例外処理に関係する実装を完成させる