同期的にアドバイスを活性化できる分散動的アスペクト指向システム

Slides:



Advertisements
Similar presentations
API 呼び出し列の差分を利用した Android アプリケーション比較ツールの 試作 井上研究室 神田 哲也.
Advertisements

Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
シーケンス図の生成のための実行履歴圧縮手法
Dynamic AOPと その実装手法について
DNASシステム上のアプリケーション起動シーケンスのための基盤であるdsh部分の性能評価
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
通信処理のカーネル内競合を 検出するアスペクト指向 カーネルレベルロガー
AspectScope によるアスペクトとクラスのつながりの視覚化
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
アスペクト指向プログラミングを用いたIDSオフロード
効率的なJava Dynamic AOPシステムを実現する Just-in-Time weaver
アスペクト指向プログラミングと Dependency Injection の融合
入出力データ型に透過な Webサービス動的実行システム 松江工業高等専門学校 情報工学科 越田高志 情報処理学会第68回全国大会
Flyingware : バイトコード変換による 安全なエージェントの実行
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
J2EEアプリケーションにおける アプリケーションレベルスケジューリング
柳澤 佳里 (学籍番号: 03M37311) 指導教官: 千葉 滋 東京工業大学 情報理工学研究科 数理・計算科学専攻
AOP言語への 織り込みインターフェイスの導入 A Weaving-Interface for AOP Languages
契約に基づいたアスペクト指向リファクタリングの検証
過負荷時の分散ソフトウェアの 性能劣化を改善する スケジューリングの提案
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
アスペクト指向の 分散化支援ツール 西澤無我、千葉滋 東京工業大学 SPA summer 2002, Hakone.
暗黙的に型付けされる構造体の Java言語への導入
関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装
数理・計算科学専攻 千葉研究室 08M37315 森田 悟史 指導教員 千葉 滋 教授
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
アスペクト指向言語による 例外処理の記述方法の改善
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
活性化のタイミング制御の実装を分離記述可能な分散動的アスペクト指向言語
通信機構合わせた最適化をおこなう並列化ンパイラ
動的データ依存関係解析を用いた Javaプログラムスライス手法
既存Javaプログラム向け 分散化支援システムの開発
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
Recoveryアドバイスをもつ アスペクト指向システム
東京工業大学 情報理工学研究科 数理・計算科学専攻 千葉研究室 栗田 亮
アスペクト指向を利用した永続オブジェクト・アクセスの高速化
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
アスペクト指向言語のための 独立性の高いパッケージシステム
アプリケーション依存の先読みが可能なO/Rマッピングツール
軽量な仮想マシンを用いたIoT機器の安全な監視
アスペクト指向言語のための 独立性の高いパッケージシステム
J2EEアプリケーションにおける アプリケーションレベルスケジューリング
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
マイグレーションを支援する分散集合オブジェクト
分散 Java プログラムのための アスペクト指向言語
仮想マシンと物理マシンを一元管理するための仮想AMT
Josh : バイトコードレベルでのJava用 Aspect Weaver
統合開発環境によって表現された 言語機構によるコードのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
「マイグレーションを支援する分散集合オブジェクト」
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
プログラム分散化のための アスペクト指向言語
統合開発環境のための プログラミング言語拡張 フレームワーク
開発者との対話を活かした 横断的構造の表現
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

同期的にアドバイスを活性化できる分散動的アスペクト指向システム 理学部 情報科学科 04_25142 森田 悟史 指導教員 千葉 滋 准教授

