状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール 理学部 情報科学科 千葉研究室 指導教官 千葉 滋 助教授 01_08648 熊原 奈津子 1 分散環境実験と例外処理 分散環境での様々な研究のための実験 例:サーバマシンの性能改善 例外処理は重要 マシンの台数が増えると故障率が増加 例 クライアントマシンの台数によりサーバにかける 負荷をかえてサーバの性能を測定 クライアントマシン故障により想定した負荷がかからず 意図しない実験になる 代替マシンを使用するなどのリカバリ処理で回避 2 例外処理記述の難点(1) 例)Java言語のtry-catch文 例外が発生しうる場所で 適宜try-catch文を定義 try 文 送信失敗 try 文 リカバリ可能 try 文は散在 try { 実験結果の回収 } catch (回収失敗 e) { 再試行 } 回収失敗 try { 実験プログラム送信 } catch (送信失敗 e) { マシンを変えて送信 } 3 例外処理記述の難点(2) 例)Java言語のtry-catch文 例外処理を怠って まとめてcatch try 文 送信失敗 try { 実験プログラムを実行 } catch (送信失敗 e){ ??? } catch (回収失敗 e) { ??? } リカバリが難しい try 文は1箇所にまとまる 回収失敗 4 実験支援ツール AOSted 分散環境での実験を支援する統合開発環境 実験プログラムを配布・起動 例外処理をアスペクト指向により分離して記述 AOSted ランタイム AOSted コンソール マシンの絵 AOSted ランタイム コンソールマシン 制御 プログラム (Java) 実験 プログラム (Jar) クラスタマシン AOSted ランタイム AOSted ランタイムは rcp で配布、 rsh で起動 5 AOStedの操作画面 制御プログラム 進行状況 例外処理プログラム 制御プログラムと例外処理 記述をコンパイル 制御プログラムを実行 6 制御プログラムの例 指定したホストに プログラムを配布 配布したプログラム を起動 プログラムを終了 実験結果を回収 7 例外処理の記述の分離 例外ハンドラにまとめて記述して登録 制御プログラムからも独立して記述可能 アスペクト指向の応用 発生箇所と例外ハンドラの対応を宣言的に細かく指定 (実装はまだ未完成) 例外ハンドラの引数 発生した例外の情報を含むオブジェクト リカバリー処理用のメソッドを提供 8 例外ハンドラの例 ホストを変更して 再試行 9 例外ハンドルのメカニズム 制御プログラム 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){ //何もしない } } 10 AspectJとの比較 ライブラリのソースコードを考慮せずに例外処理が 記述可能 AspectJでの記述例 AOStedでの記述例 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) { … } } ライブラリの内部実装で 使用されているクラス 11 まとめ 分散環境実験を支援する開発環境 AOSted を開発 実験プログラムの配布と起動 例外処理を分離して記述可能 関連研究 LAM/MPI, FT-MPI, Cuckoo MPI[實本 ‘05] 今後の課題 例外処理に関係する実装を完成させる 12
© Copyright 2024 ExpyDoc