スライド 1

状況に応じて適切な
例外処理が行なえる
アスペクト指向分散環境実験の
支援ツール
理学部 情報科学科 千葉研究室
指導教官 千葉 滋 助教授
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