分散 Dynamic AOP 実行中にアスペクトを織り込む 全ノードで同期的にアスペクトを活性化 例: 各ワーカノードが分散並列で同期しながら計算を 実行 視覚化アスペクト 途中経過を随時マスタノードに集めて視覚化 各ワーカノードで活性化がずれると… 各ノード: for ( i = 0; i < MAX; i++) { //他ノードとデータを交換 exchangeData(data); calculate(data); } アスペクト マスタ ワーカ

素朴な実装1: ループカウンタによる同期 ある値を超えたら活性化する ×長い間待つ ×すでに超えている 各ノード: for( i = 0; i < MAX; i++){ //他ノードとデータを交換] exchangeData(data); calculate(data); } aspect DrawAspect { public void advice(){ // アドバイス処理 }} if( i > 100) advice();

素朴な実装2: ウィーバー による同期・活性化の自動化 非活性なアスペクト バリア同期 全ノードのアスペクトが起動されるまで停止 起動された 活性化 タイムアウト 非活性のまま               実行しない 一部ノードで織り込みが未完 アプリケーション自身の同期のため タイムアウト ×各ノードの停止時間が長い ×タイムアウトの時間設定が難しい 織り込み時点 実行可否判断 ノード A ノード B ノード C i = 101 同期 i = 102

分散 DAOP システム D&D の提案 同期活性化を指定する特別なポイントカットを提供 停止時間の短縮 実装 (Distributed and Dynamic) 同期活性化を指定する特別なポイントカットを提供 アプリケーション情報をウィーバーに教えて活性化を同期 アプリケーションの同期を利用 システムが自動で同期を行う syncMethod 活性化ポイントカット 同期を実行するメソッドを指定 loopCounter 活性化ポイントカット ループ・カウンタを指定(フィールドのみ) この他 woven, activated また、非活性化を同期させることも可能 実装 Java 言語用 バイトコードを変換し、HotSwap で実行時に置換 停止時間の短縮

syncMethod 活性化ポイントカット アプリケーションの同期を実行するメソッド( )を選択 同期の基準にするメソッド アドバイス( )を実行するジョインポイントとは異なる ノード 時間 ノードへの織り込み状況を把握 実行の可否確認 (織り込み完了の通知) false なのでなにもしない マスタ ノード 実行の可否(false) 同期メソッド呼び出し通知 同期 実行の可否確認 実行の可否(??) 同期メソッドを基に活性化判断 織り込み時点 アドバイス 同期メソッド

syncMethod を用いた活性化の同期 マスタノードが活性化のタイミングを管理 全ノードに織り込みが完了したら… 各ノードの同期メソッド呼び出し状況を収集 アドバイスの活性化を各ノードに許可 ノード A ノード B ノード C 全ノードへの織り込み完了後、 全ノードの同期メソッドが 呼ばれたか? 時間 同期 マスタノード 実行の可否確認 false 活性化 true 織り込み時点 アドバイス 同期メソッド

実験 活性化後のアドバイス実行のオーバーヘッドの測定 活性化までにかかる時間を測定 計算1ループ+描画処理にかかる時間(ms) 描画処理の手動での織り込み、本システムでの織り込み 計算1ループ+描画処理にかかる時間(ms) 活性化までにかかる時間を測定 素朴な実装で活性化した場合と比較 実験環境 InTrigger hongo から 50 台 OS: Debian CPU: Pentium M 1.8GHz, メモリ: 1GB N 体問題計算を質点 5000 個で実行

活性化後のアドバイス実行のオーバーヘッド 結果: 特に影響なし バイトコードを直接置き換えているため 活性化同期処理のコードは活性化後に取り除かれる D&D での織り込み D&D 描画コード 平均 標準偏差 on 織り込み 2021 47.71 実装済み 49.87 手動での織り込み

活性化までにかかる時間 素朴な実装に比べ、安定した時間での 活性化 素朴な実装では、タイムアウトの時間に よってばらついた 平均して1ループ分の遅れ(約 2000 ms) 織り込み確認のため 素朴な実装では、タイムアウトの時間に よってばらついた D&D syncMethod 素朴な実装 タイムアウト 3000 ms 素朴な実装 タイムアウト 100 ms

関連研究 DJcutter [Nishizawa ら ‘04] JAC [Pawlak ら ‘04] 分散対応のポイントカット (Remote Pointcut) Dynamic ではない JAC [Pawlak ら ‘04] 分散 DAOP システム 遠隔ホストのジョインポイントを選択できない 活性化のタイミングは、分散を意識して制御する必要 DJAsCo [Navarro ら ‘06] 分散対応の DAOP システム Remote Pointcut 活性化のタイミングは、開発者による制御が必要

まとめと今後の課題 分散 DAOP システム D&D の提案 同期活性化を指定するポイントカットを提供 今後の課題 アプリケーション情報をウィーバーに教えて活性化を同期 低いオーバーヘッド 今後の課題 さらなる実験 アスペクトの織り込みによるアプリケーションの実行時間への影響 ケーススタディの充実 活性化のタイミングを調整したい場合はどんな時か 汎用性を高めるためには何が必要か ネットワークのオーバーヘッド対策

D&D を用いることによるオーバーヘッド 結果: 約2% –javaagent オプションによるものと考えられる D&D on D&D 平均 標準偏差 on 1929 39.91 off 1886 40.08 D&D off

D&D を用いた描画機能の追加 同期メソッドを利用し た活性化 String[] hosts = ポイントカット new String[] {/*hongo001, hongo002, ....... */}; Pointcut pc = Pcd.execution(“nbody.NBodyCalc”, “calc”, hosts); ActivationPointcut apc = Apcd.syncMethod(“nbody.NBodyCalc”, “sync”); Advice drawAdvice = new BeforeAdvice<LinkedList<Satellite>> (``satellite‘’, ``drawAdvice‘’, pc,apc) { @Override public void advice(LinkedList<Satellite> satellites){ drawSatellite(satellites); } }; setAdvice(drawAdvice); ポイントカット 同期メソッドを利用し た活性化 活性化の条件 public class DrawAspect extends Aspect { public DrawAspect() { } drawSatellite(LinkedList<satellites> s) { // 描画処理 アドバイス アスペクトの記述 ちなみに、N体問題アプリケーションへ描画機能を追加する場合は、本システムを用いてこのようにアスペクトを記述することができます。 アドバイスの登録

loopCounter ループカウンタを指定する 指定した値がアスペクトホストに送信される 活性化するのは値が一致した後 Node A Node B Node C time weave i = 101 実行可否判断 同期 i = 102 Activation i = 103